mathjax

2018年1月14日日曜日

深層学習を知るための参考書

深層学習を理解したいということで、関連する情報を調べ始めた。

■深層学習
パターン認識と機械学習 上
C.M. ビショップ
丸善出版 
結局、1/20に購入した。2010年に出版された「Pattern Recognition and Machine Learning」の翻訳。機械学習全般のことが書かれている。PRML本と略して呼ばれるようだ。深層学習に関する記載は5章の225~293ページ(68ページ)だけだが、内容が非常に濃い。予備知識として求められるレベルが高いので、これで初めて学ぶのは難しい。多少知識がついてきた自分でも、5章の導入部分は、全く知らない言葉が多数出てくるし、分かっていると思っていたところも、より厳密な定義によって説明が展開され、それはどんな意味が、、、と頭をひねることになる。けれども、もの凄く安心感がある。理論の理解として辿り着くべき頂きがここにあるように思うので、(できるかどうかは別として)これがすらすらと読めるようになれば良いのだなと思った。
 この本に安心を覚えるのは、説明に納得感があるからだと思う。例えば、入力層、中間層、出力層の3つの層から構成されるニューラル・ネットーワークを2層ネットワークと呼ぶことを推奨しているけれど、その理由が‘ネットワークの性質を定めるのに重要な適応的な重みをもつ層は2つだから(p229)’となっている。「ゼロから作るDeep Learning」でも層数はPRMLと同じ呼び方をしているけれど、そちらは‘全部で3層から構成されますが、重みを持つ層は実質2層であるため「2層ネットワーク」と呼ぶことにします(p40)’となっていて、何かごまかされているような気がしていた。重みが重要だと言われれば、ニューラル・ネットワークは結局重みを求めるものだからそうだな。と納得がゆく。
 また、ニューラル・ネットワークは多層パーセプトロンとは決定的に違うということも書かれていて、それがパーセプトロンが隠れユニットの活性化関数としてステップ関数の非線形性を利用しているのに対して、ニューラル・ネットワークは連続的なシグモイド関数非線形性を使っている為に、ニューラル・ネットワークの関数が重みパラメータで微分可能となり、訓練にそれが重要となっていることが説明されている。他の本では、活性化関数の非線形性を利用していることに関しては説明されていても、微分可能であることが重要な要素であることはあまり説明がされないままに、いろいろな活性化関数が羅列されるだけになっていて、その法則性が掴めないのだが、誤差逆伝搬法を学んだときに「微分できることが活性化関数の必須要件なのでは?」と何となく気付くという気持ち悪さがあった。
 ビショップの「パターン認識と機械学習」は非常に難しい本ではあるけれど、その説明は要点を漏らさず実に的確な表現をしている。他の入門書で基礎知識を蓄え、この本で理解をきちんとした形に整えたり、一つ上の段階に持ち上げるというのが良いように思う。





 翻訳の本で意味が理解できない時に、原書を見てみるのだが、99%位の確率で翻訳は正しく、自分の理解が追い付いていないだけということを知る。






 今、一番良い資料だと思って読んでいる本。ディープ・ラーニングの歴史など理論とは直接関係ない参考情報も多々含まれているが、それらもディープ・ラーニングに親しみを持つことで理解を深めて貰いたいという著者の思いから来ているものではないかと思う。最近(2017/10/21)発売になった本で、多少の誤記があるが、出版元にはまだその情報が無い。しかし、下記サイトの方がまとめて下さっていて助かった。(数式がおかしいと思うのだけれども、自分が間違っているのだろうか?と悩んでいた所があったので。)
「これならわかる深層学習 入門」 瀧 雅人著 の正誤表 - 科学やら技術やら
ただ、Amazonのコメントに、C. M. ビショップの「パターン認識と機械学習」と内容が被っているというものがあり、ビショップを先に読んだほうが、結果的には良いのだろうか???と少し悩んでいるところ。

 自分の理解力の無さで、読み進めるにも大分時間がかかっている。ちなみに「第5章 深層学習の正則化」の初めに他の機械学習と比べてDNNは重みパラメータが非常に多いので、過学習が起きやすい。というような説明が出てきて「なぜ?」と思ったのだが、これはパラメータが多いとモデルの自由度が高いために「2.4.5 過適合と汎化」の所で説明されていたデータに見られるノイズまで再現できるようにモデルがフィッティング出来てしまうからということだった。こういうことがすぐに結び付けられるかも学習の早さに影響してくる。

