書評:『ゼロから作る Deep Learning』


2016年 10月 31日

from_zero_deep_learning (283x400).jpgゼロから作るDeep Learning
―Pythonで学ぶディープラーニングの理論と実装

斎藤 康毅 著

A5版、320ページ
2016/9/24 発売
3400円(本体)
オライリー・ジャパン
ISBN-13: 978-487311-758-4

GitHub:oreilly-japan/deep-learning-from-scratch



2016年になって、AIブーム、Deep Learning ブームに乗じて多数の解説書が出た。

もちろん、その多くは入門書だったり、あれこれ出来るようになったことを紹介するだけの本が大多数で、読んでもDeep Learning についてDeep に理解できるようにはならない本が殆んどであった。

しかし、この本は違うのだ。ゼロから作るという枕言葉通り、Deep Learningのプログラムを、既成のライブラリなどを使うのではなくゼロから、スクラッチで書き起こすのをきちんと体験できる本である。
Deep Learningで何かやってさっさと成果を出したいという短絡的思考には役に立たない本だが、Deep Learningの仕組みをソースコードレベルでちゃんと理解してみたいという人には最適の本である。

書き方は非常に丁寧なので、きちんと読みながらPythonのプログラムを動かしていけば、Deep Learning とはこういうことかと納得できる。必要な知識は、大学2年程度の数学とプログラミング能力があれば、何も困らないはずで、大学の理工系3年以上でこの本の前半部分が難しい場合は、相当な勉強不足である。

1章 Python入門
本書を読むのに必要な最低限の説明がしてある。Pythonについては、何か別の本などでもう少し詳しく勉強しておいたほうが良いと思う。

2章 パーセプトロン
ニューラルネットワークの元になったパーセプトロンについての丁寧な解説がある。パーセプトロンで何ができるか説明してあるが、何ができないかも説明してある。

3章 ニューラルネットワーク
ここから本題が始まる。
ニューロン、神経細胞の働きをどうコンピュータで実現するか、そしてそれを多層化すると何が出来るかが説明されている。

4章 ニューラルネットワーク
第3章で多層のニューラルネットを作ったのだが、それに学習させるとはどういうことかの説明がしてある。実際にデータを与えると、どういう風に学習されていくかが、多数のデータ、図、式、プログラムを示しながら説明している。大量のパラメータの中に学習させるのだが、各パラメータを微小変化させたとき、結果がどう変わるかを求めて、全パラメータを少しずつ良くなるはずの方向に変化させる。つまり、数値偏微分で勾配を求めて処理するのである。

一応、Deep Learning の基礎の基礎は第4章までで終わる。しかし、このままでは、実用にならないほど超低速学習しかできない。

5章 誤差逆伝播法
高速に学習させる方法の説明がある。単に「逆伝播」ということが多いと思う。
数値偏微分は簡単なのだが無駄の塊みたいな計算をするので、効率の良い勾配の求め方を延々と説明してある。本書では、計算グラフを用いる方法で説明してある。

ここまで読み進むと、実用になる速度、といっても相当遅いのだが、一通りのDeep Learning の勉強ができたことになる。

6章 学習
学習も、やみくもにやってもダメで、上手く調整しないと、良い結果がでないという普通のことを説明しているのだが、この章あたりから説明のペースが上がるので要注意。

7章 畳み込みニューラルネットワーク
画像処理をやっていた人にはフィルタ処理と言えば分かると思う。この処理は画像あるいは画像的なデータに対してかなり有効になる。
小さいサイズの配列(フィルタと呼ぶ)を用意し、入力画像の上をフィルタを動かしながら画像データとフィルタとの演算を行っていく(この説明だと、分かる人にだけ分かる説明だな)。詳しくは、本書を読んでほしい。
畳み込みもとても重要な技術なのだが、本書の前半と比較すると、丁寧さが足りない。

8章 ディープラーニング
過去の歴史や、様々なディープラーニングの紹介があるが、かなりのハイペースで説明があり、きちんと理解するよりも、どんなものがあるのかだけをざっと知っておく程度の読み方になろう。

ということで、本書は原理をちゃんと理解することだけを説明している本である。
前半はとても丁寧だったのだが、後半はかなりハイピッチで丁寧さのギャップは激しい。
後半も前半並みの丁寧さで書いて欲しいところだが、ページ数が激増するとか、出版時期がどんどん遅くなるとかあって、ビジネス的に成り立たなくなる可能性がある。なので、この丁寧さあたりが一番妥当なところであろうか。

Deep Learning をきちんと勉強したければ、本書から始めるのが現時点ではベストであろう。