勾配消失
連鎖律で 1 未満の局所的な増幅率を繰り返し掛けると、前段へ届く学習信号が弱まります。既定の 10 層実験で sigmoid が保つ出力相対勾配は 2.785e-7、重み 1 の活性 ReLU 経路は 1 です。一つずつは普通の係数でも、積は微小になります。
局所的な増幅率の積
各層はスカラー活性値を一つ持ち、同じ正の重み w、バイアス 0 を使います。
z_ℓ = w · a_(ℓ−1)
a_ℓ = φ(z_ℓ)
順伝播は活性値を計算し、逆伝播は最終活性値の前段の活性値に対する感度を求めます。
g_ℓ = |∂a_D / ∂a_ℓ|、g_D = 1
g_(ℓ−1) = g_ℓ · |w · φ′(z_ℓ)|
|w · φ′(z_ℓ)| が局所的な増幅率です。D 層を通ると:
g_0 = Π[ℓ=1…D] |w · φ′(z_ℓ)|
sigmoid の導関数は a(1 − a)、最大 0.25 で、0 や 1 に近づくほど小さくなります。w = 1 なら各層の増幅率は高くても 4 分の 1 なので、深い積は縮みます。
活性 ReLU の導関数は 1、増幅率は |w| です。w = 1 なら保持、0.5 なら 0.5ᴰ に減衰、1.5 なら 1.5ᴰ に増大します。ReLU は活性経路の sigmoid の飽和因子を取り除きますが、連鎖律の掛け算は残ります。
両レーンと全プリセットは 1e-15 から 1e3 の固定対数軸を共有します。同じ縦幅は同じ桁数の変化で、1 から 1e-5 なら 5 桁の減衰です。結果に合わせた自動拡大はしません。
ステップ実行
既定値は a₀ = 1、深さ D = 10、w = 1、全バイアス 0 です。同じ入力と正規化した出力勾配で、活性化関数だけを変えます。
- 第 1 層の順伝播:sigmoid は
z₁ = 1、a₁ = 0.7311、導関数0.1966で、通過する勾配の約 19.7% を保ちます。ReLU は活性値、導関数、増幅率がすべて 1 です。 - 第 2 層:sigmoid は
a₂ = 0.6750、増幅率0.2194。ReLU は 1 のままです。第 10 層の sigmoid 活性値は約0.6590、導関数は約0.2247です。順方向の安定は逆方向の信号の強さを保証しません。 - 逆伝播の開始:両方を
g₁₀ = 1とし、損失導関数の影響を除きます。実際の損失では各出力導関数がさらに掛かります。ここでは隠れ層の連鎖による相対的な保持率を測ります。 - 最初の逆向き更新:sigmoid は
g₉ = 0.2247、ReLU は 1 です。 - 左へ進む:sigmoid の値は次のとおりです。各係数は非ゼロで、ここではアンダーフローも起きていません。普通の係数の連続した積が原因です。
| 位置 | sigmoid の相対勾配 |
|---|---|
g₈ | 0.05049 |
g₇ | 0.01135 |
g₆ | 0.002549 |
g₅ | 0.0005728 |
g₄ | 0.0001287 |
g₃ | 2.888e-5 |
g₂ | 6.457e-6 |
g₁ | 1.416e-6 |
g₀ | 2.785e-7 |
ReLU は入力でも g₀ = 1 を保ち、この条件では約 359 万倍の相対勾配を届けます。実際のパラメータ更新には各層の入力や他の経路も関わりますが、前段へ修正信号が届きにくくなる機構が分かります。
重みと深さの影響
「Both fade」は w = 0.5 です。ReLU の導関数は 1 でも、重みの積は 0.5¹⁰ = 0.0009766。sigmoid は約 7.261e-10 です。
「ReLU explodes」は w = 1.5 で、ReLU は 1.5¹⁰ = 57.665 になります。前段での増幅が更新を不安定にする場合があります。sigmoid は活性化の導関数による減衰が勝ち、まだ縮みます。
「Sixteen deep」は w = 1 に戻し、深さを 16 にします。ReLU は 1 を保ち、sigmoid は約 3.585e-11。6 層の追加でさらに約 4 桁失います。
学習の症状から原因を調べる
同じ学習ステップで各ブロックの ||∇W_ℓ L|| を記録し、前段と後段を比べます。ベクトルのネットワークでは局所的な増幅率がヤコビ行列になり、特異値と利用可能な経路が各方向の縮小・拡大を決めます。
| 症状 | 先に調べる点 | 対応の候補 |
|---|---|---|
| 前段の勾配が後段より数桁小さい | 活性化の飽和、重みの尺度、経路上のヤコビ行列の尺度 | 活性化に合う初期化、正規化、適切な非飽和活性化、積を短くする残差経路 |
| 入力側へ勾配が増大し、急増や非有限値が出る | 局所ヤコビ行列が繰り返し信号を増幅していないか | 初期化・正規化の修正、不安定なブロックの調査。クリッピングは上限を設けるが原因は直さない |
| ReLU より前の勾配が厳密にゼロ | 非正の前活性値の割合、非活性のままのユニット | 初期化とバイアスの見直し。死んだユニットが原因なら leaky 版も検討 |
再帰のゲートや注意機構は依存経路を変えますが、連鎖律は変わりません。勾配クリッピングは大きすぎる値を制限するもので、失われた信号を復元できません。
境界ケース
- 非正の ReLU 入力:選べる設定では正なので「活性経路」と呼びます。
z_ℓ < 0なら導関数は 0、ゼロ点は微分不能ですが実装では通常 0 を選びます。一つのゼロ因子がその経路の前段の勾配を切ります。 - 1 を超える、または下回る一つの増幅率:一層だけでは全体を判断できません。他の層が打ち消す場合もあります。全積を確認し、繰り返す縮小と深さによる指数減衰を区別します。
- 負の重み:本課は比較のため正に制限します。負の重みは勾配の符号を反転し、ReLU の活性状態も変ええます。実際の経路の積の大きさが消失・爆発を決めます。
- ゼロと実用上の微小値:有限入力の sigmoid の数学的導関数は正でも、
2.785e-7は精度、ノイズ、正則化、他の大きな勾配に埋もれえます。浮動小数点の飽和では厳密なゼロも生じます。 - 損失導関数:
g_D = 1は正規化です。実際の損失は別の因子を加えます。
よくある間違い
- 順伝播の安定を逆伝播の健全さと同一視する。活性値が
0.659付近でも入力相対勾配は2.785e-7になります。 - 一つの極小導関数を探す。本例の局所増幅率は約
0.20–0.22で、その積が問題です。 - ReLU が勾配消失をすべて解決すると考える。重みは縮小・増幅を続け、非活性ユニットは経路を切ります。
- 自動で変わる軸の棒を比較する。本課は両レーンの対数範囲を固定します。
- クリッピングで消失を直そうとする、または全パラメータがこのスカラー積そのものを見ると考える。
モデルの範囲
学習システムではなく機構の説明です。各層はスカラー一つ、重みは同じ、バイアスは 0、出力勾配は正規化します。実際の逆伝播はヤコビ行列を掛け、分岐や例からの寄与を足し、最適化手法でパラメータを更新します。特異値、分岐、残差、バッチ統計量が経路や数値を変えても、局所的な増幅率の長い積が信号の減衰・保持・増大を決める原理は残ります。
続けて学ぶ
同じ手法につながるレッスンや、次の概念への入口です。
鍵マークのあるレッスンの操作には有料アクセスが必要です。解説はすべて無料で読めます。
誤りや気になる点を見つけましたか? フィードバックを送る。