Adam 최적화기

오류 제보
최적설계 수치해석 소프트웨어 마지막 수정: 2026-10-15 04:48:20

○ 공개 검수 대기 AI 보조 작성 표시 기준 보기

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. 알고리즘

기울기 gtg_t 에 대해, 모든 연산은 좌표별이다.

mt=β1mt−1+(1−β1)gt,vt=β2vt−1+(1−β2)gt2m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t, \qquad v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2 m^t=mt1−β1t,v^t=vt1−β2t,θt=θt−1−α m^tv^t+ε\hat m_t = \frac{m_t}{1-\beta_1^t}, \qquad \hat v_t = \frac{v_t}{1-\beta_2^t}, \qquad \theta_t = \theta_{t-1} - \alpha\,\frac{\hat m_t}{\sqrt{\hat v_t} + \varepsilon}

m0=v0=0m_0 = v_0 = 0 에서 출발한다. 구조만 보면 모멘텀을 단 RMSProp에 편향보정을 붙인 것이다. 2차 모멘트로 나누는 것은 좌표별 대각 스케일링이라, 헤세 행렬의 대각을 흉내 낸다고 보기도 한다. 다만 v\sqrt{v} 는 곡률이 아니라 기울기 크기의 추정이므로, 자연경사법·K-FAC 같은 2차 방법과는 정신이 다르다.

3. 편향보정 — 없으면 첫 스텝이 3배 커진다

mm, vv 를 0에서 시작하면 초반 추정이 0쪽으로 치우친다. 기울기가 정상(stationary)이라면 E[mt]=(1−β1t) E[g]\mathbb E[m_t] = (1-\beta_1^t)\,\mathbb E[g], E[vt]=(1−β2t) E[g2]\mathbb E[v_t] = (1-\beta_2^t)\,\mathbb E[g^2] 이므로 그 인자로 나눠 주는 것이 편향보정이다.

흔한 오해는 「보정이 없으면 초반 스텝이 작아진다」는 것이다. 실제로는 반대다. 기울기 g=1g = 1 을 넣고 첫 스텝을 재 보면

  • 보정 있음: α⋅11=1.0×10−3\alpha \cdot \frac{1}{1} = 1.0\times10^{-3}
  • 보정 없음: α⋅(1−β1)1−β2=10−3⋅0.10.0316=3.16×10−3\alpha \cdot \frac{(1-\beta_1)}{\sqrt{1-\beta_2}} = 10^{-3}\cdot\frac{0.1}{0.0316} = 3.16\times10^{-3}

이다. vv 쪽이 β2=0.999\beta_2 = 0.999 라 훨씬 심하게 0에 치우치는데, 그걸 분모에서 제곱근으로 나누니 분모가 더 작아져 스텝이 커진다. 보정 없는 Adam은 학습 초반에 학습률의 3배로 튀어 나가고, 이것이 워밍업 없이 큰 학습률을 쓰면 초반에 발산하는 원인 중 하나다1.

4. 스텝 크기가 기울기 크기와 무관하다

Adam의 진짜 특징은 이것이다. 기울기가 일정하면 m^/v^→g/∣g∣=±1\hat m/\sqrt{\hat v} \to g/|g| = \pm1 이라 스텝이 α\alpha 근처로 고정된다. 실제로 첫 스텝을 재면

gg첫 스텝
10310^{3}1.000×10−31.000\times10^{-3}
111.000×10−31.000\times10^{-3}
10−610^{-6}0.990×10−30.990\times10^{-3}
10−910^{-9}0.091×10−30.091\times10^{-3}

기울기가 12자리 바뀌어도 스텝은 α\alpha 그대로다 — 마지막 줄 전까지는. 킹마·바 논문도 유효 스텝이 대략 α\alpha 로 묶인다는 점을 「신뢰 영역」처럼 해석했다. 덕분에 학습률을 「파라미터가 한 스텝에 움직일 거리」로 직관적으로 정할 수 있고, 층마다 기울기 크기가 수십 배 다른 신경망에서도 한 학습률로 버틴다.

극단으로 보내면 정체가 드러난다. β1=β2=0\beta_1 = \beta_2 = 0, ε→0\varepsilon \to 0 이면 갱신은 −α sign(gt)-\alpha\,\mathrm{sign}(g_t), 즉 부호 경사하강(sign descent)이다. 발레스·헤니히(2018)는 Adam을 「부호 방향 × 기울기 분산에 따른 감쇠」로 분해해서 해석했다. 잡음이 큰 좌표(평균 대비 분산이 큰 좌표)는 m^/v^\hat m/\sqrt{\hat v} 가 1보다 작아져 덜 움직인다.

5. ε 은 장식이 아니다

마지막 줄(g=10−9g = 10^{-9})에서 스텝이 11분의 1로 줄었다. ∣g∣|g| 가 ε=10−8\varepsilon = 10^{-8} 보다 작아지면 분모를 ε\varepsilon 이 지배해서, Adam은 학습률 α/ε\alpha/\varepsilon 인 평범한 모멘텀 SGD로 변한다. 즉 ε\varepsilon 은 「이 크기 이하의 기울기는 정규화하지 마라」는 문턱이다. ε\varepsilon 을 크게 잡으면(예: 10−310^{-3}) Adam이 SGD 쪽으로 가고, 일부 강화학습·생성 모델 레시피가 일부러 그렇게 한다.

저정밀도에서는 더 직접적인 문제가 생긴다. 반정밀도(fp16)에서 가장 작은 양의 비정규수는 약 6×10−86\times10^{-8} 이라 10−810^{-8} 은 fp16으로 표현하면 0이 된다. v\sqrt{v} 도 작은 기울기에서 언더플로하면 분모가 0이 되어 스텝이 폭발한다. 그래서 혼합 정밀도 학습은 옵티마이저 상태를 fp32로 따로 두는 게 표준이다2.

