このページの本文へ

[短期集中連載]AIとディープラーニングが起こす"知能革命" 第3回

「もしドラ」仕掛け人・加藤貞顕×人工知能プログラマー清水亮 徹底対談

人工知能が「売れる本」を見分けるようになる……かもしれない話

2017年02月20日 09時00分更新

文● イトー / Tamotsu Ito

  • この記事をはてなブックマークに追加
  • 本文印刷

人工知能が弟子になる?創作の本質を見極めるディープラーニング技術「蒸留」

加藤 話を戻すと、cakesでPVの予測をするAIを作っているっていう話を前回しましたよね。それはディープラーニングでやってるんですけど、要するにいろんなパラメーターをたくさん出して、結果を渡して、それで評価関数つくるっていうのをやってるわけなんですが、よく考えたらこれ、自分がやってることと一緒だなと思って。
 こんなこと言うと偉そうなんですが、新刊なんかで、本の表紙を見ただけで、発売前にどれだけ売れるかだいたい予想ができるんですよ。もちろん外すこともあるんですけど、それなりの精度でわかる。つまり、そういう評価関数が僕の中にあるわけです。著者だったり装丁だったり。

清水 テーマだったりね。

加藤 そう、テーマだったりを見て。そういう、自分の中にあるような感覚を、人工知能でつくってるんだなって思いました。

清水 基本的にディープラーニングって人間の認知の仕組みを模倣してるものですからね。
 今の話を聞いていて思い出したのは、ディープラーニングのテクニックで「蒸留」っていうのがあるんですよ。蒸留っていうのは、蒸留酒の蒸留です。例えば、賢いAI(先生)と、演算規模が小さくて賢くないAI(生徒)を用意して、それぞれに動物の絵を見せて特徴ベクトルを取得する(その絵が何なのか判定させる)んです。この特徴ベクトルは、たとえば猫7%、犬35%みたいな判定をするものです。
 で、この先生AIの特徴ベクトルをそっくり同じように出すように生徒AIに学習させるっていうテクニックがあって、これがディスティレーション(distillation)=「蒸留」。
 これを生徒AIに学習させ続けると、演算規模が小さい生徒AIでも大体、先生と近しい性能になることがわかってます。しかもこれって、複数の先生をつけて学習させるともっと優秀になるんですよ。

加藤 なるほど。これは「教師なし学習」ってやつですか?

清水 そうです。教師は居るけど、データ的には教師がない。これってすごくて、要するに加藤さんを蒸留すると、加藤さんが言った「売れるロジック」みたいなものをなんとなく学んじゃって、「門前の小僧習わぬ経を読む」みたいに、一緒にいるだけでどんどん加藤さんの判断に近くなっていく。

加藤 まさに人間の、師弟関係ってこういうシステムですよね。でも、AIでも本当にそんなに上手くいくんですか?

清水 かなり上手くいきますよ。

加藤 へえ。生徒の方が演算規模を小さくつくっても大丈夫ってことは、より本質的な部分だけ抜き取るんだ。すごいじゃないですか。

清水 面白いでしょ? 弟子ってこうだよね、とか思うでしょう。

加藤 たしかに。いい弟子って、師匠の強さに自分のアイデアも付けてより強くなるんですよね。

清水 そうなんですよ。僕が20歳の頃に専門学校で教えていたときに、生徒によく言ったんだけど、「僕は清水さんのことを技術面では尊敬してるけど、清水さんの普段の言動は尊敬できない」って言ってるのを聞いて、「それは違う」って言ったことがあるんですよ。それは尊敬してることじゃないと。単に技術で負けてるって認めてるだけだと。
 尊敬するっていうのは、その人の全部を受け入れること。普段の言動と僕の技術力には密接な関係性があるんです。そこを切り離して学ぼうとしたら、君は全然、僕のことを理解できないよと。もし技術面で僕と並びたいなら、一時的にでもいいから、すべて僕と同じように振る舞うべきだっていう話をしたことがあります。そういえば、スタジオジブリの鈴木敏夫さんの弟子の石井朋彦さんも、最初に鈴木さんに「自分で考えるな。全て俺の真似をしろ」と教えたそうですね。

加藤 なるほど。

清水 蒸留からなんでそういう話をしたかというと、人工知能をプログラミングしだして最近思うのは、僕がやってるのは結局、自分の師匠だった人たちの反応を真似してるだけなんですよ。結局ね。だから僕は、いろんな偉い人のモノマネがすごく上手になってしまった。実際に会ったことがある人なら吹き出すくらいにはうまいです。

