Deep Learningをやる (1)

 この記事は、アドベントカレンダー2018の3日目の記事です。

 世はIoTでビッグデータディープラーニングの時代であるからして、ディープラーニングの基本を学んでいくことにした。とはいえ色々とフレームワークを弄ってがっつり学習回していく、という話になるとどうも腰を据えてクソ強いハードウェア資源でもってやっていく必要がでてきそうなので、原理的な部分だけを学ぶことを目的として以下の本を購入した。

f:id:ourfool:20180303233355j:plain

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

  「ゼロから作るDeep Learning」はNumPyだけ使って文字通りゼロから (?) ニューラルネットワークの構築と学習をおこなう本のようである。第1章のタイトルが「Python入門」であることからもわかるとおり、原理からブラックボックス無しで、というコンセプトを持ちつつ何もわからんな幼女向けの本でもある。本の中で使用するプログラムは全てGithubリポジトリにまとまっているので快適に進められる。

 ひとまず、昨日本日の余暇に1章~4章まで取り組んでみた。

 1章―Python入門。環境構築とか、基本的なNumPyの構文、Matplotlibの使い方。やさしい。

 2章―パーセプトロンについて。パーセプトロンを使ってどのように論理回路を構築するかを述べたのち、多層パーセプトロンを用いればより複雑な計算(非線形領域の表現、イメージ図がわかりやすい)がおこなえることを示す。簡単なPythonのコードであっても書きつつ進めるとやっていってる感がある。

 3章―ニューラルネットワークについて。シグモイドやReLUなどを例示して活性化関数の具体的な説明。NumPyの多次元配列でシュッとネットワークを構築できることの説明。最後に手書き数字認識の推論ネットワークを実装した。バッチ処理についても書いてある。

 4章―ニューラルネットワークの学習について。最初に学習の概念について簡単に解説があったのち、学習アルゴリズムを実際に実装していく。数学的な説明も入ってくるが平易に書いてあって数式はない。簡単に勾配を算出してパラメータを更新していくと、損失関数が減るので嬉しい!という章。ここでついに学習をおこなう。認識精度のグラフを出すとちゃんとディープにラーニングしてる感がわかる。

 5章以降は学習法の詳細にフォーカスしていくようなので楽しみ。回路やアーキテクチャの世界では主にエッジでの推論用アクセラレータに注目が集まっており、学習の話はよくわからんになりがちである。回路実装の簡単化のためデータは二値化されたり三値化されたりLog-Quantizedされたり、計算はメモリ内とか付近でちょろっとやるだけだったりで、学習側とは随分様子が異なる。バッチのサイズも遅延やスループットトレードオフも全く違う。そのあたりの感覚がちゃんとわかってくると、もしかすると何か面白いことが浮かぶかもしれない(特に役には立たないかもしれない)。

 明日は、ourfoolさんがgithubページの改修に関する記事を書きます。