IT-LIFEブログ

主にIT系のことや時事ネタや、たまに雑記

【初心者向け】ニューラルネットワークの実装【連載④】

こんにちは、あつかんです。

今回はニューラルネットワークの実装を行っていきます。

ゼロから作るDeep Learningという本を参考にさせていただいております。

このブログは連載形式ですので、過去のブログ↓を読んでから読み進めることをお勧めします。

www.it-lifelog.com

3層ニューラルネットワーク

ここでは図に示すような3層のニューラルネットワークを対象に実装していきます。

今回はforward側の流れ、つまり入力層から出力層への信号の伝達の仕方について説明します。

f:id:nok-0930-ss:20171202170006p:plain

第0層目から第1層目

まずは入力層から第1層への信号の伝達の様子を見てみましょう。

f:id:nok-0930-ss:20171202170838p:plain

a1(1)を数式で表すと以下のようになります。

f:id:nok-0930-ss:20171202171114p:plain

 

f:id:nok-0930-ss:20171202171452p:plain

 

a2(1)を数式で表すと以下のようになります。

f:id:nok-0930-ss:20171202171544p:plain

 

a3(1)の図は省略しますが、以下の式のようになりますね。

f:id:nok-0930-ss:20171202171645p:plain

上記の3つの式は以下のように行列の式でまとめられます。f:id:nok-0930-ss:20171202173053p:plain

ここで、

f:id:nok-0930-ss:20171202173110p:plain

です。

このように各ニューロンに対して、信号の総和を計算できました。

ニューロンは信号を受け取ったら、活性化関数h()を通して出力するので、次はそのプロセスを見ていきます。

第1層目のニューロンの中身を詳しく書きました。

 

f:id:nok-0930-ss:20171202180144p:plain

上図より、活性化関数を通して出力される信号の式z1(1)は以下のようにあらわされます。

f:id:nok-0930-ss:20171202174751p:plain

ここで、シグモイド関数を活性化関数として使用すると、以下のようになります。

f:id:nok-0930-ss:20171202174804p:plain

z2(1)も同様に計算して

f:id:nok-0930-ss:20171202174923p:plain

z3(1)も同様に計算して

f:id:nok-0930-ss:20171202174938p:plain

のようになります。

これらを行列の式でまとめると以下のようになりますね。

f:id:nok-0930-ss:20171202175333p:plain

ここで、

f:id:nok-0930-ss:20171202175345p:plain

です。

 

これで第0層目から第1層目までの信号の伝達の様子を確認しました。

 

第1層目から第2層目

次は第1層目から第2層目までの実装を行います。

f:id:nok-0930-ss:20171202181046p:plain

上記のような図の流れですので、

f:id:nok-0930-ss:20171202181829p:plain

つまり、

f:id:nok-0930-ss:20171202181615p:plain

となります。Z2(2)も同様に

f:id:nok-0930-ss:20171202181837p:plain

つまり

f:id:nok-0930-ss:20171202181903p:plain

となります。

これらを一つの行列式にまとめると以下のようになります。

 

f:id:nok-0930-ss:20171202182221p:plain

ここで、

f:id:nok-0930-ss:20171202182242p:plain

です。

これで第1層目から第2層目までは終了。

 

第2層目から第3層目

次は第2層目から出力層までの実装をしていきます。

f:id:nok-0930-ss:20171203161353p:plain

ここで出てきたσ()は恒等関数といいます。

これは出力層の活性化関数として利用されます。

恒等関数は入力をそのまま出力関数です。

出力層の活性化関数には、恒等関数、シグモイド関数、ソフトマックス関数のどれかが使われるのですが、今回は恒等関数としました。

出力層の活性化関数に関しては、次の記事で説明してきます。

 

つまり、出力の結果として

f:id:nok-0930-ss:20171203161543p:plain

f:id:nok-0930-ss:20171203161722p:plain

 

y2もy1と同様にして、

f:id:nok-0930-ss:20171203161818p:plain

f:id:nok-0930-ss:20171203161824p:plain

 

といった式になります。

以上で3層ニューラルネットワークのforward側の説明は終わりです。

 

まとめ

今回はforwardの流れ、つまり入力から出力方向への伝達処理を理解しました。

実はニューラルネットワークは学習するためにはbackwardの流れ、つまり出力から入力方向への処理も行わなければなりません。

これについて、後ほどの記事に出てくるので少々お待ちくださいw

次回は、出力層の活性化関数について詳しく述べていこうと思います。

続きはこちら

www.it-lifelog.com