最適化

学習目標: 各種最適化アルゴリズムと学習率スケジューリングを理解する

最適化アルゴリズム比較

アルゴリズム 特徴 推奨用途
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. 最も汎用的に使える最適化アルゴリズムは?