誤差逆伝播法は、ニューラルネットワークが勾配を計算するための方法です。つまり、各重みやバイアスを少し変えたときに損失がどれだけ変わるかを求めます。平たく言えば、どのパラメータが予測をどの方向にどれだけずらしたのかをモデルに知らせる仕組みです。

短く言うと流れは単純です。まずネットワークを順方向に計算し、誤差を測り、その後まったく同じ計算を連鎖律を使って逆向きにたどります。これによって深いモデルでも扱いやすくなります。各層は小さな局所的な微分だけを担当すればよいからです。

誤差逆伝播法が計算するもの

誤差逆伝播法そのものは、パラメータを更新しません。計算するのは Lw\frac{\partial L}{\partial w}Lb\frac{\partial L}{\partial b} のような勾配で、ここで LL は損失です。実際の更新は、勾配降下法のようなオプティマイザがそれらの勾配を使って行います。

モデルと損失関数が微分可能であるか、少なくとも勾配法に十分な程度に区分的に微分可能であれば、誤差逆伝播法によってそれらの勾配を1回の逆方向パスで効率よく計算できます。

なぜ連鎖律が中心的な考え方なのか

ニューラルネットワークは、長い計算の連なりだと考えてください。各層は入力を受け取り、変換し、その結果を次の層へ渡します。損失にたどり着く頃には、最終的な誤差はそれ以前のすべての選択に依存しています。

誤差逆伝播法は、各段階で局所的な問いを立てます。この中間値が少し変わったら、最終的な損失はどう変わるのか、という問いです。そうした局所的な影響を逆向きにたどりながら掛け合わせていくのが連鎖律です。これが平易な言い方での連鎖律の意味です。

1つのニューロンによる誤差逆伝播の例

入力が1つのニューロンを使います。

z=wx+bz = wx + b a=σ(z)a = \sigma(z) L=12(ay)2L = \frac{1}{2}(a - y)^2

ここで、xx は入力、ww は重み、bb はバイアス、aa は予測値、yy は目標値、σ\sigma はシグモイド関数です。

次の値を使います。

x=2,w=0.5,b=0,y=1.x = 2, \qquad w = 0.5, \qquad b = 0, \qquad y = 1.

ステップ1: 順方向パス

まず、ニューロンの重み付き和を計算します。

z=wx+b=0.52+0=1.z = wx + b = 0.5 \cdot 2 + 0 = 1.

次にシグモイドを適用します。

a=σ(1)0.731.a = \sigma(1) \approx 0.731.

続いて損失を計算します。

L=12(0.7311)20.036.L = \frac{1}{2}(0.731 - 1)^2 \approx 0.036.

予測値は目標値より低いので、損失は正になります。

ステップ2: 逆方向パス

次に、重みに関する勾配を計算します。

損失から始めて内側へたどります。

La=ay.\frac{\partial L}{\partial a} = a - y.

シグモイドについては、

az=a(1a).\frac{\partial a}{\partial z} = a(1-a).

重み付き和については、

zw=x,zb=1.\frac{\partial z}{\partial w} = x, \qquad \frac{\partial z}{\partial b} = 1.

では、これらを連鎖させます。

Lw=Laazzw=(ay)a(1a)x.\frac{\partial L}{\partial w} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial w} = (a-y)a(1-a)x. Lb=Laazzb=(ay)a(1a).\frac{\partial L}{\partial b} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial b} = (a-y)a(1-a).

数値を代入すると、

Lb(0.7311)(0.731)(10.731)0.0529\frac{\partial L}{\partial b} \approx (0.731 - 1)(0.731)(1 - 0.731) \approx -0.0529 Lw(0.0529)(2)0.1058.\frac{\partial L}{\partial w} \approx (-0.0529)(2) \approx -0.1058.

負の符号は重要です。ここでは wwbb を少し増やすと損失が減ることを意味しています。現在の予測値が低すぎるので、この状況と一致しています。

学習率 η=0.1\eta = 0.1 の勾配降下法を使うと、

wnew=wηLw=0.50.1(0.1058)0.5106w_{\text{new}} = w - \eta \frac{\partial L}{\partial w} = 0.5 - 0.1(-0.1058) \approx 0.5106 bnew=bηLb=00.1(0.0529)0.0053.b_{\text{new}} = b - \eta \frac{\partial L}{\partial b} = 0 - 0.1(-0.0529) \approx 0.0053.

これが縮小版の全体像です。順方向パス、損失、逆方向パス、更新、という流れです。

なぜ誤差逆伝播法は深いネットワークでも機能するのか

より深いネットワークでも、やることは層ごとに同じです。主な違いは、各隠れ層が後ろの層を通して間接的に損失へ影響するため、その勾配に連鎖律の項がさらに多く含まれることです。

それでも誤差逆伝播法が実用的なのは、各層が自分の局所微分と、その次の層から来る信号だけを使えばよいからです。各パラメータごとにネットワーク全体を最初から微分し直す必要はありません。

誤差逆伝播法でよくあるミス

誤差逆伝播法と勾配降下法を混同する

誤差逆伝播法は勾配を計算します。勾配降下法はその勾配を使ってパラメータを更新します。密接に関係していますが、同じ段階ではありません。

損失が最後にあることを忘れる

逆方向パスは損失から始まります。任意の隠れ層から始まるわけではありません。損失が何に依存しているかを見失うと、微分の連鎖はたいてい途中で崩れます。

活性化関数の性質を無視する

活性化関数の中には、ある領域で非常に小さな勾配しか出さないものがあります。それが多くの層で繰り返し起こると、学習は遅くなります。

1回の逆方向パスでモデルが学習したと思い込む

1回の逆方向パスで得られるのは、1つのバッチに対する1組の勾配です。通常の学習では、多くの例に対して何度も更新を繰り返す必要があります。

誤差逆伝播法はいつ使われるか

誤差逆伝播法は、多層パーセプトロン、畳み込みネットワーク、再帰モデル、Transformer など、多くのニューラルネットワークを学習させるための標準的な勾配計算法です。

使うオプティマイザは変わることがありますし、アーキテクチャによっては実用上の工夫が加わることもあります。それでも中心となる考え方はたいてい同じです。損失を計算し、勾配を後ろ向きに伝播させ、将来の誤差を減らすようにパラメータを更新します。

覚えやすい実用的な見方

誤差逆伝播法は、多層モデルの内部で貢献と責任を割り当てるための整理された方法です。出力が間違っていたとき、その誤差を後ろ向きにたどることで、各パラメータは自分がどのように影響したかという信号を受け取ります。

だからこそ、「ニューラルネットワークがどう学習するか」という表現は、だいたい正しいのです。学習そのものはパラメータ更新を繰り返すことで起こり、誤差逆伝播法はその更新をランダムではなく根拠あるものにします。

似た問題を試してみる

同じ例のまま、目標値だけを y=1y = 1 から y=0y = 0 に変えてみてください。Lw\frac{\partial L}{\partial w}Lb\frac{\partial L}{\partial b} を計算し直し、符号がどう反転するかを確かめましょう。この1か所の変更だけでも、式を暗記するより損失の役割がずっとはっきり見えてきます。

問題の解き方でお困りですか?

問題をアップロードすると、検証済みのステップバイステップ解答が数秒で届きます。

GPAI Solver を開く →