Optimizer
옵티마이저
손실 함수 최소화하는 알고리즘. SGD, Adam, AdamW.
옵티마이저
손실 함수 최소화하는 알고리즘. SGD, Adam, AdamW.
옵티마이저(Optimizer)는 딥러닝 모델의 손실 함수(Loss Function)를 최소화하기 위해 가중치를 업데이트하는 알고리즘입니다. 모델이 학습 데이터에서 예측과 실제 값 사이의 오차를 줄이도록 파라미터를 조정하는 핵심적인 역할을 담당합니다.
옵티마이저의 역사는 1950년대 경사 하강법(Gradient Descent)에서 시작됩니다. 이후 1980년대 모멘텀(Momentum), 2011년 AdaGrad, 2014년 Adam이 등장하며 발전해왔습니다. 특히 Adam은 모멘텀과 적응적 학습률을 결합하여 현재 가장 널리 사용됩니다.
핵심 원리는 그래디언트(기울기)를 계산하여 손실이 감소하는 방향으로 파라미터를 업데이트하는 것입니다. SGD는 단순히 그래디언트 방향으로 이동하고, Adam은 과거 그래디언트의 1차 및 2차 모멘트를 활용하여 학습률을 파라미터별로 적응적으로 조절합니다.
실무에서 옵티마이저 선택은 모델 성능에 큰 영향을 미칩니다. 일반적으로 Adam이나 AdamW가 기본 선택이지만, 대규모 언어 모델(LLM) 학습에서는 AdamW + 학습률 스케줄러 조합이 표준입니다.
# PyTorch 옵티마이저 예제
import torch
import torch.nn as nn
import torch.optim as optim
# 간단한 모델 정의
model = nn.Sequential(
nn.Linear(10, 64),
nn.ReLU(),
nn.Linear(64, 1)
)
# 다양한 옵티마이저 비교
# 1. SGD (Stochastic Gradient Descent)
optimizer_sgd = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
# 2. Adam (가장 널리 사용됨)
optimizer_adam = optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999))
# 3. AdamW (Weight Decay 분리 - LLM 학습 표준)
optimizer_adamw = optim.AdamW(model.parameters(), lr=1e-4, weight_decay=0.01)
# 학습 루프 예제
criterion = nn.MSELoss()
optimizer = optimizer_adamw # AdamW 선택
for epoch in range(100):
# 순전파
outputs = model(torch.randn(32, 10))
loss = criterion(outputs, torch.randn(32, 1))
# 역전파 및 가중치 업데이트
optimizer.zero_grad() # 그래디언트 초기화
loss.backward() # 그래디언트 계산
optimizer.step() # 가중치 업데이트
if epoch % 20 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.4f}")
"학습이 불안정한 이유가 옵티마이저 설정 문제일 수 있습니다. SGD에서 AdamW로 변경하고 learning rate를 1e-4로 낮춰보겠습니다."
"Adam은 모멘텀과 RMSprop의 장점을 결합한 옵티마이저입니다. 1차 모멘트로 그래디언트의 이동 평균을, 2차 모멘트로 그래디언트 제곱의 이동 평균을 추적하여 파라미터별로 적응적 학습률을 적용합니다."
"LLM 파인튜닝에서는 AdamW가 표준입니다. 일반 Adam과 달리 weight decay를 L2 정규화와 분리하여 적용하므로 과적합 방지에 더 효과적입니다."
학습률이 너무 높으면 손실이 발산(NaN)하거나 최적점을 지나칩니다. Adam은 보통 1e-3~1e-4, 파인튜닝은 1e-5~1e-4가 적절합니다.
그래디언트 초기화를 빠뜨리면 이전 배치의 그래디언트가 누적되어 학습이 불안정해집니다. 반드시 backward() 전에 호출하세요.
AdamW + Cosine Annealing 스케줄러 조합을 사용하고, 학습 초기에는 warmup을 적용하세요. 모델 크기에 따라 learning rate를 조정합니다.