勾配降下法 — 損失の谷を下るボール

機械学習の「学習」の正体は、損失という名の谷をひたすら下ること。地形全体は見えなくても、足元の傾きさえ分かれば底へたどり着けます。ボールを転がしながら、学習率ひとつで天国と地獄が分かれる様子を見ていきます。

1. 「損失の地形」を下りていく

モデルのパラメータ w を少し変えると、予測の悪さ(損失 L)も変わります。横軸にパラメータ、縦軸に損失を取ると、そこには地形が現れます。学習とは、この地形の一番低い場所を探すことです。

ただし地形の全体図は見えません。見えるのはいま立っている場所の傾き(勾配)だけ。そこで「傾きが下っている方へ一歩進む」をひたすら繰り返す — これが勾配降下法です。

1次元の谷下り — ボールを転がしてみる
水色=損失カーブ、白いボール=現在のパラメータ、オレンジの点=足あと、緑の矢印=次の一歩(−η×勾配)。キャンバスをクリックするとその位置からやり直せます。学習率を 0.1 → 0.8 → 1.8 → 2.2 と上げて、4つの挙動(のろのろ/するっと/ジグザグ/発散)を見比べてください。「谷ふたつ」ではスタート位置によって浅い方の谷(局所最小)に捕まることもあります。
POINT — 勾配は「最も急な上り」を指す矢印 勾配(gradient)∇L は、その場で損失が最も急に増える方向を指す。だからその逆向きに進めば、最も効率よく下れる。一歩の大きさを決める係数が学習率 η(イータ)。
w ← w − η ∇L(w) w=パラメータ、L=損失、η=学習率(歩幅)。「傾き × 歩幅」のぶんだけ坂を下る、をひたすら繰り返す

2. 学習率 η — 歩幅がすべてを決める

更新式はこれ以上ないほど単純なのに、実際の学習がうまくいくかどうかは η ひとつで激変します。上のデモで見た4つの顔を整理すると:

学習率ふるまいイメージ
小さすぎ下るには下るが、いつまでも着かないすり足で山を下りる
ちょうどよいするっと谷底へ収束リズムよく駆け下りる
大きすぎ谷を挟んで反対側へ飛び移り、ジグザグ発振大股すぎて谷をまたぐ
特大一歩ごとに高い場所へ — 発散跳ねるたびに勢いが増して谷から飛び出す
注意 — 「損失が下がらない・NaN になる」の第一容疑者 学習中に損失がむしろ増えていく、あるいは NaN になる — 実務で頻出するこの症状の原因は、たいてい学習率が大きすぎること。まず η を 1/10 にして様子を見るのが定石。

3. 細長い谷はニガテ — 2次元で見る勾配降下

パラメータが2個になると、地形は等高線で描けます。勾配は等高線に対して直角な方向。谷が丸ければ最短コースで底へ向かいますが、細長い谷ではそうはいきません。

等高線の上を降下する — 谷の形とジグザグ
青い楕円=等高線(同じ損失の高さ)、オレンジ=降下の軌跡。クリックした場所からスタートし直せます。細長い谷では、急な縦方向が先に発振するので η を上げられず、ゆるい横方向がなかなか進まない — これがジグザグの正体。同じ η でも「丸い谷」に切り替えるとあっさり収束します。

細長い谷では「急な方向に合わせて η を小さくする」しかなく、ゆるやかな方向がほとんど進みません。実は、入力特徴量のスケールがばらばらだと損失の谷は細長くなります。学習前に特徴量を標準化(平均0・分散1に)するのは、谷を丸くして勾配降下を楽にするためです。

POINT — 等高線が丸いほど勾配降下は速い 勾配は等高線と直角。丸い谷なら「直角」がいつも谷底を向くが、細長い谷では崖の方ばかり向いてしまう。特徴量の正規化は、この地形そのものを改善する前処理。

4. 学習率レース — 3つの η で同時スタート

最後に、同じ谷・同じスタート地点から η = 0.01 / 0.1 / 0.9 の3つのボールを同時に転がして、損失の下がり方を競走させてみます。

学習率レース — 損失 vs 反復回数
左=同じ谷を下る3つのボール、右=損失の推移。小さすぎる η(水色)はじわじわとしか下がらず、大きすぎる η(赤)は谷の壁を往復するばかりでやはり進まない。両極端はどちらも遅い — ちょうどよい η(緑)だけが一直線に底へ向かいます。

5. まとめ — 勾配降下法の設計図

一歩先へ — 実際の学習はもっと高次元 このページの地形は1〜2次元だが、実際のニューラルネットは数百万〜数十億次元で、谷も無数にある(局所最小・鞍点)。坂を下る勢いを記憶する Momentum、方向ごとに歩幅を自動調整する Adam など「賢い下り方」は、DNN編の「最適化アルゴリズム」で競走させながら学ぶ。