#07 人工知能入門 DNN基礎

誤差逆伝播——間違いから学ぶ仕組み

「どの重みが悪かったのか」を探る

前回、損失関数で「どれだけ間違えたか」を数値化できました。次の問いは「どの重みを、どの方向に、どれだけ修正すればいいか?」です。

これを解決するのが誤差逆伝播(バックプロパゲーション、Backpropagation) です。


責任の配分という考え方

誤差逆伝播は「間違いの責任を各重みに配分する」というイメージで考えると理解しやすいです。

例えばチームのプロジェクトが失敗したとき、誰がどれだけ責任があるかを調べますよね。責任が重い人(間違いに大きく影響した重み)ほど多く修正し、責任が軽い人(あまり影響しなかった重み)はあまり修正しない、というイメージです。

出力層で間違いが発生

「どの隠れ層ニューロンが、どれだけこの間違いに影響した?」

「そのニューロンへの入力は、どの重みが影響した?」

出力層 → 隠れ層 → 入力層と、逆向きに責任を伝播していく

これが「逆伝播」の意味です。フォワードパスとは逆方向に計算が進みます。


勾配(グラジェント)という概念

誤差逆伝播では、各重みに対して勾配(gradient) を計算します。

勾配とは「この重みを少し変えると、損失はどう変わるか」を表す値です。

勾配 > 0 の場合: 重みを増やすと損失が増える → 重みを減らすべき
勾配 < 0 の場合: 重みを増やすと損失が減る → 重みを増やすべき
勾配 ≈ 0 の場合: 重みを変えても損失はほぼ変わらない → 修正不要

勾配降下法

勾配が計算できたら、次は勾配降下法(Gradient Descent) で重みを更新します。

新しい重み = 現在の重み - 学習率 × 勾配

例: 重み = 0.5, 勾配 = 0.3, 学習率 = 0.01 のとき
新しい重み = 0.5 - 0.01 × 0.3 = 0.5 - 0.003 = 0.497

学習率(Learning Rate) は「一度にどれだけ重みを変えるか」を決める係数です。


山を下るイメージ

勾配降下法は「山を下る」イメージで理解できます。

損失の大きさ

│    ∧         ← 現在地(損失が大きい)
│   / \
│  /   \
│ /     \___/\____
│              ↑
│          目指す谷(損失が小さい)
└──────────────────→ 重みの値
  • 現在地の「斜面の傾き(勾配)」を計算する
  • 傾きの方向と逆向き(下り坂の方向)に少し進む
  • これを繰り返すと谷(損失が小さい場所)に近づいていく

学習率が大きすぎると・小さすぎると

学習率 小さすぎる場合:       学習率 大きすぎる場合:
 ─────○→→→→→→              谷を飛び越える
      (歩幅が小さくて        ○→→→→→→↗
        なかなか進まない)    ↑  ↑  ↑  ↑
                             どんどん外れていく
学習率特徴
大きすぎる損失が下がらず発散することも
小さすぎる学習が遅い、局所解に陥りやすい
適切安定して損失が下がる

誤差逆伝播の全体の流れ

# 概念的な擬似コード(実際にはフレームワークが自動で行う)

for each バッチ(データのひとかたまり):
    # 1. フォワードパス(順伝播)
    予測値 = ネットワーク(入力)

    # 2. 損失を計算
    損失 = 損失関数(予測値, 正解値)

    # 3. バックプロパゲーション(逆伝播)
    各重みの勾配 = 損失.backward()  # 自動微分

    # 4. 重みを更新(勾配降下法)
    for 各重み w:
        w = w - 学習率 × w の勾配

PyTorchなどのフレームワークでは loss.backward() の1行で逆伝播の計算がすべて自動的に行われます。数学的には微分の連鎖律(チェーンルール)を使いますが、コードを書く側は気にしなくて大丈夫です。


直感的なまとめ

誤差逆伝播をひと言で表すなら「試験で間違えた問題を見直して、何が悪かったかを分析し、次に活かす」作業です。

  1. 試験を受ける(フォワードパス)
  2. 採点する(損失を計算)
  3. どこで間違えたか分析する(バックプロパゲーション)
  4. 間違えた点を修正する(重みの更新)
  5. また試験を受ける(繰り返し)

まとめ

  • 誤差逆伝播は「間違いの責任を各重みに配分する」仕組み
  • 勾配(gradient)は「この重みを変えると損失がどう変わるか」を表す
  • 勾配降下法では「勾配の逆方向に重みを少しずつ更新」する
  • 学習率は1回の更新の大きさ——大きすぎても小さすぎてもNG
  • 現代のフレームワークでは自動微分で逆伝播が自動計算される

次回は、この一連の学習ループを管理する仕組み——バッチ、エポック、学習率、過学習について学びます。