Adam은 Adaptive Moment Estimation의 약자로, 신경망 및 기타 Machine learning 모델을 훈련하는 데 널리 사용되는 반복 최적화 알고리즘입니다. 2014년 Diederik P. Kingma와 Jimmy Ba가 발표한 논문 "Adam: A Method for Stochastic Optimization"에서 처음 소개되었습니다. Adam은 확률적 경사 하강법의 두 가지 확장인 적응형 학습률(AdaGrad)과 모멘텀(RMSProp)의 장점을 결합합니다. 그래디언트의 1차 및 2차 모멘트 추정치를 기반으로 각 파라미터에 대해 개별적인 적응형 학습률을 계산하므로, 대규모 데이터셋과 고차원 파라미터 공간을 다루는 문제에 적합합니다.
이 알고리즘은 확률적 경사 하강법(SGD)의 변형으로, SGD 자체는 실제 그래디언트를 무작위로 선택된 데이터 하위 집합의 추정치로 대체하여 목적 함수를 최소화하는 반복 방법입니다. Adam은 Deep learning 프레임워크에서 기본 옵티마이저가 되었으며, 대규모 언어 모델을 포함한 Transformer (architecture) 모델 훈련에 광범위하게 사용됩니다.
알고리즘
Adam은 파라미터당 두 개의 이동 평균, 즉 그래디언트의 1차 모멘트(평균)와 2차 모멘트(비중심 분산)를 유지합니다. 각 반복 \(t\)에서 손실의 파라미터에 대한 그래디언트 \(g_t\)가 주어지면 업데이트는 다음과 같이 계산됩니다:
- 편향된 1차 모멘트 추정치 업데이트: \(m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t\)
- 편향된 2차 모멘트 추정치 업데이트: \(v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2\)
- 편향 보정 추정치 계산: \(\hat{m}_t = m_t / (1 - \beta_1^t)\) 및 \(\hat{v}_t = v_t / (1 - \beta_2^t)\)
- 파라미터 업데이트: \(\theta_t = \theta_{t-1} - \alpha \hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon)\)
여기서 \(\alpha\)는 학습률(스텝 크기), \(\beta_1\)과 \(\beta_2\)는 모멘트 추정치의 지수 감쇠율(일반적으로 0.9와 0.999), \(\epsilon\)은 0으로 나누는 것을 방지하기 위한 작은 상수(예: \(10^{-8}\))입니다. 편향 보정 단계는 모멘트 추정치가 0으로 초기화된 초기 반복에서 0으로의 편향을 상쇄하므로 중요합니다.
편향 보정
\(m_t\)와 \(v_t\)가 모두 0 벡터로 초기화되기 때문에 처음 몇 번의 반복은 0으로 편향된 추정치를 생성합니다. Adam은 모멘트 추정치를 각각 \((1 - \beta_1^t)\)와 \((1 - \beta_2^t)\)로 나누어 이를 해결합니다. \(t\)가 증가함에 따라 분모가 1에 가까워지므로 이 보정의 중요성은 줄어듭니다. 편향 보정은 Adam을 이전의 적응형 방법과 구별하는 핵심 기능이며 안정적인 수렴 동작에 기여합니다.
하이퍼파라미터
Adam은 학습률 외에도 여러 하이퍼파라미터를 도입합니다:
- 학습률 (\(\alpha\)): 스텝 크기를 제어합니다. 일반적인 기본값은 0.001입니다.
- \(\beta_1\): 1차 모멘트 추정치의 지수 감쇠율. 기본값 0.9.
- \(\beta_2\): 2차 모멘트 추정치의 지수 감쇠율. 기본값 0.999.
- \(\epsilon\): 수치 안정성을 위한 작은 상수. 기본값 \(10^{-8}\).
실제로 기본값은 많은 작업에서 잘 작동하지만 학습률 조정이 필요한 경우가 많습니다. 일부 구현은 Transformer (architecture) 모델 훈련에서 일반적인 워밍업 및 감쇠와 같은 학습률 스케줄도 지원합니다.
변형 및 확장
특정 한계를 해결하기 위해 여러 Adam 변형이 제안되었습니다:
- AdamW: 그래디언트 업데이트에서 가중치 감쇠를 분리하여 파라미터에 직접 적용합니다. 이는 일반화를 개선하며 현재 많은 Deep learning 라이브러리에서 표준입니다.
- Nadam: Adam과 Nesterov 모멘텀을 결합하여 수렴을 가속화할 수 있습니다.
- AMSGrad: 학습률이 증가하지 않도록 2차 모멘트 추정치를 수정하여 일부 설정에서 수렴 문제를 해결합니다.
- Adamax: 2차 모멘트에 무한대 노름을 사용하여 큰 그래디언트에 더 강건합니다.
- RAdam: 적응형 학습률의 분산을 수정하여 워밍업 필요성을 줄입니다.
이러한 변형은 특정 상황에서 사용되지만 원래 Adam은 여전히 널리 사용됩니다.
응용 분야
Adam은 Artificial intelligence 및 Machine learning의 다양한 분야에서 사용됩니다. TensorFlow 및 PyTorch를 포함한 많은 프레임워크에서 기본 옵티마이저입니다. 이미지 분류, 자연어 처리, 음성 인식, 강화 학습을 위한 신경망 훈련에 적용되었습니다. 특히 Adam은 OpenAI, Anthropic, Google DeepMind와 같은 조직에서 개발한 대규모 언어 모델과 같은 Transformer (architecture) 기반 모델 훈련에 선택되는 옵티마이저입니다.
Adam의 인기는 하이퍼파라미터 설정에 대한 강건성과 희소 그래디언트 및 잡음이 많은 데이터를 처리하는 능력에서 비롯됩니다. 또한 파라미터당 두 개의 추가 변수만 필요하므로 메모리 효율적입니다.
이론적 특성
Adam은 특히 비볼록 목적 함수에서 항상 전역 최솟값으로 수렴하지는 않지만 특정 조건에서 임계점으로 수렴하는 것으로 나타났습니다. Adam의 수렴 분석은 적응형 학습률로 인해 일반 SGD보다 더 복잡합니다. 일부 연구는 Adam이 특정 볼록 설정에서 수렴하지 못할 수 있음을 보여주었으며, 이는 AMSGrad 및 기타 수정의 개발로 이어졌습니다.
경험적으로 Adam은 훈련 초기 단계에서 SGD보다 더 빠른 수렴을 달성하는 경우가 많지만 일부 작업에서는 모멘텀이 있는 SGD보다 일반화 성능이 약간 떨어질 수 있습니다. 이로 인해 훈련 중 Adam에서 SGD로 전환하는 것과 같은 하이브리드 접근 방식이 생겨났습니다.
확률적 경사 하강법과의 비교
확률적 경사 하강법(SGD)은 고정 또는 감쇠 학습률로 단일 샘플 또는 미니 배치를 사용하여 파라미터를 업데이트합니다. Adam은 그래디언트의 이력을 기반으로 파라미터별 학습률을 적응시킵니다. 이로 인해 Adam은 학습률 선택에 덜 민감하며 조정이 덜 필요한 경우가 많습니다. 그러나 모멘텀이 있는 SGD는 특히 신중한 학습률 스케줄을 사용할 때 더 나은 최종 성능에 도달할 수 있습니다.
Adam은 또한 그래디언트를 2차 모멘트의 제곱근으로 정규화한다는 점에서 SGD와 다르며, 이는 크거나 작은 그래디언트가 있을 때 더 안정적인 업데이트를 이끌 수 있습니다.
실용적 고려 사항
Adam을 사용할 때 학습률을 0.001로 설정하고 베타를 기본값으로 설정하는 것이 일반적입니다. 대규모 언어 모델과 같은 대규모 훈련에서는 워밍업이 포함된 학습률 스케줄이 자주 사용됩니다. AdamW에서와 같은 가중치 감쇠는 정규화를 위해 권장됩니다.
메모리 사용량도 고려 사항입니다. Adam은 파라미터당 두 개의 추가 값을 저장하므로 수십억 개의 파라미터를 가진 모델에서는 상당할 수 있습니다. 이로 인해 2차 모멘트를 저차원 요인으로 근사하는 Adafactor와 같은 메모리 효율적인 옵티마이저에 대한 연구가 이루어졌습니다.
같이 보기
- stochastic-gradient-descent
- Deep learning
- Neural network
- Transformer (architecture)
참고 문헌
- Kingma, D. P., & Ba, J. (2014). Adam: A Method for Stochastic Optimization. arXiv:1412.6980.
- Loshchilov, I., & Hutter, F. (2017). Decoupled Weight Decay Regularization. arXiv:1711.05101.
- Reddi, S. J., Kale, S., & Kumar, S. (2018). On the Convergence of Adam and Beyond. ICLR.