본문 바로가기
ML&DL

경사 하강법(Gradient Descent)이란??

by cuda 2022. 7. 18.

경사 하강법(Gradient Descent)란?

경사 하강법 (傾斜下降法, Gradient descent)은 1차 근삿값 발견용 최적화 알고리즘이다. 기본 개념은 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다
-Wikipedia-

 예전에 한창 와우를 하던 시기가 있었다. 퀘스트를 완료하려면 가야만 하는 곳이 있었는데, 그 곳이 다른 지형보다 훨씬 고도가 낮은 곳이었다. 그 당시에는 날아다니는 탈것을 얻을 수 없는 시기여서 걸어가야만 했기에 애먹었던 기억이 있다.

 

30대 아닙니다.

위와 같은 느낌의 지형이었고, 고민끝에 나는 경사면을 따라 낮은 곳으로 점점 나아가는 방법을 택했고, 결국 가장 낮은 곳이었던 완료지점까지 도달할 수 있었다.

제목은 경사하강법인데 뜬금없이 와우이야기가 나왔다고 생각할 수 있지만(그리고 이제는 사람들이 와우를 아실지 모르겠네요...), 사실 금방까지 이야기했던 일화에는 경사하강법의 원리가 담겨있다. 이제부터 본격적으로 경사하강법에 대해 알아보도록 하겠다.


경사 하강법은 함수의 최솟값을 찾기 위해, 함수의 기울기(경사)가 아래를 향하는 방향으로 반복적으로 이동하여 최종적으로는 함수의 최솟값에 도달하는 최적화 방법이다.

다음과 같은 함수가 있다고 가정해보자. 가로축은 $x$이고, 세로축은 $y$이다. 이 함수에서의 최솟값은 빨간색 점이 찍혀있는 곳이다.

기울기가 음수인 경우

파란색 점에서 최솟값인 빨간 점으로 이동하려면 어떻게 해야할까? 단순하게 생각하면, 경사를 따라 공이 굴러가듯이 이동하면 된다.

파란색 공이 빨간 지점으로 굴러가는 것을 상상해보자. 굴러가는 과정 속에서 파란 공에게는 두가지 변화가 생긴다.

  1. $x$값은 증가한다
  2. $y$값은 감소한다

이러한 현상이 일어나는 이유는 무엇일까? 바로 기울기가 음수이기 때문이다.

우리는 함수의 최솟값을 향해 나아가는 중이다. 즉, $y$값을 최대한 줄여야 하는 것이다.

기울기가 음수일때는 $x$값이 증가할수록 $y$값이 감소하기 때문에, 기울기가 음수인 지점에서는 $x$값을 증가시켜야한다.

 

기울기가 양수인 경우

반대로, 위 사진에서의 파란 공이 빨간 지점을 향해 굴러갈 경우 다음과 같은 변화가 일어난다.

  1. $x$값은 감소한다
  2. $y$값은 감소한다

위 예시의 파란 공의 위치에서는 기울기가 양수이기에, $y$값을 줄이기 위해 $x$값도 감소시켜야 하는 것이다.

따라서 우리는 이러한 결론에 도달할 수 있다.

기울기가 음수일때는 $x$가 커져야하고, 양수일때는 $x$가 작아져야하기때문에,
기울기가 양수일때는 음의 방향으로 $x$을 옮겨주고, 음수일때는 양의 방향으로 옮겨주자

이를 수학적으로 표현하면 다음과 같다

$$ x \leftarrow x -  \eta \frac{d f}{d x} $$

함수 f(x)를 x로 미분한 기울기값에 $\eta$를 곱한 다음, $x$에서 그 값을 빼주어 갱신하는 것이다.

그런데, 수식에 존재하는 $\eta$는 무엇을 의미하는 것일까? 바로 step size를 정해주는 learning rate이다.

 

Learning rate란?

$x$는 기울기값을 바탕으로 update된다. 이때, $x$를 얼마나 update해줄지 결정해주는 것이 learning rate이다.

learning rate가 크면 update될때마다 더 많이 update될 것이고, 작으면 적게 update될 것이다.

이러한 Learning rate는 적절한 값을 찾는것이 중요한데,

너무 큰 Learning rate는 값이 발산하게 되어 최솟값으로의 수렴이 어려울 수 있으며,

너무 작은 Learning rate 또한 local miminum에 수렴하게 되어 global minimum(최솟값)에 수렴하지 못할 수 있다.

 

쉽게 말하자면, Learning rate가 너무 커버리면 update시 너무 큰 값이 update되기 때문에 좌우로 왔다갔다하게 된다.

사진을 보게되면, $x$값이 update될 때, 너무 큰 값이 update되어 최솟값에 쉽게 수렴하지 못하는것을 볼 수 있다.

 

Learning rate가 작은 경우에는 update시 너무 작은 값이 update되기 때문에 local minimum을 빠져나올 수 없게된다.

최솟값에 도달하지 못하고 local minimum의 늪에 빠져버린 모습을 볼 수 있다.(오르막길을 가야하는데, 힘이 없어서 못올라간다)

 

 

Deep learning에서의 경사하강법

 

Deep learning을 이용하여 예측 모델을 만든다고 가정해보자. 이 때, 우리의 목적은 동일한 입력이라고 가정할 시, 최대한 실제값과 비슷한 출력 결과를 내놓는 모델을 만드는 것이다.

즉, 성능이 좋은 모델이란, 실제값과 모델로 출력된 예측값의 차이를 최소화하는 모델인 것이다. 실제값과 모델로 출력된 예측값의 차이를 loss라고 하며, 모델은 loss를 최소화하는 방향으로 학습을 진행한다. 이때, loss를 최소화하기 위한 방안으로 경사 하강법이 사용되는 것이다.

$\theta = \{W , b \}$ 일때, ($W$는 weight, $b$는 bias) loss function을 다음과 같다고 가정하자.

$$ L(\theta) =  \sum_{i=1}^{N}  \|  y_i - f_\theta(x_i)\|^2_2 $$

이때, 우리는 loss function을 최소화하는 paratemeter $\theta$를 찾아야한다. 이제까지 $x$와 $y$로 했던 경사하강법 방식을 loss와 $\theta$에 적용시키면 된다.

 

즉,

$$ \theta \leftarrow \theta -  \eta \frac{ \partial  L(\theta)}{ \partial  \theta} $$

의 식이 되는것이다.

 

그런데 여기서, $\theta$는 $W$와 $b$로 이루어져 있으므로,

$$ W \leftarrow W -  \eta \frac{ \partial  L(\theta)}{ \partial  W} $$

$$ b \leftarrow b -  \eta \frac{ \partial  L(\theta)}{ \partial  b} $$

loss function을 weight와 bias로 편미분하여 각각 update를 해주면 된다.

이후 과정은 동일하며, 이 과정을 반복하다보면 loss가 최소화되는 parameter $\theta$를 찾을 수 있게 된다.

 

 

 

 

댓글