6. 수렴하지 않는 반례

레디·케일·쿠마르(2018)는 Adam이 볼록 문제에서도 최적해로 가지 않는 반례를 보였다. 구간 [−1,1][-1, 1] 에서 온라인 손실이

ft(x)={Cxt mod 3=1−x그 밖,C>2f_t(x) = \begin{cases} Cx & t \bmod 3 = 1 \\ -x & \text{그 밖} \end{cases}, \qquad C > 2

인 문제다. 세 번에 한 번 큰 기울기 CC, 두 번은 작은 기울기 −1-1 이 들어온다. 평균 기울기는 (C−2)/3>0(C-2)/3 > 0 이므로 최적해는 x=−1x = -1 이다. 그런데 β1=0\beta_1 = 0, β2=1/(1+C2)\beta_2 = 1/(1+C^2) 인 Adam은 큰 기울기가 들어온 직후 vv 가 커졌다가 금방 잊어버리고, 작은 기울기 두 번은 작아진 분모 덕에 크게 증폭된다. 결과적으로 작은 기울기 방향(xx 증가)이 이긴다.

검산. C=3C = 3, 학습률 0.1/t0.1/\sqrt t 로 30만 스텝 돌리면 Adam은 x=+1x = +1(최악의 끝)에 붙고, 분모로 지금까지의 최대 vv 를 쓰는 AMSGrad 는 x=−0.9999x = -0.9999 로 최적해에 간다. AMSGrad의 수정은 단 하나 — vv 가 줄어들지 못하게 해서 「드물게 오는 큰 기울기」를 잊지 않게 한 것이다.

실무에서 이 반례가 그대로 터지는 일은 드물다. β2=0.999\beta_2 = 0.999 처럼 1에 가까운 값을 쓰면 vv 의 기억이 길어 위 메커니즘이 약해지고, 후속 연구는 β2\beta_2 가 문제에 맞게 충분히 크면 수정 없는 Adam도 수렴할 수 있음을 보였다. 다만 언어모델 사전학습에서 흔한 β2=0.95\beta_2 = 0.95 처럼 기억을 짧게 줄인 설정은 이 반례가 경고하는 방향으로 한 걸음 간 것이라, 손실 급등(loss spike)과 엮여 논의된다.

7. 메모리와 실무

Adam은 파라미터마다 상태 두 개(mm, vv)를 들고 다닌다. 혼합 정밀도 학습의 표준 구성(fp16 가중치·기울기 + fp32 마스터 가중치 + fp32 mm, vv)은 파라미터당 16바이트다(ZeRO 논문의 계산). 70억 파라미터 모델이면 활성값을 빼고도 112 GB다. 이 상태 메모리를 샤딩하거나(ZeRO), 8비트로 양자화하거나, 2차 모멘트를 행·열 인수로 근사해 줄이는(Adafactor) 변형들이 다 이 숫자를 깎으려는 시도다.

과학계산 쪽 쓰임은 이렇다.

  • 물리 정보 신경망 — Adam으로 대략 내려간 뒤 L-BFGS로 마무리하는 2단계가 국룰이다. Adam은 거친 지형에서 강하고, 준-뉴턴법은 바닥 근처에서 빠르다.
  • 대리 모델·신경망 연산자 학습 — 기본값 그대로 쓰는 경우가 대부분이다.
  • 결정론적 매끈한 문제 — 기울기에 잡음이 없으면 Adam의 장점(잡음 정규화)이 사라진다. 이런 문제는 라인서치를 단 준-뉴턴이나 켤레기울기법이 대개 낫다3.

정규화를 쓸 거라면 Adam + L2 가 아니라 AdamW(분리된 가중치 감쇠)를 쓴다. 이유는 가중치 감쇠 문서에 있다.

8. 관련 문서

9. Footnotes

  1. 학습률 워밍업이 「왜 되는지」에 대한 설명은 여러 개인데, 「보정이 있어도 초반 v^\hat v 추정이 표본 몇 개짜리라 불안정하다」는 것이 그중 하나다. 보정은 평균의 편향만 고치지 분산은 못 고친다. ↩

  2. 「fp16으로 학습했더니 갑자기 NaN」의 단골 범인. 모델이 아니라 옵티마이저 상태가 먼저 죽는다. ↩

  3. Adam을 결정론적 최적설계 문제에 기본값으로 박아 두는 건 「일단 돌려」 정신의 좋은 예이자 나쁜 예다. 돌긴 돈다. 빠르지 않을 뿐. ↩

검증 자료

이 문서의 주요 출처

  1. Kingma & Ba (2015), Adam: A Method for Stochastic Optimization, ICLR 2015 (arXiv:1412.6980)
  2. Reddi, Kale & Kumar (2018), On the Convergence of Adam and Beyond, ICLR 2018
  3. Loshchilov & Hutter (2019), Decoupled Weight Decay Regularization, ICLR 2019 (arXiv:1711.05101)
  4. Balles & Hennig (2018), Dissecting Adam: The Sign, Magnitude and Variance of Stochastic Gradients, ICML 2018 (arXiv:1705.07774)
  5. Rajbhandari et al. (2020), ZeRO: Memory Optimizations Toward Training Trillion Parameter Models, SC20 (arXiv:1910.02054)
  6. PyTorch 문서 — torch.optim.Adam
이 문서가 문제를 푸는 데 도움이 됐나요? 한 번의 클릭이 다음 검수 순서를 정합니다.

의견을 반영할게요. 감사합니다.

다음으로 읽기 확률적 경사하강법 약 5분 더 탐색 →