逆伝播
逆伝播は、損失に対する各重みの勾配を 1 回の逆向き走査で求めます。層ごとに連鎖律を適用し、後段の誤差信号を再利用して前段を計算するため、計算量は順伝播と同じ次数です。
重みを 1 個ずつ変え、そのたび全ネットワークを再実行して損失変化を調べると高くつきます。逆伝播は 1 つの損失から感度を戻し、共有する因子を使って各接続の導関数を求めます。「責任」は局所微分の比喩で、パラメーターの重要性全体を因果的に判定するものではありません。
逆伝播の仕組み
w は前活性 z、z は活性 a、a は最終的な L を変えます。∂L/∂w = ∂L/∂a · ∂a/∂z · ∂z/∂w と表せ、∂L/∂a は以後の全経路の寄与を含みます。
各ニューロンの δ = ∂L/∂z を定義すると、入力重みの勾配は δ とその接続の入力の積です。前層へは δ_prev = (Wᵀ·δ_next) ⊙ σ′(z) と戻します。⊙ は要素ごとの積、転置は接続を逆にたどって誤差を集めます。
Sigmoid の活性 s = σ(z) を保存しておけば、z に関する導関数は σ′(z) = s·(1 − s)。順伝播のキャッシュを再利用できます。
出力 δ、出力重みの勾配、前層 δ、前層の勾配と繰り返し、すべて求めた後で w ← w − η·∂L/∂w を実行します。勾配降下法は更新方法、逆伝播は勾配の計算法です。
逆伝播のステップ
初期設定は 2 → 2 → 1 sigmoid ネットワークの 1 訓練ステップです。L = ½(ŷ − y)²、x = [0.50, 0.90]、y = 1、η = 0.5。
初期値は W₁ = [0.15, 0.20; 0.25, 0.30] で各行が隠れニューロン、b₁ = [0.35, 0.35]、W₂ = [0.40, 0.45]、b₂ = 0.60 です。6 重みに集中するためバイアスは固定します。実訓練では ∂L/∂b = δ で更新できます。
- 隠れ層の順伝播。
a = σ(W₁·x + b₁) = [0.647, 0.678]。 - 出力の順伝播。
ŷ = σ(W₂·a + b₂) = 0.762。 - 損失。
L = ½(0.762 − 1)² ≈ 0.028。目標より低い予測です。 - 出力 δ。
δ_o = (ŷ − y)·ŷ(1−ŷ) = (−0.238)·(0.762·0.238) ≈ −0.043。負なので、この点で出力を上げれば損失は下がります。 - 出力重みの勾配。
∂L/∂W₂ = δ_o·a ≈ [−0.028, −0.029]。隠れ→出力の各線に 1 値です。 - 隠れ層へ戻す。
δ_h = (W₂·δ_o) ⊙ a(1−a) ≈ [−0.004, −0.004]。ここでは W₂ は単一出力への重みベクトルです。 - 入力重みの勾配。
∂L/∂W₁ = δ_h ⊗ x。2×2 を行順にすると約[−0.0020, −0.0035, −0.0021, −0.0038]。2 個の sigmoid 導関数を通るため小さくなります。 - 更新。
η = 0.5を使います。6 勾配がすべて負なので重みはすべて増え、出力を目標へ近づけます。 - 検証。 更新後に順伝播し直すと
ŷ ≈ 0.766、L ≈ 0.027。0.762 から上がり、0.028 から下がります。表示は丸めた値です。訓練はこの循環を繰り返します。
順伝播は琥珀色が左→右、逆伝播は橙色が右→左へ δ を示します。上部も forward → から ← backward、最後の確認で前向きへ戻ります。別入力 x = [0.1, 0.8] でも全値を計算し直して同じ動作を行います。
η ∈ {0.1, 0.5, 0.9} を選べます。同じ初期点の勾配は η で変わらず、更新距離だけが変わります。初期入力の損失減少は約 0.0002、0.0008、0.0015。この 1 ステップから大きいほど常によいとは言えません。勾配降下法で複数更新の収束と不安定化を扱います。
損失から逆に計算する理由
重みごとの推定には O(P) 回の順伝播が必要で、各回 O(P) なら O(P²) です。逆伝播は多パラメーターと単一損失の構造を使い、δ を共有して全接続を逆走査で処理します。
この全結合網では順伝播 O(P)、逆伝播 O(P)。前向き値の追加キャッシュは O(活性数) で、パラメーターとその勾配の保存は別です。逆伝播の仕事は順伝播の定数倍程度であり、どのネットワークでも実時間が等しい意味ではありません。
順伝播の 784 → 25 → 25 → 10、20,475 接続重みのネットワークも同じ勾配を小バッチで集約して訓練しました。更新は Adam でも、勾配は連鎖律から得ます。
境界条件
- 予測が目標と一致。 この二乗損失で
ŷ = yならδ_o = 0、全勾配がゼロになり、重みは動きません。この例の損失最小点です。 - Sigmoid の飽和。 a が 0、1 に近いと
a(1−a)がほぼゼロで、戻る信号を小さくします。 - 深さの累積。 sigmoid 導関数は各層で最大 0.25。連続した積は勾配を小さくしやすく、大きな重みなら逆に爆発も起こり得ます。2→2→1 は浅く、この効果を十分には示しません。sigmoid は計算を見せる選択で、全深層網への推奨ではありません。
よくある間違い
σ′を落とす。 前層 δ は局所導関数との積です。省くと上流勾配が違います。- 逆伝播途中で重みを更新。 活性を作った順伝播と同じ重みを全逆伝播で使います。途中変更すると別のネットワークを混ぜます。
- 符号を逆にする。 δ は
ŷ − y、更新はη·∂L/∂wを引きます。逆なら上昇になります。 - 必要な活性を捨て、再計算も用意しない。 逆伝播はその値を要します。チェックポイント法はメモリと再計算を交換でき、必ず O(P²) の逐重み法へ戻るわけではありません。保存と再計算の範囲を決めます。