Root Mean Square Propagation (RMSProp)¶
이 알고리즘은 publish가 되지않고, Hinton 교수님의 Coursera 강의(2012)에서 소개된 알고리즘임.
아래 이미지가 해당 슬라이드 (아래 참고자료에 url로 다운로드 가능)임
AdaGrad와 거의 비슷하지만,
- 지금까지의 모든 squared gradient의 누적합으로 \(\textbf{s}\)를 구하는 것이 아닌,
- 과거 squared gradient들의 Exponential Moving Average 를 통해
- 과거의 gradient의 영향을 지수함수로 감소 시키고
- 최근의 gradient들을 중심으로 누적 시켜
- 지나치게 learning rate가 빠르게 감소하는 문제를 해결함.
참고: Exponential Moving Average
즉, RMSProp은 AdaGrad의 문제점을 개선한 adaptive learning rate 기반의 optimizer임.
- 각각의 parameter별로 과거 squared gradient의 EMA의 square root에 반비례하는 learning rate를 따로 적용하는 셈.
- 과거 squared gradient의 EMA의 square root가 크다는 것은 해당 parameter에서 최근까지 gradient가 크게 나타났다는 의미이므로 작은 learning rate로 움직임.
- 반대로 과거 squared gradient의 EMA의 square root가 작다는 것은 해당 parameter에서 최근까지 gradient가 작게 나타났다는 의미이므로 큰 learning rate로 움직임.
수식은 다음과 같음.
\[ \begin{aligned} s_{t+1} &= \beta\, s_t + (1-\beta)\, \bigl(\nabla_\theta J(\theta_t) \;\otimes\; \nabla_\theta J(\theta_t)\bigr), \\ \theta_{t+1} &= \theta_t - \eta\; \nabla_\theta J(\theta_t) \;\oslash\; \bigl(\sqrt{s_{t+1}} + \varepsilon\bigr). \end{aligned} \]
- Exponential Decaying Factor인 \(\beta\) (forgetting factor, decaying factor, smoothing factor)는
0.9를 기본값으로 가지며, 일종의 hyperparameter로 0.9~0.999의 값을 취함. - \(\frac{1}{1-\beta}\)의 gradient들에 대한 평균으로 근사하기도 함. (즉 \(\beta\)가 클 수록 오래전의 gradient들을 고려하여 누적시켜 learning rate를 감소시킴)
- \(\otimes\)는 element-wise multiplication (Hadamard product) 임.
- \(\oslash\)는 element-wise division (Hadamard division)임.
다음의 형태로 기재하는 문헌도 많음 (같은 의미임):
\[ s_{t+1} = \beta v_{t} + (1-\beta)g_t^2 \\ \theta_{t+1} = \theta_{t} - \eta \frac{g_{t+1}}{\sqrt{v_{t+1}}+\epsilon} \]
- \(g_t\) 는 \(t\) 시점의 gradient임!
- \(\epsilon\) 은 numerical stability term 으로 division by zero를 방지하고 numerical stability를 확보하기 위한 작은 상수임.
Pseudo code¶
cache = decay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)
decay_rateis a hyperparameter and typical values are [0.9, 0.99, 0.999]x+=update is identical toAdagrad, but the cache variable is a “leaky”
PyTorch에서의 구현¶
아래와 같이 torch.optim.RMSprop optimizer 객체를 생성하면 됨.
lr: learning ratealpha: squared gradient의 exponential moving average에 사용되는 decay factor로, Keras의rho(앞서 수식의beta)에 대응함.
Keras에서의 구현.¶
아래와 같이 RMSProp optimizer 객체를 생성하여 fit에 넘겨주면 됨.
References¶
- slide 29 of Lecture 6 of Geoff Hinton’s Coursera class.
- CS231n Convolutional Neural Networks for Visual Recognition