加藤 清水さんが、「よくわかる人工知能」の中で教育の話を書いてましたよね。自分はプログラマで、経営者で、教育者でもある。その僕がAIやるのはぴったりだ——という話。確かにAIをつくるって、教育することなんですね、まさに。

AIのプログラミングに難解な数学の知識は必要ない(清水)

加藤 実はね、僕も今、AIのプログラミングをすごくやりたくなってるんですよ。

清水 今、やるべきでしょう。「はじめての深層学習(ディープラーニング)プログラミング」で始めるのは大正解ですよ。本当、AIのプログラミングってめちゃくちゃ簡単だから。

加藤 こういう人工知能プログラミングをやるにはどれぐらいのものが必要なんですかね。マシンもそうだし、あと人間の必要スペックも知りたい。数学の知識とか、必要ですよね。

清水 あ、全然いらないですよ、それは。

加藤 あ、そうですか?

清水 みんな誤解してるんだけど、僕って数学はすごい苦手なんだから。

加藤 あ、そうなんですか。

清水 うん。「尤度」(ゆうど)っていう読み方を去年知ったぐらい。でも尤度ってめちゃめちゃ重要な概念です。ただ、この本(「はじめての深層学習プログラミング」)には尤度っていう文字は出てこないし、数式も出てこない。なぜかというと、知らなくてもAIは使えるからです。
 僕、基本的に手抜きの天才なんで、わかんないことをわかんないままブラックボックスで使うのが得意なんですよ。

加藤 CGとかやるときって、数学の知識が相当いるんじゃないですか?

清水 いるように見えるだけ。

加藤 ええ!? そうなんですか?

清水 うん。僕は本当に、基本的に高校生のときに考えたこと以上の難しい数式は使ったことがない。で、それ以上難しいものは、ブラックボックスとして使っちゃう。それで別に困らないですよ。どうしても原理が知りたければ、理論を学べばいいけど、それは研究者の仕事であって開発者の仕事ではない。たとえばJPEGを扱うときに、離散コサイン変換を勉強するやつはバカですよ。

加藤 たしかに、JPEGを扱うのに圧縮アルゴリズムの理解は必要ないですね(笑)。

清水 だってImage.load(‘hoge.jpg’)って書いたらJPEG読み込むわけで。そこを勉強するのに時間使うんだったら、既存のコードを使ってJPEGで何か楽しいことやったほうがいいじゃないですか。
 JPEGの理論から勉強してると、PNGを扱おうとしたときに、今度はスライド辞書法を勉強しないと使えないわけでしょ。画像一枚扱うのに余裕で数ヶ月かかりますよ。そんなことはバカバカしいと思わないと、これからの世界で生きていけません。どうせたいていのことはAIというブラックボックスが解決しちゃうんだから

加藤 たしかに。

清水 僕はそういう主義だから、別に数学なんか全く理解する必要はない。というか、はっきり言ってむしろ論文を論文っぽく見せるために数式が書かれているだけだと思ってるんですよ。僕も論文っぽいものには数式書きますしね。一応。ただ、むしろ最近はAI論文でも数式が出てこなくなってる。もう数式を書いても意味がないことがみんなわかってきてるからです。

加藤 僕らいま、社内でけっこう数学を勉強してるんですよ(笑)。先生に来てもらって勉強会をひらいたりして。今後どうしようかな。

清水 趣味で数学を勉強したいですというならどうぞ(笑)。ただ、AIを理解するために必要かというと、正直、本当にいらない。数学っていうのはある種の暇つぶしで、ある種の宗教だと思ってます。ピタゴラスは実際、新興宗教団体の教祖でしたし。

——線形代数ぐらい押さえておいたほうがよくないですか?

清水 線形代数って何だと思ってます?

——行列とかベクトルを取り扱うテクニックをある程度身につけておいたほうが、こういうときに役に立つんじゃないのかなっていう程度ですが……。

清水 いや、もう全くいらないですね。

加藤 ははは、そうなんですか。

清水 僕、深層学習に必要な程度の線形代数だったら、一瞬で教えられますよ。まず、適当な数字があります。これをスカラーと呼びます。知ってますよね?

※テンソルについては清水さんのブログ記事でもわかりやすく解説しています

加藤 それはわかります。

