オンラインサロン「ギガ盛りブログ飯」経由で、インプレスさんから『Python機械学習プログラミング 達人データサイエンティストによる理論と実践』を献本していただきました。1ヶ月かけてじっくり読んだので、自然言語処理の研究で機械学習を使っている大学生並みの感想で書評をお届けします。
機械学習ってなんぞや
機械学習と聞いてピンとくる人はあまりいないと思うので、軽く説明しておきますね。実は身近なところでも使われていて、ニュースや料理レシピの自動分類(カテゴライズ)や、メールのスパム検知なんかもそうです。
最近機械学習がヨイショされている理由はビックデータの存在が大きいと考えられます。雑然としていて個々で見ると無価値に見える膨大なデータの山から発掘された有用なデータは、時に人間が考えられないような変化を生み出します。
POSシステムの売上情報をデータマイニングの手法で解析してみるとビールとおむつに相関関係があり、おむつの近くにビールを置いたらよく売れたという「Beer and Nappies」は有名な話です。このように関係がないように見えるモノの関係性を見つけたり、大量の情報から人間には不可能な予測をするのが機械学習です。
読み進める上で必要な知識
この手の技術書は、いきなり読んで理解できるものではないと思うんですよね。あくまで僕の経験上ですが。全体に目を通してみて、この知識はあった方がいいかなと思った部分を紹介しておきます。必須ではなく、知ってたらラッキーくらいに捉えてください。
行列などの線形代数学は高校の数学Cでやっているはずなので大丈夫だとして、機械学習手法の基礎知識はあった方がいいと思います。一応解説されているんですけど、ちょっと物足りない気がしました。あと、微分積分学の簡単な部分は理解しておくといいかもしれません。特に偏微分とか。普通に出てきますので。
Python(ちなみに3.x)で実装するので、プログラムを読み書きしたり、ライブラリを扱えることが前提となります。Pythonの文法云々を解説する本ではないので、そこは期待しない方がいいでしょう。SQLiteやHTMLもちょっと出てきたりするので、少しかじる程度でいいから予備知識があればベストです。
ぶっちゃけ僕もよくわかんない数式とかあったんですけど、まぁなんとかなるんですよ。なぜかと言うと、理論を完全に理解できなくても実装されたコードを見れば、あぁそういうことねって感じでなんとなくだけど落としこむことができるから。もしわからなくても、調べれば大体どうにかなります。
個人的にすごく勉強になった部分
データ量が多かったり、複雑なアルゴリズムで動かす時に問題になるのが実行時間です。やったことある人ならわかると思いますが、アホみたいに時間かかって下手すれば数日とか数週間は結果が出ません。プログラミングがあまり得意ではない僕はスペックでカバーしていたんですけど、本当は効率よく動かしたかったというのが本音。
本来なら効率化は、並列処理が得意なCPUの導入やGPGPUによる高速化を検討する前にやるべきことで、それでも追いつかないのであればスペックで殴ればいいのです。僕の場合は順番が逆になっていたわけなんですが、本書では次元削減や計算効率についても書かれていてとても参考になりました。
いかなるフレームワークを使ってもニューラルネットワークの計算量は凄まじく、層を増やすとパラメーターもバイアスパラメーターも当然増えるわけで、膨大な計算をする必要があります。計算機の性能はベースにありますが、いかに効率よくするかも考えることは重要だと実感しました。
最近話題のディープラーニングについて
ディープラーニングは機械学習を発展させたもので、脳機能の特性を模した人工ニューラルネットワークが特徴量を自動で学習します。具体例を挙げるとすれば、閲覧した商品を元に好みに合った商品を提案するとか、最近話題になった猫を認識するAIなんかはイメージしやすいと思います。
本書では多層ニューラルネットワークで手書き数字の画像認識を紹介しています。僕にとって画像を認識することは重要じゃなくて、バックプロパゲーションによるトレーニングや勾配チェックのデバックについて理論を学んだ上で実装することで理解を深められたのが収穫でした。ディプラーニングであれば共通して使えますからね。
まとめ:機械学習に興味があったら手にとってほしい
そこそこ分厚い本だけど、数式とかプログラムが多いので、意外とサクッと読めると思います。ただ、読むだけでは全くダメで、噛み砕いてよく理解しながら、手を動かしながら読み進めていくと、1ヶ月くらいはかかるボリュームでした。
機械学習と言っても色々あって、当たり前だけどそれぞれ特徴が異なります。どのような結果を得たいのか、学習データの量や種類などを考慮した上で、適切なアルゴリズムを選ばないといけないわけです。その点では各手法について幅広く取り上げられていて、それぞれの特徴が丁寧に解説されているのはとても良かったと思います。
一方で、機械学習バリバリ使ってるよという人にはあまり響かないのかなと。「分類/回帰問題や深層学習の導入を解説!」というキッチコピーの通り、導入部分を手助けするために書かれています。それ以上の内容を求めるのであれば、もっと発展的な書籍を選ぶべきです。
とは言え、amazon.comの3カテゴリーで首位を獲得しただけあって、僕みたいな機械学習をちょっと使ったことがあるくらいの人にはジャストミートする本だと思いました。これから機械学習を深く掘り下げていくための手がかりとして、キッカケとして手にとってみてはいかがでしょうか。