目次
誤差逆伝播法とは
誤差逆伝播法(バックプロパゲーション, Backpropagation)とは
ニューラルネットワークの学習に用いられる勾配降下法(Gradient Descent)を
効率的に計算するアルゴリズムです。
概要
ニューラルネットワークの学習では、損失関数(Loss Function) を最小化するように重み(パラメータ)を調整します。そのために、誤差(損失)を出力層から順に逆方向に伝播させ、各層の重みの勾配を計算するのが「誤差逆伝播法」です。
手順
- 順伝播(Forward Propagation)
- 入力層から出力層へ情報を伝播させ、予測値を計算する。
- 入力層から出力層へ情報を伝播させ、予測値を計算する。
- 誤差の計算
- 予測値と正解データの誤差(損失関数の値)を計算する。
- 予測値と正解データの誤差(損失関数の値)を計算する。
- 逆伝播(Backward Propagation)
- 出力層の誤差 をもとに、損失関数の重みに対する偏微分(勾配)を計算。
- 誤差を隠れ層へ逆方向に伝播 させながら、各層の重みの勾配を求める。
- 重みの更新
- 勾配を使い、勾配降下法(Gradient Descent) などの最適化手法で重みを調整。
- 勾配を使い、勾配降下法(Gradient Descent) などの最適化手法で重みを調整。
数式(簡単な例)
1. 順伝播(Forward Propagation)
W(重み)、x(入力)、b(バイアス)、f(活性化関数)
2. 損失関数 L の計算 例えば、二乗誤差(MSE) の場合
3. 逆伝播(Backward Propagation)
① 出力層の誤差の計算
② 連鎖律(Chain Rule)を使って勾配を計算
ここで
よって
4. 重みの更新 勾配降下法(Gradient Descent) による更新
= 学習率(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つ
✅ 勾配降下法と組み合わせて、重みを最適化する