#05 人工知能入門 DNN基礎

順伝播——入力から予測値を計算する流れ

順伝播とは

順伝播(フォワードパス、Forward Propagation)とは、入力データをネットワークに流し、出力(予測値)を計算することです。「順方向」に層を流れていくので「順伝播」と呼ばれます。

学習ではなく「推論」の場面で使われます——例えば「この画像は猫か犬か?」と聞いたとき、ネットワークが答えを出す過程がまさにフォワードパスです。


使うネットワークの構成

今回は次の小さなネットワークで手計算します。

入力層 (2ノード) → 隠れ層 (3ノード) → 出力層 (1ノード)
  • 入力: x1 = 1.0, x2 = 0.5
  • 活性化関数: 隠れ層はReLU、出力層はSigmoid

STEP 1: 入力 → 隠れ層

隠れ層の各ノードは「入力×重み + バイアス」を計算します。

重みの設定:

w11=0.3, w12=0.4  (入力1,2 → 隠れノード1)
w21=0.2, w22=0.5  (入力1,2 → 隠れノード2)
w31=0.6, w32=0.1  (入力1,2 → 隠れノード3)
バイアス: b1=0.1, b2=-0.2, b3=0.3

各ノードの計算(活性化関数を適用する前の値を「z」と書きます):

z1 = x1×w11 + x2×w12 + b1
   = 1.0×0.3 + 0.5×0.4 + 0.1
   = 0.3 + 0.2 + 0.1 = 0.6

z2 = x1×w21 + x2×w22 + b2
   = 1.0×0.2 + 0.5×0.5 + (-0.2)
   = 0.2 + 0.25 - 0.2 = 0.25

z3 = x1×w31 + x2×w32 + b3
   = 1.0×0.6 + 0.5×0.1 + 0.3
   = 0.6 + 0.05 + 0.3 = 0.95

ReLU適用(0以下は0、それ以上はそのまま):

h1 = ReLU(0.6)  = 0.6
h2 = ReLU(0.25) = 0.25
h3 = ReLU(0.95) = 0.95

STEP 2: 隠れ層 → 出力層

出力層の重みとバイアス:

v1=0.4, v2=0.7, v3=-0.3  (各隠れノードの重み)
c = 0.2  (出力バイアス)

計算:

z_out = h1×v1 + h2×v2 + h3×v3 + c
      = 0.6×0.4 + 0.25×0.7 + 0.95×(-0.3) + 0.2
      = 0.24 + 0.175 - 0.285 + 0.2
      = 0.33

Sigmoid適用:

y = Sigmoid(0.33) = 1 / (1 + e^(-0.33))
                  ≈ 1 / (1 + 0.719)
                  ≈ 0.582

計算結果の意味

出力値 0.582 は「58.2%の確率でポジティブ(クラス1)」と読み取れます。

入力層        隠れ層             出力層
[1.0]─────→ [0.6 ]──────────→
[0.5]─────→ [0.25]──────────→ [0.582]
            [0.95]──────────→

これがフォワードパスの全体像です。


コードで確認する

Pythonで同じ計算を書くとこうなります:

import numpy as np

# 入力
x = np.array([1.0, 0.5])

# 隠れ層の重みとバイアス
W1 = np.array([[0.3, 0.4],
               [0.2, 0.5],
               [0.6, 0.1]])
b1 = np.array([0.1, -0.2, 0.3])

# 出力層の重みとバイアス
W2 = np.array([0.4, 0.7, -0.3])
b2 = 0.2

# フォワードパス
z1 = W1 @ x + b1           # 行列積で一括計算
h1 = np.maximum(0, z1)     # ReLU

z2 = W2 @ h1 + b2
y  = 1 / (1 + np.exp(-z2)) # Sigmoid

print(y)  # 約 0.582

W1 @ x は行列積で、3つのノードの計算を一行で表しています。実際のフレームワーク(PyTorch, TensorFlowなど)でも内部でこのような計算が行われています。


実際のモデルとの違い

今回は13個のパラメータの小さなネットワークでした。実際のモデルでは:

モデルパラメータ数
LeNet(古典的CNN)約6万
ResNet-50約2,500万
GPT-3約1,750億

数値の規模は違いますが、基本的な計算の仕組みは今回と同じです。「入力×重み→活性化関数→次の層へ」の繰り返しです。


まとめ

  • 順伝播は「入力→各層を順番に計算→予測値を出力」する流れ
  • 各ノードは「入力×重みの合計 + バイアス」を計算し、活性化関数を通す
  • この流れを層の数だけ繰り返すと最終的な予測値が得られる
  • 計算の仕組み自体はシンプルで、パラメータ数が増えても原理は同じ

次回は「予測値がどれだけ正解からズレているか」を測る損失関数について学びます。