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에서 벗어나는 데 시간이 오래 걸릴 수 있음

여러 최적화 알고리즘이 이때 도움이 될 수 있음

복사했습니다!