書籍紹介「ゼロから作るDeep Learning」|文系”非”エンジニアがディープラーニングを学ぶブログ

  • f
  • t
  • p
  • h
  • l
Liberal_Arts

文系・非エンジニアに差し述べられた救いの手

本稿ではディープラーニングの入門書である「ゼロから作る Deep Learning」について紹介を行います。

※タイトルにある通り、本シリーズでは文系(文学部出身)、非エンジニア(システム開発等の本格的なプログラミング経験なし)な筆者がディープラーニングを学ぶ中で参考になった書籍や実績の紹介を行います。あくまで初学者の目線で学習の過程を紹介するといった主旨であるため、専門家による詳細な解説はございません。あらかじめご了承ください。

文系・非エンジニアを阻む2つの壁

文系・非エンジニアにとってディープラーニング(というか、機械学習全般ですが…)を学ぼうとした際、理論と実装(プログラミング)それぞれが大きな壁として立ちはだかります。本書はこの2つの壁に立ち向かうにあたり、非常に役に立ちます。

ポイントは、本書がプログラムを実際に組み上げることに重きを置いているという点です。冒頭にこのような記述があります。

ディープラーニングについて、”より深く”理解するにはどうしたらよいでしょうか?筆者が考えるに、そのための最も良い方法は、実際に作ってみることです。実際に動くプログラムをゼロから作り、ソースコードを読みながら考える――そのような作業が、ディープラーニングを(さらに言えば、高度に見える何かの技術を)正しく理解する上で重要だと筆者は信じて疑いません。

この記述の通り本書は、実際にプログラムを組みながら学習を行えるよう構成されています。初学者でもやり遂げやすいよう、順序立てて、一つ一つ理解しながら進められる章立て・難易度で構成されています。

本格的な理論書には立ち向かえず、プログラムをどーんと持ってこられても読み解けない文系・非エンジニアにとってありがたい一冊です。

壁その1:理論の壁

まず学習のとっかかりとして、一般教養的な書籍を読むケースが多いかと思います(筆者がそうでした)。これによってディープラーニングとは何者かのイメージを掴むことが出来ますが、それだけでは実際に使えるようにはなりません。

次に進むため筆者は理論書にチャレンジしたみたのですが、ここで愕然としました。数学的に厳密な議論にとてもついてゆけないのです。数々の数式に打ちのめされ、意気消沈してしまいました。

この困った状態の突破口となるのが本書です。ポイントとなるのが、それぞれの解説において、当該処理を実装するpythonコードがセットになっているという点です。具体的な処理と実際の計算結果を目の当たりにすることによって、何が起きるのかについての理解が進むのです。

壁その2:実装(プログラミング)の壁

実は、シンプルなものであれば、ディープラーニングをプログラムで実装することはそこまで難しくありません。chainer、tensorflowといったフレームワークなるものが存在するからです。これらのフレームワークを用いれば、かなり簡潔な記述で実装が可能です。webで検索すると簡単にいくつかサンプルコードを見つかるかと思いますが、たった数十行のコードで書かれていて驚かれるかと思います。しかし、簡潔であるが故に、実際にどんな処理が行われているのか分かりづらくなるという欠点もあります。

プログラミングに明るい方であれば、フレームワークのドキュメントを読むことで具体的にどんな処理がなされているかを調べることができます。(プログラムが公開されているため、該当の箇所を読むことで、裏側でどんな処理が行われているか確認することが可能なのです)

しかし初学者である我々はドキュメントを読んで理解するほどの知識を持ち合わせていません。故に、カスタマイズをしたいときに、プログラムのどの部分をいじれば何が起きるかが分かりません。

こういった事態を回避するため、本書では敢えてフレームワークを使いません。Pythonの基本的な構文を用いてプログラムを構築します。(例外として、行列計算に便利な「numpy」というものは使用しますが、これもディープラーニング専用というものではありません。)

そうしてプログラミングを行うと、フレームワークを利用した場合と比べて記述するコードの量は増大します。いきなり全量を目の当たりにすると面食らってしまうかもしれませんが、各処理を小分けにして順序立てて説明されていますので、心配なさらないで下さい。徐々に理解を進め、最終的に全容を把握できるようになっています。

こうして理解を深めた暁には、上述したフレームワークも、より使いこなすことが出来るでしょう。筆者も実際にディープラーニングを行う際には、フレームワークを活用しています。

とはいえやはり文系にとって苦しむ箇所もある

上記の通り、本書は随所に工夫が散りばめられ丁寧に説明がなされてはいますが、理解のためにどうしても避けられない数学的な事柄が存在します。それは、行列(線形代数)と微分の計算です。ここで暗い気持ちになるかもしれません。筆者もそうでした。

ただ、登場するのはそれぞれの分野でも特に高度な部類のものではありません。数学を投げ出した過去を持つ我々でも、解説とセットになっているコードを実行して処理を確認しながら学習を進めることにより、どうにか理解に到達できるはずです。web検索でヒットした数学入門的な記事をいくつか眺めてみるのもよいかもしれません。

とはいえ、それでも章が進むにつれて難しい(と筆者が感じた)部分が増えてきます。もし難しく感じた場合は、まずは十全に理解せずとも読み進めてよい、と筆者は考えます。筆者は2周目の学習を始めていますが、1週目で分からなかったところ、分かった気になっていただけのところをより理解できたと感じながら学習を進められています。

完璧にしようと思うあまり息苦しくなってしまった場合は、十全に理解できていなくとも、思い切って進んでいくというのも手だと思います。

最後に:手を動かしてみよう

繰り返しになってしまいますが、本書を読み進める際には、手を動かして各サンプルコードを実行しながら学習を行うようにしましょう。実際に実装できた経験は自信になりますし、なにより初学者にとっては、簡単なものであっても自分が書いたコードが実行されて結果がかえってくるのは楽しいものです。楽しむことは、やはり挫折せずに学習を進めるなによりの要素です。

筆者もまだまだ初学者の域を出ませんが、なんとかかんとか勉強していきたいと思います。ぜひ一緒に頑張りましょう。

 


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


柳 優樹(やなぎ ゆうき)

“Business Analytics”チーム所属。データ分析に関する事柄を、技術論だけに陥らず実際の行動に繋がる情報として発信します。最近は、オムニチャネルやO2Oなど、オンラインとオフラインの消費行動が融合していく流れに、とても興味をもっています。

  • f
  • t
  • p
  • h
  • l