【読書レビュー】ゼロから作るDeep Learning

【読書レビュー】ゼロから作るDeep Learning

「ゼロから作るDeep Learning」を読了しました。

結論から言うと、自分のように全く機械学習が初めての人にはこの本とってもオススメです。行列・偏微分など、高校〜大学数学の基礎知識があると学びやすいです。


「ゼロから作るDeep Learning」とは

ディープラーニングを学ぶ本格的な入門書として、日本で最も多くの人がオススメしている(と思われる)本です。

目次(カッコ内は筆者の大体の学習時間)

1章:Python入門(2時間)

2章:パーセプトロン(2時間)

3章:ニューラルネットワーク(4時間)

4章:ニューラルネットワークの学習(4時間)

5章:誤差逆伝搬法(3時間)

6章:学習に関するテクニック(5時間)

7章:畳み込みニューラルネットワーク(4時間)

8章:ディープラーニング(3時間)

学習で用いるPythonの基礎から、ディープラーニングのアルゴリズムであるニューラルネットワークの内容と成り立ち、

さらに現在ディープラーニングの分野で話題の技術・手法の概要まで、実装レベルに落とし込んで学習できます。

他の方の読後レビューも読んでみましたが、機械学習を学習済みの人にとっては、1章〜5章までは流し読みできるレベルで、6章からが本番のようでした。

>> 4時間で「ゼロから作るDeep Learning」を読んで自分で動かしてみた

僕はPython、機械学習共にほぼ初めてなので、テキストに書かれているコードを自分でもコーディングしながら進めました。

入門書としては、第5章までの機械学習の基礎についても大変分かりやすくまとめられていて良かったです。

第6章からは、確かにレベルがグッと上がり、より実践的な内容に。ここからは、自分でコード書きながら(試行錯誤しながら)進めるのは難しく感じたので、基本的にはテキストで用意されているコードの動作を確認しながら進めました。

6章以降も、実践的な内容ながらも、初心者向けに丁寧な説明がされており、用意されたコードを動かしてみるだけでも何となくは理解できます。

でも、もっと時間があれば、第6章以降も自分でコーディングして学習したかったところ。

8章では、刊行時点(2016年9月)で、ディープラーニング分野におけるホットな技術についてもテクニカル面も含めて説明されています。

本の内容を理解する上で肝になりそうな部分

2章:パーセプトロン

・ニューラルネットワークの理論は、どんな過程を経て注目されるようになったのか。

・ニューラルネットワークの元となったアルゴリズムであるパーセプトロンの説明と、パーセプトロンの限界について。パーセプトロンでは層を重ねることで非線形な表現も可能。

3章:ニューラルネットワーク

・パーセプトロンからニューラルネットワークへのアルゴリズムの進化と双方の関連性。ステップ関数→シグモイド関数。

・ニューラルネットワークの出力における、恒等関数(回帰問題)とソフトマックス関数(分類問題)の使い分けとその理由。

・ニューラルネットワークのアルゴリズム。入力層→中間層(隠れ層)→出力層。重みとバイアス。

4章:ニューラルネットワークの学習

・ニューラルネットワークにおける学習のプロセスについて。「ミニバッチの選択→損失関数の勾配の算出→重みパラメータの微小量更新」の流れを、何度も繰り返すことで学習する。

・SGD(確率的勾配降下法)の理解。勾配の計算→数値微分の流れ。この方法は、入力を若干量変化させた時に出力がどの程度変化するかを、f(x+t)-f(x)の式を計算することで求めている。

5章:誤差逆伝搬法

・SGDに対して、誤差逆伝搬法では、d(x**2)=2xといったように、解析的に微分式を解くことで損失関数の勾配を求めている。(説明がわかりやすいように、この本では、各レイヤ(演算)ごとに微分を計算する、計算グラフを用いている)。

・誤差逆伝搬法の方が、SGDより計算が複雑になるが、処理が早い。SGDは、誤差逆伝搬法で解いた式(損失関数の勾配)が正しいか否かを確認するのに主に使われテイル。

・ニューラルネットワークは、ReLUレイヤやSoftmax-with-Lossレイヤ、Affineレイヤ、Softmaxレイヤなどのレイヤを組み合わせることで、好きなようにカスタマイズできる。

6章:学習に関するテクニック

・SGDの欠点と、Momentum・AdaGrad・Adamの理論について。どれも最速でパラメータを更新するための手法として考案されており、最適解はケースによって異なる。最近はAdamが使われることが多い。

・重みの初期値の重要性と、重みの初期値を決定するために用いられる手法。

