『ゼロから作るDeep Learning』をやってみました。 | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

『ゼロから作るDeep Learning』をやってみました。

 大ベストセラーの斎藤 康毅著『ゼロから作るDeep Learning――Pythonで学ぶディープラーニングの理論と実装』。すでに入手された方は多いと思います。

 Amazonでも好意的な評価が多く、期待していたのですが、評判通り丁寧な本で、これまでイメージでしか理解していなかったディープラーニング(深層学習)について、コード上での具体的な動きがよくわかるものでした。目次はこんな感じです。

1章 Python入門
2章 パーセプトロン
3章 ニューラルネットワーク
4章 ニューラルネットワークの学習

スポンサーリンク

5章 誤差逆伝播法
6章 学習に関するテクニック
7章 畳み込みニューラルネットワーク
8章 ディープラーニング

 もっと詳しい目次は(https://www.oreilly.co.jp/books/9784873117584/)にあります

 文字通りTensorFlowなどのライブラリを使わずに、Pythonと数値計算ライブラリだけで、簡単なディープラーニングを実装してしまおうという本です。

 オライリーの本なので、基本的にプログラマ向けではあるのですが、機械学習の知識は必要ありません。とはいっても、用いられる関数の説明で結構な量の数式が使われています。

 しかし、数式のすぐ後に、グラフや図などの視覚的な説明とともにコード例を示してくれるので私のような「高校から文系、Σで挫折」のような文系プログラマにも、「ディープラーニングとはどのようなプログラムのコードによって成り立っているのか、どのような仕組みが最初にプログラムされたこと以上の動作を生み出しているのか」という根本的なことについて、かなり具体的な理解が得られました。

数式、グラフ、コードによる解説

例えば入力に対し、閾値を境にして出力を切り替える、活性化関数に用いられるシグモイド(ロジスティック)関数は

スクリーンショット 2017-02-09 14.03.45

 という数式で表せます。これだけだとよくわかりませんが


  def sigmoid(x):
      return 1 / (1 + np.exp(-x))

 のようにPythonのコードがあれば本当にプログラミング上でも「関数」なのだと言うことが実感できますし

スクリーンショット 2017-02-09 14.09.13

 のように、出力が同じ活性化関数であるステップ関数(点線)との比較により、出力が1か0ではなく、曲線的に変化することが分かります。(曲線的に変化することの重要性は4章でわかります)

 それに加えて、NumpyなどのPythonライブラリのおかげもあってか、微分や、行列などの数学の取っ付きにくい考え方についても、とりあえず、そうプログラムすればいいのか、ということもわかるので、深層学習以外の機械学習理論についても物怖じせずに立ち向かえそうです。

(微分で使う「極限」がよくわからなかったのですが、「まともにコンピュータで計算しようとすると、ある値にひたすら近づけようとするので、処理が終わらない」ことを知りました。プログラムの考えを通せば数学の概念の理解もいくぶん簡単になりそうです)

 プログラミングについてはある程度経験があるけれども、数学はあまり得意ではなく、ディープラーニングの仕組みが、雰囲気としては判るけどあまり理解できていないプログラマの方には本当におすすめです。

私が行った勉強と注意点

 ただ、幾つか注意点があります。
 本文中にもありますが、この本を見ながら実装しても、Googleの機械学習系サービスのようなものが作れるわけではありません。性能と作る手間を考えると、例えばTensorFlowkerasなどの深層学習ライブラリを組み合わせて使うほうが実用的です。

 また、確かにわかりやすく解説がされており、最終的にはきちんと理解できるのですが、やはり流し読みして理解できるようなものでもありません。

 丁寧にコードを「写経」して、matplotlib(Pythonのグラフ描画ライブラリ)でグラフを出力し、その関数がどのような値を取るのかを視覚で把握しながら学習をすすめて行くのがおすすめです。私は1ヶ月ほどかかりました。

 途中を飛ばすと絶対にわからなくなると思いますので多少時間がかかっても順番にこなしていくのがおすすめです。章タイトルをみていくと、2章 パーセプトロンと、いきなり大変そうですが、基本情報技術者試験の最初に出てくるような論理回路を例に説明してくれるので、それに関する知識があれば、理解できます。その2章をやりきってしまえば、残りはその勢いのまま、最後までクリアできるでしょう。(5章で少しつまづきましたが…2日くらい間を置いたら理解できました。)

 ディープラーニングを使いこなすための基礎知識が、実践レベルで手に入るので、おすすめです。