Math World Lab

誤差逆伝播法(バックプロパゲーション)と合成関数の微分

ディープラーニングの学習エンジン — 微分の連鎖律(チェインルール)によるパラメータ更新

xhy順伝播 ➔◀ 逆伝播 (∂L/∂w)Chain Rule ∂L/∂w = δ · a
この単元の発見をシェア
3行要約(Key Takeaways / AIOサマリー)
1
AIが賢くなる(学習する)とは、出力の『予測誤差』を最小化するように数十億個の重みパラメータを微分で微調整すること
2
合成関数の微分公式である『連鎖律(Chain Rule)』を用いることで、出力層の誤差を出力から入力方向へと効率的に逆流(逆伝播)できる
3
各重みの勾配(傾き)が求まれば、最急降下法(θ←θ−η∇L\theta \leftarrow \theta - \eta \nabla L)によって損失が減る方向へと重みを更新できる

なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値

Purpose & Motivation

なぜ生まれたのか?

深層学習ブームの立役者ジェフリー・ヒントンらが1986年に再発見した数式。何百層ものディープな層を持つニューラルネットワークであっても、高校数学の『微分の連鎖律』さえあれば、全自動で微分係数を計算して学習させることができます。

身につく武器・思考力

自動微分(Autograd)の数学的理解、PyTorch等の深層学習フレームワークの内部動作の直感、数理最適化の確固たる基盤

実社会・ITでの活躍現場

  • •PyTorch (`loss.backward()`) や TensorFlow (`tf.GradientTape`) の自動微分エンジン
  • •大規模言語モデル(LLM)の事前学習およびRLHF(人間のフィードバックによる強化学習)
  • •自動運転車の障害物検知ニューラルネットワークのパラメータ最適化
  • •画像生成モデル(Stable Diffusion等)のノイズ除去ネットワークの重み学習

Layer 1 — 直感・シミュレーター

入力値 xx と目標値 yy を設定し、ネットワークの重み w1,w2w_1, w_2 を調整してみましょう。「1ステップ逆伝播」ボタンを押すと、出力誤差から連鎖律(掛け算)によって各層へ勾配が逆流し、重みが更新されて損失(Loss)がゼロに向かって減っていく様子を観察できます。

AIの学習エンジン:合成関数の微分

誤差逆伝播(バックプロパゲーション):微分の掛け算が後ろ向きに流れて重みを直す

青い矢印(順伝播)で計算して出た誤差(Loss)に対し、 赤い矢印(逆伝播)で微分の連鎖律(チェインルール)を逆流させて勾配を求め、重み $w_1, w_2$ を更新します。

順伝播(Forward: 出力計算) 逆伝播(Backward: 勾配逆流)
入力 x2w₁=0.50∂L/∂w₁=-0.32隠れ a₁1.00w₂=0.80∂L/∂w₂=-0.20予測 y0.80正解: 1L=0.020
現在の二乗誤差損失(Loss)
0.0200
連鎖律(チェインルール)の実計算式:
∂L/∂w₁ = (y - y_true) × w₂ × ReLU'(z₁) × x
= (-0.20) × (0.80) × (1) × (2) = -0.320
直感チェック!ミニクイズ

深層ニューラルネットワークで層が深くなると、誤差逆伝播の際に勾配がどんどん小さくなって初段の層が全く学習しなくなる現象を何と呼ぶか?

Layer 2 — 定義・受験・証明

定義

**誤差逆伝播法(Backpropagation)**とは、ニューラルネットワークの損失関数 LL を各層の重みパラメータ ww で偏微分した勾配 ∂L∂w\frac{\partial L}{\partial w} を、出力層から入力層に向かって連鎖律(Chain Rule)を用いて再帰的に計算する高速アルゴリズムである。

公式・数理モデル

連鎖律(チェインルール): ∂L∂w1=∂L∂y⋅∂y∂z2⋅∂z2∂a1⋅∂a1∂z1⋅∂z1∂w1重み更新(勾配降下法): w←w−η∂L∂w\text{連鎖律(チェインルール): } \frac{\partial L}{\partial w_1} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial z_2} \cdot \frac{\partial z_2}{\partial a_1} \cdot \frac{\partial a_1}{\partial z_1} \cdot \frac{\partial z_1}{\partial w_1} \text{重み更新(勾配降下法): } w \leftarrow w - \eta \frac{\partial L}{\partial w}

証明・導出

**単純な2層ネットワークでの連鎖律の導出** 入力 xx、第1層の重み w1w_1、活性化関数 σ\sigma、第2層の重み w2w_2、二乗誤差損失 L=12(ypred−ytrue)2L = \frac{1}{2}(y_{\text{pred}} - y_{\text{true}})^2 を考える。 順伝播の計算グラフ:

z1=w1x  ⟹  a1=σ(z1)  ⟹  z2=w2a1  ⟹  ypred=z2z_1 = w_1 x \implies a_1 = \sigma(z_1) \implies z_2 = w_2 a_1 \implies y_{\text{pred}} = z_2

