プログラムがどう動くのかを図解入りで分かりやすく解説した『プログラムはなぜ動くのか』(日経BP)。2001年の初版から2007年の第2版を経て、2021年に待望の改訂第3版が出版された。初版から20年、変わったことと変わらないことなどを著者の矢沢久雄さんに聞いた。今回は3回目。(聞き手は、「日経の本ラジオ」パーソナリティの尾上真也)
コンピューターが学ぶから機械学習
尾上真也・「日経の本ラジオ」パーソナリティ(以下、尾上) 『プログラムはなぜ動くのか』 の第3版を発刊するに当たって加筆されたのは、機械学習やPythonについての部分ですね。
矢沢久雄(以下、矢沢) 今は機械学習が実用化されていて、使いやすいPythonという言語が主流になっています。Pythonはコンピューターの仕組みとは無関係に使える、道具としてよくできた言語なんですよ。機械学習は難しいと思われるかもしれないけれど、数行でプログラムが書けちゃうということを示したかったんです。
機械学習にもいくつか種類があって、この本で取り上げたのは「教師あり学習」という、答えがあるデータです。そこに挙げた例では、0から9の手書きの数字の画像データで、それが何の数字なのかという答えも付いています。昔からあるサポートベクターマシンというアルゴリズムを理解した上で使ってほしいですね。Pythonなら10行足らずで手書き文字の認識プログラムを書けることと、どうしてそれができるのかという仕組みも凝縮して加筆しました。
尾上 Pythonは簡単にできる言語ですが、その仕組みを理解するのは簡単ではないですよね。
矢沢 そこを、極力単純な例で示して、たった1章で説明しています。サポートベクターマシンは、簡単にいうと物事を分類するための境界線が引ければいいんですよ。境界線を一直線で引くとしたら、中学の数学で勉強したようなy=ax+bです。そのaとbを、与えられたデータから判断してコンピューターが決めていく。与えられたデータに答えが付いているから、その答えを参考にしながら直線のaとbを導き出す、それが機械学習なのです。だから我々が教えているのではなくて、コンピューターが学んでいるのだということをつかんでくれたらなと思います。
尾上 プログラムがあって、コンピューターが学習しているから、機械が学習するということなんですね。
矢沢 今までのプログラミングは、その手順をプログラマーが作っていました。そこに大量のデータを読み込ませて、コンピューターに決めさせるわけです。でも今ではデータに答えが付いているから、コンピューターはその答えを頼りに決めていき、導き出したaとbが正しいかを、その答え付きデータを使って検証するということです。
尾上 それまでは、y=ax+bのaとbはプログラマーが指定していて、うまくいかなければそこからもう1回やり直すということを、延々と人間側がやっていたのでしょうか。
矢沢 そうですね。また、コンピューターだからこそ、次元が多くてもできるんですよ。人間なら1つの平面上の一直線しか思い浮かべられないけれど、コンピューターなら2次元から3次元、4次元、5次元と、特徴量という判断するためのデータの次元を増やしていけるわけです。一番基本となる2次元のy=ax+bは1本の線の書き方で、それなら我々人間も理解できますよね。その次元を増やしているというイメージをつかんでもらえるように書きました。
尾上 面白いですね、2次元、3次元、4次元と広がっていく…。
矢沢 何次元でも大丈夫なんですよ。3次元を超えたら人間のイメージを超えてしまうけど、コンピューターなら何次元でも問題ありません。
人の顔は高次元で判定している
尾上 最近、Googleフォトで人物を特定できたりする場面もありますよね。必ずしも正面から捉えてなくても、しかも時間がたっていても、その人かどうか判定できます。それこそ2次元、3次元、4次元の世界までプログラムで判断しているということでしょうか。
矢沢 実際にGoogleフォトがどのように顔を認識しているのかはよく分かりませんが、イメージとしては、縦横に画像が100ドットあって、100×100次元でその画像の特徴量でやっているのでしょう。2次元なら、例えば犬と猫の特徴を切り分けるくらいのことができますが、それを画像のドット数分の次元でやっているということですね。
尾上 なるほど…。では最後に、この本をすでに読んだ人やこれから読もうと思っている人にメッセージをお願いします。
矢沢 初版から20年たちましたので、今の時代に合わせてしっかり書き直している一方で、基礎の部分は変わっていないことも確認してほしいと思います。
あとは、技術を勉強するのがあまり楽しくないとか、戸惑いを感じている人がいたら、ぜひ読んでいただきたいですね。車のボンネットを開けて中身を知れば愛着が深まるという話をしましたが、この本を読むとそういう気持ちになれると思いますよ。これから勉強したり取り組んだりしていく人も、この本を読んでコンピューターとプログラミングをより好きになってほしいですね。
構成/佐々木恵美