誤差逆伝播法とは

誤差逆伝播法とは

誤差逆伝播法(バックプロパゲーション, Backpropagation)とは
ニューラルネットワークの学習に用いられる勾配降下法(Gradient Descent)を
効率的に計算するアルゴリズムです。

概要

ニューラルネットワークの学習では、損失関数(Loss Function) を最小化するように重み(パラメータ)を調整します。そのために、誤差(損失)を出力層から順に逆方向に伝播させ、各層の重みの勾配を計算するのが「誤差逆伝播法」です。


手順

  1. 順伝播(Forward Propagation)
    • 入力層から出力層へ情報を伝播させ、予測値を計算する。
  2. 誤差の計算
    • 予測値と正解データの誤差(損失関数の値)を計算する。
  3. 逆伝播(Backward Propagation)
    • 出力層の誤差 をもとに、損失関数の重みに対する偏微分(勾配)を計算。
    • 誤差を隠れ層へ逆方向に伝播 させながら、各層の重みの勾配を求める。
  4. 重みの更新
    • 勾配を使い、勾配降下法(Gradient Descent) などの最適化手法で重みを調整。

数式(簡単な例)


1. 順伝播(Forward Propagation)

W(重み)、x(入力)、b(バイアス)、f(活性化関数)


 y = f(Wx + b)


2. 損失関数 L の計算 例えば、二乗誤差(MSE) の場合


 L = \frac{1}{2} (y_{\text{pred}} - y_{\text{true}})^2


3. 逆伝播(Backward Propagation)

① 出力層の誤差の計算


 \frac{\partial L}{\partial y} = (y_{\text{pred}} - y_{\text{true}})


② 連鎖律(Chain Rule)を使って勾配を計算


 \frac{\partial L}{\partial W} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial W}


ここで


 \frac{\partial y}{\partial W} = x \cdot f'(Wx + b)


よって


 \frac{\partial L}{\partial W} = (y_{\text{pred}} - y_{\text{true}}) \cdot x \cdot f'(Wx + b)


4. 重みの更新 勾配降下法(Gradient Descent) による更新


 W' = W - \eta \frac{\partial L}{\partial W}


η\eta = 学習率(Learning Rate)



ポイント

  • 連鎖律(Chain Rule)を利用 して勾配を求める。
  • 出力層 → 隠れ層 → 入力層 の順で誤差を伝播 させる。
  • 勾配降下法 で重みを調整し、損失を小さくする。

実装(Python + TensorFlow)

import tensorflow as tf
import numpy as np

# データセット(入力 x, 正解 y)
x_data = np.array([[0], [1]], dtype=np.float32)
y_data = np.array([[0], [1]], dtype=np.float32)

# モデル(1層のシンプルなニューラルネットワーク)
model = tf.keras.Sequential([
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# 損失関数と最適化手法の指定
model.compile(optimizer='sgd', loss='mse')

# 学習
model.fit(x_data, y_data, epochs=1000, verbose=0)

# 予測
print(model.predict([[0], [1]]))

解説

  • Dense(1, activation='sigmoid') → 1つのニューロンでシグモイド関数を使う。
  • loss='mse' → 二乗誤差を最小化するように学習。
  • optimizer='sgd' → 確率的勾配降下法(SGD)で誤差を減らす。

まとめ

誤差逆伝播法(Backpropagation)は、
誤差を出力層から逆方向に伝播させることで、各層の勾配を効率的に計算する手法
ニューラルネットワークの学習において最も重要なアルゴリズムの1つ
勾配降下法と組み合わせて、重みを最適化する