ニューラルネットワーク各階層の勾配計算式
勾配計算式
w を重み、b をバイアス、E を誤差(損失関数出力)とするとこんな形状で定式化されてる。
この辺はいくつかの書籍見て、ようやっと飲み込めた感じ…。
数式を飲み込むのにはそれなりに時間を要したけど…。
- 出力層
- 中間層
結局のところ、δn さえ算出できれば、残りの計算式は芋づるで計算できることになる。
求めた過程
原則的に、ニューロン(出力層含む)の作りは、入力 y と重み wjk + バイアス bk によるもので
でできてる。
出力層に至ってはここに損失関数を食わせて E (理想値との誤差)を取得する。
この時、勾配降下法を用いるなら、それら式を微分して、勾配を求めていくことになる。
ニューロンが学習するべき値は w と b で、これらは行列なので偏微分でひとつづつ誤差への影響を求めていくことになる。
※連鎖律を適用。連鎖律については ここ 参照
∂uk∂wjk は uk を展開すると
偏微分なので、 wjk のかかってない項はすべて 0 なので、
次に ∂E∂uk に焦点を当てて、こちらも連鎖律で展開して、
これを δk とすると
という形に持っていける。
∂bk も同様の手順で考えると
uk を展開すると、偏微分したときに bk の1項しか残らず、最終的に 1 になるので、最終形態は
中間層出力の勾配も考えると、
このうち、
ここで δr=∂E∂urとすれば
中間層の重み勾配を考えると、
このうち ∂uj∂eij は
もう一つ ∂E∂uj 部分は連鎖律使って
このうち ∂yj∂uj は活性関数の微分。
∂E∂yj は中間層出力の勾配(= ∂yj )。
と、なるほど。中間層出力の勾配を受け取って、中間層が計算できる → 下層からの結果を受け取る → 逆伝播の原理 というわけですね
∂uj∂wij=yi
を使うと ∂wij=yiδj
バイアス勾配 ∂bj も
このうち
※ 偏微分なので、bj 以外の全ての項は 0 になり、残った bj も微分されるため。
そのため
こんなノリで上の層に伝播を続けていく。
ニューラルネットに実際に適用して考える
損失関数を二乗誤差、活性関数を恒等関数とした出力層の場合
を求めたい。
二乗誤差関数は
なので、
※ 偏微分につき、yk を含まない項はすべて 0 となるため。
隣の項は 活性関数が恒等関数(入力 = 出力)の関数なので、
なので
中間層がシグモイド関数であるとした場合
シグモイド関数 f(x)=11+exp(−x) の微分は f′(x)=(1−f(x))f(x) なので
交差エントロピー誤差とソフトマックス関数を採用した出力層
これは分類で使う組み合わせ。
交差エントロピー誤差
こちらの記事 が丁寧に書いてくれています。
数式的にはこんな関数
理想の出力 t は、スイッチ出力なので [1, 0, 0, 0]
の様な一つだけ 1 となってるので、仮に入力値を [0.5, 0.8, 0.2, 0.4]
だとすると
こんな感じで出てくる。
ソフトマックス関数
過去記事 参照(グラフ付き)。
こんな感じの関数を組み合わせすると
この時、 logpq=log(p)−log(q) を使うと
これを更新式に突っ込むと
ようやっと…微分オワタ (;'∀')