深層学習では 学習率(Learning Rate) がモデル訓練の成否を決める最重要ハイパーパラメータです。値が 大きすぎると発散して最適解に近づけず、小さすぎると局所最適に捕まり長時間かけても性能が頭打ちになります。このトレードオフを自動でコントロールする仕組みが 学習率スケジューラ(Scheduler) です。


仕組み:大きく始めて、徐々に小さく

  1. 探索フェーズ:序盤は学習率を高めに設定し、広いパラメータ空間を大胆に探索。全体最適に近い谷を素早く見つけやすい。
  2. 収束フェーズ:ある程度損失が下がったら学習率を減少させ、細かな谷の底へ滑り込むように最適化。過学習も抑えられる。

これにより「大きくて収束しない・小さすぎて動かない」という両極端を回避できます。


PyTorch実装例:StepLR

optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=10, gamma=0.1)
for epoch in range(30):
    train_one_epoch(...)
    scheduler.step()  # 10エポックごとに学習率が1/10になる
  • gamma:減衰率。0.1なら90%減。
  • step_size:減衰タイミング。長すぎると局所最適にハマりやすい。

他にも便利なスケジューラ

名称使いどき特徴
ReduceLROnPlateau損失が停滞したら下げたい自動で停滞を検知し減衰
CosineAnnealingLR徐々に波形で下げたい最終局面で滑らかに収束
OneCycleLR速く収束させたい一度LRを上げてから急降下

まとめ

  • 大きなLR → 探索小さなLR → 収束。両者のバランスを取るのがスケジューラ。
  • PyTorchなら数行で導入でき、局所最適と発散のリスクを同時に軽減できます。
  • まずは StepLRCosineAnnealingLR を試し、学習曲線を観察して最適設定を探しましょう。

投稿者 kojiro777

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です