SGD (Stochastic gradient descent)
$$w_{t+1} = w_{t} - \alpha \cdot \frac{\partial J(t)}{\partial w_{t}}$$
$\alpha$ : 학습률로 0.01, 0.001등의 작은 값을 사용한다.
가장 기본적인 형태의 optimizer로, (mini-)batch 단위로 경사하강법을 한다.
기울기가 0이되면 업데이트가 일어나지 않는다는 문제점이 있다.
Momentum
$$m_{t+1} = \beta \cdot m_{t} + (1 - \beta) \cdot \frac{\partial J(w_{t})}{\partial w_{t}}$$
$$w_{t+1} = w_{t} - \alpha \cdot m_{t+1}$$
$m$ : 기존의 기울기에 지수 가중 평균을 사용한 값.
$\beta$ : 과거 값에 대한 가중치로 클수록 모멘텀 효과 또한 커진다, 보통 0.9를 사용한다.
물리에서 관성과 비슷한 개념을 도입해서 기울기가 0인 지점에 도달하더라도 관성에 의해 업데이트가 진행되도록 한다.
$m$은 그냥 평균이 아니라 계산이 빠르고 현재 값에 더 높은 가중치를 두는 지수 가중 평균을 사용한다.
그래서 진동 또한 줄여주는 효과가 있다.
AdaGrad
$$v_{t+1} = v_{t} + \bigg( \frac{\partial J(w_{t})}{\partial w_{t}} \bigg)^2$$
$$w_{t+1} = w_{t} - \frac{\alpha}{\sqrt{v_{t+1}+\epsilon}} \cdot \frac{\partial J(w_{t})}{\partial w_{t}}$$
$v$ : 기울기 제곱이 누적된 값으로 학습률을 감소시킨다.
$\epsilon$ : 0으로 나누는걸 방지하기 위한 용도로, $10^{-7}$등의 값을 사용한다.
학습률을 알아서 감소시키므로 편하지만, 시간이 지나면 학습률이 너무 작아져서 학습이 잘 되지 않는다.
RMSProp
$$v_{t+1} = \beta \cdot v_{t} + (1 - \beta) \cdot \bigg( \frac{\partial J(w_{t})}{\partial w_{t}} \bigg)^2$$
$$w_{t+1} = w_{t} - \frac{\alpha}{\sqrt{v_{t+1}+\epsilon}} \cdot \frac{\partial J(w_{t})}{\partial w_{t}}$$
$\beta$ : 과거 값에 대한 가중치로, 주로 0.9를 사용한다.
AdaGrad의 학습률 감소 문제를 해결하기 위해 최소 지수 가중 평균을 사용해 최근 기울기 값들만 고려한다.
그래서 학습률이 높아지는 경우도 가능하다.
예를 들면, 학습이 진행됨에 따라 기울기가 작아져서 $v$또한 작아진다면 학습률이 높아지는 경우도 있을 수 있다.
Adam
$$m_{t+1} = \beta _1 \cdot m_{t} + (1 - \beta _1) \cdot \frac{\partial J(w_{t})}{\partial w_{t}}$$
$$v_{t+1} = \beta _2 \cdot v_{t} + (1 - \beta _2) \cdot \bigg( \frac{\partial J(w_{t})}{\partial w_{t}} \bigg)^2$$
$$\widehat{m_{t+1}} = \frac{m_{t+1}}{1 - \beta_1^{t+1}}$$
$$\widehat{v_{t+1}} = \frac{v_{t+1}}{1 - \beta_2^{t+1}}$$
$$w_{t+1} = w_{t} - \frac{\alpha}{\sqrt{\widehat{v_{t+1}} + \epsilon}} \cdot \widehat{m_{t+1}}$$
$m$ : Momentum에서 사용되던 $m$과 같다.
$v$ : RMSProp에서 사용되던 $v$와 같다.
$\beta_1, \beta_2$ : 각각 $m$과 $v$의 hyperparameter다.
$\widehat{m_{t+1}}, \widehat{v_{t+1}}$ : $m$과 $v$의 보정값이다.
보통 $m$과 $v$를 0으로 초기화 하는데 이러면 학습 초기에 $m$과 $v$가 작아서 학습이 느릴 수 있다.
그래서 초기에 $m$과 $v$를 더 크게 만들어 학습이 너무 느리지 않도록 한다.
$\beta_1^{t+1}$와 $\beta_2^{t+1}$는 학습이 진행됨에 따라 0에 수렴함으로 학습이 진행될수록 $m$과 $v$의 보정값은 원래의 값으로 수렴한다.
Momentum과 RMSProp을 합친 optimizer이다.
이 둘의 특징을 다 갖다보니 많은 딥러닝 문제에서 잘 작동한다.
'인공지능' 카테고리의 다른 글
Cross Entropy Derivation (0) | 2024.03.11 |
---|---|
CS234 Notes - Lecture 2 번역본 (0) | 2023.11.17 |
RNN - Recurrent neural network (0) | 2023.09.11 |
머신러닝에 쓰이는 정보이론 (0) | 2023.09.04 |
Convolutional Neral Network (0) | 2023.08.15 |