最適化
学習目標: 各種最適化アルゴリズムと学習率スケジューリングを理解する
最適化アルゴリズム比較
| アルゴリズム | 特徴 | 推奨用途 |
|---|---|---|
| SGD | シンプル、モーメンタム追加で改善 | 画像分類(CNNと相性良い) |
| Adam | 適応的学習率、収束が速い | 汎用(最初の選択肢) |
| AdamW | Adamに重み減衰を正しく追加 | Transformer系モデル |
| RMSprop | RNN向けに開発 | RNN/LSTM |
実装例
import torch.optim as optim
# SGD(モーメンタム付き)
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9, weight_decay=1e-4)
# Adam
optimizer = optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999))
# AdamW(Transformerに推奨)
optimizer = optim.AdamW(model.parameters(), lr=1e-4, weight_decay=0.01)
学習率スケジューラ
# ステップ減衰
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)
# コサインアニーリング
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)
# ウォームアップ + 減衰
scheduler = optim.lr_scheduler.OneCycleLR(optimizer, max_lr=0.01, total_steps=1000)
# 学習ループでの使用
for epoch in range(epochs):
train(...)
scheduler.step() # エポック終了後に呼ぶ
理解度チェック
Q. 最も汎用的に使える最適化アルゴリズムは?