無限不可能性ドライブ

『ニューラルネットワーク自作入門』に刺激されてExcelVBAでニューラルネットワークを作ってみたものの、やっぱり数学やらなきゃと思い少しずつやってきたのもあって、自分の知識の整理とかそういった感じです。

【数式編】(順伝播)隠れ層1層めのユニットの出力を求める

f:id:celaeno42:20180922233518p:plain

出力値の求め方

順伝播でのユニットの出力値は、そのユニットへの入力に対し、それぞれ対応する重みを掛けて足しあげたものにバイアス値を加え、その値に活性化関数を適用することで求めることができます。
図の ユニットh11 を例にとると、入力層の各ユニットからの出力に、それぞれに対応する重みを掛けて足し合わせたものにバイアス値を加えて  u_1^2 を求め、 u_1^2 に活性化関数の  ReLU を適用すると、 z_1^2 を求めることができます。

 z_1^2 を求める

ユニットh11 の出力値  z_1^2 を求めるには、その前に  u_1^2 を求める必要があります。まずは  u_1^2 を求めていきましょう。
各入力値にそれぞれに対応する重みを掛けて足し合わせたものにバイアス値を加えるので、次のような式になります。


\displaystyle u_1^2 = w_{11}^2 x_1 + w_{12}^2 x_2 + w_{13}^2 x_3 + w_{14}^2 x_4 + b_1^2


ちなみに、バイアス値には入力として常に 1 を掛けていて、実際には  b_1^2 \times 1 となっています。
入力として常に 1 を掛けるのは、行列計算の際の取り扱いが便利だからという理由によるものです。

この  u_1^2 ReLU を適用すると  z_1^2 が求まります。

ReLU関数

引数を  x としたときの  ReLU


\displaystyle
ReLU(x) = max(x, 0) =
\left \{ \begin{array}{ll}
 x & (x \geq 0) \\
 0 & (x \lt 0)
 \end{array} \right.


で表され、「引数が0以上のときはその値(引数の値をそのまま)、そうでないときには0を戻す」関数です。
グラフにするとこのような感じになります。

f:id:celaeno42:20180923235613p:plain:w400


今回は  ReLU のまま表現することにします。


\displaystyle z_1^2 = ReLU(u_1^2)


これで ユニットh11 の出力が求まりました。

出力を求める式

隠れ層1層めの他のユニットについても、重みとバイアスが異なるだけで基本的な計算式は一緒です。

ユニットh11

\displaystyle u_1^2 = w_{11}^2 x_1 + w_{12}^2 x_2 + w_{13}^2 x_3 + w_{14}^2 x_4 + b_1^2

\displaystyle z_1^2 = ReLU(u_1^2)

ユニットh12

\displaystyle u_2^2 = w_{21}^2 x_1 + w_{22}^2 x_2 + w_{23}^2 x_3 + w_{24}^2 x_4 + b_2^2

\displaystyle z_2^2 = ReLU(u_2^2)

ユニットh13

\displaystyle u_3^2 = w_{31}^2 x_1 + w_{32}^2 x_2 + w_{33}^2 x_3 + w_{34}^2 x_4 + b_3^2

\displaystyle z_3^2 = ReLU(u_3^2)




f:id:celaeno42:20180924000931p:plain