1. 개요
| Adam 최적화기 Adaptive Moment Estimation | |
|---|---|
| 제안 | 킹마 & 바 (arXiv 2014, ICLR 2015) |
| 상태 | 1차 모멘트 m, 2차 모멘트 v (파라미터당 2개) |
| 기본값 | α = 10−3, β1 = 0.9, β2 = 0.999, ε = 10−8 |
| 핵심 성질 | 기울기 크기에 거의 무관한 스텝 크기 |
| 알려진 결함 | 볼록 반례에서 비수렴 (Reddi 등 2018) |
| 후속 | AMSGrad, AdamW, 각종 저메모리 변형 |
Adam(Adaptive Moment Estimation)은 기울기의 지수이동평균(1차 모멘트)과 기울기 제곱의 지수이동평균(2차 모멘트)을 좌표마다 따로 유지해, 1차 모멘트를 2차 모멘트의 제곱근으로 나눈 값만큼 내려가는 확률적 최적화 알고리즘이다. 심층 학습에서 사실상 기본값이 된 옵티마이저다.
확률적 경사하강법 문서가 모멘텀 → AdaGrad → RMSProp → Adam 으로 이어지는 계보를 한 단락에 요약했고, 가중치 감쇠 문서가 Adam에서 L2 정규화가 깨지는 이유와 AdamW를 자세히 다뤘다. 이 문서는 그 둘이 건너뛴 것 — 편향보정이 실제로 무엇을 바꾸는지, 스텝 크기가 왜 기울기 크기와 무관한지, ε 이 어디서 일을 하는지, 그리고 Adam이 수렴하지 않는 반례 — 를 숫자로 확인한다.
2. 알고리즘
기울기 에 대해, 모든 연산은 좌표별이다.
에서 출발한다. 구조만 보면 모멘텀을 단 RMSProp에 편향보정을 붙인 것이다. 2차 모멘트로 나누는 것은 좌표별 대각 스케일링이라, 헤세 행렬의 대각을 흉내 낸다고 보기도 한다. 다만 는 곡률이 아니라 기울기 크기의 추정이므로, 자연경사법·K-FAC 같은 2차 방법과는 정신이 다르다.
3. 편향보정 — 없으면 첫 스텝이 3배 커진다
, 를 0에서 시작하면 초반 추정이 0쪽으로 치우친다. 기울기가 정상(stationary)이라면 , 이므로 그 인자로 나눠 주는 것이 편향보정이다.
흔한 오해는 「보정이 없으면 초반 스텝이 작아진다」는 것이다. 실제로는 반대다. 기울기 을 넣고 첫 스텝을 재 보면
- 보정 있음:
- 보정 없음:
이다. 쪽이 라 훨씬 심하게 0에 치우치는데, 그걸 분모에서 제곱근으로 나누니 분모가 더 작아져 스텝이 커진다. 보정 없는 Adam은 학습 초반에 학습률의 3배로 튀어 나가고, 이것이 워밍업 없이 큰 학습률을 쓰면 초반에 발산하는 원인 중 하나다1.
4. 스텝 크기가 기울기 크기와 무관하다
Adam의 진짜 특징은 이것이다. 기울기가 일정하면 이라 스텝이 근처로 고정된다. 실제로 첫 스텝을 재면
| 첫 스텝 | |
|---|---|
기울기가 12자리 바뀌어도 스텝은 그대로다 — 마지막 줄 전까지는. 킹마·바 논문도 유효 스텝이 대략 로 묶인다는 점을 「신뢰 영역」처럼 해석했다. 덕분에 학습률을 「파라미터가 한 스텝에 움직일 거리」로 직관적으로 정할 수 있고, 층마다 기울기 크기가 수십 배 다른 신경망에서도 한 학습률로 버틴다.
극단으로 보내면 정체가 드러난다. , 이면 갱신은 , 즉 부호 경사하강(sign descent)이다. 발레스·헤니히(2018)는 Adam을 「부호 방향 × 기울기 분산에 따른 감쇠」로 분해해서 해석했다. 잡음이 큰 좌표(평균 대비 분산이 큰 좌표)는 가 1보다 작아져 덜 움직인다.
5. ε 은 장식이 아니다
마지막 줄()에서 스텝이 11분의 1로 줄었다. 가 보다 작아지면 분모를 이 지배해서, Adam은 학습률 인 평범한 모멘텀 SGD로 변한다. 즉 은 「이 크기 이하의 기울기는 정규화하지 마라」는 문턱이다. 을 크게 잡으면(예: ) Adam이 SGD 쪽으로 가고, 일부 강화학습·생성 모델 레시피가 일부러 그렇게 한다.
저정밀도에서는 더 직접적인 문제가 생긴다. 반정밀도(fp16)에서 가장 작은 양의 비정규수는 약 이라 은 fp16으로 표현하면 0이 된다. 도 작은 기울기에서 언더플로하면 분모가 0이 되어 스텝이 폭발한다. 그래서 혼합 정밀도 학습은 옵티마이저 상태를 fp32로 따로 두는 게 표준이다2.
6. 수렴하지 않는 반례
레디·케일·쿠마르(2018)는 Adam이 볼록 문제에서도 최적해로 가지 않는 반례를 보였다. 구간 에서 온라인 손실이
인 문제다. 세 번에 한 번 큰 기울기 , 두 번은 작은 기울기 이 들어온다. 평균 기울기는 이므로 최적해는 이다. 그런데 , 인 Adam은 큰 기울기가 들어온 직후 가 커졌다가 금방 잊어버리고, 작은 기울기 두 번은 작아진 분모 덕에 크게 증폭된다. 결과적으로 작은 기울기 방향( 증가)이 이긴다.
검산. , 학습률 로 30만 스텝 돌리면 Adam은 (최악의 끝)에 붙고, 분모로 지금까지의 최대 를 쓰는 AMSGrad 는 로 최적해에 간다. AMSGrad의 수정은 단 하나 — 가 줄어들지 못하게 해서 「드물게 오는 큰 기울기」를 잊지 않게 한 것이다.
실무에서 이 반례가 그대로 터지는 일은 드물다. 처럼 1에 가까운 값을 쓰면 의 기억이 길어 위 메커니즘이 약해지고, 후속 연구는 가 문제에 맞게 충분히 크면 수정 없는 Adam도 수렴할 수 있음을 보였다. 다만 언어모델 사전학습에서 흔한 처럼 기억을 짧게 줄인 설정은 이 반례가 경고하는 방향으로 한 걸음 간 것이라, 손실 급등(loss spike)과 엮여 논의된다.
7. 메모리와 실무
Adam은 파라미터마다 상태 두 개(, )를 들고 다닌다. 혼합 정밀도 학습의 표준 구성(fp16 가중치·기울기 + fp32 마스터 가중치 + fp32 , )은 파라미터당 16바이트다(ZeRO 논문의 계산). 70억 파라미터 모델이면 활성값을 빼고도 112 GB다. 이 상태 메모리를 샤딩하거나(ZeRO), 8비트로 양자화하거나, 2차 모멘트를 행·열 인수로 근사해 줄이는(Adafactor) 변형들이 다 이 숫자를 깎으려는 시도다.
과학계산 쪽 쓰임은 이렇다.
- 물리 정보 신경망 — Adam으로 대략 내려간 뒤 L-BFGS로 마무리하는 2단계가 국룰이다. Adam은 거친 지형에서 강하고, 준-뉴턴법은 바닥 근처에서 빠르다.
- 대리 모델·신경망 연산자 학습 — 기본값 그대로 쓰는 경우가 대부분이다.
- 결정론적 매끈한 문제 — 기울기에 잡음이 없으면 Adam의 장점(잡음 정규화)이 사라진다. 이런 문제는 라인서치를 단 준-뉴턴이나 켤레기울기법이 대개 낫다3.
정규화를 쓸 거라면 Adam + L2 가 아니라 AdamW(분리된 가중치 감쇠)를 쓴다. 이유는 가중치 감쇠 문서에 있다.
8. 관련 문서
- 확률적 경사하강법 · 경사하강법 · 가중치 감쇠 · 학습률 스케줄
- 자연경사법 · K-FAC · 준-뉴턴법 · 라인서치
- 심층 학습 · 역전파 · 혼합 정밀도 · 물리 정보 신경망
- 온라인 볼록 최적화 · 부호 경사하강
9. Footnotes
이 문서의 주요 출처
- Kingma & Ba (2015), Adam: A Method for Stochastic Optimization, ICLR 2015 (arXiv:1412.6980)
- Reddi, Kale & Kumar (2018), On the Convergence of Adam and Beyond, ICLR 2018
- Loshchilov & Hutter (2019), Decoupled Weight Decay Regularization, ICLR 2019 (arXiv:1711.05101)
- Balles & Hennig (2018), Dissecting Adam: The Sign, Magnitude and Variance of Stochastic Gradients, ICML 2018 (arXiv:1705.07774)
- Rajbhandari et al. (2020), ZeRO: Memory Optimizations Toward Training Trillion Parameter Models, SC20 (arXiv:1910.02054)
- PyTorch 문서 — torch.optim.Adam
의견을 반영할게요. 감사합니다.