AdaGrad는 표준 확률적 경사 하강법(SGD)의 변형 기법입니다.
둘의 차이점은 각 파라미터 별로 학습률이 다르게 적용되는 것입니다.
AdaGrad는 각 파라미터가 지금까지 얼마나 많이 업데이트 되었는지 추적합니다.
이때 덜 업데이트된 파라미터에 대해 더 큰 학습률을 주는 방식으로 작동합니다.
AdaGrad의 수식은 다음과 같습니다.
여기서 는 번 파라미터에 대한 현재 기울기를 의미합니다.
분모 는 번 기울기의 제곱값을 현재까지 누적합한 것입니다.
다시 말해 번에 대한 과거 기울기 제곱의 누적합입니다.
기울기가 자주 발생한 파라미터는 학습률이 감소하고 반대로 잘 안 바뀐 파라미터는 학습률이 증가합니다.
아래는 AdaGrad의 pseudocode입니다.
cache += dx**2
x += - learning_rate * dx / np.sqrt(cache + 1e-8)
여기서 dx()는 현재 그래디언트, x()는 파라미터 벡터, cache()는 기울기 제곱의 누적합, 1e-8은 0으로 나누는 것을 방지하는 안정화용 입니다.
AdaGrad는 희소한(sparse) 데이터셋에서 효과적이라는 장점이 있습니다.
자주 등장하지 않는 특성에 대해 학습률이 크게 유지되어 빠르게 학습할 수 있습니다.
또한 수동으로 학습률을 조절할 필요 없이 자동으로 학습률을 조절합니다.
다만 학습이 진행될수록 학습률이 지나치게 작아지는 문제가 있습니다.
는 계속해서 증가만 하므로 학습이 오래 진행될수록 학습률의 영향이 미미해져 결국 학습이 멈춰버릴 수 있습니다.
이로 인해 글로벌 미니멈에 도달하기 전에 학습이 정체되거나 멈출 수 있습니다.
AdaGrad는 각 파라미터 별로 학습률을 다르게 적용할 수 있으나
학습이 진행될수록 학습률이 지나치게 작아질 수 있다.
RMSProp는 AdaGrad처럼 모든 과거 기울기 제곱을 누적하는 대신 지수 이동 평균(EMA)을 사용하여 과거 기울기 제곱을 누적합니다.
이를 통해 최근의 기울기 정보에 더 큰 비중을 두고 오래된 기울기 정보는 점차 잊어버리는 효과를 줍니다.
수식은 아래와 같습니다.
여기서 는 시점의 번 파라미터에 대한 기울기 제곱의 지수 이동 평균이고
는 지수 이동 평균의 감쇠율(decay rate) 하이퍼파라미터입니다.
RMSProp는 과거 기울기 제곱의 지수 이동 평균을 사용하여 파라미터 별로 학습률을 조절하므로
학습률이 0으로 수렴하지 않아 AdaGrad의 가장 큰 문제점인 학습률 감소 문제를 해결합니다.
하지만 모멘텀의 장점인 관성을 직접적으로 활용하지는 않습니다.
pseudocode는 아래와 같습니다.
cache = decay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)
RMSProp는 과거 기울기 제곱의 지수 이동 평균을 활용하여 각 파라미터의 학습률을 조절하나 모멘텀의 장점인 관성을 직접 활용하진 않는다.
Adam은 모멘텀과 RMSProp의 장점을 결합한 형태입니다.
따라서 딥러닝 모델 학습에 가장 널리 사용되는 최적화 알고리즘 중 하나입니다.
Adam은 현재 스텝 에서 파라미터 에 대해 기울기의 첫 번째 모멘트(평균)와 두 번째 모멘트(비중심 분산)를 추정합니다.
먼저 현재 스텝의 파라미터 에 대한 손실 함수의 기울기를 계산합니다.
그리고 첫 번째 모멘트인 기울기의 지수 이동 평균을 추정합니다.
여기서 는 첫 번째 모멘트 벡터이며 는 이전 스텝의 첫 번째 모멘트 추정값입니다.
은 첫 번째 모멘트 추정값의 감쇠율(decay rate)로 일반적으로 를 사용합니다.
이 항은 일관된 기울기의 방향으로 가속도를 붙여 수렴 속도를 높이는 데 기여합니다.
앞서 알아본 모멘텀과 유사합니다.
두 번째 모멘트는 기울기 제곱의 지수 이동 평균을 추정합니다.
여기서 는 두 번째 모멘트 벡터이며 는 이전 스텝의 두 번째 모멘트 추정값입니다.
는 두 번째 모멘트 추정값의 감쇠율로 일반적으로 를 사용합니다.
이 항은 과거 기울기의 크기에 따라 각 파라미터의 학습률을 조절하는 역할을 합니다.
앞서 알아본 RMSProp와 유사합니다.
따라서 Adam의 기울기 업데이트 수식은 다음과 같습니다.
와 는 편향 보정입니다.
모멘트 벡터 와 가 초기화될 때 이므로 학습 초기 단계에서
와 의 추정값이 0에 가깝게 편향될 수 있습니다.
따라서 아래와 같이 보정합니다.
여기서 와 는 감쇠율의 현재 스텝인 의 제곱을 취한 것으로써
가 커질수록, 즉 학습이 진행될수록 분모가 1에 가까워지므로 보정 효과는 점차 줄어들게 됩니다.
Adam은 모멘텀과 RMSProp의 장점을 결합하여 빠르고 부드럽게 수렴하면서도 학습률이 자동으로 조절될 수 있다.
이번 포스팅은 기본적인 적응형 최적화 알고리즘을 살펴봤습니다.
AdaGrad, RMSProp, Adam 외에도 다양한 알고리즘이 존재합니다.
각 기법마다 장단점이 있으므로 모델이나 데이터셋에 따라 가장 적합한 기법을 선택하는 것이 중요합니다.