誤差逆伝播法
誤差逆伝播法(Backpropagation)は、ニューラルネットワークの学習を支える中核的なアルゴリズムである。
出力と教師データとの差(誤差)を基に、ネットワーク内部の重みを効率的に更新することで、モデルの精度を向上させる。
1986年にRumelhartらによって提唱され、現在の深層学習(ディープラーニング)の発展を支える基盤技術となっている。
ニュートラルネットワークについては以下参考
誤差逆伝播法の目的
誤差逆伝播法の主な目的は以下の通りである。
-
誤差を最小化すること
損失関数によって定義される誤差を最小にする方向へ重みを更新する。 -
効率的な学習を実現すること
各層のパラメータに対する影響度(勾配)を効率よく計算できる。 -
深層ネットワークを学習可能にすること
多層構造を持つニューラルネットワークでも現実的な計算量で学習できる。
誤差逆伝播法の全体像
誤差逆伝播法は、以下の4つのステップから構成される。
順伝播(Forward Propagation)
入力データをネットワークに与え、各層で重み・バイアス・活性化関数を適用しながら出力を計算する。
誤差の計算
モデルの出力と正解データとの差を損失関数によって数値化する。
代表的な損失関数には以下がある。
-
平均二乗誤差(MSE):回帰問題で使用される
-
クロスエントロピー:分類問題で使用される
逆伝播(Backward Propagation)
出力層で得られた誤差を起点として、入力層方向へ誤差を伝播させる。
この際、**連鎖律(Chain Rule)**を用いて、各重みが誤差にどれだけ影響しているか(勾配)を計算する。
重みの更新
勾配降下法を用いて重みを更新する。
誤差逆伝播法と連鎖律の関係
誤差逆伝播法の数学的核心は連鎖律にある。ニューラルネットワークでは、
-
誤差は出力の関数
-
出力は中間層の出力の関数
-
中間層の出力は重みの関数
というように、誤差は複数の関数が連なった形で定義されている。
連鎖律を用いることで、「最終的な誤差が、この重みにどれだけ影響されているか」を段階的に分解して計算できる。これにより、深いネットワークでも効率的に勾配計算が可能となる。
活性化関数との関係
誤差逆伝播法の挙動は、活性化関数の選択に大きく左右される。
-
シグモイド関数
勾配が小さくなりやすく、勾配消失問題が発生しやすい。 -
ReLU
勾配消失を軽減し、深層ネットワークでの学習を可能にした。 -
Leaky ReLU
ReLUの欠点を補い、より安定した学習を実現する。
活性化関数の微分が逆伝播計算に直接影響するため、選択は極めて重要である。
誤差逆伝播法のメリット
-
ニューラルネットワークを効率的に学習できる
-
多層構造でも現実的な計算量で最適化可能
-
画像・音声・自然言語など幅広い分野で応用可能
誤差逆伝播法のデメリット
-
計算量が多く、計算資源を必要とする
-
勾配消失・勾配爆発問題が発生する可能性がある
-
ハイパーパラメータ調整が難しい
-
誤差逆伝播法の改良手法
これらの課題に対処するため、以下の最適化手法が提案されている。
-
モーメンタム
-
AdaGrad
-
RMSProp
-
Adam
特に Adam は現在最も広く使われている最適化手法の一つである。
勾配降下法についてざっくり解説
更新量:今回の学習で、重みをどれだけ動かすか
重み:モデルが「どれをどれくらい重要視するか」を決める数値
この時、動かした分の重みの大きさΔwとすると、Δwは以下のように表すことができる。
| 用語 | 何を表す? |
|---|---|
| 誤差 (E) | どれくらい間違っているか |
傾き ( ) |
どっちに動かせば誤差が減るか |
| 学習係数 ( η ) | どれくらい強く動かすか |
| 更新量 ( Δw ) | 実際に動かす量 |
連鎖率
連鎖律(Chain Rule)とは、合成関数を微分するための公式である。
高校数学で学ぶ「合成関数の微分公式」を、多変数関数に拡張したものと考えると分かりやすい。
連鎖律は数学だけでなく、物理や機械学習でも頻繁に用いられる。特に、ニューラルネットワークの誤差逆伝播法は、連鎖律に基づいて構成されている。
高校数学における連鎖律(復習)
例えば、次の関数を考える。
という合成関数である。
と計算できる。
多変数関数における連鎖律
多変数
2つ以上の変数を入力に持つ関数の総称
- 2変数 → 1変数の場合
2変数関数
と置換したとき、連鎖律は次の形になる。
と置換すると、偏微分は次のように表される。
これが多変数関数における連鎖律である。
連鎖律の考え方(作り方)
連鎖律は次の手順で機械的に作れる。
微分したい形を書く
経路が複数あればすべて足す
この「経路ごとに掛けて足す」という考え方は、
ニューラルネットワークの勾配計算と完全に一致している。
連鎖律の具体例
例題
次の関数について、偏微分を求めよ。
とおくと、
である。
連鎖律より、
それぞれ計算すると、
よって、
誤差逆伝播法のわかりやすい例
例:トーストを焼くロボット 🤖🍞
問題設定
あるロボットが「焼き時間(重み)」を調整して、「ちょうど良い焼き色」のトーストを作ろうとしている。
順伝播(まずやってみる)
ロボットのルールは単純だ。
入力:トーストを入れる
重み(w):焼き時間(例:5分)
出力:焼き色
ロボットは
👉「5分焼けばちょうどいいはず!」
と思って焼いた。
結果:
実際の焼き色:黒焦げ
正解:きつね色
誤差を計算する(どれくらい失敗した?)
ロボットは考える。
「黒焦げ − きつね色 = 焼きすぎた」
これが 誤差(E) である。
大きく焼きすぎ → 誤差は大きい
少し焼きすぎ → 誤差は小さい
逆伝播(原因をさかのぼる)
ロボットは次にこう考える。「なぜ黒焦げになった?」
答えはシンプル。焼き時間(重み w)が長すぎた
つまり、「誤差の原因はこの重みだ」
これが誤差を原因(重み)まで逆にたどる= 誤差逆伝播
重みを更新する(次はどう直す?)
ロボットは決断する。
焼きすぎた
→ 焼き時間を短くする
でも、どれくらい短くする?
そこで登場するのが👇
| 要素 | 意味 |
|---|---|
| 傾き | 焼き時間を増やすとどれだけ焦げるか |
| 学習率 η | どれくらい思い切って直すか |
| 更新量 Δw | 実際に短くする時間 |
結果:
5分 → 4分30秒
次の日(学習の繰り返し)
まだ少し焦げた
→ さらに短くする
ちょうど良い
→ ほぼ変更しない
これを何度も繰り返すと…
🎉 完璧な焼き加減を覚えるロボットになる
さらに数字を使って実践
では 最小構成(1入力・1重み・1出力)で、順伝播 → 誤差 → 逆伝播 → 更新を全部数式でやる。
やりたいこと:入力xから出力yを予測したい
理想は以下
モデル(1ニューロン)
w:重み(学習したい値)
順伝播(Forward Propagation)
初期値として
w=1
とする。
誤差(損失)の計算
今回は 二乗誤差関数を使う。
計算すると:
逆伝播(勾配を求める)
ただしEはwを直接使っていない。なので 連鎖律を使う。
重みの更新
学習率をη=0.1とする。
誤差は?
🎉 誤差が 2 → 0.72 に減った!
参考






































