Machine Learning/Theory

Gradient Descent(경사하강법)

ju_young 2021. 7. 19. 21:18
728x90

경사하강법으로는 크게 Gradient Descent와 Stochastic Gradient Descent로 나눌 수 있을 것 같다. 지금은 Gradient Descent에 대한 설명을 시작해보려고 한다.

경사하강법이란?

경사하강법은 반복적인 실행을 통해 에러를 최소화 시킬 수 있는 값을 구하는 방법이다. 여기서 에러라는 것은 실제값과의 다른 정도라고 이해하자.

 

자, 조금 더 파보자.

 

아래와 같은 그래프가 있다고 하자. 이 그래프에서 에러가 최소인 지점이 어디일까?

바로 아래 그림처럼 빨간 점으로 표시된 지점일 것이다.

이처럼 육안으로는 최소인 지점을 한 눈에 알아볼 수 있었다. 하지만 컴퓨터에게는 눈이 없기때문에 한 눈에 알아볼 수가 없다.

 

일단 저 빨간 점을 지나는 접선을 그려보자.

그러면 위 그림처럼 그려진 접선은 기울기가 0을 가진 직선이 된다. 즉, 기울기가 0인 접선이 에러값이 최소인 지점을 구할 수 있다는 것이다. 다시 말해서 기울기가 최소인 접선이 가장 최소인 에러값을 가질 수 있다라는 것이다.

 

이제 기울기에 따라 에러의 최소값을 찾을 수 있다는 것을 알아냈다. 그렇다면 또 어떻게 기울기가 최소인 접선을 찾을 수 있을까?

 

바로 다음과 같이 임의의 한 점을 택하여 접선을 그리고 아래로 내려가면 기울기가 최소인 접선을 찾을 수 있다.

(뭔가 대충그린 감이 있지만 감안하고 봐주었으면 한다.)

이런 과정이 바로 '경사하강법'이다.

 

이쯤되면 저 에러값이 정확하게 무엇인지 궁금할 것이다. 궁금하지 않으면 여기까지만 봐도 좋을 것 같다.


평균 제곱 오차(Mean Squared Error, MSE)

위에서 그린 그래프의 y축에 써있던 '에러'라는 값은 일반적으로 평균 제곱 오차(MSE) 함수를 사용한 값이다. 이제 위에서 봐왔는 '에러'라는 말은 잊어버리자.

 

일단 평균 제곱 오차(Mean Squared Error)의 'Error'에 대한 설명부터 시작해보겠다.

위 그래프와 같이 데이터와 직선이 그려져있다고 해보겠다. 그리고 양쪽의 그래프 중 어떤 쪽이 더 나은 회귀함수인지 어떻게 판단할 수 있을까?

 

바로 데이터와 직선까지의 거리를 통해 판단할 수 있다. 거리가 멀다면 더 안 좋은 회귀함수일 것이고 거리가 좁다면 더 나은 회귀함수일 것이다. 따라서 육안으로보면 오른쪽이 데이터와 직선까지의 거리가 멀기때문에 왼쪽이 더 나은 회귀함수라고 판단할 수 있을 것이다.

 

그렇다면 Error가 무엇을 말하는 것인지 알 수 있을 것이다. 바로 데이터와 직선까지의 거리이다.

 

이제 Error가 무엇을 뜻하는 것인지 알았으니 평균 제곱 오차(Mean Squared Error)에 대해서 알아보자.

 

위에서 설명한 데이터와 직선까지의 거리를 제곱하면 해당 거리의 길이가 한 변인 정사각형의 넓이가 된다. 즉, 다음과 같은 그래프를 가질 수 있다.

그냥 데이터와 직선까지의 거리만 가지고 계산하면 될 것이지 왜 제곱을 하는 것일까?

 

첫 번째로 거리를 제곱함으로서 항상 양수인 거리값을 얻을 수 있고 두 번째로 두 개의 회귀를 비교했을 때 그 차이가 커지기때문에 더 쉽게 비교할 수 있다는 장점때문에 평균 제곱 오차를 사용하는 것이다. 수식은 다음과 같다.

수식에대해 간단히 설명하면 거리를 제곱한 값을 모두 더한 후 평균을 낸 것이다. 그리고 이 평균 제곱 오차가 바로 위에서 봤던 에러-x의 그래프를 나타낸 것이다.

 

여기까지 경사하강법이 간단하게 무엇인지와 MSE로 오차(Error)를 계산할 수 있다는 것을 알게되었다. 이제 또 무엇을 알아봐야할까?

 

수식으로 어떻게 계산되는 것인지 알아보고 끝을 내보자.


우선 위에서 봤던 그래프를 가져오겠다.

지금까지의 설명으로 위 그래프는 평균 제곱 오차(MSE) 그래프라고 설명할 수 있을 것이다. 또한 평균 제곱 오차(MSE)는 "비용함수"라고 한다. 이해하기쉽게 그래프의 x, y축 이름을 다시 지정해보겠다.

위 그래프를 다시 W에대한 비용함수, cost(W)라고 하겠다. 그리고 수식으로 표현하면 다음과 같을 것이다.

그리고 비용(cost)이 가장 적은 W값을 찾기위해 기울기(Gradient)를 구해야한다. (여기서 비용은 MSE를 말한다) 기울기를 구하기위해서는 다음과 같이 미분을 해야한다.

다시 정리하면 다음과 같이 계산될 것이다.

 

기울기를 구하는 수식까지 알아냈으니 이제 어떻게 경사하강법이 어떠한 수식으로 진행되는 것인지 보자. 생각보다 간단한 수식을 통해 진행된다.

간단히말해 임의의 W값을 설정 후 α∇W를 빼는 과정을 반복 수행하여 최소의 평균 제곱 오차를 구하는 것이다. 그런데 α는 무엇일까? α는 Leaning Rate(학습률)를 의미하는데 α의 값이 클수록 W값이 크게 변경되고 α의 값이 작을수록 W값이 적게 변경된다. 그리고 α값이 너무 크면 아래 사진의 왼쪽과 같이 앞뒤로 바운스되며 최소값에 도달하지 못할 수 있다. 반대로 α가 너무 작으면 위 사진의 오른쪽과 같이 경사하강법으로 결국 최소값에 도달할 수 있지만 시간이 오래 걸릴 수 있다. 따라서 학습률(learning rate)도 너무 크거나 너무 작으면 안된다. 다시 말해 경사하강법을 적절하게 수행하도록 도와주는 값이라고 생각해도 될 것 같다.

https://builtin.com/data-science/gradient-descent

 

728x90