【図解】ニューラルネットワークの実装【連載④】
こんにちは、あつかんです。
今回はニューラルネットワークの実装を行っていきます。
ゼロから作るDeep Learningという本を参考にさせていただいております。
このブログは連載形式ですので、過去のブログ↓を読んでから読み進めることをお勧めします。
3層ニューラルネットワーク
ここでは図に示すような3層のニューラルネットワークを対象に実装していきます。
今回はforward側の流れ、つまり入力層から出力層への信号の伝達の仕方について説明します。
第0層目から第1層目
まずは入力層から第1層への信号の伝達の様子を見てみましょう。
a1(1)を数式で表すと以下のようになります。
a2(1)を数式で表すと以下のようになります。
a3(1)の図は省略しますが、以下の式のようになりますね。
上記の3つの式は以下のように行列の式でまとめられます。
ここで、
です。
このように各ニューロンに対して、信号の総和を計算できました。
ニューロンは信号を受け取ったら、活性化関数h()を通して出力するので、次はそのプロセスを見ていきます。
第1層目のニューロンの中身を詳しく書きました。
上図より、活性化関数を通して出力される信号の式z1(1)は以下のようにあらわされます。
ここで、シグモイド関数を活性化関数として使用すると、以下のようになります。
z2(1)も同様に計算して
z3(1)も同様に計算して
のようになります。
これらを行列の式でまとめると以下のようになりますね。
ここで、
です。
これで第0層目から第1層目までの信号の伝達の様子を確認しました。
第1層目から第2層目
次は第1層目から第2層目までの実装を行います。
上記のような図の流れですので、
つまり、
となります。Z2(2)も同様に
つまり
となります。
これらを一つの行列式にまとめると以下のようになります。
ここで、
です。
これで第1層目から第2層目までは終了。
第2層目から第3層目
次は第2層目から出力層までの実装をしていきます。
ここで出てきたσ()は恒等関数といいます。
これは出力層の活性化関数として利用されます。
恒等関数は入力をそのまま出力関数です。
出力層の活性化関数には、恒等関数、シグモイド関数、ソフトマックス関数のどれかが使われるのですが、今回は恒等関数としました。
出力層の活性化関数に関しては、次の記事で説明してきます。
つまり、出力の結果として
y2もy1と同様にして、
といった式になります。
以上で3層ニューラルネットワークのforward側の説明は終わりです。
まとめ
今回はforwardの流れ、つまり入力から出力方向への伝達処理を理解しました。
実はニューラルネットワークは学習するためにはbackwardの流れ、つまり出力から入力方向への処理も行わなければなりません。
これについて、後ほどの記事に出てくるので少々お待ちくださいw
次回は、出力層の活性化関数について詳しく述べていこうと思います。
続きはこちら