≪1/21追記≫。。。と思っていたのだけれど、改めて読み返してみると、統計学的な意味合いを説明するために、いろいろ説明されているのだけれど、まず深層学習を理解するためにはそれらの知識は不要というか、それらが理解できないので深層学習が理解しづらくなっているという宜しくない状況が起きている。まず深層学習に必要な範囲を説明して、それにはこういった統計学的な意味合いがあるんですよという説明の順序の方がよかったと思う。(2章の統計入門はまるまる捨てたいし、3章以降でも統計の話が時折顔を出して非常に邪魔。)





 Amazonでの評判は良いけれど、自分には説明が足りていない難しい本という印象。いろいろな説明が唐突な感じで、意図するところを読み取れないのは、自分の知識が不足しているせいか?また、使われているフォントがアウトライン・フォントではなく、ビットマップ・フォントなのか印刷の仕方なのか、商用の印刷物とは思えない品質になっていて非常に読みにくい。


深層学習の仕組みを、実際にPythonで書いて理解するというのが動作を見ながら理解を深めることができ、非常に分かり易くて良い。ただし、説明が数式で示されずにPythonのコードだけで理解をしなければならないところなどが多々あることや、理論の説明が詳細までは踏み込んでいないところなどあり、分からなくなると「これならわかる深層学習入門」に戻ってどういうことだろう?と考えている。今は連鎖律と勾配で足踏み中。



 ■深層学習をフレームワークで動かす




 図書館で借りた本。よくここまでフンワリした内容で本を出すなと驚くレベル。「基礎編」「理論編」はどちらも深層学習の基礎と理論のフンワリとした概略が書かれている。「体験編」でCaffeをLinuxにインストール、サンプルプログラムを実行しているがネットで検索すれば説明しているサイトがすぐに見つかりそうな程度の内容に見える。理論は構わない、まずはDNNを動かしてみたいという人には適しているとAmazonのコメントにはあるが、この程度の理解でDNNを活用する方法があるのだろうか?と疑問に思う。(「動かしたことがある」と言えることに価値があるのか?)

ちなみに自分はCaffeをWindows環境でインストールしてみたが、使用しているPython、Visual StudioとCaffeの対応バージョンが合わず動かすには至らなかった。MicrosoftのCNTK(Computational Network Toolkit)を除く、どのフレームワークも言えることだろうと思うが、CaffeはLinuxで動かした方が良さそうだ。





図書館で借りた本。深層学習の理論は理解している人が、深層学習のフレームワークの「Chainer」「TensorFlow」「Deel」などでプログラムと考えるときに、そのフレームワークをインストールする方法を知ったり、最初にサンプル・プログラムを動かしてみるまでを体験したりするのに使うのであろう本。私はまだ理論を学んでいて、実際のプログラムを書いたり、動かしたりといったところには至っていないので、まだこの本に書かれていることは試していない。上記の「初めてのディープラーニング」の体験編を少し丁寧に、いろいろなフレームワークで行った感じ。

Chainerで学ぶディープラーニング入門
島田 直希 大浦 健志
技術評論社 

図書館で借りた本。理論もそれなりにきちんと説明しようとしている。ただ「かいつまんで言えば確かにそういうものだけれど、何か違うような気がする」という印象の説明となっていて、深層学習の理論に触れたことの無い人が、これを読んで理解できるという説明ではないように思う。後半のChainerを実際に使う所は、丁寧に書かれているように見えるので試しにChainerで書いてみるかという時には「初めてのディープラーニング」や「はじめての深層学習プログラミング 」よりは手ごたえのある内容となっているのではないかと思う。
 後半は本題であるChainerの使い方を説明してくれるのだろうと読んでみたら、ディープ・ラーニングの手法の説明にChainerでの実装が少し引用されているだけという形式になっていて、理論の説明は表面的なまま。Chainerの使い方はこれでは分からないし、ダメだと思う。

0 件のコメント:

コメントを投稿