THE長文日記

長文とか短文とかのクレームは一切受け付けません

文系でも一冊でChainerからTensorFlowまで学べる新刊「はじめての深層学習プログラミング」

 Chainerがバージョンアップする度に文句を言っていましたが、すったもんだの挙句、ついに半年前から修正修正また修正を繰り返していた本が発売と相成りました。


 その名も「はじめての深層学習プログラミング」


 教養本というか読み物本である「よくわかる人工知能」を書く裏側で、技術書も同時に書いていたわけです。

 なぜ書いたかというと、主に社内の情報共有のため。とりわけ我が社の文系社員であり、人類総プログラマー化計画の実験対象でもあるゴトーくんこと後藤大喜に読ませるためです。


 今週から「秋葉原プログラミング教室」で、「AIプログラミングコース」が始まるのですが、そのテスト版とでも言うべきイベントで、僕がAIのプログラミングについて話す機会が先月ありました。


 すると、それを聴いていた文系の学生が「ちょっと僕もやってみたいんであの資料もらえますか」と言ってきました。人工知能というのはそれほどまでに興味を引きつける対象なのもしれません。


 というわけで出ましたこの本。

 昨日、ついに見本誌が届きました。

https://i.gyazo.com/9c7105bd66df3acc0082a2479136c097.png


 気をつけたのは、できるだけ難しい数式を使わないこと。

 機械学習の話になると、すぐに皆さん難しい数式を使いたがる。

 あれは性癖なんでしょうか。


 たとえばChainer Playgroundというオフィシャルの入門サイト(https://play.chainer.org/)があるのですが・・・


https://i.gyazo.com/5344a79fee260aa1a75d45513f3fd3b3.png


 いきなりこれかよ!

 パラメトリックモデルとかの用語は基本的にどうでもいいので、なぜここで説明しているか不明ですし、線形変換のモデルを数式で説明しているのもやりすぎです。

 

 まあ正直、プログラマーの中には数学が得意でない方が数多く含まれていまして、プログラマー業界の中でも特に数式を大量に扱う、僕のような3Dゲームプログラマーであっても、数式というのはできるだけ避けて通りたい存在です。


 なのに、いきなり、出会い頭にこの数式!

 しかしビビッてはいけません。この数式が出てきたとしても、プログラムそのものは簡単なんです。だけど数式で説明しないと、たぶん頭のいい人たちは「気持ち悪い」のです。


 まあ、普段お世話になっているプリファードネットワークスさんの仕事にケチをつけたいわけではありませんが、この「Chainer Playground」をやってみると


 「ああ、PFNの人達は本当に頭が良すぎて、頭が良くない人(オレ)たちのことをなにも理解してくれないんだな」


 という気分が絶望的なまでに深まります。

 うん、これが理解出来る人は、そもそも既に機械学習のなんたるかを理解してる人だけだよね。


 とにかく、Chainer Playgroundがあったら、どんな人でも無料でChainerに入門できて、入門書書く意味がないじゃん!と密かに思っていたのですが、どうやら入門書を書いた意味はありそうだ、ということでホッとしています。


 話を本に戻すと、本書では、中学校卒業くらいの数学的知識で・・・といってもまあそのレベルでも盤石とは言えない人がほとんどでしょうから、もっと噛み砕くと、数学的知識がほぼなくても、AIのプログラミングを学ぶことが出来ます。


 なぜなら僕が数式をキライだからです。

 

 そして、僕もまあ大学院の授業とか受けたんですけど、一般的にいろんな先生がいろんな数式でいろんなことを説明してくれるのですが、プログラミングに落とせなければ数式は飾りです。逆に言うと、プログラミングに落としてあれば数式はそもそも必要ありません。


 その昔、昔々に書かれたコンピュータグラフィックスの本は、離散コサイン変換についての解説と数式、そしてコードの実装が載っていました。



https://i.gyazo.com/bc7051c24178bb806123d93020e1d8dd.png

https://ja.wikipedia.org/wiki/離散コサイン変換



 ちなみにこの数式、僕は一度も理解しようと思ったことがありません。

 さらにはVRAMの構造からアドレスまで。そうしないと、JPEG画像を表示することができなかったのです。


 今日、同じことはこう書けます。

import cv2
img = cv2.imread('hoge.jpg')
cv2.imshow("img",img)

 JPEGの実装の中身の理論とか、基本的に使う側からしたらどうでもいいのです。ここに真剣にこだわるのは、総裁(http://blogs.itmedia.co.jp/fukuyuki/)のように電機メーカーでデジカメの出力するJPEGを極限まで高画質にしようとするみたいなド変態の仕事をする人だけです。


 おなじことがニューラルネットワークのプログラミングにも言えます。

 最新の論文を読んで自力で実装しようという場合には、多少の数式が出てきますが、それとて三次元グラフィックスに比べたらごく当たり前の式しか出てきません。そして式で説明されるよりもプログラムで説明されるほうが遥かに簡単に説明されます。


 どこまでをブラックボックスとして扱って良いのか、どこまで中身を知っておいたほうが良いのか、ということは実際のプログラムに落として初めて理解できます。

 

 そしてニューラルネットワークのプログラミングは、今やChainerやTensorFlow、Kerasといった高度に抽象化されたライブラリが沢山できているために、ほとんど面倒なことを考えずに使うことが出来るのです。


 そして面倒なことが抽象化されていると、ニューラルネットワークのプログラミングそのものは恐ろしく簡単になります。


 本書で最初に出てくる画像認識のプログラムはものすごく短いです。

https://i.gyazo.com/c80724df1747ac44523435b73c3d17db.png


 これを何も考えずに写経するだけで、まあなんとなく人工知能のプログラミングっぽいことはできるようになります。


 こういうところから入って、少しずつややこしい話になって、最後は深層強化学習で超人工生命を育てる・・・というところまで行きます。


 そういうことですので、もし人工知能について知りたい、と思うなら、文系でも理系でもぜひ本書を手にとって読んで欲しいと思います。


 技術書としては薄くて安い本ですし、前提となる知識もほとんどいらないので、「よくわかる人工知能」で人工知能に興味を持った方にはぜひ手にとっていただきたい本です。キーボードが打てれば誰でもAIのプログラミングをマスターできます。


 反対に、既にニューラルネットワークのプログラミングをバリバリしてる人からすると少し物足りないと思います。そういう人はもっと難しい数式の書いてある本とかを読んでいただくのがいいでしょう。


 プロお断り!

 そこだけはご注意ください