大きな画面での利用をおすすめします — アニメーションと操作がより快適になります。
入力

逆伝播

逆伝播は、損失に対する各重みの勾配を 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 = δ で更新できます。

  1. 隠れ層の順伝播。 a = σ(W₁·x + b₁) = [0.647, 0.678]。
  2. 出力の順伝播。 ŷ = σ(W₂·a + b₂) = 0.762。
  3. 損失。 L = ½(0.762 − 1)² ≈ 0.028。目標より低い予測です。
  4. 出力 δ。 δ_o = (ŷ − y)·ŷ(1−ŷ) = (−0.238)·(0.762·0.238) ≈ −0.043。負なので、この点で出力を上げれば損失は下がります。
  5. 出力重みの勾配。 ∂L/∂W₂ = δ_o·a ≈ [−0.028, −0.029]。隠れ→出力の各線に 1 値です。
  6. 隠れ層へ戻す。 δ_h = (W₂·δ_o) ⊙ a(1−a) ≈ [−0.004, −0.004]。ここでは W₂ は単一出力への重みベクトルです。
  7. 入力重みの勾配。 ∂L/∂W₁ = δ_h ⊗ x。2×2 を行順にすると約 [−0.0020, −0.0035, −0.0021, −0.0038]。2 個の sigmoid 導関数を通るため小さくなります。
  8. 更新。 η = 0.5 を使います。6 勾配がすべて負なので重みはすべて増え、出力を目標へ近づけます。
  9. 検証。 更新後に順伝播し直すと ŷ ≈ 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²) の逐重み法へ戻るわけではありません。保存と再計算の範囲を決めます。