# 학습률에 따른 학습 양상 비교learning_rates = [0.1, 0.01, 0.001, 0.0001]for lr in learning_rates: model = nn.Linear(10, 1) optimizer = torch.optim.Adam(model.parameters(), lr=lr) # 간단한 학습 루프 losses = [] for step in range(100): x = torch.randn(32, 10) target = torch.randn(32, 1) loss = nn.MSELoss()(model(x), target) optimizer.zero_grad() loss.backward() optimizer.step() losses.append(loss.item()) print(f"lr={lr}: 최종 손실 = {losses[-1]:.4f}")
Adam 계열의 기본 학습률은 0.001(1e-3)이 일반적입니다. Fine-Tuning에서는 2e-5 ~ 5e-5와 같이 더 작은 값을 사용합니다. 학습률 스케줄러를 함께 사용하면 학습 초반과 후반의 학습률을 자동으로 조정할 수 있습니다.
# 사전학습된 백본과 새로운 분류 헤드에 다른 학습률 적용optimizer = torch.optim.AdamW([ {'params': model.backbone.parameters(), 'lr': 1e-5}, # 백본: 낮은 학습률 {'params': model.classifier.parameters(), 'lr': 1e-3}, # 분류 헤드: 높은 학습률], weight_decay=0.01)
Adam이 만능인가요? SGD가 더 좋은 경우는?
Adam은 빠르게 수렴하지만, SGD+Momentum이 최종 성능에서 더 좋은 경우가 있습니다. 특히 이미지 분류(ResNet 학습 등)에서 SGD+Momentum이 일반화 성능이 더 뛰어난 것으로 알려져 있습니다. 실무에서는 Adam으로 빠르게 실험하고, 최종 성능이 중요할 때 SGD로 전환하는 전략도 사용됩니다.
AdamW와 Adam의 실질적 차이는?
Adam에서 weight_decay 파라미터를 사용하면 L2 정규화가 적용되는데, 적응적 학습률과 결합되면 의도한 정규화 효과가 왜곡됩니다. AdamW는 가중치 감쇠를 기울기 업데이트와 분리하여 이 문제를 해결합니다. Transformer 학습에서는 항상 AdamW를 사용하세요.