誤差逆伝播法(バックプロパゲーション)の数理
なぜニューラルネットは数百万の重みを一気に学習できるのか。その答えが、連鎖律を計算グラフ上で逆向きに流すバックプロパゲーション。勾配計算の正体を原理から掴めます。
- 1.バックプロパは「合成関数の微分=連鎖律」を計算グラフ上で出力側から入力側へ逆順に適用し、全パラメータの勾配を一括で求めるアルゴリズム。新しい数学ではなく、連鎖律の効率的な実装。
- 2.効率の鍵は共通項の再利用。各ノードで局所的な偏微分(ヤコビアン)と、上流から届いた誤差信号 δ を掛けるだけで済み、計算量は順伝播とほぼ同じ O(パラメータ数)。数値微分の N 倍を回避する。
- 3.重み勾配は ∂L/∂W = δ·(その層の入力)の外積で表せる。δ は出力層から `δ_l = (W_{l+1}ᵀ δ_{l+1}) ⊙ σ'(z_l)` で逐次後退伝播し、各層の勾配が連鎖的に確定する。
なぜ「逆伝播」が必要なのか
ニューラルネットの学習は、損失 L(予測と正解のズレ)を最小化するよう各パラメータを少しずつ動かす作業です。その「動かす方向と量」を与えるのが勾配 ∂L/∂W——各重みを微小に変えたとき L がどれだけ変わるかです。勾配を使った更新そのものは 勾配降下法 が担いますが、問題はこの勾配を、数百万〜数十億個の重みすべてについて、どう現実的なコストで求めるかにあります。
素朴な方法は数値微分——各重みを W + ε と W - ε でそれぞれ順伝播し、(L(W+ε) − L(W−ε)) / 2ε を計算する方法です。しかしこれは重み1個の勾配を得るのにネットワーク全体の順伝播を1回要します。パラメータが N 個なら順伝播 N 回。N が百万を超える現代のモデルでは非現実的です。
バックプロパゲーションは「学習アルゴリズム」ではなく勾配を計算する手続きです。求めた勾配を使ってどう重みを更新するか(SGD、Adam など)は別レイヤーの話。両者を混同しがちですが、逆伝播=勾配計算、勾配降下=パラメータ更新と切り分けると全体像が整理されます。
出発点は連鎖律——合成関数の微分
ニューラルネットは、線形変換と活性化関数を何層も重ねた巨大な合成関数です。合成関数の微分は連鎖律で計算できます。y = f(g(x)) なら dy/dx = f'(g(x)) · g'(x)。各段の局所的な微分を掛け合わせるだけです。
3層の単純な連鎖 x → a → b → L を考えます。
a = f(x), b = g(a), L = h(b)
∂L/∂x = (∂L/∂b) · (∂b/∂a) · (∂a/∂x)
= h'(b) · g'(a) · f'(x)
ここで決定的に重要なのが計算の順序です。右から左(f'(x) から)掛けるのが順伝播的な発想ですが、バックプロパは左から右、つまり出力 L 側から掛けていきます。なぜそれが効くのかは、分岐があるネットワークで初めて明確になります。
計算グラフと、共通項の再利用
ネットワークを計算グラフ——ノード(演算)とエッジ(データの流れ)の有向グラフ——として捉えます。順伝播は入力から出力へ値を流し、逆伝播は出力から入力へ勾配(誤差信号)を流します。
鍵は、ある中間ノード v の勾配 ∂L/∂v を一度求めれば、v より下流(入力側)の全ノードがそれを共通の出発点として再利用できることです。出力側から計算するからこそ、上流で計算済みの ∂L/∂v が手元にあり、各ノードは「自分の局所微分」を掛けるだけで済みます。逆向き(入力側から)に計算すると、この共通項を毎回ゼロから計算し直すことになり、まさに数値微分と同じ非効率に陥ります。
各ノード z について δ = ∂L/∂z を誤差信号と呼びます。逆伝播の実体は「この δ を出力側から入力側へバケツリレーする」こと。あるノードの δ は、下流から届いた δ にそのノードの局所ヤコビアンを掛けて得られ、それをさらに上流へ手渡します。前提となるネットワーク構造は ニューラルネットワーク を参照。
多層パーセプトロンでの具体形
層 l の計算を定式化します。a_{l-1} を前層の出力(活性)、W_l を重み行列、b_l をバイアス、σ を活性化関数とすると、順伝播は次の2段です。
z_l = W_l · a_{l-1} + b_l # 線形変換(プリアクティベーション)
a_l = σ(z_l) # 非線形活性化
逆伝播では、まず出力層の誤差信号を損失関数の微分から初期化します。たとえば二乗誤差なら δ_L = (a_L − y) ⊙ σ'(z_L)(⊙ は要素ごとの積、アダマール積)。ソフトマックス+交差エントロピーの組み合わせなら、より簡潔に δ_L = a_L − y になります。そこから中間層へ、次の漸化式で δ を後退させます。
δ_l = (W_{l+1}ᵀ · δ_{l+1}) ⊙ σ'(z_l)
意味を分解すると——W_{l+1}ᵀ · δ_{l+1} は「下流の誤差を、重みの転置を通して逆向きに引き戻す」操作(順伝播で W を掛けたぶんを転置行列で巻き戻す)、⊙ σ'(z_l) は「この層の活性化関数の局所的な傾き」を掛けることです。δ さえ求まれば、その層のパラメータ勾配は機械的に確定します。
∂L/∂W_l = δ_l · a_{l-1}ᵀ # 入力との外積
∂L/∂b_l = δ_l
∂L/∂W_l = δ_l · a_{l-1}ᵀ が示すのは、**重み勾配=(その重みの出力側の誤差 δ)×(その重みの入力側の活性)**という直観的な構造です。誤差が大きく、かつ入力が大きく効いていた重みほど、強く修正される。これがバックプロパの数理的な核心です。
なぜ効率的なのか——順伝播と同じオーダー
3つの勾配計算法を、コストの観点で並べます。
| 手法 | 計算量(全N個の勾配) | 性質 |
|---|---|---|
| 数値微分 | 順伝播 約 N 回 = O(N²) 級 | 実装は簡単だが N 個の重みで N 倍。検算用途のみ |
| 記号微分 | 式が層数で指数的に膨張しうる | 数式を展開するため大規模ネットでは破綻しやすい |
| バックプロパ(逆モード自動微分) | 順伝播の定数倍 = O(N) | 全勾配を順伝播1回ぶん+αで一括取得 |
バックプロパが速い理由は2点に集約されます。(1) 共通の中間勾配 δ を一度だけ計算して使い回すため重複がない。(2) 出力が1つ(スカラーの損失 L)で入力(パラメータ)が多数という機械学習特有の構造に、出力側から流す逆モード自動微分が最適に噛み合う。仮に入力1・出力多数なら順モード(入力側から)が有利ですが、学習では損失が常にスカラーなので逆モードが圧勝します。結果として、全パラメータの勾配が、順伝播1回とほぼ同じコストで手に入る——これが深層学習を計算可能にした立役者です。
- 連鎖律との関係:バックプロパは連鎖律そのもの。新しい微分理論ではなく、計算グラフ上での「効率的な適用順序」が本体。
- δ の漸化式:
δ_l = (W_{l+1}ᵀ δ_{l+1}) ⊙ σ'(z_l)を書けること。転置ᵀとアダマール積⊙の意味を説明できること。 - 重み勾配の形:
∂L/∂W_l = δ_l · a_{l-1}ᵀ(誤差×入力の外積)。 - 計算量:順伝播と同じ O(N)。数値微分の O(N²) 級との差が本質。
落とし穴——勾配消失と勾配爆発
δ の漸化式をもう一度見ます。δ_l は δ_{l+1} に W_{l+1}ᵀ と σ'(z_l) を掛けたものです。つまり逆伝播は、層を遡るたびにこれらを繰り返し掛け算する構造を持ちます。ここに深層ネット特有の不安定さが潜みます。
σ' が小さい活性化関数(古典的なシグモイドは最大でも 0.25)を多層で重ねると、δ は層を遡るほど指数的に 0 へ縮小します。これが勾配消失——入力に近い層がほとんど学習されなくなる現象です。逆に重みや勾配が大きいと指数的に発散する勾配爆発が起きます。
まとめ:バックプロパを一枚で
最後に、原理を要点に圧縮します。
| 論点 | 実態 | そこから言えること |
|---|---|---|
| 正体 | 連鎖律を計算グラフ上で出力側から適用 | 新理論ではなく、微分の効率的な実装 |
| 主役 | 誤差信号 δ を逆向きにバケツリレー | δ×入力 の外積で各層の重み勾配が確定 |
| 速さの源 | 共通項 δ の再利用+逆モード自動微分 | 全勾配が順伝播とほぼ同コスト O(N) |
| 弱点 | δ の繰り返し積による消失・爆発 | ReLU・残差接続・正規化・クリッピングで緩和 |
バックプロパゲーションは「魔法のような学習法」ではなく、合成関数の微分(連鎖律)を、計算グラフ上で最も無駄なく適用するための順序づけです。出力側から δ を流すことで共通項を再利用し、数百万のパラメータの勾配を順伝播1回ぶんの手間で一括取得する。この見立てを持つと、勾配消失のような問題が「アルゴリズムのバグ」ではなく「掛け算の繰り返しという構造の帰結」だと腑に落ち、対症療法ではなく原理に基づいた設計判断ができるようになります。求めた勾配の活かし方は 勾配降下法 へ続きます。
AI/機械学習 Article
誤差逆伝播法(バックプロパゲーション)の数理を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
バックプロパゲーション
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
効率の鍵は共通項の再利用。各ノードで局所的な偏微分(ヤコビアン)と、上流から届いた誤差信号 δ を掛けるだけで済み、計算量は順伝播とほぼ同じ O(パラメータ数)。数値微分の N 倍を回避する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「バックプロパゲーション / 連鎖律」に近いか確認する。
- 強みである「バックプロパは「合成関数の微分=連鎖律」を計算グラフ上で出力側から入力側へ逆順に適用し、全パラメータの勾配を一括で求めるアルゴリズム。新しい数学ではなく、連鎖律の効率的な実装。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。