清水 数字が2個並びます。これをベクトルと呼びます。ベクトルが横に2つ以上並びます。これ行列と言います。テンソルは、行列が立体的になんかいっぱい並びます。

加藤 立体?

清水 立体的にいっぱい並びます。これが3階のテンソルと言います。

加藤 3階のテンソル。ふーん。

清水 で、行列は2階のテンソルであり、ベクトルは1階のテンソルで。

加藤 なるほど。

清水 スカラーは0階のテンソルですよと。

加藤 なるほどなるほど。

清水 はっきり言って、AIのプログラミングに必要な線形代数の知識はこれで終わり。

加藤 え、本当に?

清水 うん。だってテンソルっていうのは何ですか?って言ったら、多次元配列のことですよ。これ以上難しいことは、全然勉強する必要ない。

加藤 その先の行列の操作みたいなところを……。

清水 そういうのは今はフレームワークが隠蔽しちゃいますからね。フレームワークが隠蔽している部分のことを学ぶときにも、線形代数の知識はほとんどいりません。そもそもたいした計算なんかしてないんですよ。かけ算と足し算だけ。
 数学的に必要な知識でいえば、一番難しい概念で対数が出て来るくらいです。虚数や複素数が出てこないぶん、僕からしたらむしろ数学的には簡単な部類です。まあ強いて言えば、行列とベクトルの乗算とか、行列同士の乗算とかは常識として知っておいたほうがいいと思いますが、バカみたいに簡単な話なので、それ以外は別に……。

加藤 あと、機械学習とか人工知能って、統計学を使いません?

清水 いやー、それが、統計も全然使わないから、機械学習では。事実、僕の本には統計の話は、1ミリも出てこない。

加藤 へー。学習してる過程で統計って出てこないんですか。

清水 出てこない。まあ言葉としては「統計」って出てきますけど、興味があるのは統計ではなくて「確からしさ」でしょ。つまり「正解率」に興味があるわけで。
 統計っぽい用語としては「尤度(ゆうど)」くらいですかね。これは統計のもっともらしさを表現する言葉です。論文を直接読んで実装するのでもない限り、数学的知識ってそんなにいらないんですよ。むしろ最近は論文と同時にコードがGithubで公開されていることが多いので、論文を理解するよりもとりあえずGithubからコードをクローンしてあれこれ試してみたほうが理解が早い。一本の数式を理解するのにはとても時間がかかりますが、ひとつのコードを理解するのはさほど時間はかかりません。コードの場合、実際にどんな計算が行われるのか全部そのなかで説明されているわけですから。

加藤 なるほどね。

清水 大事なのは理屈よりも、「使い道を考える」ということ。道具の仕組みを理解するんじゃなくて、この入力(X)が何で出力(Y)が何かわかったら、この入力と出力の性質だけを使って、ブラックボックス(道具)をほかのことに使いましょうと。ブラックボックスの中身を理解するために、さまざまな周辺概念を理解しましょうっていうのには、全く興味がないです。なにせ人生短いですから。

加藤 極めてハッカー的な思考ですね。

清水 実際、「はじめての深層学習」を書くときに、やっと「畳み込み」っていうのが実際にどんな処理なのかっていうのを紐解いて、こんな簡単なことをなぜ先生方は難しそうに説明するんだろうって思ったくらいですよ。
 僕はあれは、自分の権威を守るためにわざと難しく説明してるんだと思うんですよね。もしくは「数学的に正確な表現」をしなければならないという強迫観念がある。マサカリが飛んでくると思ってるわけでしょう。
 そんな矛盾した構造は世の中にたくさんあります。たとえば明らかに日本の義務教育段階における古文、漢文の時間は長すぎる。古文や漢文を長時間勉強する暇があるなら、本当はプログラミング教育をする時間を増やした方が良いでしょう。

加藤 今の部分、もうちょっと詳しく伺いたいです。プログラミング教育というのはやっぱりやるべきですか?

清水 いや、やるべきです。

加藤 義務教育で? この際、話してもらったほうがいい気がするんですよね。清水さんはこの先プログラミングは要らなくなるとも言ってるじゃないですか。矛盾しません?

Image from Amazon.co.jp
よくわかる人工知能 最先端の人だけが知っているディープラーニングのひみつ

カテゴリートップへ

この連載の記事

アスキー・ビジネスセレクション

ASCII.jp ビジネスヘッドライン

ピックアップ