끄적이는 개발노트

260702_강의 정리 (Optimizer) 본문

머신러닝

260702_강의 정리 (Optimizer)

크런키스틱 2026. 7. 2. 14:31
728x90

 

deep learning · optimizer
옵티마이저 정리 — SGD부터 Nadam까지
  • 경사하강법(GD)에서 출발해 실무에서 쓰이는 Adam·Nadam까지의 발전 계보
  • 각 옵티마이저가 이전 방법의 어떤 한계를 해결했는지 중심으로 정리
  • 방향 개선 계열(Momentum)과 스텝사이즈 개선 계열(Adagrad)이 Adam에서 합류
옵티마이저 발전 계보도 — GD에서 SGD, Momentum/NAG 계열과 Adagrad/RMSProp/AdaDelta 계열을 거쳐 Adam과 Nadam으로 합류하는 흐름
옵티마이저 발전 계보 전체 흐름 — 방향 개선 계열(위)과 스텝사이즈 개선 계열(아래)이 Adam에서 만난다
🏔️
1. 출발점 — GD와 SGD

"경사를 따라 내려가는 것" — 모든 옵티마이저의 공통 원리

  • GD(Gradient Descent): 전체 데이터를 다 봐야 방향 하나를 결정 → 정확하지만 느림
  • SGD(Stochastic GD): 일부만 보고 빠르게 판단 → 같은 시간에 더 많이 이동
💡 새 개념
경사하강법 Gradient Descent
  • 손실함수의 기울기를 따라 최솟값 방향으로 이동하는 최적화 기법
눈 감고 발밑 경사만 느끼며 산을 내려오는 것
이후 모든 옵티마이저는 SGD를 기반으로 "방향을 더 스마트하게" 또는 "보폭을 더 스마트하게" 개선하는 두 갈래로 발전한다.
🧭
2. 방향 개선 계열 — Momentum → NAG

어느 쪽으로 갈지, 관성을 활용해 더 정확히 판단하기

Momentum
관성 방향으로 가속
"스텝 계산해서 움직인 후, 아까 내려오던 관성 방향 또 가자"
  • 이전 업데이트량에 감쇠계수(β, 보통 0.9)를 곱해 누적
  • 진동(zigzag)을 줄이고 일관된 방향은 가속
v_t = βv_(t-1) + η∇f(θ) → θ = θ - v_t
v_t — 현재 스텝의 누적 이동량(속도)
β — 감쇠계수, 과거 관성을 얼마나 반영할지
η∇f(θ) — 현재 위치에서의 학습률 × 기울기
NAG
Nesterov Accelerated Gradient
"일단 관성 방향 먼저 움직이고, 움직인 자리에서 스텝을 계산하니 더 빠르더라"
  • Momentum과의 차이: 현재 위치가 아닌 "미리 가본 자리"에서 기울기 계산
  • 미리 내다보고 제동을 걸 수 있어 Momentum보다 정교한 수렴
핵심 차이 한 줄 — Momentum은 "가고 나서 본다", NAG는 "보고 나서 간다"
👣
3. 스텝사이즈 개선 계열 — Adagrad → RMSProp → AdaDelta

얼마나 크게 이동할지, 지나온 길을 참고해 조절하기

Adagrad
Adaptive Gradient
"안 가본 곳은 성큼 빠르게 걸어 훑고, 많이 가본 곳은 잘 아니까 갈수록 보폭을 줄여 세밀히 탐색"
  • 과거 기울기의 제곱을 계속 누적(sum)
  • 문제점: 학습이 길어질수록 분모가 무한정 커져 학습률이 0에 수렴 → 사실상 학습 정지
RMSProp
Root Mean Square Propagation
"보폭을 줄이는 건 좋은데, 이전 맥락 상황봐가며 하자"
  • 누적 대신 지수이동평균(EMA) 사용 → 과거 정보를 서서히 잊음
  • 학습률이 죽지 않아 Adagrad의 근본 문제 해결
AdaDelta
Adaptive Delta
"종종걸음이 너무 작아져서 정지하는 걸 막아보자"
  • RMSProp과의 차이: 학습률(η) 자체를 아예 제거
  • 업데이트량(Δθ)의 이동평균으로 학습률을 대체
RMSProp은 "학습률을 조정", AdaDelta는 "학습률을 없앰" — 방향은 같지만 정도가 다르다.
🔗
4. 두 계열의 합류 — Adam과 Nadam

방향(Momentum)과 보폭(RMSProp)을 모두 챙기면?

Adam
Adaptive Moment Estimation
"RMSProp + Momentum, 방향도 스텝사이즈도 적절하게"
  • 1차 모멘트(방향, Momentum 방식) + 2차 모멘트(보폭, RMSProp 방식) 결합
  • 학습 초반 편향 보정(bias correction) 적용 — 초기 스텝이 과소평가되는 문제 해결
m̂ = m / (1-β1^t) v̂ = v / (1-β2^t)
m — 1차 모멘트(기울기의 이동평균, 방향)
v — 2차 모멘트(기울기 제곱의 이동평균, 보폭)
β1^t, β2^t — 학습 초반 0으로 초기화된 값의 편향을 보정하는 항
Nadam
Nesterov-accelerated Adam
"Adam에 Momentum 대신 NAG를 붙이자"
  • Adam의 방향 결정 방식을 NAG로 교체
  • 관성 방향으로 미리 이동한 지점의 기울기를 반영 → 더 정확한 방향 추정
결론 요약 — SGD → (방향: Momentum→NAG) + (보폭: Adagrad→RMSProp→AdaDelta) → Adam → Nadam
 
GD
SGD
Momentum/NAG + Adagrad/RMSProp/AdaDelta
Adam
Nadam
728x90

'머신러닝' 카테고리의 다른 글

260706_강의 정리 (전이학습)  (0) 2026.07.06
260703_강의 정리 (CNN)  (1) 2026.07.03
260702_강의 정리 (Tensorflow, Keras)  (0) 2026.07.02
260701_강의 정리 (Tensorflow, FFNN)  (0) 2026.07.01
260616_강의 정리 (신경망)  (0) 2026.06.16