本文はCSDN 反向伝播アルゴリズム(プロセスと公式の導出)を深く参考にしています。
基本的な定義#
上記の図に示されている単純なニューラルネットワークでは、layer 1
は入力層、layer 2
は隠れ層、layer 3
は出力層です。以下にいくつかの変数名の意味を説明します:
名前 | 意味 |
---|
bil | 第 l 層の i 番目のニューロンのバイアス |
wjil | 第 l−1 層の i 番目のニューロンが第 l 層の j 番目のニューロンに接続される重み |
zil | 第 l 層の i 番目のニューロンの入力 |
ail | 第 l 層の i 番目のニューロンの出力 |
σ | 活性化関数 |
上記の定義から、次のことがわかります:
zjl=∑iwjilail−1+bjl
ajl=σzjl=σ(∑iwjilail−1+bjl)
損失関数を二乗コスト関数(Quadratic Cost Function)とします:
J=2n1∑x∣∣y(x)−aL(x)∣∣2
ここで、xは入力サンプルを表し、y(x)は実際の分類を表し、aL(x)は予測された分類を表し、Lはネットワークの最大層数を表します。入力サンプルが 1 つだけの場合、損失関数 Jは次のようになります:
J=21∑x∣∣y(x)−aL(x)∣∣2
最後に、第 l 層の i 番目のニューロンで生成されるエラーを次のように定義します:
δil≡∂zil∂J
公式の導出#
損失関数に対する最後の層のニューラルネットワークのエラーは次のようになります:
δiL=∂ziL∂J=∂aiL∂J⋅∂ziL∂aiL=∇J(aiL)σ′(ziL)
δL=∇J(aL)⊙σ′(zL)
損失関数に対する j 層目のネットワークのエラーは次のようになります:
δjl=∂zjl∂J=∂ajl∂J⋅∂zjl∂ajl=i∑∂zil+1∂J⋅∂ajl∂zil+1⋅∂zjl∂ajl=i∑δil+1⋅∂ajl∂wijl+1ajl+bil+1⋅σ′(zjl)=i∑δil+1⋅wijl+1⋅σ′(zjl)
δl=((wl+1)Tδl+1)⊙σ′(zl)
したがって、損失関数を使用して重みの勾配を計算することができます:
∂wjil∂J=∂zjl∂J⋅∂wjil∂zjl=δjl⋅∂wjil∂(wjilail−1+bjl)=δjl⋅ail−1
∂wjil∂J=δjl⋅ail−1
最後に、損失関数を使用してバイアスの勾配を計算します:
∂bjl∂J=∂zjl∂J⋅∂bjl∂zjl=δjl⋅∂bjl∂wjilail−1+bjl=δjl