逆伝播の仕組み

やりたいことは簡単のニューラルネットワークの逆伝播の仕組みを計算することです。自分の中の整理のためでもあります。 もっともシンプルの例で、猫なのか、猫じゃないなのかを判断するただ一層のニューラルネットワークで、一枚の画像で訓練するとします。下の図で仕組みを表しています。 上の図では $x$ : 入力画像 $w$: 求めたい重み $b$: 求めたいバイアス $z$: 順伝播(Forward Propagation)の線形部分 $a$: $z$に対して活性化関数を適した後 $L$: 損失関数(Lost function) 砕けた言い方にするとニューラルネットワークの目的は損失関数を小さくして、その時に重み($w$)とバイアス ($b$) を求めるだけです。 猫であるかどうかを判断する2分類の問題は損失関数として、クロスエントロピー関数(Cross entropy)を使うことができます。下の形になっています。 $L(a, y) = −(ylog(a)+(1−y)log(1−a))$ $a$: 毎回訓練の結果を表しています。0.2, 0.6, 0.9などを値になります。 $y$: 実際ある画像は猫であるかどうかを示す値で、例えば0か1かになります。 $z$に活性関数(Activation Function)を適応する結果は$a$で、活性関数はシグモイド関数の場合、$a = \frac{1}{1+e^{-z}}$ です。 このネットワークの目的は$dW$ (重みの微分)と $db$(バイアスの微分)を求めることで、これらを求めたら下の式で少しずつ重み$W$と$b$を更新して、損失関数の値を小さくします。$\alpha$は学習率(Learning rate) $W^{[l]} = W^{[l]} - \alpha \text{ } dW^{[l]}$ $b^{[l]} = b^{[l]} - \alpha \text{ } db^{[l]} $ 目標がわかったので、これで$dW$を求めてみます。 $dW = \frac{d}{dW}{L(a, y)}$ 微分法の中で連鎖律があって、$dW$は下の形に書き換えることができます。 $dW = \frac{dL(a,y)}{da}\frac{da}{dz}\frac{dz}{dW}$ タスクをブレイクダウンして、求めると $da = \frac{dL(a,y)}{da} = (−(ylog(a)+(1−y)log(1−a)))‘$