読者です 読者をやめる 読者になる 読者になる

「ゼロから作るDeep Learning」を読んでいる

先日購入した「ゼロから作るDeep Learning」を少しずつ読んでいる。今、4章「ニューラルネットワークの学習」の4.2損失関数のところ。

この本はかなりおもしろい。まだ理解が浅いところもあるけど、コンピューターが学習するとはいったい何なのか、どういう理屈なのかがちょっと理解でき始めている実感がある。個人的にDeep Lerning的な考え方はおもしろいなぁと感じる。

これまでこの手の記事が書いてある雑誌とかを見たことはあるが、わかる人がわかるようにしか書いてなかったり、いきなりモジュールを使って、こんなにすごいことができるんだぜイェーイ的なのを読んでも、正直何が何やらって感じしか残らない。こういう技術的な読み物は読み手のレベルが合わないとこういうことになる。(だから、自分もこのブログで具体的な技術を解説するつもりはない。理解度の低い人が適当な解説をしても害にしかならないし、三流の解説を読むくらいなら、本を買って読んだ方が100倍ましだからだ。ただ、読み始める人とか読んでる人が、偶然読んだらちょっとだけ役に立つかもしれないことはチラホラ書くかもしれない。基本、このブログがそういうスタンスなんだけどね)しかし、この本は専門知識がそれほどなくても、理屈がわかるように書いてある。

Pythonの環境はいろいろあるだろうけど、自分はAnacondaをインストールして、その中にあるSpyderというIDEを使っている。起動が若干重いんだけど、スクリプトとコンソール、ファイルブラウザ、Variable explorerの配置が使いやすい。スクリプトはタブで複数開けるので、いくつかのスクリプトをひらいて参照するのも楽だ。また、Anacondaをインストールしておけば、この本で使うモジュール類は全て一発でインストールされるので、環境づくりにあれこれ時間を掛ける必要がない。Pythonとかこういう開発に詳しい人ならどうにでもなると思うけど、教養としてDeep Lerningを学びたいだけなら、余計な手続きに時間をかける必要はないと思う。

3章くらいからMNISTデータセットを使うので、あらかじめGitHubからサンプルスクリプトを全部ダウンロードして、どこかに置いておくことをおススメする。サンプルデータを読み込むのにload_mnistという関数を使うことになるんだけど、フォルダ構造が崩れていると読み込みに失敗するので、下手なことをするより丸ごとソースをコピーしておいた方がいい。

Pythonに関しては、それほど難しい知識は必要とされないけど、モジュールの読み込みや関数の書き方、リスト、タプル等、最低限度の知識は必要だ。完ぺきに知っている必要はないと思う。

数学的には今のところは高校数学の範囲の理解で十分だ。ただし、対数、指数関数、∑記号の意味、簡単な行列の内積くらいは理解しておいた方がいい。

ソフトマックス関数のところにC exp(a) = exp(a + logC)という式変形があるが(添え字は省いて書いている)、一瞬ここで迷った。log C = log Cとすると、C = exp(logC)と書けるからC exp(a) =exp(logC)・exp(a) = exp(a + logC)と変形できる。対数にして指数関数に組み込むだけだけど、一瞬理解に迷ってしまった。これはソフトマックス関数がオーバーフローしないように工夫する部分なんだけど、うまいこと考えるなぁと感心した。全体的に、数学の性質をうまく使っており、数学ってこういうふうに使うと便利なんだと改めて感じた。数学は社会に出たら役立たないとかよく聞くけど、ものは使いようってことだろう。

4.3から微分とか偏微分が出てくるけど、これもそれほど高度なわけではなさそうだ。

この先どのくらいのペースで進むかはわからないけど、なんとか読み進めてみよう。

 

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

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