Backward Propagation
メニューを表示するにはスワイプしてください
バックワードプロパゲーション(または逆伝播法)は、ニューラルネットワーク内の各パラメータに対して損失関数がどのように変化するかを求めるプロセス。
目的は、これらのパラメータを全体の損失を減少させるように調整すること。
このプロセスは勾配降下法に基づいており、各層の事前活性化値(活性化関数を適用する前の生の出力)に対する損失の導関数を利用し、それらをネットワーク全体に逆方向に伝播させる。
すべての層が最終的な予測に寄与するため、勾配は段階的に計算される:
- フォワードプロパゲーションを実行して出力を得る;
- 出力の事前活性化に対する損失の導関数を計算する;
- この導関数を連鎖律を用いて層をまたいで逆方向に伝播させる;
- 重みとバイアスの勾配を計算し、学習時にそれらを更新する。
勾配は、関数の入力に対する変化率を表し、すなわちその導関数。重み、バイアス、または活性化のわずかな変化が損失関数にどの程度影響するかを示し、勾配降下法によるモデルの学習過程を導く。
記法
説明を明確にするため、以下の記法を使用:
- Wl:層 l の重み行列
- bl:層 l のバイアスベクトル
- zl:層 l の事前活性化ベクトル
- al:層 l の活性化ベクトル
したがって、a0 を x(入力)と設定すると、n 層のパーセプトロンにおけるフォワードプロパゲーションは次の操作列で表される:
a0z1a1=x,=W1a0+b1,=f1(z1),...zlal...=Wlal−1+bl,=fl(zl),...znany^...=Wnan−1+bn,=fn(zn),=an.逆伝播法を数学的に記述するため、以下の記法を導入:
- dal:層lにおける活性化に対する損失関数の導関数
- dzl:層lにおける事前活性化(活性化関数適用前)に対する損失関数の導関数
- dWl:層lにおける重みに対する損失関数の導関数
- dbl:層lにおけるバイアスに対する損失関数の導関数
出力層の勾配計算
最終層nでは、まず出力層の活性化に対する損失関数の勾配(dan)を計算。
次に、連鎖律を用いて出力層の事前活性化に対する損失関数の勾配を次のように求める:
dzn=dan⊙f′n(zn)ここで、f′n(zn)は層nにおける活性化関数の導関数を表し、記号⊙は要素ごとの積(element-wise multiplication)を示す。
記号⊙は要素ごとの積(element-wise multiplication)を示し、これは一方のベクトルの各要素と他方の対応する要素を掛け合わせることを意味します。対照的に、記号⋅はドット積(dot product)を表し、標準的な行列またはベクトルの積に用いられます。f′nは出力層における活性化関数の導関数を指します。
この値は、出力層の事前活性化値の変化に対する損失関数の感度を示します。
dznを計算した後、次のステップは重みとバイアスの勾配を計算することです:
dWndbn=dzn⋅(an−1)T,=dznこれらの勾配は、損失を減らすために出力層の各重みとバイアスをどれだけ調整すべきかを示します。
ここで、(an−1)Tは前の層からの転置された活性化ベクトルです。元のベクトルの形状がnneurons×1の場合、その転置は1×nneuronsの形状になります。
バックワードプロパゲーションを続けるために、前の層の活性化に関する損失の導関数は次のように計算されます:
dan−1=(Wn)T⋅dznこの式により、誤差シグナルがネットワークを逆方向に伝播し、学習時に前の層を調整できるようになります。
隠れ層への勾配伝播
各隠れ層lについても手順は同じです。dalが与えられた場合:
- 事前活性化に関する損失の導関数を計算する;
- 重みとバイアスの勾配を計算する;
- dal−1を計算して導関数を逆方向に伝播する。
このプロセスは、入力層に到達するまで、各前の層に対して順番に繰り返されます。
重みとバイアスの更新
すべての層の勾配を計算した後、重みとバイアスは勾配降下法アルゴリズムを用いて更新されます:
Wlbl=Wl−α⋅dWl,=bl−α⋅dbl.ここで、αは学習率を表し、各トレーニングステップでパラメータがどれだけ調整されるかを制御します。
ここで、αは学習率であり、各更新ステップで重みとバイアスに適用される調整量を決定するハイパーパラメータです。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください