🙋
ディープラーニングの「学習率」って、どのくらい大きく重みを更新するかの値ですよね。それを途中で変える「スケジュール」って何のためにあるんですか?
🎓
いい質問だ。学習率は「損失の坂をどれだけの歩幅で下るか」を決める値だね。問題は、最適な歩幅が訓練の最初と最後で全然違うこと。序盤は損失が大きいから大股でガンガン下りたい。でも谷底に近づいたら、大股のままだと最小点を飛び越えて行ったり来たり振動してしまう。だから訓練が進むにつれて学習率を小さくする——それがスケジュールだよ。
🙋
なるほど、左上のキャンバスでボールが谷を下っていますね。最初は大きく弾んでいるのに、終わりのほうは谷底でちょこちょこ動くだけになっています。
🎓
まさにそれが学習率スケジュールの効果だ。あのボールの一歩の大きさが、その時点の学習率に比例している。序盤の大きな歩幅で素早く谷の近くまで行き、終盤の小さな歩幅で谷底にぴたっと収まる。もし学習率をずっと大きいままにすると、ボールは谷底で永遠に跳ね回って落ち着かない。逆にずっと小さいと、谷にたどり着く前に訓練が終わってしまうんだ。
🙋
減らし方が3種類あるんですね。ステップ減衰だと学習率のグラフがカクカクの階段になっていて、指数減衰やコサインはなめらかです。どう使い分けるんですか?
🎓
ざっくり言うと、ステップ減衰は「30エポックごとに0.1倍」のように決まったタイミングで一気に落とす方式で、昔からの定番だ。挙動が読みやすく実装も簡単。指数減衰は段差なく連続的に減らす。コサインアニーリングは半周期のコサインカーブに沿って下げる方式で、終盤でゆっくり最小値へ近づく形がきれいなので、近年の画像認識モデルではほぼ標準になっている。「スケジュール比較」グラフで3本を並べると性格の違いがよく分かるよ。
🙋
減衰パラメータを大きくすると、どのスケジュールでも急に下がりますね。これは大きいほど良いんですか?
🎓
いや、大きすぎると問題が起きる。減衰パラメータを上げると学習率が早く小さくなるから、訓練の後半は歩幅がほぼゼロになって、まだ下げられる損失を取りこぼす。逆に小さすぎると終盤まで学習率が大きいままで、谷底で振動して収束しない。実務では「最終学習率」が初期値の1〜10%くらいに着地するよう調整することが多い。デフォルト設定の最終学習率カードを見ながら、ちょうど良い減衰量を探ってみるといい。
🙋
最初から最適な学習率を一発で決めれば、スケジュールはいらないんじゃないですか?
🎓
それができれば苦労しないんだけどね。固定学習率には「序盤に最適な値」と「終盤に最適な値」が両立しないという根本的な弱点がある。一つの値ではどちらかを犠牲にするしかない。スケジュールは時間とともに最適値を切り替えることで、その矛盾を解く。だから現代のディープラーニングでは、ほぼすべての訓練で何らかのスケジュールが使われているんだ。
学習率スケジュールはなぜ必要なのですか?
学習率を最初から最後まで一定にすると、序盤に最適な大きさは終盤には大きすぎ、損失が最小付近で振動して収束しません。逆に終盤に最適な小さい値は序盤の進みが遅すぎます。学習率スケジュールは、序盤は大きな学習率で素早く損失を下げ、訓練が進むにつれて学習率を小さくして最小値へ精密に収束させる仕組みです。これにより収束の速さと最終精度を両立できます。
ステップ減衰・指数減衰・コサインアニーリングの違いは?
ステップ減衰は一定エポックごとに学習率を γ 倍へ階段状に落とします(例:30エポックごとに0.1倍)。実装が単純で挙動が読みやすい一方、減衰の瞬間に損失曲線が段差状に変化します。指数減衰は η=η₀·e^(−kt) でなめらかに減らし、急激な段差がありません。コサインアニーリングは半周期のコサインに沿って初期値から最小値へ滑らかに下げ、終盤でゆっくり最小値へ近づくため、近年の画像認識モデルで広く使われます。
初期学習率はどう決めればよいですか?
初期学習率はモデル・最適化手法・バッチサイズに依存し、大きすぎると損失が発散(NaN)し、小さすぎると訓練がいつまでも進みません。実務では学習率レンジテスト(LR range test)で、学習率を徐々に上げながら損失が最も急に下がる領域を探し、その少し手前を初期値に選びます。SGD なら 0.1 前後、Adam なら 0.001 前後が出発点として一般的で、その後スケジュールで減衰させます。
ウォームアップやウォームリスタートとは何ですか?
ウォームアップは訓練開始の数エポックだけ学習率を0付近から目標値まで線形に上げる手法で、初期の不安定な勾配による発散を防ぎます。大きなバッチサイズや Transformer の学習でほぼ必須です。ウォームリスタート(SGDR)はコサインアニーリングを複数回くり返し、各サイクルの開始時に学習率を一度大きく戻します。これにより損失地形の別の谷へ脱出しやすくなり、複数の解を平均するアンサンブル的な効果も得られます。
画像認識モデルの訓練: ResNet や EfficientNet のような畳み込みニューラルネットワークを ImageNet で訓練するとき、学習率スケジュールは精度を左右する最重要ハイパーパラメータの一つです。古典的にはステップ減衰(30・60・90エポックで0.1倍)が使われてきましたが、近年はコサインアニーリングが主流で、同じモデル・同じエポック数でも数値上の正解率が改善する例が多く報告されています。
大規模言語モデルの事前学習: Transformer ベースの言語モデルの事前学習では、ウォームアップ付きのスケジュールがほぼ必須です。訓練開始の数千ステップで学習率を0から目標値まで線形に上げ、その後は逆平方根減衰やコサイン減衰でゆっくり下げます。ウォームアップを省くと初期の大きな勾配で損失が発散し、訓練がそもそも始まりません。
転移学習・ファインチューニング: 事前学習済みモデルを別タスクへ適応させるファインチューニングでは、初期学習率を事前学習時よりかなり小さく取り、短いスケジュールで素早く減衰させます。学習率が大きすぎると、せっかく学習済みの良い重みを壊してしまう「破滅的忘却」が起きます。層ごとに異なる学習率を割り当てる手法と組み合わせることもあります。
ハイパーパラメータ探索の前段検討: 本ツールのように学習率の推移を先に可視化しておくと、実際にGPUを回す前に「最終学習率が小さくなりすぎていないか」「減衰が早すぎないか」を当たりづけできます。スケジュールの形は訓練時間を大きく消費する前に机上で確認すべきで、実際の損失曲線と推移を照らし合わせるサニティチェックにも使えます。
まず大きな誤解が、「学習率は小さいほど安全で良い」 という思い込みです。確かに学習率を小さくすれば損失が発散するリスクは下がりますが、序盤から小さすぎる学習率を使うと訓練が極端に遅くなり、決められたエポック数では損失が十分下がりきりません。さらに、小さい学習率は損失地形の浅い局所解にはまりやすく、汎化性能(未知データへの精度)も悪化する傾向があります。序盤は思い切って大きな学習率を使い、スケジュールで徐々に下げる——この順序が重要です。
次に、「スケジュールはエポックではなくステップ(イテレーション)で考えるべき」 という点。本ツールは分かりやすさのためエポック単位で表示していますが、実際のフレームワークの多くは1イテレーション(ミニバッチ1回)ごとに学習率を更新します。バッチサイズを変えると1エポックあたりのステップ数が変わるため、同じ「30エポックで0.1倍」でもバッチサイズが違えば減衰の実際のタイミングがずれます。スケジュールを設計するときは、総ステップ数を基準に考えるのが安全です。
最後に、「スケジュールさえ良ければ初期学習率は適当でよい」 という誤解。スケジュールはあくまで初期学習率を起点に減衰させる仕組みなので、出発点が悪ければどんなスケジュールでも救えません。初期学習率が大きすぎれば1エポック目で損失が NaN になり、小さすぎれば終盤まで歩幅が足りません。実務では、まず学習率レンジテストで適切な初期値を見つけ、その上でスケジュールの形と減衰量を調整する、という順番を守ってください。初期値とスケジュールはセットで設計するものです。