Linear Regression (선형회귀)

기술/인공지능 2017. 7. 28. 20:50 Posted by 아는 개발자

앞선 포스팅에서 우리는 인공지능이란 '대량의 데이터를 학습해 가장 그럴듯한 미래를 예측한다'고 정의했습니다. 그리고 여기서 우리 개발자가 할 일은 대량의 데이터를 훌륭하게 학습시키는 알고리즘을 만드는 일이라고 말씀드렸습니다. 이제 학습 알고리즘에 대해서 공부해봐야겠죠? 마음은 벌써 알파고에 쓰인 딥러닝을 짜보고 싶지만, 지금 당장은 해볼 순 없으니 가장 기초적인 학습법인 선형회귀(Linear Regression)부터 천천히 공부해봅시다.


우리에게 아래 표처럼 나이에 따른 연봉 데이터가 있다고 가정해봅시다


실제데이터는 아닙니다. 제가 가공한거에요 헤헤


언듯 데이터를 분석해보니 나이가 많을수록 연봉을 더 많이 받는것 같습니다. 한번 차트로 볼까요?


그래프 상으로 표현해보니 실제로도 그러하네요. 위 자료를 통해 나이에 따라서 연봉을 대강 추측 해볼 수 있을 것 같습니다. 나이가 32살이라면 대강 4천 3백만원에서 5천만원 사이인 4천 6백만원 정도 받을거라고 생각 해볼 수 있겠네요. 하지만 이런 식으로 하면 좀 야매인 느낌이죠? 위 데이터를 간단히 선형 방정식으로 표현한다면 좀더 일관성 있고 훌륭하게 예측 할 수 있을 것 같네요.


엑셀에 있는 추세선 기능을 활용해 선형 방정식을 추가해봤습니다. 나이 값에 따라 연봉을 추출 할 수 있으니 더 신뢰성이 가는 데이터입니다. 좀더 전문적인 느낌이죠? 정말 별거 아닌것 같지만 이것은 인공지능의 가장 기본적인 연산작업입니다. 이렇게 짜잘한 일련의 작업들이 쌓여서 더 복합한 것들을 예측하는 작업이지요.


자 그러면 이제 가장 그럴듯한 일차 방정식을 구해봅시다. 아마 위에서 우리는 차트로 그려보고 대강 짐작했을 뿐이지 실제로는 어떻게 구해야 할지 감이 안올겁니다. 따로 이걸 구할 수 있는 방정식이 있는 것도 아니구요. 그래도 괜찮습니다. 좀 번거롭지만 그래도 컴퓨터를 이용하면 훌륭하게 구할 수 있습니다.


기본적인 선형 방정식의 수식은 이렇습니다.



여기서 두 θ(쎄타라고 부르겠습니다) 값이 어떻냐에 따라서 그래프의 모형이 결정됩니다. 우리는 학습 데이터에 가장 근접한 두 쎄타 값을 구하는것이 목표입니다. 가장 손쉽게 해볼 수 있는 방법은 랜덤 값을 막 넣어보고 가장 그럴듯한 모형을 찾는 겁니다만 이렇게 한다면 시간이 엄청 오래 걸리겠지요? 컴퓨터도 이정도 연산을 커버할 만큼 빠르지 못합니다.


마구잡이로 대입해가며 선형 방정식을 만들기 전에 한 번 생각해봅시다 우리가 구한 선형 방정식이 학습 데이터와 얼마나 근접한지를 식으로 어떻게 표현 할 수 있을까요? 가장 간단한 방법은 우리가 만든 선형 방정식이 추출한 값과 실제 데이터 값의 차이를 확인해보는 방법일 겁니다. 여기서 값의 차이의 제곱의 합을 식으로 표현해봅시다.


m: 데이터의 개수, x: 나이값, y: 연봉, h: 선형방정식 입니다


대충 이렇게 만들면 우리가 만든 선형 방정식의 효율을 측정 해 볼 수 있을것 같습니다. 위의 식은 인공지능에 비용함수(cost function)이라 부릅니다. 아마 가장 좋은 선형방정식은 비용함수의 값이 가장 낮은 방정식일 겁니다. 


