自分でニューラルネットワークを作ろうhttps://qiita.com/takahiro_itazuri/items/d2bea1c643d7cca11352#comment-a59cd26161ee56ea1220
の、
python
1 # 重みの更新 2 self.w_ho += self.lr * np.dot((e_o * self.daf(o_o)), o_h.T) 3 self.w_ih += self.lr * np.dot((e_h * self.daf(o_h)), o_i.T)
この式の導出方法を、高校数学レベルで知りたいのですが、
別のページには、
重みの式が以下
https://qiita.com/perrying/items/6b782a21e0b105ea875cより。
という事で、これに代入したら導出できるんでしょうか?
回答者に進めて貰った
このhttps://youtu.be/X8hK4ovQoLg動画を見たんですが、
式がこの下の画像の式のように表されるという事が、なんとなく分かったのですが、
しかし、この式と、記事の式は、そもそも違うように思います。
※また、少し脱線しますが、動画内でδは出力層の値から辿っていけば分かる、、とあるのですが、
どのような関係式になっているのでしょうか?k+1番目とk番目が、その説明がないような・・・。
記事の
self.w_ho += self.lr * np.dot((e_o * self.daf(o_o)), o_h.T)
この式を、自分なりに考えてみたのですが(他の質問の回答も元に)、
o_oは出力値なので、これをシグモイド導関数に代入して、傾きを求めるというのは分かります。
f(x)をシグモイド関数の式とすると、f'(o_o)であり、これはつまり、
o_o = f(x_o)である事から、
誤差関数を(t-f(x_o))^2/2とかで置いて、これをある変数で微分すると、
(t-o_o)f'(x_o)(x_o)'とかになるので、この(t-o_o)がe_oであり、f'(x_o)はself.daf(e_o)になりそうなのですが・・・(記事ではe_oでなくo_o)。
そうなるとして、o_h.Tを掛ける理由も、これだけ行列積として掛ける理由も分かりません・・・。
あなたの回答
tips
プレビュー