深層学習では 学習率(Learning Rate) がモデル訓練の成否を決める最重要ハイパーパラメータです。値が 大きすぎると発散して最適解に近づけず、小さすぎると局所最適に捕まり長時間かけても性能が頭打ちになります。このトレードオフを自動でコントロールする仕組みが 学習率スケジューラ(Scheduler) です。
仕組み:大きく始めて、徐々に小さく
- 探索フェーズ:序盤は学習率を高めに設定し、広いパラメータ空間を大胆に探索。全体最適に近い谷を素早く見つけやすい。
- 収束フェーズ:ある程度損失が下がったら学習率を減少させ、細かな谷の底へ滑り込むように最適化。過学習も抑えられる。
これにより「大きくて収束しない・小さすぎて動かない」という両極端を回避できます。
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なら数行で導入でき、局所最適と発散のリスクを同時に軽減できます。
- まずは
StepLR
かCosineAnnealingLR
を試し、学習曲線を観察して最適設定を探しましょう。