Research/ML, DL

경사감소법(경사하강법)이란?

bskyvision.com 2019. 2. 28. 12:43

오늘은 경사감소법(경사하강법)에 대해서 정리하려고 한다. 경사감소법은 많은 머신러닝 및 딥러닝 알고리즘을 훈련시킬 때 사용되는 방법이다. 가장 간단한 선형회귀를 예를 들어 경사감소법을 설명하겠다. 참고로 선형회귀(https://bskyvision.com/193)에 대해서는 예전에 포스팅했었다. 선형회귀는 선형적으로 분포되어 있는 데이터를 가장 잘 나타낼 수 있는 직선 또는 일차함수를 찾는 것이었다(데이터 포인트가 2차원인 경우). 일차함수식을 y = wx + b와 같이 쓴다면, 최적의 w와 b를 찾는 것이 선형회귀의 목적이다. 이 최적의 w와 b를 찾기 위해 사용되는 것이 바로 경사감소법이다.   

 

 

▶ 경사감소법(gradient descent)이란?

 

아래와 같은 데이터가 있다고 가정해보자. 기온이 높아질수록 어묵판매량이 줄어든다는 내용을 담고 있다. (추운 겨울일수록 김 모락모락 나오는 어묵이 사람들의 발길을 끌겠죠?)

 

그림1. 데이터 포인트들

 

보아하니 이 데이터 분포는 선으로 모델링할 수 있을 것 같다. 선형회귀는 선형적으로 분포되어 있는 데이터를 가장 잘 설명할 수 있는 일차함수를 찾는 것이라고 언급했었다. 사람인 우리는 적절한 일차 함수를 눈으로 비교적 쉽게 찾아낼 수 있다. 아마 대략 아래와 같은 직선을 찾아낼 수 있을 것이다. 

 

그림2. 이러한 직선을 찾아내는 것이 선형회귀의 목적이다.

 

 

그런데 기계에게 데이터 분포를 주고 이와 같은 선을 찾아내라고 하면 쉽지 않은 일이 되어버린다. 기계는 생각보다 멍청하다. 그래서 사람들은 기계에게 경사감소법이란 전략을 알려줬다. 그 전략은 다음과 같다. 

 

일단 w, b를 임의로 설정한 일차함수와 데이터포인트 사이의 평균제곱오차(MSE, mean squared error)를 구한다. 

 

...(공식1: 평균제곱오차, 비용함수)

 

여기서 n은 샘플 갯수이고, $y_i$, $\hat{y}_i$는 각각 i번째 데이터 포인트의 라벨값과 예측값을 의미한다. 이 평균제곱오차를 비용함수(cost function)라고 부른다. 

 

기계의 입장에서는 이 평균제곱오차 또는 비용함수값이 최소가 되게 하는 w와 b를 찾아야 하는 것이다. 실제값과 예측값의 차이를 최소화시키는 w와 b를 찾으라는 것이므로 합리적인 생각이다. 이 w와 b에 대한 비용함수는 그림3과 같이 아래로 볼록한 2차함수형태가 된다. 

 

그림3. 비용함수(cost function) 그래프들.

 

 

그 이유는 공식1을 w와 b에 대해서 정리해보면 알 수 있다. 편의상 중요부분을 제외하고는 기호로 대체했다. 

 

...(공식1-1: 비용함수 w와 b에 대해 정리한 것)

 

이로써 w와 b에 대한 이차함수로 정리될 수 있음을 확인했다. 기계는 비용함수값이 최소값이 되게 하는 w와 b의 값을 찾아야 한다.  

 

그림4. 비용함수값이 최소가 되게 하는 w와 b를 찾는 것이 목적이다.

 

어떻게 찾을 수 있을까? 최적의 w값을 찾는 경우를 예로 들어서 설명하겠다. b값을 찾는 과정도 동일하다. 우선 임의로 w값을 하나 선정하게 한다(초기값 부여). 운이 아주 좋으면 최적의 값이겠지만 그렇지 않을 확률이 훨씬 더 크다. 아마 그림5와 같이 최적의 w값과는 거리가 먼 것이 설정될 것이다. 

 

그림5. 초기w값이 임의로 설정되었다. 최적의 w값과는 거리가 있다.

 

최적의 w값을 찾아가기 위해서 비용함수를 w에 대해서 편미분해준 것에 학습률(learning rate)이라고 불리는 파라미터를 곱한 것을 초기 설정된 w값에서 빼준다. 이상의 내용을 식으로 나타내면 공식2와 같다. 

 

...(공식2: w값 업데이트하기)

 

이때 학습률 파라미터는 적절한 값으로 사용자가 설정해줘야한다. 학습률이 너무 작으면 최적의 w를 찾아가는데 너무 오래 걸릴 가능성이 크고, 너무 크면 최적의 지점을 건너뛰어 버리고 발산해버릴 수도 있다. 

 

비용함수를 w에 대해 편미분하면 현재 w 위치에서 접선의 기울기와 같다. 이 예제에서는 음수값을 갖는다. 학습률은 양수인 실수이므로 원래 w값에서 어떤 크기의 음수만큼 빼주게 된다. 즉, 더하게 된다. 결국 w값이 커진다(오른쪽으로 이동). 새롭게 갱신된 w에 대해서 이 공식2의 과정을 반복하면 최적의 w값을 찾을 수 있게 된다(그림6 참고). 

 

그림6. w값 갱신 과정.

 

이것이 바로 경사감소법이다. 왜냐하면 점차 접선의 경사가 감소하기 때문이다. 접선의 기울기의 절대값이 0이 될때가 최적의 w값이 된다. 

 

그림7. 경사감소법이라고 불리는 이유.

 

최적의 b값을 찾아가는 것도 이와 동일하다. 

 

...(공식3: b값 업데이트하기)

 

그림6과 비슷한 과정을 통해서 결국은 최적의 b값을 찾아갈 것이다. 

 

이렇게 최적의 w와 b를 찾아가는 과정을 어묵판매량-기온 그래프에서 살펴보면 그림8과 같다. 초기값으로 설정된 w와 b를 갖는 일차함수식은 데이터를 제대로 반영하지 못한다. 그러나 공식2, 3의 과정을 반복하면서 w와 b의 값이 최적값에 가까워지면서 점차 나은 결과를 얻는다. 결국은 우리가 원했던 결과를 도출하게 된다. 

 

그림8. 초기 w, b값은 데이터를 잘 반영하는 일차함수식을 만들지 못했지만, 점차적으로 데이터를 잘 반영해내는 값들로 갱신되었다.

 

 

▶ 글을 마무리하며...

 

대부분의 머신러닝 및 딥러닝 알고리즘은 내부에 여러 파라미터 또는 가중치를 갖고 있다. 이는 훈련 또는 학습이 필요하다. 적절한 파라미터 값들을 설정해주기 위해서 사용될 수 있는 방법 중 하나가 바로 경사감소법이다. 

 

글을 작성하면서 예전에 공부했던 내용이지만 저도 좀 더 확실하게 알게된 것 같습니다. 도움이 되셨다면 공감을 눌러주시고, 댓글 남겨주시면 감사하겠습니다. 혹시 의문점이나 잘못된 내용있다면 주저말고 남겨주세요.^^ 

 

관련 글

오차 역전파(error backpropagation) 개념 제대로 파악하기

 

참고자료

[1] 김의중 지음, "알고리즘으로 배우는 인공지능, 머신러닝, 딥러닝 입문", 위키북스

[2] https://blog.naver.com/dkdlel531/221463588157, Avengineers님의 네이버블로그, 경사하강법