各中間変数の局所的な偏微分(ローカル勾配)を計算すると: 1. 出力損失の微分: ∂L∂ypred=ypred−ytrue\frac{\partial L}{\partial y_{\text{pred}}} = y_{\text{pred}} - y_{\text{true}} 2. 第2層の重みへの影響: ∂ypred∂w2=a1\frac{\partial y_{\text{pred}}}{\partial w_2} = a_1 3. 第1層への誤差の逆流: ∂ypred∂a1=w2\frac{\partial y_{\text{pred}}}{\partial a_1} = w_2 4. 活性化関数の微分: ∂a1∂z1=σ′(z1)\frac{\partial a_1}{\partial z_1} = \sigma'(z_1) 5. 第1層の重みへの影響: ∂z1∂w1=x\frac{\partial z_1}{\partial w_1} = x

合成関数の微分律(連鎖律)により、第1層の重み w1w_1 に関する損失の微分はこれらの一連の積として求まる:

∂L∂w1=(ypred−ytrue)×w2×σ′(z1)×x\frac{\partial L}{\partial w_1} = (y_{\text{pred}} - y_{\text{true}}) \times w_2 \times \sigma'(z_1) \times x

数値微分のようにパラメータごとに何度も順伝播をやり直す必要がなく、**たった1回の逆伝播(掛け算の連鎖)で全重みの勾配が同時に手に入る**(計算量 O(N)O(N))。

押さえておきたいポイント

  • 数値微分(微小量 hh を足して引く方法)に比べ、逆伝播は数万倍以上高速に全パラメータの微分を計算できる
  • 誤差信号 δ=∂L∂z\delta = \frac{\partial L}{\partial z} が後ろから前へと順次バトンタッチ(積算)されていく
  • 活性化関数にシグモイドを使うと微分値が常に 0.250.25 以下になるため、多層で勾配が消滅する(勾配消失問題)。これを解決したのがReLU関数である
参照基準・学習指導要領との対応

本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。

Layer 3 — 工学応用・現場実装

NumPyによる2層ニューラルネットワークと逆伝播のスクラッチ実装

PyTorchなどのフレームワークを使わずに純粋な行列積と連鎖律だけで実装した学習コードです。

1import numpy as np
2
3# シグモイド関数とその微分
4def sigmoid(x): return 1.0 / (1.0 + np.exp(-x))
5def d_sigmoid(x): return sigmoid(x) * (1.0 - sigmoid(x))
6
7# 順伝播
8x = np.array([1.0, 2.0])
9y_true = np.array([1.0])
10w1 = np.random.randn(2, 3) # 入力2 -> 隠れ3
11w2 = np.random.randn(3, 1) # 隠れ3 -> 出力1
12
13z1 = np.dot(x, w1)
14a1 = sigmoid(z1)
15y_pred = np.dot(a1, w2)
16loss = 0.5 * (y_pred - y_true)**2
17
18# 逆伝播(連鎖律による勾配計算)
19d_loss = y_pred - y_true
20d_w2 = np.outer(a1, d_loss) # 第2層重みの勾配
21
22d_a1 = np.dot(d_loss, w2.T)
23d_z1 = d_a1 * d_sigmoid(z1)
24d_w1 = np.outer(x, d_z1) # 第1層重みの勾配
25
26# 勾配降下法による重み更新
27lr = 0.1
28w1 -= lr * d_w1
29w2 -= lr * d_w2
この単元につながる学習ロードマップ

次に学ぶならコレ!おすすめトピック

この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元

数理モデル・概念が近い関連トピック

関連度高工学応用

勾配降下法

谷底を探すAIの基本アルゴリズム

関連度高工学応用

ニューラルネットワークの数学(順伝播と活性化関数)

入力に重みを掛けて足し合わせ、非線形関数で発火させるAIの基本素子

Q×Kᵀ➔Vsoftmax(QKᵀ / √d) V
関連度高工学応用

アテンション機構とTransformerの数学

ChatGPTやLLMの心臓部 — Query・Key・Valueの内積とSoftmaxによる文脈理解

同じレベルで次に挑戦したいトピック

同レベル推薦大学数学

固有値・固有ベクトル

行列で変換しても「向きが変わらない」特別な方向

同レベル推薦大学数学

フーリエ変換と周波数分解

どんなに複雑な波も、単純なサイン波の重ね合わせに分解できる

同レベル推薦大学数学

ベイズの定理(条件付き確率と事前・事後確率)

新たな情報や証拠(エビデンス)を得て「確信度」を更新する確率論

工学・実社会での応用先でつながるトピック

工学・実践連携小学校・算数

平均値・中央値・データの活用

棒グラフを動かして、平均と中央値の違いを体で覚えよう

工学・実践連携中学数学

四分位範囲・箱ひげ図

データを並べて4等分すると、散らばり具合が一目でわかる

✨1% 排出100連ガチャ当選 63.4%爆死 36.6%1/e の法則
工学・実践連携中学数学

ガチャ確率と大数の法則(確率の心理バイアス)

「確率1%を100回引けば当たる?」余事象と二項分布が暴くスマホゲームの現実

あなたの数学力をさらに伸ばす

数学の弱点診断や算数パズルに挑戦してみませんか?

簡単な質問に答えてあなたにぴったりの学習ロードマップを発見したり、直感を試すパズルで数の面白さを体験できます。