テデトク

← コースに戻る

誤差逆伝播 — 連鎖律が勾配を運ぶ

第5章で「勾配さえあれば坂を下れる」と学びました。第6章で「予測は合成関数」だと見ました。この2つが合流します。深い合成関数の勾配を、賢く・使い回して計算する方法。それが誤差逆伝播です。正体は、高校第13章・微積第4章で習った合成関数の微分(連鎖律)の集大成にすぎません。

なぜ逆向きに計算するのか

損失 LL は、パラメータから何段もの関数を経た先にあります。各パラメータについて L/θ\partial L / \partial \theta を素朴に別々に求めると、共通部分を何度も計算して爆発します。そこで、出力側の誤差を入力側へ流し戻し、途中の計算を使い回します。順伝播で値を、逆伝播で勾配を運ぶ。行きと帰りの2パスで、全パラメータの勾配が一度に揃います。

触ってみる — 計算グラフを1ステップずつ

ミニネットの「1ニューロン → 1ニューロン」の1本道を計算グラフにしました。「次へ」で、まず順伝播(緑・左→右)で値を確定させ、続いて逆伝播(橙・右→左)で勾配を流し戻します。

x1.00u₁?a?z?ŷ?L?
Step 1/11
順伝播(緑・左→右): 入力 x=1.0x = 1.0 を置く

順伝播では xx から LL まで値が右へ右へ確定していきます。折り返した逆伝播では、各ノードが「上流から流れてきた勾配 × 自分のローカル微分」を計算して、さらに左へ渡す。この掛け算の連鎖が、連鎖律そのものです。

計算グラフと連鎖律

各ノードは、自分の出力を自分の入力で微分したローカル勾配を持ちます。たとえば y^=σ(z)\hat{y} = \sigma(z) のノードのローカル勾配は σ(z)=σ(z)(1σ(z))\sigma'(z) = \sigma(z)(1-\sigma(z))。逆伝播が渡す量は、

L(入力)=L(出力)(出力)(入力)\frac{\partial L}{\partial(\text{入力})} = \frac{\partial L}{\partial(\text{出力})} \cdot \frac{\partial(\text{出力})}{\partial(\text{入力})}

上流の勾配に、そのノードのローカル勾配を掛けるだけ。これを出力から入力へ順に掛け伝えると、どんなに深くても各パラメータの勾配が求まります。連鎖律 dLdx=dLdadadx\frac{dL}{dx} = \frac{dL}{da}\frac{da}{dx} を、グラフに沿って機械的に適用しているだけです。

ここまでは1本道(1つのノードの出力が1か所にしか使われない)の場合です。実際の計算グラフでは、1つのノードの出力が複数の先で使われる分岐が起きます。その場合は、多変数の連鎖律にしたがって、分岐した各経路から流れてくる勾配を足し合わせます。また、ノードの入出力がベクトル値のときはローカル勾配は行列(ヤコビアン)になり、上流の勾配ベクトルにはヤコビアンの転置を掛けます。掛け算・足し算という骨格は変わりませんが、スカラーの1本道はその特殊ケースです。

種明かし — 第5章の勾配は、これが供給していた

第5章の更新則 θθηL\theta \leftarrow \theta - \eta \nabla L で使う勾配 L\nabla L。それをどこから得ていたのか、ここで種明かしです。逆伝播が、全パラメータぶんの L/θ\partial L / \partial \theta をまとめて計算していました。順伝播で予測と損失を出し、逆伝播で勾配を出し、勾配降下で更新する。この3つが1回の学習ステップです。

現代のフレームワークは、この逆伝播を自動微分として自動化しています。順伝播の式さえ書けば、ローカル勾配と連鎖律の掛け合わせをライブラリが裏で組み立てる。手で微分を書く必要はありません。仕組みは、いま1ステップずつ見たものと同じです。

試してみよう

  • 逆伝播が出す勾配の符号は、何を教えていますか(その重みを増やすと損失が増えるか減るか。降下すべき向き)
  • tanh の入力が大きい(飽和した)ノードでは、ローカル勾配はどうなるでしょう(ほぼ 0。掛け算で下流の勾配も消えていきます)

理解チェック

逆伝播の勾配は、本当に正しい微分になっている?

なっています。確かめ方は、パラメータを少しだけ動かして損失の変化を測る数値微分 L(θ+h)L(θh)2h\frac{L(\theta+h) - L(\theta-h)}{2h} との照合です。逆伝播が出す解析的な勾配と、この数値微分は一致します(このコースの図の裏でも、両者が小数点以下まで合うことを検証しています)。

操作チャレンジ

1 / 3
問1・現在問2問3

小さな計算グラフ L=(y^t)2L = (\hat{y} - t)^2 の損失を、重み ww で最小にしてください(t=0.7t = 0.7)。

損失 L(w)=0.0162L(w) = 0.0162 予測 y^=0.573\hat{y} = 0.573(目標 t=0.7t=0.7、谷底へ)

式で確かめる

動かして掴んだ感覚を、式と言葉で確かめます。間違えても、ヒントと解説で戻れます。

確認 1 / 3

逆伝播で各ノードが下流(入力側)へ渡す勾配は、どう作られますか?

確認 2 / 3

あるノードで、上流から来た勾配 dLda=2\frac{dL}{da} = 2、ローカル勾配 dadx=3\frac{da}{dx} = 3 でした。このノードが下流へ渡す勾配 dLdx\frac{dL}{dx} はいくつですか?

確認 3 / 3

tanh の入力が大きく飽和したノードでは、逆伝播はどうなりますか?

この章の定義・定理・公式をまとめて確認する

7誤差逆伝播 — 連鎖律が勾配を運ぶ のまとめページへ

執筆: 中野竜之介 / 監修:

中野竜之介: 北海道大学大学院 数学専攻 博士課程・専門: 特殊関数論と代数幾何の交わり

最終更新: 2026-07-05

内容の誤り・誤植を見つけたら こちらから報告できます。いただいた指摘は 更新履歴 に反映します。