ほとんどの一歩はそっと押す。だが異常な一歩が、数週間を消し去る。 学習とは、坂を下る何百万もの小さな一歩だ。だが時おりあるバッチが途方もない勾配を生む——たった一回の巨大な一歩がモデルを地図の外へ放り出し、数週間の前進を一回の更新で台無しにする。学習はまるごと死ぬ。必要なのは、より良い一歩ではない。まれに暴れるその一歩を縛る綱だ。
なぜ暴発するのか——1より大きい傾きを十分な数だけ掛け合わせるからだ。 ∂L∂h0=∂L∂ht∏k=1t∂hk∂hk−1,∥∏k=1t∂hk∂hk−1∥∼λt\frac{\partial \mathcal{L}}{\partial h_0} = \frac{\partial \mathcal{L}}{\partial h_t}\prod_{k=1}^{t}\frac{\partial h_k}{\partial h_{k-1}}, \qquad \left\|\prod_{k=1}^{t}\frac{\partial h_k}{\partial h_{k-1}}\right\| \sim \lambda^{t} マイクのハウリングのように:スピーカーがマイクを、マイクがスピーカーを煽り、一巡ごとに大きくなり、ついに部屋が悲鳴をあげる。誤差逆伝播も深い層で同じことをする——層ごとに傾きを一つ掛ける。どれも1をわずかに超えるだけでも、50個が掛け合わさって怪物になる:λ=1.5で50層なら、ささやきが≈6億にふくれ上がる。
巨大な勾配は、巨大な跳躍——地図の外へ。 θ←θ−η g,∥Δθ∥=η ∥g∥\theta \leftarrow \theta - \eta\, g, \qquad \lVert \Delta\theta \rVert = \eta\, \lVert g \rVert 引きすぎたパチンコのように:ほどよく引けば石は的に当たる。むやみに引き絞れば石は丘の向こうへ飛び去り、二度と戻らない。踏み出す一歩は、学習率と勾配の長さの積だ。その長さが何百万にも暴発すれば、モデルは損失の地形そのものの外へ飛び出す——無意味へ、NaNへ。
まず、勾配ぜんたいの大きさを測る。 ∥g∥2=∑igi2\lVert g \rVert_2 = \sqrt{\sum_i g_i^{2}} 上限をかける前に、何百万もの成分をもつベクトルの大きさを表す一つの数が要る。箱の対角線のように:各辺を二乗して足し、平方根をとる——すると別々の辺がすべて一本のまっすぐな長さに畳み込まれる。それが勾配のノルムだ:何百万の数が寄り集まろうと、一歩ぜんたいのただ一つの長さ。
解決策:長さに上限をかけ、向きはそのまま。 g^=g⋅min (1, c∥g∥)\hat{g} = g \cdot \min\!\left(1,\ \frac{c}{\lVert g \rVert}\right) 暴れ馬の手綱を引くように:手綱を引いて荒れた疾走を安全な駆け足に戻す——それでも馬はまさに狙った方へ走る。ノルムによるクリッピングは勾配にこれをする:しきい値の下ならそのまま、超えたらその上限まで縮める。向きは同じ、歩幅だけ短く。降下は依然として坂下を指す——ただ、もう跳びかかれない。
雑な親戚:数を一つずつ抑え、狙いを曲げる。 g^i=clip(gi,−v,v)=max (−v, min(v, gi))\hat{g}_i = \operatorname{clip}(g_i, -v, v) = \max\!\left(-v,\ \min(v,\ g_i)\right) もっと安上がりな手もある:各成分を±vで抑え込む。柵を平らに切りそろえるように:きれいな傾斜で登っていた杭の列を、てっぺんで水平に切ると、もう以前のようには傾かない——「高すぎるものは無し」を課した代わりに、形を失った。数を一つずつ抑えれば学習は救われるが、ひそかに勾配の向きを正しい筋からねじ曲げる。ノルムなら向きを保ち、値なら向きを単純さと引き換えにする。
これで最悪の一歩も、既知の上限につながれる。 ∥Δθ∥=η ∥g^∥≤η c\lVert \Delta\theta \rVert = \eta\, \lVert \hat{g} \rVert \le \eta\, c 空中ブランコの下の安全ネットのように:曲芸師が最難関の技に挑めるのは、しくじったその一度をネットが受け止めてくれるからだ。クリッピングのあとは、一歩が学習率と上限の積を決して超えない——暴れる勾配は致命的な跳躍ではなく、しっかりとした一押しになる。勾配がなぜ暴発したかは直さない。ただ、暴発したその一度を生き延びさせるだけだ。
最も荒々しい修正を黙らせた。あれは警告だったのか? あれほど暴れる勾配は、モデルが叫んでいたのだ——データか、学習率か、構造か、何かがひどく狂っていると。クリッピングは聞き入れない。ただ叫びを礼儀正しい一押しに変えて、学習を続けさせるだけ。私たちは足場を保った。🌱 だが、まれで激しいその信号に上限をかけるとき、私たちは不調を治しているのか——それとも、ただ聞こえなくしているだけなのか?