머신러닝&딥러닝/Do it ! 딥러닝 입문

손실 함수와 경사 하강법의 관계

욱이명 2020. 11. 25. 12:32

이번 글에서는 경사 하강법이 실제로 어떤 개념이 사용되었는지 알아보겠다. 경사 하강법을 좀 더 기술적으로 표현하면 '어떤 손실 함수(loss function)가 정의되었을 때 손실 함수의 값이 최소가 되는 지점을 찾아가는 방법'이다. 여기서 손실 함수란 말 그대로 예상한 값과 실제 타깃 값의 차이를 함수로 정의한 것을 말한다. 사실 앞에서 사용한 방법인 '오차를 변화율에 곱하여 가중치와 절편 업데이트하기'는 '제곱 오차'라는 손실 함수를 미분한 것과 같다.

 

제곱 오차(squared error)는 이름은 거창하지만 타깃값과 예측값을 뺀 다음 제곱한 것에 불과하다. 제곱 오차를 수식으로 나타내면 'SE = (y-y^) ²'이다. 이때 제곱 오차가 최소가 되면 산점도 그래프를 가장 잘 표현한 직선이 그려진다. 즉, 제곱 오차의 최솟값을 찾는 방법을 알면 모델을 쉽게 만들 수 있다. 제곱 오차 함수의 최솟값을 알아내려면 기울기에 따라 함수의 값이 낮은 쪽으로 이동해야 한다. 기울기를 구하려면 제곱 오차를 가중치나 절편에 대해 미분하면 된다.

 

제곱 오차를 가중치(w)에 대하여 편미분하면 '-2(y-y^)x'가 된다. 초기에 제곱 오차 공식을 (y-y^) ²가 아니라 1/2(y-y^) ²  로 정의했다면 2와 1/2이 서로 약분되어 조금 더 깔끔하게(-(y-y^)x)로 표현된다. 그래서 보통은 제곱 오차 공식을 2로 나눈 함수를 편미분한다. 여기에서도 -(y-y^)x를 사용하겠다.

 

가중치에 대한 제곱 오차의 변화율을 구했다. 이전 글에서 가중치 업데이트에 변화율을 더했던 것과 비슷한 방법으로 가중치를 업데이트한다. 여기서는 w에서 변화율을 뺀다. 왜냐하면 손실 함수의 낮은 쪽으로 이동하고 싶기 때문이다. w에 손실함수의 변화율을 뺀 식은 'w+(y-y^)x'이다. 

 

위 식을 자세히 보면 이전 글에서 오차 역전파를 알아보며 적용했던 수식(w+w_rate * err)은 사실 제곱 오차를 미분했던 것과 같다는걸 알 수 있다. 

 

절편도 똑같다. 절편에 대하여 제곱 오차를 미분해보겠다. 처음부터 1/2를 곱한 제곱 오차 공식을 사용하면 '-(y-y^)1'이나온다. 가중치에서 변화율을 뺏던 이유와 같은 이유로 절편에서 변화율을 빼면 'b+(y-y^)'이되고 이 식도 앞에서 작성한 코드(b + 1 * err)와 정확히 일치한다.

 

변화율은 인공지능 분야에서 특별히 그레디언트(gradient, 경사)라고 부른다.