Momentum, AdaGrad, RMSProp, Adam --- NEED TO CHECK
Momentum
Momentum 은 Gradient descent(이하 GD) 기반의 optimization algorithm 이다. 수식으로 표현하면 아래와 같다.
L : loss function value
W : weights
η : learning rate
α : 가속도 같은 역할을 하는 hyper parameter, 0.9 등 1 이하의 값을 취함. 자세한 것은 아래에 설명.
v 는 일종의 가속도(혹은 속도) 같은 개념으로 생각하는 것이 이해에 더 도움이 될 것 같다. v 의 영향으로 인해 가중치가 감소하던 (혹은 증가하던) 방향으로 더 많이 변화하게 되는 것. 최초의 v 는 0으로 초기화 한다.
간단한 예를 이용하여 설명한다.
첫번째 스텝의 기울기가 5, 두번째 스텝의 기울기가 3인 경우 학습률 η = 0.1 일 때, 두번째 스텝에서 가중치는 -0.3 만큼 변화한다.
Momentum 을 적용한 경우는
일반적인 GD 보다 두번째 스텝에서 -0.45 만큼 가중치가 더 변하는 것을 알 수 있다. 이를 그래프로 간단하게 표현하면
GD 를 사용했다면 갔을 거리보다 Momentum 을 사용했을 때 이동하려던 방향으로 스텝을 더 멀리 뻗는다고 이해할 수 있다.(그래프는 구글에 y=x^2를 입력하여 간단하게 그렸으니 그래프의 숫자는 무시하고 형태만 본다.)
Momentum 은 아래 그림처럼 빗살무늬 모양 그릇에 공을 굴리면 움직이듯 가중치가 이동하게 된다.
AdaGrad
학습률이 너무 작으면 학습 시간이 너무 길고, 너무 크면 발산해서 학습이 제대로 이루어지지 않는다. 이런 문제를 AdaGrad 는 학습률 감소(learning rate decay) 를 통해 해결한다.
연산기호 ⊙ 는 element wise multiplecation 이다(한국말로는 행렬의 원소별 곱셈). h 에 이전 기울기의 제곱들이 누적되어 더해지게 되는데, parameter 를 업데이트 할때, 1/√h 를 통해 학습률을 조정하게 된다. 이를 통해 parameter 중 많이 움직인 element 의 학습률이 낮아지는 효과를 만든다. 즉, 학습률의 감소가 element 마다 다르게 적용됨을 의미한다.
AdaGrad 는 무한히 학습을 하다보면 어느 순간 h 가 너무 커져서 학습이 되지 않을 수 있는데, 이 문제는 RMSProp 에서 개선된다
RMSProp
이전 AdaGrad 설명에서 언급했듯이 AdaGrad 는 최소값에 도달하기 전에 학습률을 0에 수렴하게 만들 수도 있다. AdaGrad 가 간단한 convex function 에선 잘 동작하지만, 복잡한 다차원 곡면 함수를 (상대적으로)잘 탐색하도록 설계되지 않기도 했고. 기울기의 단순한 누적만으로는 충분하지 않은 셈이다.
RMSProp 은 기울기를 단순 누적하지 않고 지수 가중 이동 평균 Exponentially weighted moving average 를 사용하여 최신 기울기들이 더 크게 반영되도록 하였다.
이전 AdaGrad 의 h 에 새로운 hyper parameter ρ 를 추가하였다. 이제 h 가 무한히 커지지 않으면서 ρ 가 작을 수록 가장 최신의 기울기를 더 크게 반영하게 된다.
Adam
Adam 은 이전 글인 Momentum, AdaGrad 설명에서 언급한 Momentum 과 AdaGrad 를 융합한 방법이다.
출처: https://arxiv.org/pdf/1412.6980.pdf
이전 글에서 Momentum 은 새로운 계수로 v 를, AdaGrad 는 h 를 추가하여 최적화를 진행하였는데, Adam 은 두 기법에서 v, h 가 각각 최초 0으로 설정되어 학습 초반에 0으로 biased 되는 문제를 해결하기 위해 고안한 방법이다.
Adam 의 의사코드를 보면 1차 모멘텀인 m 과 2차 모멘텀인 v 를 이용하여 최적화를 진행하는데, 첫번째 항인 m_1 을 계산하는 과정을 살펴보면 쉽게 이해할 수 있다.
결론적으로, m_1 = g_1(첫번째 기울기) 이 됨으로써 기존에 m_0 = 0 로 인해서, m_1 = 0.1g_1(∵β_1 = 0.9) 이 되어 0 에 biased 됨이 해결되었다.
두번째 항부터는 뒤로 갈 수록 가장 최신 기울기 한 개가 전체 평균에 10% 정도 영향을 주니 가중이동평균 목적에 부합한다.
알고리즘의 마지막 계산 순서인 위 부분도, v 를 m 으로 나누는 선택을 할 수도 있었는데 그렇게 하지 않은 이유는 m 은 매번 구해지는 기울기에 따라 늘었다 줄었다 하는 값이지만 v 는 제곱이 더해지므로 무조건 커지는 값이기 때문에 학습할때 step 이 너무 크지 않도록 적당히 작은 값을 움직이도록 하기 위해서 m<v 인 조건을 이용한 것으로 이해된다.
마지막으로 Optimizer 의 계보(?) 를 설명하는 간단한 그림을 첨부한다.
일반적으로 가장 많이 쓰이는 알고리즘이 Adam.
source:
https://www.slideshare.net/yongho/ss-79607172
https://light-tree.tistory.com/141?category=755497
'Machine Learning' 카테고리의 다른 글
XGBoost(Boosting / Gradient Boosting Algorithm(GBM) / Adaptive boosting) (0) | 2019.09.25 |
---|---|
Batch Normalization NEED TO CHECK (0) | 2019.09.18 |
MGD(Mini-batch gradient descent) vs SGD(stochastic gradient descent) (0) | 2019.09.18 |
Normalization (0) | 2019.09.18 |
Cross Validation (0) | 2019.09.18 |
댓글