【こうばいばくはつ】

勾配爆発 とは?

最終更新:
💡 逆伝播で勾配が増幅し、学習が不安定になる

ニューラルネットワークの学習中、逆伝播で求める勾配が非常に大きくなり、パラメータの更新や学習が不安定になる問題。長い系列を扱うRNNなどで研究されている。

📌 このページのポイント
逆伝播:出力側から入力側へ単純化した一つの数値の例増幅が小さい例入力側0.8途中0.9出力側1.010倍ずつ増幅する例入力側100途中10出力側1クリッピングで勾配の大きさに上限ノルム10 → 上限3なら、全体を0.3倍ベクトルの向きは保ったまま縮小する
矢印は勾配を伝える向き。下段は増幅を単純化した例で、100という値自体が爆発の判定基準ではありません。実際には微分の行列の積などを扱います。
ひよこ ひよこ
勾配爆発って、学習中に何が爆発するの?
ペンギン先生 ペンギン先生
損失がパラメータの変化に対してどれだけ変わるかを表す「勾配」が、非常に大きくなることだよ。更新量は勾配に加えて学習率や最適化手法で決まる。大きな勾配は更新を不安定にする原因になるけれど、必ずNaNになるという意味ではないんだ。
ひよこ ひよこ
なぜ大きくなるの?
ペンギン先生 ペンギン先生
逆伝播では、途中の計算の微分を連鎖的に掛け合わせるよ。単純化して1.5倍の増幅を50回繰り返すなら、1.5の50乗は約6.4億倍になる。実際のネットワークでは行列の積などを扱うので、全層の勾配を一つの数として掛けるだけではないんだ。
ひよこ ひよこ
どう対策するの?
ペンギン先生 ペンギン先生
一つは勾配ノルムのクリッピング。たとえばベクトル全体の大きさが上限を超えたら、向きを保ったまま縮小するよ。各成分を個別に切る方式とは違う。上限は学習の様子に合わせて選び、学習率や初期化なども原因に応じて見直すんだ。
ひよこ ひよこ
勾配消失とは関係あるの?
ペンギン先生 ペンギン先生
逆伝播で勾配が小さくなりすぎ、遠くの情報から学びにくくなるのが勾配消失だよ。長い系列のRNNでは両方が問題になる。LSTMは勾配消失への対策として提案された構造だけれど、使えば勾配爆発も必ず防げるわけではないんだ。
ひよこ ひよこ
起きたかどうか、どうやって気づくの?
ペンギン先生 ペンギン先生
損失の急な増加に加え、勾配ノルムが大きく跳ね上がっていないかを見よう。NaNやInfも調べるきっかけになるけれど、他の数値計算の問題でも出るので、それだけで勾配爆発と決めつけない。PyTorchのクリッピング関数にも、ノルムが非有限値ならエラーにする設定があるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「勾配爆発」って出てきたら「勾配が巨大になり、学習が不安定になる問題」と思えばだいたいOK!
📖 おまけ:英語の意味
「Exploding Gradient Problem」 = 勾配爆発問題
💬 「Exploding」は爆発するという意味で、勾配の値が爆発的に増大する様子からこう呼ばれるんだよ

参考資料

← 用語集にもどる