Linear Regression(선형 회귀)
아래 내용은 Andrew Ng 교수님의 강의와 자료를 기반으로 학습한 내용을 정리하여 작성하였습니다.
개인의 학습 내용이기에 잘못 해석 및 이해하고 있는 부분도 있을 수 있으니, 다양한 자료를 기반으로 참고하시는 걸 추천드립니다.
앞 글에서 설명했던 Linear Regression의 Model Representation과 Cost function에 이어 Gradient Descent에 대해 알아 보려합니다. 들어가기에 앞서 이 전 글에서 설명했던 우리의 목표에 대해 다시 한번 상기해 보죠.
앞에서 우리는 Model을 1차 방정식으로 선정하였으며, h(x) = theta0 + theta1 * x로 표현을 하였었습니다. 그리고 Cost function 을 이용해서 Training Set을 가장 잘 표현할 수 있는 모델인지 확인하는 절차까지 거쳤구요, 최종적인 목표는 J를 최소화 함으로써 최적화된 Hypothesis를 구하는 것이였습니다.
이번에 설명드릴 Gradient Descent가 J값이 최소화하면서 Hypothesis가 원하는 모델이 되도록 theta0와 theta1을 구하는 것입니다.
Gradient Descent
이번에 설명드릴 Gradient Descent가 J값이 최소화하면서 Hypothesis가 원하는 모델이 되도록 theta0와 theta1을 구하는 것입니다.
먼저, Gradient Descent Algorithm의 수식을 확인해봅시다.
우측의 Linear Regression Model에 대해 Hypothesis와 Cost function을 볼 수 있습니다. 이 때 Gradient Descent Algorithm은 아래와 같은 수식으로 표현 할 수 있습니다.
처음엔 조금 이해가 되지 않을 수 있지만, 점차 설명해 가도록 하겠습니다. 지금은 저런 형태이구나 정도만 알고 계시면 될 것 같습니다. 이제 하나하나 설명을 시작해보죠. 저희는 지금 theta가 총 2개 theta0와 theta1이 있습니다.
먼저 편미분에 대해서 확인해보죠, 이 전의 J를 오차의 제곱으로 확인했는데요, 이 때 수식 중 m이 아닌 2m으로 나눈 것 기억하시나요? 그 이유가 바로 여기 있습니다. 편미분을 할 때 제곱한 2를 앞으로 빼서 1/2m을 1/m으로 수식을 간소화 시키기 위해서 필요한 내용이였습니다. 이해 되시나요?
그럼 h(xi) - y(i)를 풀어서 서술해 보면
h(xi) - yi = theta0 + thata1 * x(i) - y(i)
가 되며, 해당 값을 각각 theta0와 theta1에 대해 편미분하여서 theta0와 theta1 값을 업데이트 해주고 있습니다. 편미분 하는 방법에 대해서 잘 모르시는 분들은 여러 자료 참고하시면 쉽게 이해할 수 있을테니, 자세한 설명을 생략하겠습니다.
그리하여 위에서 설명한 방법으로 계속 theta0와 theta1을 업데이트 하다보면 J를 최소화 할 수 있는 해를 구할 수 있습니다.
아래 수식이 편미분까지 완료된 Gradient descentn algorithm입니다.
여기서 하나 더 궁금한 점이 있으실텐데요, J 앞에 알파(a) 값입니다. a 는 Learning rate, 학습률이라고 하며, Gradient descent algorithm을 수행해가며 theta0와 theta1을 업데이트 해 나갈때, 어느정도의 비율로 변경해 나갈 것이냐를 결정짓습니다.
위와 같이 편미분한 값이 양이면 위 그래프에서 해당 변화량, 즉 기울기가 양으로 표현이되고, 기존의 theta1의 값에서 그만큼 빼기 떄문에 theta1이 좌측으로 이동하여 최소 J를 구할 수 있음을 알 수 있습니다. 반대로 편미분한 값이 음이면 기울기가 -가 되고, 수식은 theta1에서 뒤의 값을 더하게 되기 때문에 theta1이 증가하여 최소 J를 구할 수 있음을 알 수 있습니다.
그럼 이 때 Learning rate이 하는 역할은 무엇일까요? 위에서 말씀드릴대로 어느 정도로 변화해 나아갈 것임을 명시하는 것입니다.
Learning rate이 매우 작은 값이라면 빼게되는 값이 매우 작아지고, 그럼 theta1이 한번 연산의 이동하는 크기가 매우 작아 반복하는 횟수가 커짐을 알 수 있습니다. 반대로 Learning rate이 매우 큰 값이라면 빼게되는 값이 매우 커지고 theta1이 이동하는 값이 한번에 커지게 됩니다.
Learning rate이 작다면 오래 걸리겠지만, 정확한 값이 찾을 수 있을 것이고, 반대로 크다면 굉장히 빠른 시간내에 찾게 되겠지만, 잘못하게되면 지속적으로 J의 편미분한 기울기가 +,-를 반복하며 최소값으로 수렴하다가 다시 발산할 수 도 있음을 인지해야 합니다. Learning rate을 정하는 방법은 여러 논문들이 있지만, 그 부분까지는 현재 학습 내용에서 벗어나기에 다루지 않고 관심 있으신 분들은 따로 찾아보시면 될 것 같습니다.
Linear Regression의 Gradient Descent를 계속 확인해보죠. 아래 그래프가 저희가 선정한 모델에 대한 J 그래프 입니다.
이 때 우리는 어떤 theta0와 theta1을 선정하여도 최적해를 찾을 수 있습니다. 그럼 위에서 설명한 Gradient Descent Algorithm을 이용해서 h(x)가 어떻게 변해가는지 보시죠.
몇몇 과정은 생략되었지만, Gradient Descent Algorithm으로 우리가 원하는 theta0, theta1을 구할 수 있음을 알 수 있습니다. 위에서 전체 Training data를 이용하여 Gradient Descent Algorithm을 수행하여 theta를 업데이트하는 각 step을 Batch라고 하니, 알아두시면 좋을 것 같습니다.
이것으로 처음 크기에 따른 집 값을 Linear Regression으로 예측하는 과정에 대해 설명하였습니다. 여기서 한가지 문제가 있습니다. Gradient descent algorithm을 이용하여 구한 theta0와 theta1이 항상 최적해이냐? 라고 물으신다면, 아니다. 라고 말씀드릴 수 있습니다. 지금 예시로 보여드린 부분은 쉽게 설명하기 위한 과정이라 그런 것이며 대부분의 경우 문제들이 발생합니다. theta0와 theta1이 최초 어디서 시작되냐에 따라 최종적으로 구해지는 값이 달라질 수 있다는 것입니다.
theta1에 대해서만 확인해 봤을 때의 위 그래프만 보더라도 지역해에 따져 전역해를 찾지 못하는 문제가 충분히 발생할 수 있습니다. 아래에 theta0와 theta1을 모두 고려한 J 그래프를 보시면 시작점이 어디냐에 따라 찾는 최소값이 다를 수 있음을 알 수 있습니다.
즉 전역해가 아닌 지역해를 찾게되며 이게 최소값이라고 판단하게 된다는 것이죠. 그럼 이 문제는 어떻게 해결해야 할까요? 여러분들이 생각하셨듯이 1회만 하는 것이 아닌 theta0와 theta1의 초기값을 여러번 변경하며 반복하여 J가 최소가 되는 값을 찾아야 합니다. 이해 되셨나요?
여기까지가 Linear Regression에 대한 내용이였습니다.
다음 시간에는 위 정보를 토대로 python을 이용해 실제 해를 찾는 Code를 공유드리고 Learning Rate의 변화에 따른 결과를 공유해 보도록 하겠습니다.
긴 글 읽어주셔서 감사합니다.
'AI > Machine Learning' 카테고리의 다른 글
Logistic Regression - Cost function / Gradient descent (0) | 2018.01.22 |
---|---|
Logistic Regression - Model representation / Decision boundary (0) | 2018.01.22 |
Linear Regression - Model Representation / Cost function (0) | 2018.01.16 |
Loading data from csv file (0) | 2017.06.03 |
Linear Regression - Multiple feature (0) | 2017.06.03 |