본문 바로가기
개발/DNN

Gradient Descent Method(경사하강법)

by ▶ Carpe diem ◀ 2023. 9. 19.

Gradient Descent Method

함수의 최솟값을 찾는 방법을 gradient descent method(경사하강법)이라고 하고, 이 방법은 DNN에서 비용함수의 최솟값을 찾을 때 자주 사용됩니다. 

 

아래 그림에서 보는 것처럼 함수의 기울기를 구하고, 낮은 쪽으로 계속 이동시켜 최저점에 다 다를 때까지 반복합니다. 하강하는 보폭(step) 크기에 따라 최솟값을 찾는 횟수가 달라질 수 있고, 최솟값으로 수렴하지 못 하고 발산하는 경우도 생깁니다. 하이퍼 파라미터인 learning rate(학습률)를 조절하며, 적절한 step size를 찾습니다.

Gradient descent (이미지 출처: IBM)

 

Local Minima 문제

Gradient descent method를 통해 찾고자 하는 것은 아래 그림에서 보는 것처럼 global minimum이지만, gradient descent 알고리즘이 시작하는 위치에 따라, global minimum에 도달하지 못 하고, local minima에 빠져는 경우도 생깁니다

Local Minima와 Global Minimum

이 문제를 해결하기 위해 기울기에 관성을 줘서 작은 기울기는 쉽게 넘어가는 모멘텀(momentum)이라는 것이 있습니다.

 

Gradient descent method에 대해 알아보았고, 앞 절에서 언급했던 47개의 파라미터값을 설정하는 방법을 이어서 알아보도록 하겠습니다.

 

47개의 파라미터값 계산하기

비용함수가 최소가 되는 가중치(weight)와 편향성(bias)을 계산하는 식은 아래와 같습니다.

$$ (\Delta w_{11}^{2},..., \Delta w_{11}^{3},..., \Delta b_{1}^{2},..., \Delta b_{1}^{3},...) = -\eta (\frac{\partial C_{T}}{\partial w_{11}^{2}},...,\frac{\partial C_{T}}{\partial w_{11}^{3}},...,\frac{\partial C_{T}}{\partial b_{1}{2}},...,\frac{\partial C_{T}}{\partial b_{1}{3}},...) $$

 

하나의 가중치를 계산하는 과정은 아래와 같습니다.

$$ \frac{\partial C_{k}}{\partial w_{11}^{2}} = \frac{\partial C_{k}}{\partial a_{1}^{3}[k]} \frac{\partial a_{1}^{3}[k]}{\partial z_{1}^{3}[k]} \frac{\partial z_{1}^{3}[k]}{\partial a_{1}^{2}[k]} \frac{\partial a_{1}^{2}[k]}{\partial z_{1}^{2}[k]} \frac{\partial z_{1}^{2}[k]}{\partial w_{11}^{2}} + \frac{\partial C_{k}}{\partial a_{2}^{3}[k]} \frac{\partial a_{2}^{3}[k]}{\partial z_{2}^{3}[k]} \frac{\partial z_{2}^{3}[k]}{\partial a_{1}^{2}[k]} \frac{\partial a_{1}^{2}[k]}{\partial z_{1}^{2}[k]} \frac{\partial z_{1}^{2}[k]}{\partial w_{11}^{2}} $$

 

위의 식을 도식화하면 아래와 같습니다.

우리는 64개의 훈련 데이터가 있음으로 k는 1,...,64입니다. 즉, 아래와 같은 식을 계산해야 하나의 가중치에 대한 값을 구할 수 있습니다.

$$ \frac{\partial C_{T}}{\partial w_{11}^{2}} = \frac{\partial C_{1}}{\partial w_{11}^{2}} + \frac{\partial C_{2}}{\partial w_{11}^{2}} + ... + \frac{\partial C_{64}}{\partial w_{11}^{2}}$$

각각의 훈련데이터에 대해 계산하기 위해서는 다음 식들을 계산해야 한다.

1번째 훈련데이터:

$$ \frac{\partial C_{1}}{\partial w_{11}^{2}} = \frac{\partial C_{1}}{\partial a_{1}^{3}[1]} \frac{\partial a_{1}^{3}[1]}{\partial z_{1}^{3}[1]} \frac{\partial z_{1}^{3}[1]}{\partial a_{1}^{2}[1]} \frac{\partial a_{1}^{2}[1]}{\partial z_{1}^{2}[1]} \frac{\partial z_{1}^{2}[1]}{\partial w_{11}^{2}} + \frac{\partial C_{1}}{\partial a_{2}^{3}[1]} \frac{\partial a_{2}^{3}[1]}{\partial z_{2}^{3}[1]} \frac{\partial z_{2}^{3}[1]}{\partial a_{1}^{2}[1]} \frac{\partial a_{1}^{2}[1]}{\partial z_{1}^{2}[1]} \frac{\partial z_{1}^{2}[1]}{\partial w_{11}^{2}} $$

2번째 훈련데이터:

$$ \frac{\partial C_{2}}{\partial w_{11}^{2}} = \frac{\partial C_{2}}{\partial a_{1}^{3}[2]} \frac{\partial a_{1}^{3}[2]}{\partial z_{1}^{3}[2]} \frac{\partial z_{1}^{3}[2]}{\partial a_{1}^{2}[2]} \frac{\partial a_{1}^{2}[2]}{\partial z_{1}^{2}[2]} \frac{\partial z_{1}^{2}[2]}{\partial w_{11}^{2}} + \frac{\partial C_{2}}{\partial a_{2}^{3}[2]} \frac{\partial a_{2}^{3}[2]}{\partial z_{2}^{3}[2]} \frac{\partial z_{2}^{3}[2]}{\partial a_{1}^{2}[2]} \frac{\partial a_{1}^{2}[2]}{\partial z_{1}^{2}[2]} \frac{\partial z_{1}^{2}[2]}{\partial w_{11}^{2}} $$

64번째 훈련데이터:

$$ \frac{\partial C_{64}}{\partial w_{11}^{2}} = \frac{\partial C_{64}}{\partial a_{1}^{3}[64]} \frac{\partial a_{1}^{3}[64]}{\partial z_{1}^{3}[64]} \frac{\partial z_{1}^{3}[64]}{\partial a_{1}^{2}[64]} \frac{\partial a_{1}^{2}[64]}{\partial z_{1}^{2}[64]} \frac{\partial z_{1}^{2}[64]}{\partial w_{11}^{2}} + \frac{\partial C_{64}}{\partial a_{2}^{3}[64]} \frac{\partial a_{2}^{3}[64]}{\partial z_{2}^{3}[64]} \frac{\partial z_{2}^{3}[64]}{\partial a_{1}^{2}[64]} \frac{\partial a_{1}^{2}[64]}{\partial z_{1}^{2}[64]} \frac{\partial z_{1}^{2}[64]}{\partial w_{11}^{2}} $$

 

위의 식들을 복잡하고 푸는 것이 많은 노력이 필요함으로 Backpropagation을 통해 이러한 문제를 극복하였습니다.

 

다음 절에서는 Backpropagation 에 대해 알아보겠습니다.

'개발 > DNN' 카테고리의 다른 글

Backpropagation(역전파)  (0) 2023.10.08
Learning(학습)이란?  (0) 2023.09.18
Cost Function(비용 함수)  (0) 2023.09.17
Activation Function  (0) 2023.09.06
Perceptron  (0) 2023.09.02