誤差逆伝播法とは?AIが「反省」して賢くなる仕組み
AIが答えを出す「順伝播」と、答え合わせの「損失関数」に続き、いよいよAI学習サイクルの最終章です。AIが自らの間違いを元に「反省」し、パラメータを修正していくプロセス、それが誤差逆伝播法(Backpropagation)です。今回は具体的な計算例を通して、その仕組みの核心に迫ります。
1. 誤差逆伝播法の役割:間違いの「責任のなすりつけ合い」
誤差逆伝播法は、出力層で計算された誤差(損失)を、逆方向(入力層に向かって)に伝播させ、最終的な間違いに対して「ネットワークのどの重みやバイアスが、どれくらい責任があるのか」を特定する手法です。
この「責任の大きさ」を数学的に表現したものが勾配(Gradient)です。勾配が分かれば、それぞれの重みを「どちらの方向に」「どれくらい」修正すれば損失が減るのかが分かり、AIは学習できるのです。
2. 具体例で学ぶ:計算で追う誤差逆伝播法
非常にシンプルなニューラルネットワークを使って、計算の流れを体験してみましょう。
シナリオ設定
- ネットワーク: 入力(1) - 隠れ層(1) - 出力(1) の単純な構造
- 活性化関数: 隠れ層ではシグモイド関数
を使用
- 損失関数: 平均二乗誤差 (MSE) を使用
- 入力と正解: 入力
のとき、正解
であるとします。
- 初期パラメータ: 重みとバイアスを適当に決めます。
- 学習率:
(どれくらい学習を進めるかの歩幅)
ステップ1:順伝播 (Forward Propagation) - まずは予測してみる
入力 を使って、ネットワークの最終的な予測値
を計算します。
隠れ層の計算:
出力層の計算:
AIは「0.425」と予測しました。正解は「1」なので、かなりズレていますね。
ステップ2:損失の計算 - どれくらい間違えたか?
平均二乗誤差(MSE)で損失 を計算します。
現在の損失は「0.33」です。この数値を0に近づけるのが目標です。
ステップ3:誤差逆伝播法 (Backpropagation) - 責任の所在を突き止める
ここからが本題です。損失 の原因を、出力側から入力側へ遡って探っていきます。
3-1. 出力層の重み
の勾配(責任)を計算する
まず、 が損失
にどれだけ影響を与えたか(勾配
)を計算します。これは「連鎖律」という考え方で、影響を分解して考えます。
- (A)
が1増えると、損失
はどれだけ増えるか?
- (B)
が1増えると、
はどれだけ増えるか?
勾配は (A) × (B) で求まります。
各パーツを計算すると...
よって、 の勾配は、
の責任の大きさは「-0.8625」であると分かりました。
【初心者向け解説】なぜ「かけ算」で勾配が求まるのか?(クリックで展開)
なぜ「かけ算」なのか?連鎖律(Chain Rule)の考え方
AIの計算は、玉ねぎの皮のように、何層にも重なった関数の組み合わせでできています。
今回の例では、重み が最終的な損失
に影響を与えるまでには、以下のような2段階のプロセスがあります。
- [影響①] 重み
を変えると、まず予測値
が変わる。
- [影響②] そして、その変わった予測値
が、最終的な損失
を変える。
私たちが知りたいのは「 をほんの少し動かしたとき、最終的に
はどれくらい動くのか?」ということです。これを数学的に表現したものが勾配
です。
この「間接的な影響」の大きさを知るために使うのが、高校数学で学ぶ連鎖律(Chain Rule)です。連鎖律は、それぞれの直接的な影響の大きさをかけ算することで、最終的な影響の大きさを計算できる、というルールです。
🚲 簡単な例え話:自転車のギア
- あなたがペダルを1回転させると、前のギアが2回転するとします (影響①)。
- 前のギアが1回転すると、後ろのタイヤが3回転するとします (影響②)。
では、あなたがペダルを1回転させたら、最終的にタイヤは何回転するでしょうか?
答えは `2回転 × 3回転 = 6回転` ですよね。このように、連続する影響は「かけ算」で全体の効果を求めることができます。
この考え方を、今回のAIの計算に当てはめてみましょう。
(A)と(B)の計算:それぞれの影響度を数値化する
ご質問の(A)と(B)は、まさにこの連鎖している影響を一つずつ分解して計算している部分です。数学的には**偏微分(へんびぶん)**という計算を行っています。
(A)
が1増えると、損失
はどれだけ増えるか?
これは、[影響②] の大きさを計算しています。数式で書くと となります。
- 元の式: 損失
は
で計算されます。
- 計算: この式を
で微分すると
となります。(合成関数の微分)
- 数値を代入:
、
を入れると、
- 意味: これは「もし
が1だけ増えたら、損失
は1.15だけ減る」という関係性を示しています。(マイナスなので減る方向です)
(B)
が1増えると、
はどれだけ増えるか?
これは、[影響①] の大きさを計算しています。数式で書くと となります。
- 元の式: 予測値
は
で計算されます。
- 計算: この式を
で微分すると、
にかかっている
だけが残ります。
- 数値を代入: 順伝播の計算から
でしたので、
- 意味: これは「もし
が1だけ増えたら、予測値
は0.75だけ増える」という非常に直接的な関係を示しています。
まとめ:影響のかけ算で最終的な責任を求める
これで、2つの影響の大きさが数値でわかりました。
- (A)
の変化が
に与える影響度: -1.15
- (B)
の変化が
に与える影響度: 0.75
連鎖律(自転車のギアの例え)に従って、これらをかけ算します。
この -0.8625 という最終的な勾配は、「 を少し増やすと、
を経由して、最終的に損失
が大きく減る」ということを意味しています。だからこそ、次のステップである「最適化」では、この勾配のマイナス方向(つまりプラス方向)に
を更新することで、AIは賢くなっていくのです。
3-2. 隠れ層の重み
の勾配(責任)を計算する
の勾配
は、さらに長い連鎖で計算します。
各パーツを計算すると...
これら全てを掛け合わせると、 の勾配は、
の責任の大きさは「-0.129」であると分かりました。
ステップ4:重みの更新 - パラメータを修正して賢くなる
全ての重みの責任(勾配)が分かったので、学習率 を使って重みを更新します。
の更新:
の更新:
この1回の学習で、重みは 、
とわずかに修正されました。この新しい重みを使ってもう一度順伝播を行えば、損失が先程の
よりも少しだけ小さくなっているはずです。