不確定な世界

科学の話題を中心に、勉強したことや考えたことを残していきたいと思います

「機械学習と深層学習-C言語によるシミュレーション-」;小高知宏 著 読書感想

年始に買って積読していた、小高知宏著「機械学習と深層学習-C言語によるシミュレーション-」を読み終わった。
本書の特徴は、事実上Pythonに支配されている機械学習や深層学習のプログラムをC言語で学べること。しかも、特殊なライブラリに頼ることなく、きわめて基本的な文法だけで1ファイルに収まるようにコーディングされている。例えば、畳み込み処理などもすべてforループで愚直に行っている。以前読んだ「ゼロから作るDeep Learning」でさえ、numpyはフル活用しているし、後半は著者作成のライブラリを導入してしまっていたことから考えると、この方針を一切ぶれずに貫いているのは素晴らしいと思う。ただ、その分本書で扱っている例題はごく簡単なものが多く、実際の問題にすぐに応用できるものではないのも事実ではある。

サンプルコードとデータセットは本書の公式ページからダウンロードすることができる*1。単にサンプルを実行したり写経するだけでは頭に入ってこない人は、自分の得意な言語に移植してみるのも一興だろう。私もとりあえずCで実行して動くことを確認してからPythonで書いてみる、という進め方をした。特別うまく書かなくてもコード量が半分程度になり、改めてPythonの便利さを実感した次第である。

さて、本書で学べる手法は以下の通り:
帰納的学習(ランダムパターン生成)
・強化学習(Q学習)
・蟻コロニー最適化法
遺伝的アルゴリズム
パーセプトロン
・深層学習(畳み込みニューラルネットワーク

見ての通り、機械学習の中でも生物学的手法を多く扱っている。この中で私にとって予想外の収穫だったのは遺伝的アルゴリズムが扱われていたことである。遺伝的アルゴリズムのことは以前から知っていた。きっかけは確かYoutubeの動画で、ヒト型の3Dモデルに二足歩行を教えるものと、マリオをクリアさせるものであった。

マリオの動画は残念ながら削除されていた…。まあ、ともかくそれ以来遺伝的アルゴリズムにはずっと興味を持ちつつも専門的に勉強する機会はなかった。今回思いがけず遺伝的アルゴリズムを実装ベースで勉強することができたのは私にとって大きな一歩であった。

話が逸れてしまった。本書は以上のように幅広い手法を扱っており、機械学習の素人である私にとってはどれも新鮮に学ぶことができた。しかし、ニューラルネットワークや深層学習をメインに学びたい人にとって本書の内容は決して満足できるものではないだろう。深層学習メインの方には、正直言っておすすめできない。だが、畳み込みなどを本当に一から実装している点などには何か得るものがあるのではないだろうか。
もう一つマイナス面として、理論的な面ではほとんど参考にならない、ということも注意しておこう。もともと約200ページという比較的薄目の本であるが、その半分はサンプルコードで占められている。扱っている内容の多さもあり、一テーマあたりの理論的解説は本当に微々たるものである。本書はあくまでもコードを通して理解するタイプのものであることを忘れてはならない。

結論。深層学習に限らずに生物学的機械学習を幅広く学びたい方、C言語は使えるのにわざわざPython覚えなくちゃいけないの…?という方、上級者様の「エレガントな」プログラミングテクニックについていけず、もっとシンプルな文法だけで機械学習を勉強したい方 etc... にはぜひ本書をお勧めしたい。

*1:このサンプルコードを利用できるのは本書を購入した方のみ、ということが規約に書いてあるので注意して欲しい