Gradient Descent Method
함수의 최솟값을 찾는 방법을 gradient descent method(경사하강법)이라고 하고, 이 방법은 DNN에서 비용함수의 최솟값을 찾을 때 자주 사용됩니다.
아래 그림에서 보는 것처럼 함수의 기울기를 구하고, 낮은 쪽으로 계속 이동시켜 최저점에 다 다를 때까지 반복합니다. 하강하는 보폭(step) 크기에 따라 최솟값을 찾는 횟수가 달라질 수 있고, 최솟값으로 수렴하지 못 하고 발산하는 경우도 생깁니다. 하이퍼 파라미터인 learning rate(학습률)를 조절하며, 적절한 step size를 찾습니다.
Local Minima 문제
Gradient descent method를 통해 찾고자 하는 것은 아래 그림에서 보는 것처럼 global minimum이지만, gradient descent 알고리즘이 시작하는 위치에 따라, global minimum에 도달하지 못 하고, local minima에 빠져는 경우도 생깁니다
이 문제를 해결하기 위해 기울기에 관성을 줘서 작은 기울기는 쉽게 넘어가는 모멘텀(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 |