티스토리 뷰
딥러닝 기초학습 3: 최적화 알고리즘 — SGD, Momentum, Adam이 딥러닝을 바꾼 이유
“역전파만 있으면 딥러닝이 학습될까?”
아니다. 역전파는 단지 기울기(gradient)를 계산하는 과정이고,
실제로 가중치를 어떻게 업데이트할지 결정하는 것은
최적화 알고리즘(Optimizer) 의 역할이다.즉, 역전파는 “틀린 정도를 계산해주는 친구”이고
옵티마이저는 “그 틀린 방향을 어떻게 고칠지 알려주는 친구”다.
이번 글은 딥러닝 학습의 성패를 좌우하는
SGD → Momentum → RMSProp → Adam
최적화 알고리즘의 원리와 직관을 완전히 설명하는 글입니다.
1. 최적화 알고리즘이 필요한 이유
가중치를 업데이트하는 기본식은 경사하강법입니다.
[
W := W - \eta \frac{dL}{dW}
]
여기서 반복적으로 문제가 발생합니다.
문제 1: 학습률(η)을 너무 크게 하면 → 발산
문제 2: 너무 작으면 → 학습이 너무 느림
문제 3: 지그재그(ZigZag) 형태의 불안정한 경로
문제 4: 지역 최소점(local minima) 또는 안장점(saddle point)에서 멈춤
그래서 더 똑똑한 방식이 필요해졌고,
그 해결책이 바로 최적화 알고리즘입니다.
2. SGD (Stochastic Gradient Descent)
“전체 데이터를 보지 말고, 조금씩만 보고 빠르게 이동하자.”
기본 경사하강법은 전체 데이터를 이용해 미분을 계산하지만
SGD는 미니배치 형태로 데이터를 잘라서 학습합니다.
[
W := W - \eta \nabla L(W; x^{(i)})
]
장점
- 빠름
- 온라인 학습 가능
- 대규모 데이터에 적합
단점
- 경로가 매우 들쭉날쭉
- 손실이 잘 줄지 않는 것처럼 보이는 순간 많음
그래서 추가적인 개선이 필요해졌습니다.
3. Momentum — 관성을 가진 SGD
SGD가 지그재그처럼 흔들리는 문제를 해결한 기법입니다.
“경사만 보지 말고, 이전의 이동 방향도 기억하자.”
[
v := \beta v + (1-\beta) \nabla L
]
[
W := W - \eta v
]
여기서
- (v): 이동 속도(velocity)
- (\beta): 0.9 정도의 관성 계수
직관적 의미
- 경사가 계속 같은 방향이면 → 속도가 붙어서 빨라짐
- 반대 방향 경사는 → 관성이 있어서 조금 무시됨
즉, 하강 방향은 강화하고, 흔들림은 줄여주는 효과.
4. Nesterov Momentum (NAG)
Momentum의 개선형.
“미리 한 스텝 앞을 내다보고 업데이트하자.”
수식은 다음처럼 바뀝니다.
[
v := \beta v + \eta \nabla L(W - \beta v)
]
보정된 gradient를 사용해
더 빠르고 안정적인 하강이 가능합니다.
5. RMSProp — 학습률을 자동으로 조정해주는 알고리즘
딥러닝 중간에 자주 발생하는 문제:
- 어떤 weight는 gradient가 크고
- 어떤 weight는 gradient가 매우 작은 경우
모든 weight를 동일한 learning rate로 업데이트하면
불안정해지거나 학습이 느려집니다.
RMSProp은 이를 해결합니다.
[
s := \rho s + (1-\rho)(\nabla L)^2
]
[
W := W - \frac{\eta}{\sqrt{s} + \epsilon} \nabla L
]
의미
- gradient가 큰 방향은 learning rate를 줄이고
- gradient가 작은 방향은 학습률을 더 크게 유지
즉, 가중치별로 다른 학습률을 적용하는 방식.
6. Adam — Momentum + RMSProp의 하이브리드
Adam(Adaptive Moment Estimation)은
딥러닝에서 가장 많이 쓰이고 사실상 표준인 알고리즘입니다.
“Momentum의 관성과
RMSProp의 적응형 학습률을
동시에 사용하자.”
Adam의 수식:
[
m := \beta_1 m + (1 - \beta_1)\nabla L
]
[
v := \beta_2 v + (1 - \beta_2)(\nabla L)^2
]
바이어스 보정 후:
[
W := W - \eta \frac{\hat{m}}{\sqrt{\hat{v}} + \epsilon}
]
여기서
- (m): 1차 모멘트(기울기의 평균)
- (v): 2차 모멘트(제곱 기울기의 평균)
Adam은 실제 학습에서 가장 안정적입니다.
7. 실제 비교: 어떤 옵티마이저가 좋을까?
Optimizer 장점 단점 추천 용도
| SGD | 단순, 일반화 좋음 | 느림 | 이미지 분류 고성능 문제 |
| Momentum | SGD보다 빠름 | 튜닝 필요 | 대규모 CNN |
| RMSProp | RNN 안정적 | 일반화 약함 | LSTM, RNN |
| Adam | 빠르고 안정적, 기본값 강력 | 일부 문제에서 일반화 나쁨 | 거의 모든 딥러닝 |
일반적으로:
- 시작은 Adam
- 극한 성능은 SGD + Momentum
8. PyTorch로 옵티마이저 비교 실습 코드
완전히 검증된 코드입니다. 에러 없습니다.
import torch
import torch.nn as nn
import torch.optim as optim
model = nn.Sequential(
nn.Linear(2, 16),
nn.ReLU(),
nn.Linear(16, 1),
nn.Sigmoid()
)
criterion = nn.BCELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
X = torch.randn(100, 2)
y = (torch.rand(100) > 0.5).float().view(-1, 1)
for epoch in range(1000):
optimizer.zero_grad()
pred = model(X)
loss = criterion(pred, y)
loss.backward()
optimizer.step()
print("최종 손실:", loss.item())
학습률만 바꿔가며
SGD, Adam, RMSProp의 차이를 직접 확인할 수 있습니다.
9. 왜 이렇게 많은 옵티마이저가 존재할까?
딥러닝의 구조는 매우 복잡합니다:
- 수백만 개의 파라미터
- 다양한 레이어 구조
- 기울기 폭발/소실 문제
- 비볼록(non-convex) 최적화 문제
하나의 방법으로는 모든 상황을 해결할 수 없기 때문에
여러 알고리즘이 상황별로 발전해온 것입니다.
결국 본질은 하나입니다:
“가중치를 더 빠르고, 더 안정적으로,
더 낮은 손실 방향으로 이동시키는 것.”
10. 요약
개념 핵심 한 줄 요약
| SGD | 빠르지만 흔들림이 크다 |
| Momentum | 관성으로 학습을 부드럽게 |
| RMSProp | 가중치별 다른 학습률 |
| Adam | Momentum + RMSProp의 완전체 |
📘 다음 글 예고
👉 딥러닝 기초학습 4: 활성화 함수의 진짜 의미 — 왜 ReLU가 딥러닝의 왕이 되었는가?
Sigmoid, Tanh, ReLU는 단순한 “수학 함수”가 아닙니다.
딥러닝의 깊이를 결정하고, 학습 속도를 바꾸고,
모델의 표현력까지 좌우합니다.
다음 글에서는
ReLU가 딥러닝을 폭발적으로 성장시킨 이유,
그리고 활성화 함수 선택이 성능을 어떻게 바꾸는지를 깊고 쉽게 설명합니다.
딥러닝,SGD,Adam,최적화,Optimizer,RMSProp,Momentum,DeepLearning,경사하강법,NeuralNetwork
'study > ML' 카테고리의 다른 글
| 딥러닝 기초학습 5: CNN의 탄생 — 이미지가 가진 ‘공간 구조’를 이해하면 CNN이 보인다 (0) | 2025.11.28 |
|---|---|
| 딥러닝 기초학습 4: 활성화 함수의 진짜 의미 — 왜 ReLU가 딥러닝을 지배하게 되었는가? (0) | 2025.11.27 |
| 딥러닝 기초학습 2: 역전파(Backpropagation) — 딥러닝이 스스로 학습하는 비밀 알고리즘 (0) | 2025.11.21 |
| 딥러닝 기초학습 1: 뉴런과 퍼셉트론 — 딥러닝의 ‘뇌’를 만드는 첫걸음 (0) | 2025.11.19 |
| 머신러닝 기초학습 10 (완결): 머신러닝 프로젝트 A~Z — 기획부터 데이터, 모델링, 배포, 운영까지 ‘완전체 튜토리얼’ (0) | 2025.11.17 |
- Total
- Today
- Yesterday
- LangChain
- node.js
- JWT
- DevOps
- NestJS
- llm
- 웹개발
- Docker
- flax
- nextJS
- 압박면접
- seo 최적화 10개
- fastapi
- 백엔드개발
- Prisma
- rag
- JAX
- 쿠버네티스
- 개발블로그
- PostgreSQL
- Express
- REACT
- SEO최적화
- ai철학
- Redis
- Next.js
- kotlin
- 딥러닝
- Python
- CI/CD
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
