とある理系の成長記録

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

ゼロから作るDeep Learning 第3章

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

 

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

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

 

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

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

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

 

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

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

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

 

非線形

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

 

・多次元配列

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

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

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

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

 

MMISTの画像データ認識

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

 

バッチ処理

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

 

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

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

プログラミング(ゼロから作るDeep Learning)

最初はプログラミングから手を付けていこうと思います。

使う教材はこちら!

f:id:toaru_rikei:20190313225233p:plain

ゼロから作るDeep Leaning (O'REILLY)


ディープラーニングの入門書としては、もう有名すぎるほど有名な一冊です。

とりあえず、この本を使って勉強を始めていこうと思います。

使用するプログラミング言語pythonです。

目標習得期間は1か月!

 

自己紹介にもあるとおり、現時点で僕のプログラミングスキルはほぼゼロ!!

この本でであった文法をその都度覚えながら進めていきます。

初めにこの本の目次を大まかに掲載しておきます。 

第一章 Python入門

第二章 パーセプトロン

第三章 ニューラルネットワーク

第四章 ニューラルネットワークの学習

第五章 誤差逆伝搬法

第六章 学習に関するテクニック

第七章 畳み込みニューラルネットワーク

第八章 ディープラーニング

 

 

早速本日は第二章までざっと勉強してみたのでまとめます。

 

・第一章 Python入門(学習時間10分)

 テーマの通りPythonの入門です。pcにpythonでの開発環境(Anaconda)を導入する方法から、簡単な文法の説明がありました。環境の導入のみを行い、文法は実際に使っていく過程でその都度覚えていく方針なので流し読み。とりあえずさらっと終えました。

また戻ってこようと思います。

 

・第二章 パーセプトロン(学習時間30分)

 パーセプトロンと呼ばれる、ニューラルネットのもととなる回路の説明。

入力層と出力層のみからなり、入力層の各ニューロンからの信号の総和が、出力層ニューロンに設定された閾値以上であれば出力層のニューロンもまた信号を出す(発火する)。入力層からの信号はニューロン間をつなぐ回路に設定された重みによって決定される。

 このパーセプトロンを用いれば、重みと閾値を調節することでANDゲート、NANDゲート、ORゲートを作成することができるが、XORゲートを作ることはできない。これはXORゲートは線形分離できないアルゴリズムであり、今考えているパーセプトロンでは重み付き信号の和という線形な関数で表現される処理しかできないためである。

 

しかし、この問題はパーセプトロンを複数組み合わせることで容易に解決できる。実際にパーセプトロンの組み合わせでXORゲートを作成できることを確認した。

 

このことから、基本となるパーセプトロンを組み合わせていくことでどんな演算で会っても理論上は可能であることが説明されている。

 

この章も少し計算をしながらざっと読んでみましたが今のところ理解しやすく易しい内容であるな、という印象です。pythonで与えられたコードを使って各ゲートを実際に再現しながら学習したため頭にもよく入ってきました。もう一度戻ってくるとしたら、XORゲートの実装をクイズ感覚でノーヒントでやってみたりすると面白いかもしれません。

 

それでは今日はこの辺で。明日も勉強を頑張ります!

自己紹介

 はじめまして!

本日街を歩いているときにふと思いついたのでブログなるものを開設してみました。

どうも、とある理系学生です。

 

大学に入学してから早四年…。

サークルにバイトに恋愛に、非常に楽しい日々を過ごしてきた訳ですが、最近になって(やっと)「あぁ、俺って大学入ってから全然成長してないな…。」と気づきました。

何とか卒業して、大学院への進学が決まっているものの、この四年間を振り返ると勉強した記憶がまぁ無い。(笑)

 

てことで、このブログは残された大学院生としての二年間で、自分がどれだけ勉強して成長したかを記録することを目的としています。(ほぼ日記です)

 

果たして僕は二年後、自分の成長を実感しながら次のステージに進むことができているのか乞うご期待です。

 

さて、ここで僕は今こんなブログを開設していることからわかる通り、非常に意識が高まっております。生暖かい目で見守ってください。

 

それでは早速、今の自分のステータス&興味のある事柄を列挙しておきます。

 

・自分のステータス

→専攻は物理学

→物理数学意味不明・量子論意味不明

TOEIC 655点 (昨年4月)

→プログラミングは経験ゼロの初心者

→無趣味・3日坊主

→将来の夢はお金持ち

 

・興味のある事柄(随時更新予定)

→プログラミング(ディープラーニング)の習得

TOEIC 800点

→「大学教師が新入生に進める100冊」読破 (http://dain.cocolog-nifty.com/myblog/2014/06/100-80dd.html

→株

 

今後の方針としては以上に列挙した項目を身に着けるために動いていきます。

 それでは、よろしければコメント等お待ちしています!仲良くしてください!

よろしくお願いします!!