月影

日々の雑感

【計算例で学ぶ】AI学習の全サイクル:順伝播から最適化までを徹底解説

【AI学習の全サイクル解説】順伝播から最適化まで計算例で学ぶ

AIが予測を立て、間違いを反省し、賢くなっていく――その学習の全サイクルを、一つの記事で追いかけます。「順伝播」「損失計算」「誤差逆伝播法」「最適化」という一連の流れを、具体的な計算例を通して、ステップバイステップで解き明かしていきましょう。

シナリオ設定

  • ネットワーク: 入力(1) - 隠れ層(1) - 出力(1) の単純な構造
  • 活性化関数: 隠れ層ではシグモイド関数  \sigma(z) を使用
  • 損失関数: 平均二乗誤差 (MSE) を使用
  • 入力と正解: 入力  x=2 のとき、正解  y_{true}=1 であるとします。
  • 初期パラメータ: 重みとバイアスを適当に決めます。  w_1=0.5, b_1=0.1, w_2=0.3, b_2=0.2
  • 学習率:  \eta = 0.1 (どれくらい学習を進めるかの歩幅)

ステップ1:順伝播 (Forward Propagation) - まずは予測してみる

入力  x=2 を使って、ネットワークの最終的な予測値  y_{pred} を計算します。

隠れ層の計算:

 z_1 = w_1 \cdot x + b_1 = 0.5 \times 2 + 0.1 = 1.1
 a_1 = \sigma(z_1) = \frac{1}{1 + e^{-1.1}} \approx \frac{1}{1 + 0.333} \approx 0.75

出力層の計算:

 y_{pred} = w_2 \cdot a_1 + b_2 = 0.3 \times 0.75 + 0.2 = 0.225 + 0.2 = 0.425

AIは「0.425」と予測しました。正解は「1」なので、かなりズレていますね。

ステップ2:損失の計算 - どれくらい間違えたか?

平均二乗誤差(MSE)で損失  L を計算します。

 L = (y_{pred} - y_{true})^2 = (0.425 - 1)^2 = (-0.575)^2 \approx 0.33

現在の損失は「0.33」です。この数値を0に近づけるのが目標です。

ステップ3:誤差逆伝播法 - 間違いの【原因】を探る

ここでの目的は、損失  L \approx 0.33 の原因が、どのパラメータにあるのかを突き止めることです。その「責任の大きさ」を数学的に表現したものが勾配(Gradient)です。出力側から入力側へ遡って計算していきます。

3-1. 出力層の重み  w_2 の責任(勾配)

連鎖律を使い、 w_2 が損失  L にどれだけ影響を与えたか(勾配  \frac{\partial L}{\partial w_2})を計算します。

 \frac{\partial L}{\partial w_2} = \frac{\partial L}{\partial y_{pred}} \times \frac{\partial y_{pred}}{\partial w_2}
 \frac{\partial L}{\partial w_2} = 2(y_{pred} - y_{true}) \times a_1 = 2(0.425 - 1) \times 0.75 = -1.15 \times 0.75 = -0.8625

3-2. 隠れ層の重み  w_1 の勾配を計算する

同様に、 w_1 の勾配  \frac{\partial L}{\partial w_1} も計算します。

 \frac{\partial L}{\partial w_1} = \frac{\partial L}{\partial y_{pred}} \times \frac{\partial y_{pred}}{\partial a_1} \times \frac{\partial a_1}{\partial z_1} \times \frac{\partial z_1}{\partial w_1}
 \frac{\partial L}{\partial w_1} = (-1.15) \times (w_2) \times (\sigma(z_1)(1-\sigma(z_1))) \times (x) \approx -0.129

これで、最終的な間違いに対する各重みの責任の大きさ(勾配)がすべて計算できました。

ステップ4:最適化 - パラメータを【微調整】する

ステップ3で特定した「間違いの原因(勾配)」に基づき、いよいよパラメータを修正してAIを賢くする「最適化」のステップに入ります。

世の中にはAdamなど高度な手法もありますが、ここでは最も基本的な勾配降下法というアルゴリズムで重みを更新します。そのルールは非常にシンプルです。

 新しい重み = 古い重み - (学習率 \times 勾配)

なぜ、ここでは「引き算」をするのか?
勾配は、関数の値が最も急に増加する方向を指します。つまり「損失が一番大きくなる坂道の方向」です。私たちの目的は損失を減らすことなので、勾配が示す方向とは真逆の方向へ進む必要があります。だから、勾配を「引く」ことで、最も効率よく損失の谷底へ下っていくことができるのです。

4-1. 重み  w_2 の微調整

 w_2' = 0.3 - (0.1 \times -0.8625) = 0.3 + 0.08625 = 0.38625

重み  w_20.3 から 0.38625 に更新されました。

4-2. 重み  w_1 の微調整

 w_1' = 0.5 - (0.1 \times -0.129) = 0.5 + 0.0129 = 0.5129

重み  w_10.5 から 0.5129 に更新されました。

ステップ5:検証 - 学習の成果を確認する

最適化によって、AIは本当に賢くなったのでしょうか? ステップ4で更新された新しい重みを使って、もう一度「順伝播」から計算を行い、損失が減少したかを確認します。

更新後の重み:  w_1' = 0.5129, w_2' = 0.38625

再計算:隠れ層の出力

 a_1' = \sigma(0.5129 \times 2 + 0.1) = \sigma(1.1258) \approx 0.7551

再計算:最終予測値

 y_{pred}' = 0.38625 \times 0.7551 + 0.2 \approx 0.4917

再計算:新しい損失

 L' = (0.4917 - 1)^2 \approx 0.2584

結論:学習は成功し、損失は減少した

計算の結果、損失は以下のように変化しました。

  • 学習前の損失:  L \approx 0.33
  • 学習後の損失:  L' \approx 0.2584

見事に損失が減少しました! このように、たった1回の学習サイクルで、損失が確かに減少したことが確認できました。以上のcを何度も行うことで、学習後の損失を0に近づけていきます。

まとめ:AI学習の完全なサイクル

今回で、AIが学習するための完全なサイクルを見てきました。

  1. 順伝播: とにかく予測してみる。
  2. 損失計算: 間違いの大きさを採点する。
  3. 誤差逆伝播: 間違いの【原因】を特定(勾配を計算)する。
  4. 最適化: 原因を元にパラメータを【微調整】する。
  5. 検証: 成果を確認し、このサイクルを繰り返す。

実際のAIは、このサイクルを膨大なデータで何百万回と繰り返すことで、複雑なパターンを学習し、驚くべき精度を達成していくのです。