今回の回は、詳しくは、

ゼロから作るDeep learningの P57 の 3.3.3 [ネットワークの行列の積]

が参考になります。




前々回のときに悩んでいたニューラルネットワークの計算が行列という話。


なんとなくつかんできたんで、メモ。


 ニューラルネットワークでの計算は、これ↓




で、多層ニューラルネットワークでは、こんな風に複雑になる↓


で、これを分かりやすくするためにそれぞれに記号を付ける。

xは、データのインプット

wは、重要度。重さのこと。

バイアスというのがあるんだけど、ここでは一旦無視する。


このときにy1の計算は、上記の内容を踏まえるとこんな感じ↓




























それぞれを掛けて足すという流れ。これ行列と同じ計算。

行列
http://www.sist.ac.jp/~kanakubo/research/hosoku/gyoretu.html


じゃ、上のモデルを行列に変えると
じゃ、次

真ん中の計算



これに行列を合わせると


じゃ、次




これを行列に加えると



つまりこの行列を計算するプログラムがニューラルネットワークの計算になるみたい。


例として
x1 = 1 , x2 = 2
w1 = 1 , w2 = 2 , w3 = 3 , w4 = 4 , w5 = 5 , w6 = 6とした場合

とした場合

pythonで計算してみる。

まず

import numpy as np

で、x の行列を設定

x = np.array([1,2])

次にwの行列を設定
w = np.array([[1,3,5],[2,4,6]])

じゃ計算。

計算は簡単。dotを使う。
y = np.dot(x,w)
じゃ、確認をする。
print(y)
で出力。
[5,11,17]

一発で計算できてる。なるほど、便利だ。


---まとめると---

x1 から繋がっているwはw1, w3 , w5となる。

なので、こうなる↓
そして、x2の場合は


つながりをまとめると


で、一気に計算するときは、numpyのdotで一発。


これが行列計算が必要な理由っぽい。