勾配降下法と学習率
モデルの誤差を減らすには、重みをどちらへどのくらい動かすべきでしょうか。勾配降下法は、損失の変化率を使って重みを更新します。単純な二次関数で仕組みと失敗を追うと、学習率の役割が見えてきます。
損失が減る向きに小さく進む
重みをまとめてθ、損失をL(θ)とすると、基本的な更新はθの新値=θの旧値−η∇Lです。∇Lは各重みに対する微分を並べた勾配、ηは正の学習率です。勾配は局所的に損失が最も増える方向なので、その反対へ進みます。微分は今いる場所の近くでの変化を表すため、遠くへ一度に進んでも同じ予測が成り立つとは限りません。山を下るという比喩は有用ですが、実際には多数の重みからなる空間であり、二次元の地形図がすべてを表しているわけではありません。勾配と現在の重みは、別の量として記録します。
二次関数で一回の更新を確かめる
L(w)=(w−3)²なら微分は2(w−3)で、最小値はw=3です。初期値w=0、学習率η=0.1なら勾配は−6なので、新しいwは0−0.1×(−6)=0.6となります。損失は9から(0.6−3)²=5.76へ下がります。次の勾配は−4.8で、もう一回進めばw=1.08、損失は3.6864です。毎回、更新後の位置で勾配を計算し直す点が重要です。最初の勾配−6をずっと使い続ける操作は、この勾配降下法とは異なります。
学習率を大きくすれば速いとは限らない
同じ例でη=1とすると、wは0から6へ進み、次に0へ戻って振動します。η=1.1なら0から6.6へ進み、最小点からの距離は3から3.6へ広がります。この二次関数では、誤差e=w−3が一回で(1−2η)eとなるので、0<η<1なら誤差の絶対値が縮みます。これはこの式に固有の条件で、どのモデルでも学習率を1未満にすれば安全という意味ではありません。損失の曲がり方や特徴量の単位で適切な大きさは変わり、小さ過ぎれば限られた回数では十分に進めません。
ミニバッチと勾配の揺らぎ
全訓練例の損失を毎回計算する代わりに、一部の例からなるミニバッチで勾配を推定できます。全体の方向を近似するため、毎回の損失は一直線に下がるとは限りません。バッチの大きさは計算効率、メモリ、推定の揺らぎに関わります。モメンタムは過去の更新方向を利用し、Adamなどは勾配の情報を蓄積して成分ごとの更新を調整します。名称が高度だから常に最良とは限りません。初期値やデータ順序の影響があるので、比較では更新回数だけでなく、見たデータ量と計算予算もそろえます。
最適化できたことと汎化を分ける
訓練損失が十分に下がっても、未知の例で良い予測ができるとは限りません。最適化は与えた損失を小さくする問題、汎化は新しいデータへ役立つかという問題です。深いネットワークの損失は一般に単純な凸関数ではなく、必ず大域的な最小値へ到達する保証はありません。学習が止まったように見える場合は、学習率、入力の尺度、勾配の大きさ、データや損失の実装を調べます。訓練と検証の曲線を別々に表示すると、更新が進まないのか、訓練だけへ適合し過ぎたのかを見分けやすくなります。
試す:学習率と損失の変化
損失 J(w) = (w − 3)²、初期値 w = −2 の小さな例です。更新は w ← w − α × 2(w − 3)。学習率 α を選び、一歩ずつ最小点 w = 3 に近づく様子を確かめます。
学習率を変えると初期状態に戻ります。実際のニューラルネットワークに同じ数値が適するとは限りません。
| 更新回数 | 重み w | 損失 |
|---|
確認問題
L(w)=(w−3)²、w=0、η=0.1のとき、一回更新したwと損失はいくつですか。
解答と考え方を見る
勾配は2(0−3)=−6なので、wの新値は0−0.1×(−6)=0.6です。損失は(0.6−3)²=5.76となり、更新前の9より小さくなります。次の更新ではw=0.6で勾配を計算し直します。
参考資料・次に読む資料
- Google:Linear regression — Gradient descent勾配に沿って重みを更新する手順と損失曲線。
- Goodfellow・Bengio・Courville:Machine Learning Basics汎化、過学習、損失、モデル容量、正則化などの基本原理。
資料確認日:2026-11-03。