Bias Correction in Exponentially Weighted Averages
exponentially weighted average 를 조금 더 정확하게 계산할 수 있도록 해주는 bias correction
$$v_{t} = \beta v_{t-1} + (1-\beta)\theta_{t}$$
$\beta$가 $0.98$일 때, 사실은 왼쪽이 아닌 오른쪽의 보라색 그래프를 얻게 된다
보라색 그래프는 시작할 때 값이 낮음 --> 이걸 고쳐보자
$$v_{1} = 0.98v_{0} + 0.02\theta_{1}$$
처음 $v_{0}$을 $0$으로 initialize 하기 때문에,
$v_{1}$을 구할 때 사실상 $0.02\theta_{1}$ 뿐임
첫날에 대해서는 $0.02$가 곱해진 훨씬 낮은 값으로 시작하게 되는 것
$v_{2}$도 같은 식으로 계산해보면 그닥 좋지 않은 추정값이 나오게 됨
estimate의 initial phase 에서의 계산을 보다 정확하게 하기 <- bias correction
$t$가 커질수록 $\beta^{t}$는 $0$에 가까워지고, 따라서 $t$가 충분히 크면 bias correction makes almost no difference (뒷부분에서 초록선과 보라선은 거의 일치함)
Gradient Descent with Momentum
Momentum
이러한 contour 를 가진 cost function을 optimize 한다고 해보자. 빨간색이 미니멈.
이런 식으로 움직여서 learning rate를 높이지도 못하는 상황 (큰 learning rate 썼으면 발산해버렸을 것)
우리가 원하는 것:
세로로는 천천히 학습하고 (덜 와리가리)
가로로는 빠르게 학습하기 (빠르게 미니멈에 수렴)
momentum:
$t$번째 iteration에서 현재 mini-batch에 대한 $dW$, $db$를 계산한다
그리고 여기서 $v_{dW} = \beta v_{dW} + (1-\beta)dW$ 를 계산한다($dW$의 moving average이동평균을 구하는 것)
마찬가지로 $v_{db} = \beta v_{db} + (1-\beta)db$
그리고 업데이트할 때에는 $w := w - \alpha v_{dW}$, $b := b - \alpha v_{db}$
to smooth out the steps of gradient descent
[Implementation details]
여기서 고려할 수 있는 두 하이퍼파라미터 : learning rate $\alpha$ 그리고 이동평균을 컨트롤하는 $\beta$
가장 흔한 $\beta$값은 $0.9$ --> 지난 10번의 iteration의 gradient에 대한 이동평균
여기에 bias correction한다면?
$\frac{v_{dW}}{1-\beta^{t}}$
그런데 gradient descent 할 때는 별로 적용 안 하는 편
영벡터로 initialize되는 $v_{dW}$는 $dW$와 같은 차원이고, 따라서 $W$와 같은 차원이다. $b$에 대해서도 동일.
이런 식의 접근법도 있다
RMSprop
gradient descent의 속도를 더 빠르게 할 수 있는 RMSprop(root mean square prop)
b 방향으로 속도를 늦추고, w 방향으로 속도를 빠르게 하고 싶음 (실제로는 매우 고차원인데 설명을 위해 단순화 함)
$t$번째 iteration에서 현재 mini-batch에 대한 $dW$, $db$를 계산한다
그리고 여기서 $S_{dW} = \beta S_{dW} + (1-\beta){dW}^{2}$ 를 계산함 *element-wise squaring operation
마찬가지로 $S_{db} = \beta S_{db} + (1-\beta){db}^{2}$
이것은 derivative를 제곱한 값으로 이동평균을 적용하는 것임
그리고 업데이트할 때에는 $w := w - \alpha \frac{dW}{\sqrt{S_{dW}} }$, $b := b - \alpha \frac{db}{\sqrt{S_{db}} }$
b 방향으로 속도를 늦추고, w 방향으로 속도를 빠르게 하고 싶다고 했음
그래서 비교적 작은 $\sqrt{S_{dW}}$로 나누고, 비교적 큰 \sqrt{S_{db}}로 나눠야 함
그래서 derivative 가 아래 화살표와 같이 w방향으로 작고 b방향으로 크다면 $S_{dW}$도 비교적 작아질 것이고 $S_{db}$는 비교적 커질 것이다
이렇게 했을 때 learning rate를 더 높게 쓸 수도 있다
이때 $\sqrt{S_{dW}}$가 $0$이 되지 않는 게 중요하므로 ... ($0$으로 나눠선 안 되니까)
실제 적용에서는 분모 $\sqrt{S_{dW}}$에 아주 작은 $\epsilon$을 더하는 편
Adam Optimization Algorithm
Adam optimization은 간단히 말해서 momentum과 RMSprop을 결합한 것임
$V_{dW}=0$, $S_{dW}=0$, $V_{db}=0$, $S_{db}=0$
*하이퍼파라미터 $\beta$의 구분을 위해 $\beta_{1}$, $\beta_{2}$로 표시
$t$번째 iteration에서 현재 mini-batch에 대한 $dW$, $db$를 계산한다
$v_{dW} = \beta_{1} v_{dW} + (1-\beta_{1})dW$ 를 계산한다
마찬가지로 $v_{db} = \beta_{1} v_{db} + (1-\beta_{1})db$ #momentum
$S_{dW} = \beta_{2} S_{dW} + (1-\beta_{2}){dW}^{2}$ 를 계산한다
마찬가지로 $S_{db} = \beta_{2} S_{db} + (1-\beta_{2}){db}^{2}$ #RMSprop
*Adam에서는 bias correction을 적용함
$V^{corrected}_{dW} = \frac{v_{dW}}{(1-\beta_{1}^{t})}$, $V^{corrected}_{db} = \frac{v_{db}}{(1-\beta_{1}^{t})}$
$S^{corrected}_{dW} = \frac{S_{dW}}{(1-\beta_{2}^{t})}$, $S^{corrected}_{db} = \frac{S_{db}}{(1-\beta_{2}^{t})}$
마지막으로 업데이트할 때에는
$$w := w - \alpha \frac{V^{corrected}_{dW}}{\sqrt{S_{dW}^{corrected}}+\epsilon }$$
$$b := b - \alpha \frac{V^{corrected}_{db}}{\sqrt{S_{db}^{corrected}}+\epsilon }$$
다양한 신경망에 효과적으로 적용되는 방식
[하이퍼파라미터 선택하기]
$\alpha$ : 튜닝 필요
$\beta_{1}$ : 보통은 $0.9$ (moving average of $dW$)
$\beta_{2}$ : 보통은 $0.999$ (moving average of $dW^{2}$)
$\epsilon$ : $10^{-8}$
웬만하면 디폴트 세팅대로 한 다음, 테스트 해보기
Adam(adaptive moment estimation)
Learning Rate Decay
크기가 작은 mini-batch들로 학습을 한다면, 학습에 노이즈가 많이 발생하고 minimum 부근에서 수렴하지 못하고 와리가리 할 수 있음
이럴 때 learning rate 를 서서히 늦춘다면?
처음에는 step을 크게 밟아도 되지만 뒤로 갈수록 작은 step을 밟도록 하는 것
1 epoch = 1 pass through the data (전체 미니배치들을 한번씩 지나야 함)
$$\alpha = \frac{1}{1+decayRate\times epochNumber}\alpha_{0}$$
여기서 decay rate도 튜닝해야 할 하이퍼파라미터가 됨
epoch를 거듭할수록 learning rate 가 감소함
[other learning rate decay methods]
$$\alpha = 0/95^{epochNum} \cdot \alpha_{0}$$
- exponentially decay
$$\alpha = \frac{k}{\sqrt{epochNum} }\cdot \alpha_{0}$$
or
$$\frac{k}{\sqrt{t} }\cdot \alpha_{0}$$
*t : 미니배치 개수
이런 식으로 구성할 수도 있음 ==> discrete staircase
Manual decay : 모델 학습을 일정 시간 지켜보다가 직접 통제하는 방법 ...
The Problem of Local Optima
local optima
여기저기 local optima 가 존재하는 모습
저차원으로 나타냈을 때 모습
하지만 그보다는
"saddle point"
만약 20000개 feature가 있다면...
local optima가 문제가 아니라면? plateaus
plateau에서 벗어나는 데 시간이 오래 걸릴 수 있음
여러 최적화 알고리즘이 이때 도움이 될 수 있음
'인공지능 > DLS' 카테고리의 다른 글
[2.3.] Batch Normalization (0) | 2022.07.12 |
---|---|
[2.3.] Hyperparameter Tuning (0) | 2022.07.12 |
[2.2.] Optimization Algorithms(1) (0) | 2022.07.11 |
[2.1.] Setting Up your Optimization Problem(2) (0) | 2022.07.06 |
[2.1.] Setting Up your Optimization Problem(1) (0) | 2022.07.04 |