順伝播・逆伝播の流れ

PyTorchにおける「順伝播・逆伝播の流れ」は、ニューラルネットワークの学習プロセスの中心的な仕組みです。以下では、それぞれのステップについて詳しく説明します。


1. 順伝播(Forward Propagation)

順伝播とは、入力データをネットワークに通して出力を得る処理です。

実行の流れ

  1. 入力データ(例:x)をネットワーク(モデル)に渡す

  2. 各層(線形変換・活性化関数など)でデータが処理されていく

  3. 最終的な出力(予測値)が得られる

PyTorchでの例

python
output = model(x) # 順伝播:入力xに対して出力を計算

2. 損失の計算(Loss Calculation)

順伝播の出力 output と正解ラベル target を用いて損失関数(Loss Function)を計算します。

python
loss = loss_fn(output, target) # 例:CrossEntropyLossなど

この loss は、現在のモデルの予測がどれだけ誤っているかを数値で表す指標です。


3. 逆伝播(Backward Propagation)

逆伝播とは、損失の勾配を各パラメータに対して計算する処理です。PyTorchの自動微分エンジン(autograd)がこの役割を担います。

実行の流れ

  1. loss.backward() を呼び出すことで、自動的に勾配が計算される

  2. 各パラメータ(model.parameters())の grad 属性に勾配が格納される

python
loss.backward() # 逆伝播:勾配を計算

PyTorchは動的計算グラフを採用しており、forward 実行時に計算グラフが構築され、backward 実行時に自動的に微分計算が行われます。


4. パラメータの更新(Optimizerによる重み更新)

計算された勾配を使って、**パラメータの更新(最適化)**を行います。一般的にはオプティマイザ(SGD, Adamなど)を使います。

実行の流れ

  1. optimizer.step() でパラメータを更新

  2. optimizer.zero_grad() で次の勾配計算に備えて勾配を初期化

python
optimizer.step() # パラメータ更新 optimizer.zero_grad() # 勾配を初期化

学習プロセスの全体構造

python
for x, target in dataloader: optimizer.zero_grad() # 勾配初期化 output = model(x) # 順伝播 loss = loss_fn(output, target) # 損失計算 loss.backward() # 逆伝播(勾配計算) optimizer.step() # パラメータ更新

補足:順伝播と逆伝播の内部的な関係

  • 順伝播中、各テンソルはrequires_grad=Trueであれば**計算履歴(計算グラフ)**が記録されます。

  • 逆伝播では、そのグラフをもとにチェインルールを適用して勾配が計算されます。


まとめ

処理 説明
順伝播 入力から出力まで計算
損失計算 出力と正解から誤差を定量化
逆伝播 誤差に基づき勾配を自動計算
パラメータ更新 勾配に従って重みを更新

この流れが繰り返されることで、モデルはデータに対してより良い予測ができるように学習されていきます。

生成日:2025/05/22