誤差逆伝播法(バックプロパゲーション)は、ニューラルネットワークの全パラメータの勾配を効率よく計算するアルゴリズムであり、深層学習のすべての学習を支えるエンジンです。この項目では、その数学的な核である連鎖律、層ごとの誤差を表すデルタ、そして現代フレームワークの基盤である計算グラフと自動微分を学びます。

📖 概要

勾配降下法でパラメータを更新するには、損失関数を各重み・バイアスで偏微分した勾配が必要です。パラメータが数百万〜数十億個あるネットワークで、これを一つずつ数値微分していては計算が破綻します。誤差逆伝播法は、微分の連鎖律を使い、出力層の誤差を入力側へ逆向きに伝播させることで、順伝播1回+逆伝播1回という少ない計算量で全パラメータの勾配を一括して求める方法です。

鍵となるのは、各層で共通に現れる中間量「デルタ(誤差信号)」を一度計算すれば、それを再利用して重みの勾配も前の層のデルタも求められるという構造です。一方、デルタが層を遡るたびに活性化関数の微分と重みが掛け合わされることが、勾配消失の原因にもなります。

この逆伝播の考え方を任意の計算に一般化したものが、計算グラフ上の自動微分です。PyTorchやTensorFlowなどのフレームワークは、順伝播の計算過程をグラフとして記録し、それを逆にたどることで勾配を自動計算しています。

🔍 キーワード解説

連鎖律

連鎖律(chain rule)は合成関数の微分公式で、z = f(y), y = g(x) のとき

dz/dx = (dz/dy)(dy/dx)

が成り立つというものです。ニューラルネットワークは「線形変換→活性化→線形変換→…→損失」という関数の合成なので、損失を任意の中間変数やパラメータで微分する操作は、経路に沿った局所的な微分の積(複数経路があれば和)に分解できます。誤差逆伝播法とは、この連鎖律を出力側から入力側へ系統的に適用し、途中結果を再利用しながら勾配を求めるアルゴリズムにほかなりません。

偏微分によるデルタ

偏微分によるデルタ(誤差信号 δ)は、損失Lを各層の線形変換の出力(活性化前の値)z で偏微分した量

δ = ∂L/∂z

です。デルタを使うと、逆伝播の計算は次の2つの規則に整理できます。層 l の重みを W、活性化関数を f、活性化後の出力を h とすると、

💡 ポイント
  • 重みの勾配: ∂L/∂W(l) = δ(l) h(l-1)^T(その層のデルタと前層の出力の積)
  • デルタの逆伝播: δ(l-1) = (W(l)^T δ(l)) ⊙ f'(z(l-1))(次層のデルタを重みの転置で戻し、活性化関数の微分を要素ごとに掛ける)

つまり、出力層のデルタさえ求まれば、あとは同じ形の計算を繰り返すだけで全層の勾配が得られます。出力層のデルタは損失関数と出力層の組み合わせで決まり、ソフトマックス+クロスエントロピーやシグモイド+バイナリクロスエントロピーでは δ = y - t(予測−正解)という簡潔な形になることが知られています。

勾配消失

勾配消失は、デルタの逆伝播式に含まれる「活性化関数の微分 f' と重みの積」が層を遡るたびに繰り返し掛けられることで、入力に近い層の勾配が指数的に小さくなる現象です。シグモイド関数の微分は最大0.25しかないため、シグモイドを使った深いネットワークでは特に顕著で、下位層の学習がほとんど進まなくなります。逆に積が1を大きく超え続けると勾配爆発が起こります。対策としては、飽和しにくいReLU系活性化関数、適切な重み初期化(Xavier/He)、バッチ正規化、残差接続(skip connection)などが挙げられます。誤差逆伝播の仕組みそのものから必然的に生じる問題である、という理解が重要です。

計算グラフと自動微分

計算グラフは、計算をノード(変数・演算)とエッジ(データの流れ)で表した有向グラフです。例えば L = (Wx + b - t)^2 のような式も、積・和・二乗といった単純な演算ノードの連なりとして表現できます。順伝播ではグラフを入力から出力へたどって値を計算し、逆伝播では出力から入力へ逆向きにたどりながら、各ノードの局所的な微分を連鎖律で掛け合わせて勾配を求めます。各ノードは「上流から来た勾配に自分の局所微分を掛けて下流へ流す」という局所的な仕事だけをすればよい、というのが計算グラフの強力な点です。

自動微分(automatic differentiation)は、この仕組みでプログラム中の計算の微分を機械的に求める技術です。数式を記号的に展開する数式微分とも、微小な差分で近似する数値微分とも異なり、丸め誤差の範囲で厳密な勾配を効率よく計算できます。出力側から入力側へたどる方式はリバースモードと呼ばれ、「多数の入力(パラメータ)に対して出力(損失)が1つ」という深層学習の構造に適しています。誤差逆伝播法は、リバースモード自動微分をニューラルネットワークに適用したものと位置づけられます。PyTorchのように実行時にグラフを構築する動的グラフ(define-by-run)方式が現在は主流です。

📝 試験でのポイント

💡 ポイント
  • 具体的な計算グラフ(加算・乗算・分岐などのノード)を与えて逆伝播の勾配を計算させる問題が最頻出です。「加算ノードは勾配をそのまま分配、乗算ノードは相手側の値を掛ける」という規則を確実に
  • デルタの定義(∂L/∂z)と、重み勾配=δ×前層出力、前層デルタ=重み転置×δ×f' という2つの式は穴埋め・実装問題で問われます
  • ソフトマックス+クロスエントロピーの出力層デルタが y - t になることは計算問題の頻出ポイントです
  • 勾配消失の原因(f' と重みの繰り返しの積)と対策(ReLU、初期化、正規化、残差接続)をセットで説明できるようにしましょう
  • 自動微分と数値微分・数式微分の違い、リバースモードが深層学習に適する理由(入力多・出力1)も正誤問題で狙われます

📚 まとめ

誤差逆伝播法は、連鎖律を出力側から系統的に適用し、デルタ(∂L/∂z)を再利用しながら全パラメータの勾配を効率よく求めるアルゴリズムです。デルタの逆伝播で活性化関数の微分と重みが繰り返し掛かる構造は、勾配消失の原因でもあります。この仕組みを一般化したものが計算グラフ上のリバースモード自動微分であり、現代の深層学習フレームワークの中核をなしています。