・各レイヤのアクティベーション分布が均等であるほど学習が早く進む。また強制的に均等に調整するために、Batch Normalizationの手法がある。

・過学習抑制のための、Weight decayについて。重みの値が大きくなりすぎないように、損失関数に重みの二乗ノルムを加算する手法。損失関数が最小化されるように学習が進むことにより、重みが抑制される。

・ハイパーパラメータ(人が決める必要のある値)の種類と最適化方法。推論からざっくりと決定し、網羅的に値を取り比較することで、範囲を絞り込んでいく。

7章:畳み込みニューラルネットワーク

・全結合層の問題点と、それを解決する畳み込み層について

・畳み込み層演算(パディング、ストライド、フィルター層)

・CNN(Convolutional Neural Network)の実装(Convolutionレイヤ、Poolingレイヤ)

・CNNにおける各レイヤにおける画像認識の可視化。畳み込み層の1層目では、規則性のある画像となり、グラデーションを伴って変化するフィルターやブロブ(塊のある領域)をもつフィルターとなる。学習がすすむにつれ、抽象的な情報が抽出されるようになる。

・代表的なCNN、LeNet、AlexNet。

8章:ディープラーニング

・MNIST文字認識では、さほど階層の深いニューラルネットワークは不要。だが、画像認識などより複雑なケースでは、階層を深くすることで認識性能が向上するケースが多い。実際、最近のディープラーニングは、層を深くする方向性。

・小さなネットワークを重ねてフィルターを深くした方が、学習の効率が高く、またパラメータを減らせるので計算量も少なくて済む。

・ディープラーニングの歴史。画像認識コンテストにおいて、2010年では誤認識率が28.2%であったのが、ディープラーニング人気の火付け役ともなった2012年のAlexnetでは16.4%、2015年のResNetでは3.5%まで減少している。CNNの階層をいかに深くするかが最近のトレンド。

・学習速度の高速化手法。GPUによる高速化、分散学習、演算制度のビット削減について。CNNにおいて、学習にかかる時間の95%程度は畳み込み層にかかる時間のため、このプロセスをいかに高速化するかが鍵。

・ディープラーニングの実用例と用いられている技術。物体検出、セグメンテーション、画像キャプション作成について。

・最新の研究。画像スタイル変換、画像自動生成、自動運転における周辺環境認識、強化学習について。

感想、所感

数学的な頭の使い方も求められて良い感じ

偏微分や行列計算、ネイピア数など、昔数学の授業でやったことを思い出しながら学習していくのはとても楽しかったです。

やはり知的な刺激がある日々は良いものだなと感じたりしました。

難易度的に入門書としてちょうど良く、説明もわかりやすい

前知識はほとんどない状態で本書に挑みましたが、説明が非常に丁寧で、難易度的にもちょうど良く感じました。

よく技術書を読んだ時に起こる、一番難しい部分がなんとなく腑に落ちないような「消化不良感」は、この本では起きませんでした。

ただ記事の始めでも書きましたが、7章のCNNから難易度が上がり、理論的にはなんとなく理解できるものの、実装レベルでの理解が追いつかなかったのが残念ではありました。

CNNの実装については、今後の課題とします。

もっと深く、ディープラーニングが学びたくなる

本の内容的には入門書ではあるのですが、より実践的な内容や最新の研究内容のリンクが参考文献としてまとめられています。

そのため、さらなる学びの足がかりとしても本書を活用できる点がとても魅力に感じました。

ディープラーニングによる画像認識のプロセスについてイメージが湧きやすい

本を読むまで、人間は画像や文字の全体を見て「これは3」などと判断するのに対して機械はピクセル単位でしか認識できないのに、機械がどのように画像認識を行うのか疑問に感じていました。

画像をピクセル単位で入力情報として読み込み、それらを用いてニューラルネットワークを介して認識するというのが、どうも腑に落ちない感じがありました。

しかしそれも、第4章での「特微量」についての説明(入力データの本質的なデータを的確に抽出するための変換器)、

また第7章でCNNの説明(画像の縦・横・チャネルを入力情報のままで扱える)によって、より納得感を持って学べました。

また、CNNが画像認識を行なう上で、階層が深くなるにつれて、各レイヤでフィルター画像がどのように変化していくか、具体的なイメージが見れるのも良いです。

ニューロンが単純な形状から、より高度な情報へ変化していく様子が、可視化できるのは興味深いです。

 

以上、本記事では「ゼロから作るDeep Learning」の書籍について紹介しました。