とある理系の成長記録

どこにでもいる理系学生が自己成長のために奮闘するブログ

ゼロから作るDeep Learning 第3章

こんばんは!とある理系学生です!

 

今日は昨日の続きで、ゼロから作るDeep Learningの第3章を勉強したのでまとめます。

学習時間 インプット : 75min / 実装 : 60min

 

パーセプトロンからニューラルネットワーク

第2章で登場したパーセプトロンですが、それを組み合わせていくことで様々な演算が可能になることを昨日勉強しました。今回の章ではその回路をどうすればニューラルネットワークとして使うことができるのかがまず説明されています。

これを説明する準備として、まず活性化関数を導入します。活性化関数とはひとつ前の層のニューロンから受け取った信号をどのように次の信号へ変換するのかを特徴づける関数です。

 

パーセプトロンでは、前層の信号の総和が閾値以下では0を、閾値以上では1を発信するステップ関数でこの活性化関数を導入できました。

では、ニューラルネットワークはどうするか。その答えは非常に簡単で、ステップ関数をシグモイド関数やReLU関数に変換するだけでいいそうです。

これらの関数のよって入力信号に対して0&1以外にも様々な連続値を返すことができるようになります。この関数の滑らかさがニューラルネットワークでは重要なのだそうです。

 

非線形

ステップ関数やシグモイド関数の形を見てみるとこれらの関数は非線形関数であることがわかります。この非線形性はニューラルネットワークで層を深くしていくことにおいて重要な意味を持ちます。線形な活性化関数で多層にしても、それと同等な回路をわずか二層で作れてしまうためです。本書にて具体例が紹介されています。

 

・多次元配列

pythonの多次元配列を活用することでこれまで説明してきたような計算を複数の要素について一度の演算で済ますことができるようになります。

これで、ニューラルネットの回路を作ることができるようになりました。

実際に重みとバイアスを手動で設定して三層のニューラルネットワークをクイズ感覚で実装してみました。やっぱり難しい^^;

謎のエラーが出たりと、簡単な構造ですがちゃんと計算できるようになるまでに時間がかかりました。

 

MMISTの画像データ認識

すでに訓練済みの重み・バイアスデータが提供されているのでそれを使って、実際にニューラルネットワークの精度を確認しました。その際にMNISTの画像データ(ニューラルネットワークの世界では非常に有名な画像データ。無料で使用できる)を分類することをタスクとして性能を評価しました。結果は90%以上の分類成功率を達成しています。すごいです。

 

バッチ処理

入力データのまとまり(バッチ)を導入し、そのバッチ単位で学習をすることで処理速度を各段に向上させることができるそうです。

 

と、まあ最後のほうは少し雑になってしまいましたが、(また戻ってこよう…)今日はこんな感じで終わりにしようと思います!

それではまた明日も頑張ります!第4章なかなか難しそう…。笑