Adam Optimizer
원래의 Gradient descent 는 항상 learning rate이 같음(step, 변수에 상관 없이)
이를 개선한 것이 Ada, RMSProp optimizer이다.
이 두개의 장점을 구현한 것이 Adam optimizer이다.
초기 설정
Objective function : $f(\theta)$
$f(\theta)$ 를 최소화 시키는 것이 목적.
gradient : $g_t = \nabla_{\theta} f(\theta)$
$$\beta_1 , \beta_2 $$ : Exponential decay rates for the moment estimates
$m_t , v_t $ : momentum, 이전에 사용한 stepsize를 기억하는 역할, 물리의 관성과 비슷한 느낌이라고 한다.
$m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t $
- 이전의 모멘텀과 현재의 gradient를 $\beta_1 : 1- \beta_1 $ 로 내분함
- $\beta_1 \approx 1$ , $m_t$ 가 $0$ 근처에서 멈출 수 있음
$v_t = \beta_2 v_{t-1} + (1-\beta_1) {g_t}^2 $
- ${g_t}^2 = g_t \bigodot g_t $ , hadamard product
- 각 parameter 에 해당하는 gradient들이 제곱으로 누적됨.
- $\beta_2 \approx 1$, $v_t$ 가 0 근처에 멈출 수 있음
gradient가 많이 변한 방향은, 최적에 가까워졌을 가능성이 크다.
--> 많이 움직였을수록, 조금 움직이게 하자
- $\hat{m_t} = m_t/(1-{\beta_1}^t) $
- $\hat{v_t} = v_t/(1-{\beta_2}^t) $
- $\theta_t = \theta_{t-1} - \alpha \cdot \hat{m_t}/\left( \sqrt{\hat{v_t}} +\epsilon \right)$
- Step size $\Delta_t$ is invariant to the scale of gradients
$g_t = c \cdot g_t $ $\rightarrow$ $m_t = c\cdot m_t,~~ v_t = c^2 \cdot v_t$
$\rightarrow$ $\Delta_t = \left( c\cdot \hat{m_t} \right)/\left(\sqrt{c^2\cdot \hat{v_t}}\right) = \hat{m_t}/\sqrt{\hat{v_t}}$
- Adam utilizes initialization bias correction terms
$m_t$와 $v_t$가 0 근처에 머무르는 것을 보정해주고자 하는 스텝.
$v_t = \beta_2 v_{t-1} + (1-\beta_1) {g_t}^2 $
$\rightarrow$ $v_t = (1-\beta_2) \sum_{i=1}^{t} \beta_2 ^{t-i}\cdot g_i ^2$
'머신러닝 > 오류 모음집' 카테고리의 다른 글
Colab 초기 설정 튜토리얼 (0) | 2022.06.06 |
---|---|
[Mac OS] terminal에서 Jupyter 실행 시 오류 (0) | 2021.04.22 |
Word cloud 원하는 색으로 꾸미기 (word cloud customize color) (0) | 2021.02.21 |
Mac에서 Matplotlib 사용 시, 한글 깨짐 해결 (0) | 2021.02.18 |
pandas로 용량이 큰 csv 파일 읽어오기(kernel dies reading csv file) (0) | 2021.02.15 |