위의 그래프는 쎄타 값의 변화에 대한 비용함수 그래프입니다. 볼록볼록한 산능선 같은것이 둘쭉날쭉합니다. 지도상의 십자가 포인터는 현재 우리가 있는 지점이고 우리가 가야할 지점, 비용 함수가 가장 낮은 지점은 z 값이 가장 낮은 지점 즉 별표로 표시된 부분입니다. 이때의 쎄타값들을 구해 줄 수 있다면 가장 훌륭한 선형 방정식을 만들어 낼 수 있을것 같습니다.


이건 'Gradient Descent'라는 방법을 이용해서 가능합니다. 먼저 수식을 보여드릴게요!


여기서 α는 Learning Rate라고 합니다


위의 수식은 두개의 쎄타 값이 수렴 할 때 까지 반복하라고 되어 있습니다. 반복하는 작업은 비용함수의 편미분값 곱하기 알파 값을 기존 쎄타 값에서 빼주는 것을 계속 반복하는 방식입니다. 이렇게만 설명하면 감이 잘 오지 않죠? 다시 그래프로 돌아가봅시다


비용함수에서 쎄타0 값을 일반 상수로 놓고 Θ과 비용에 대한 그래프를 그려봅시다. 그러면 아래와 같이 볼록한 이차원 그래프가 만들어질겁니다(위 비용함수 그래프에서 특정 쎄타0를 축으로 자른다고 생각해보세요!)


여기서 노란 십자가는 현재 저희가 있는 지점입니다. 빨간 십자가 지점에 가까워 질수록 비용 값은 작아지겠죠? Gradient Descent 방법은 한번에 최적의 지점에 도달하진 못하지만 반복작업을 통해 최적의 지점에 도달 할 수 있게 해줍니다. 위의 수식을 1회 적용한 그래프는 아래와 같습니다.



비용함수를 쎄타에 대해서 미분한 값은 그 지점의 접선 기울기와 같습니다(고등학교때 다 배웠습니다) Gradient Descent 방법대로 기울기에 α값을 곱한 값을 기존 쎄타값에 빼주면 그래프는 최적점과 조금 더 가까워지게 됩니다. 이 방법을 여러번 반복하면 점점더 그래프가 최적점에 가까워지겠죠?


       


쎄타 0와 쎄타 1 각각에 대해서 위 작업을 반복하면 최적의 선형 방정식을 구해 낼 수 있게됩니다. 단 여기서 주의해야 할 점이 있습니다. Learning Rate라 말씀드린 α값을 어떻게 정하느냐에 따라서 학습 속도 및 성공의 유무가 결정됩니다. 만약 이 값이 너무 크거나 혹은 너무 작으면 어떻게 될까요?



왼쪽 그림은 α값이 너무 큰 경우에 해당합니다. 이때는 기존 쎄타 값이 너무 급격하게 변해 오히려 비용함수의 값이 더 증가하는 방향으로 움직이고 있네요. 이런 경우는 차라리 안하느니만 못합니다.


오른쪽그림은 α값이 너무 작은 경우입니다. 이때는 비용함수의 값이 감소하는 방향으로 이동하는데 이동하는 크기가 너무 느립니다. 한 두번이면 되는 학습 횟수를 몇배 더 해야하니 학습에 소요되는 시간이 오래 걸리게 됩니다. 그래도 비용함수가 증가하는 방향은 아니니 시간이 많다면 충분히 최적점에 도달 할 수 있겠네요


적당한 Learning Rate 값을 세팅하고 두 쎄타값을 구해내는 과정이 Linear Regression입니다. 생각보다 복잡한 수학 지식이 적용되진 않았지요? 고등학교 수학 + 편미분 만 알고 있으면 충분히 따라 갈 수 있을 정도입니다. 앞으로 배울 Logistic Regression도 이와 큰 차이는 없습니다! 다음 포스팅에선 이거랑 비슷한 Logistic Regression에 대해서 배워보도록 합시다

728x90

'기술 > 인공지능' 카테고리의 다른 글

뉴럴네트워크(Neural Network)  (0) 2017.08.18
오버피팅(Overfitting)  (0) 2017.08.10
숫자인식 코드 분석해보기  (2) 2017.08.03
Softmax와 Cross entropy  (0) 2017.08.03
Logistic Regression (로지스틱 회귀)  (0) 2017.07.31
Linear Regression (선형회귀)  (0) 2017.07.28