AI技術をどう使っていくか

木下靖文氏:よろしくお願いします。お集まりいただきありがとうございます。

(会場拍手)

ふだんはDBの人間として知られていますが、SIをやっている人から見てAI技術をどうやって使っていこうかという話になります。みなさん実際に開発をなさる方だと思って話して大丈夫ですよね? それでは話していきます。

まず自己紹介です。

ここ十数年はMySQLのInnoDBの性能のハッキングや、最終的にはInnoDBの開発チームに3年ぐらい所属はしていましたけれども、今回はMySQLの話はしないので割愛します。

私、ブログを書いていまして、ブログにこの資料もあがっているので、あらかじめ見ていただいた方もいると思います。たぶん話しきれないこともあると思うので(ブログを)見ていただけると、検索などで調べるのに必要な情報はできるだけ書いてあるので、調べて深掘りしていただけたらなと思います。

DBに触る前に、20年くらい前になっちゃうんですけれども、大学にいた時は主にニューラルネットワーク系の研究をしていました。最近では、そういう昔のことやMySQL開発で培った技術などと、新しい技術を組み合わせて、なにかおもいしろいものが作れないかなという、そういう日々です。AI系に関しては、昔取った杵柄程度で、そんなに最近の専門家ではないので、すいません。

ここ1年で、会社にいながら、とくにコンシューマ向けに作ったサービスがこの2つ。

2017年に(リリースしたのが)「PASHALY」というアプリケーションです。なにか写真を撮ると、その中にあるファッションアイテムみたいなものをデータベースの中から探して、似たものを出してくるアプリだったりとか。

もうちょっとヒューマンインターフェースに焦点を置きまして、最近では「画像で旅する」というサイトを立ち上げたりしています。似た画像をどんどんクリックしていくと、おもしろい画像を言語によらずに探せるようなインターフェースが作れないかなと思ってサービスを開始したところです。これもちょっとあとで触れます。

素人ほどすべてのプログラムがAIに見える

今回の話の概要としては、ガチのミドルウェア畑の元MySQL開発者が、最近の新しい流行りの技術で新サービスを構築しようとしてわかったことをフィードバックしていくという内容です。

対象は同じく開発で新しいサービスを作っていくような人をなんとなく想定しているので、AI系専門じゃない人をむしろ対象にして話すので、前半はけっこう長めになっています。前半がAI系の話で、後半はそれを踏まえてシステム化する話に必要と思われるものをざっくり話していきます。

(スライドを指して)これはすごく行がいっぱいあるんですけれども、あんまり精査してる時間もなくて、ちょっと裏も取れていないこともあるので、内容はあくまで、私の主観で一意見だと思って聞いていただければいいと思います。

この内容に基づく責任は、信じる信じないは各人の責任でお願いしたいと思います。すいません。

あと20年近いブランクがあるので、AI系の用語とか表現がちょっと変かもしれないですけど、主旨はちゃんとものを作ってきましょうという話なので、実現性に主旨を置いて、そこはご容赦いただきたいなと。あとで読んでわかるように資料は文字多めにしていまして、がんがん飛ばしていきますけど、気になる人はあとで見ていただければいいかなと。

まず前半ですが、AI系の事情をざっくりと。AI系が専門じゃない人がAIをなんだと思って向き合っていったらいいかというお話を。けっこう主観が入ってしまうんですけれども。

AIってとりあえずなんだと思っておけばいいかという話なんですけど、実現性のことには関係ないので、定義なんて放って置いてもいいんじゃないかなというのが私の個人的な意見です。でも、文章とか会話とかで出てきちゃって話をするのに困るので、これを整理してみるとですね。

今まで歴史がいろいろありましたけれども、時代背景でいろいろ違って、昔から共通しているのは、「AI」という単語を発したときに、どうもその人にとって「自分はよく理解できないけれども、うまく動いているように見えるプログラム」のことをただ「AI」と言ってるだけのようなことが、今まで多かったかなという印象を抱いています。

だから、各個人の理解度であるとか、社会の技術的成熟や背景などによって定義はどんどん異なるし、これからもきっと変わっていくと思います。ですので、素人ほどすべてのプログラムがAIに見えるし、開発して作っていくほどだんだんAIには見えなくなってきます。

未来のAI系技術でおもしろい世の中に

ここは長くなってしまいますが、いろんなものを今「AIだ、AIだ」と言ってますが、後に発言を振り返るとちょっとアホに見えるかもしれないので、あんまりAIAIって言わないほうがいいかなと。たぶん「AIスピーカー(笑)」みたいな感じに10年後ぐらいになると思います。

「AI」という名前がモノづくりの現場に出てきしまうと非常に危険な状態で、たぶんそれって仕様も手段もわかっていない状況なんじゃないかなと思われます。目的もわかっていない、AIを使うことが目的になっちゃってる現場もたまにあるので怖いです。

単語としての「AI」というのは、もう説明が面倒くさいときに「AIです」って言って、お客さんに説明するのに非常に便利な言葉であるので、そういうときに使っていいですけど、モノづくりの現場では使うべきじゃないかなと思っています。

現場でAIと言っちゃうのは、だいたい「わかっていない」か「説明したくない」か「相手をナメてる」場合が多くて、僕、実際に専門家のところでAIと言っちゃって怒られたことがあるので(笑)。なにを目的になにをするものかと、ちゃんと整理して話せば違う言葉があるはずですので、そういうふうに気をつけていきましょう。

作る人は、AIという単語を排除できないと実現しないおそれがある。我々技術者の仕事としては、「AI」という妄想みたいな状態を「そういうプログラム」というふうに現実に置き換えていく仕事だと思っていただければいいかなと。「はいはい」って聞いていればいいと思います。

ですので、AIが人の仕事を奪うんじゃなくて、昔と一緒でプログラムがAI(に見えている)……。だからコンピュータといっても、昔「コンピュータが人の仕事を奪う」みたいな話だったと思うんですけども、ただのプログラムがAIに見えている人の仕事がなくなるだけなんですよということだと思っておけば、そんなに危機感を抱くことじゃないかなと。

モノづくりする人向けのお話では、AIは未来にしかないと思うので、その未来のAIを目指した研究はあるので、そういう研究から得られた新しい副産物、そういうものを未来のAI系技術と呼ぶことにして、それをうまく利用して今まで難しかった処理ができるシステムを構築していきましょうと。なので、おもしろい世の中にしていきましょうという話をします。

ニューラルネットワークの発展

「じゃあそのAI研究の副産物で生まれてきたAI系の技術ってなんですか?」というお話です。まず、ある程度複雑なプログラムを組むときに大きく分けて2つのアプローチが今あると思うんですよね。人間が一生懸命複雑に組むという話と、もう1つは、とりあえずプログラムの理解を諦めちゃって大枠だけ決めて、パラメータチューニングをたくさんのデータで行っていって調整するという考え方があります。

近年のAIという単語のぼんやり指している方向は、後者の、たぶん機械学習系だと言っちゃうと怒られるのかもしれないですけど、たぶんこれは機械学習系だと思います。そういうのが主で、この中でもここ数年で大きく発展して話題になっているのが、ニューラルネットワーク系のモデルであるということだと僕は受け取っています。

ニューラルネットワーク系のモデルというと、生物の脳の神経回路のように、わーっと張り巡らせれてるものにインスパイアされて、そういうもので計算をするといいことができるんじゃないかということですね。あまり細かい話はここでは逸れちゃうのでしないですけれども。

ニューラルネットワークなにかというと、(スライドの)この式自体がかなりはしょっちゃってますけど、基本的にデカい行列の行列演算の方程式だと思っていただければよくて。

だからこのYとXですね。入力と出力があってAとBが決まっていない状態ですね。それに対してYとXの組をたくさん与えてあげて、連立方程式にしていい感じの入出力になるように解けないかという話だったりします。

単純なものは1960年だから、もう60年近くも前からある話です。それが1970年に、10年ちょっと経つと文字認識が、文字の識別かな、分別ができるようになったりとかしていました。

それからしばらくあんまり発展していなかったんですけども、2000年代の中盤に入って……このニューラルネットワークというのは2層3層ぐらいしかできなかったものが、もっと多層にした中にうまい解が見つかるともっといい感じの処理ができるんじゃないかと。

もっと複雑でいい処理ができそうなんですけれども、そのデータを並べて連立してあげても、一部の入力側かな出力側かな、とにかく入出力のあるほうのパラメータしかチューニングできなくて、中側のパラメータのチューニングがうまくできないということが超長年の問題だったんですけれども、2000年台中盤に「オートエンコーダー」という考え方ができて、その先の中の層までチューニングできるようになった。

実はAIで仕事が増える?

それをきっかけに「力技で解決できますよ」というふうになって、GPUで計算したり、データをいっぱい食わせたりして解決する人たちが出てきた。そういうのを称してどうも「Deep Learning」って呼んでるらしいんですね。

なにが進歩したかって、僕が研究してた頃って文字認識でBとかDでしたけれども、今は写真を見せて犬とか猫も判別できる。別に犬や猫がなにかがわかっているわけじゃなくて、でも犬か猫かはわかるというようなもので。入力の情報量は増えているんですけれども、やっていることはAかBか旗を上げるだけなので、知的レベルは上がっていない。ただ複雑になっておもしろい道具ができているなという感じです。

「AI系の技術って要するになに?」というと、それなんです。

基本的に絵とか見せて要するに「何?」というフラグを出す。そういう機械の勘で数値配列にすると。ごちゃごちゃした入力データを、なにか機械の勘でフラグとかベクトルとか座標とかプログラムで扱いやすく変化していく。画像、音声、動画、あとはなにかのビッグデータ的なものなどを数値配列にしましょうと。プログラムで扱いやすく変換します。

だからプログラムで扱えるようになると、できることが増えるという意味で仕事が増えます。実はAIで仕事が増えるんです。でもAI系の技術はプログラムに対して「要するに何?」という直感や、それに基づく判断を与えるだけですので、論理的な思考の部分は依然として人間がプログラムをする必要がある状況があります。たぶん、これからもしばらくそうなんじゃないかなと思うんですね。ですので、仕事が増えますと。

とはいえ、内製でやらないのだとしたら厳密な要件定義とか瑕疵担保とか、そういうのはAI系利用では無謀だと思うので、業務委託などになってしまうのかなという感じはしています。

こうやってプログラムをする仕事もそうなんですけど、人間がプログラムするか、データで仕事をする。つまり、データドリブンなプログラミングのスキームなので、AI系技術自体の開発にデータを用意する仕事というのも増えます、というか、増えているんだと思います。仕事だと思ってやっていないかもしれないですね。

人間の手本のデータがすごく死ぬほど大量にいります。新しいことをしようと思ったら、人間が死ぬほどがんばらないといけない状態になっています。

そういうのも踏まえて全体の仕事量は、減らしたい業務より増えるものが実はけっこう多いんじゃないかというのがありますね。作っているうちに、そのデータを作るためのツールがすごく良くて、実はこれを使えばそれで業務の改善ができるんじゃないかとか、そういうオチになったりすることもきっと多いと思います。

しょせん「人間劣化版」である

そういう難しいAI系技術って、利用はちょっと面倒くさいんですけれども、さらに実際事業に使用しようとしているときに勘違いされやすい問題点が2点ほどあります。みんな夢を抱きがちなんですけど、いったん夢を壊してから、ちゃんと是々非々で使っていこうかなと思います。

1つ目は、しょせん「人間劣化版」であるということです。人間の入出力を手本にそれができるようなモデルを作っていくので、単体精度で人間を超えることはまずないですね。

みなさん、ご存知だと思いますが、チェスや囲碁だとかで、人間より強いみたいなことが起こっていますけども、あの与えられている課題は非常にやりやすい課題というか。

確かに状態の次元数はすごく多いんですけれども、結局、有限で離散で、勝利条件もプログラムでチェックしやすい明確なゲームプレイだけ見て「人間を超える」というのは、ちょっと現実問題で考えていただきたいというところですね。

あと、人間に近づければ近づけようとするほど非線形オーダーで、2倍精度を上げようとするともう何十倍の、死ぬほど大量の「人間が手本を示したデータ」が必要になる。あったとしてできる保証はないという問題もありますね。

あとモデル同士で戦わせてということをすると、人間じゃないほうのなんかよくわからない感覚が研ぎ澄まされていくこともあるので、それをうまく利用できるならいいというのもありますけど、まぁ、人間を目指すと劣化版になってしまいます。

底なし沼のギャンブル

2番目としては、ちらっと今データの話をしましたけども、底なし沼のギャンブルだということをまずわかってほしいということですね。

人間の入出力データを大量に集めて集計したもので似た入出力の計算モデルを作っている人は、よくわらないまま自動チューニングして作ろうという手抜きで博打なんですね。この開発における博打みたいなものは、ビジネス向けのシステム開発をかっちりやるというところとの親和性は下がってしまうというのがあります。

ちょっとわかりづらいかなと思うので、なんとなくパチンコに例えるとわかりやすいかなと思ったんですけれども、(スライドを指して)どうですかね、これ?

AI系の技術を開発していくときに必要な要素として、この4つぐらいがあると思います。研究者であったり、研究者が考えるAI系のモデルであったり、どんな演算モデルを使うかということと、あと計算機ですね。それとその計算機に打ち込む人間の入出力データなどもあると思うんですけど。

例えるならば、研究者やAI系の演算モデルとかはパチンコ雑誌みたいなもので、演算リソースは並んでいる台。玉を打つのに人間の入力データを使うということですね。大当たりするまで際限なく打ち続けるという、なんかちょっと切ない構図になるわけです。

なにが重要かということで要素を整理していくと、研究者とかAI系のモデルはある程度論文で公開されています。ですので、単純に再現ができるんだったら、論文が読めてプログラムが書ける人がいれば、とりあえずプログラムは書けると。いろんな便利なフレームワークも最近あるので。

ですので、おもしろいデータや、それでデータを使った計算ができるかどうかということが重要だと思うんですね。やっぱり研究者にとっても。そうすると、データがあって計算機があるところに、逆に人は自然に集まってくるんじゃないのかなと思うので、これは後回しでいいんじゃないかなと。

演算リソースはもちろんいりますが、演算リソースのほうにばっかり目がいきがちなのですが、これはお金を払えば貸してくれるものですよね。だから純粋にお金があれば計算できる。

問題は人間の入出力データです。これは人間にしか生成できないものです。ついでにいうと、この人間ができる課題ということが、解の存在を暗に保証している。ただでさえ、砂漠の中でダイヤモンド探すような計算を延々しなきゃいけならないけども、「人間ができる」ということだけがそのゴールを示しているわけですね。

ビッグデータをそのまま入れたら、出力がそのまま出てくるみたいなそういうモデルに。「でも人間がわからないんだから、たぶんそれはできないんじゃないかな?」と思っていつも見てるんですけれども。まぁ、そういうふうな。余談ですけど。

『MATRIX』のように脳の入出力を取る?

こういうふうに共通の人間の判断基準で作られた精度の高いデータじゃないと、あとで困る。これはちょっと入れてないですけど、精度を確保する。作ってみたらデータの精度が低くてできないから、またその精度を確保するための学習をさせて、データの精錬もしてみたいなこともしなきゃいけないんですけれども、そういう精錬のコストも馬鹿になりません。

さらに難しいことをさせようとすると、人類に共通の犬とか猫とかの話じゃなくて、日本人にしかわからないこととか、業種限定、例えば画像でひよこの選別をしようとか、そういうことをしようとすると、出力を作れる人の人口が減ってくるのでコストが上がって期間も増えます。

しかも、なんとなく、みなさんわかると思うんですけど、人間がしなきゃいけなくて、人間が入出力をするパフォーマンスはどんなに工夫してもボトルネックはあります。基本的に労働基準法とかコンプライアンスもあるので、仕事として頼むんだったらもうコストパフォーマンスは物価依存になってしまうということですね。生成も何人に頼めるかということになってしまう。

ですので、AIの研究をしていくのでAIの技術開発をしていくことの結局の重要度というのは、やっぱりデータが一番大事だと。パチンコに例えると、玉があって台があれば、人は勝手に集まってくるはずで、玉がなきゃ始まらないよって話なんですね。

人間の一定基準の判断結果を含む大量のデータというのは、やっぱり非常に貴重なんです。お金ですぐ買える類のものではありません。だからコールセンターのログとか、なにかある一定の目的に向かって会話するわけですよね。そういうログというのは、非常にAI技術研究にとって貴重なものですね。

コストなどを考えると、なにか無料サービスを立ち上げて、そのついでに「この中で看板はどれですか?」とか「この中で店はどれですか?」とかたまに言われることありますよね。ああやって、ついでに自動運転のデータをタダで集められたりしちゃうわけですね。

何度も出てきますけど、「本当にこれはもう賭けた分回収できるのか?」と思うことがすごく多いですね。だから、データのあてがないのに「これをAIでなんとかならないか」という思いつきの企画は、だいたいデータ収集のコストで合いません。百歩譲ってできたとしても、機械がやるサービスレベルが劣化したような処理に、人と同じぐらいのお金を払わないはずです。

そういうことがあるので、百歩譲ってそれが儲かるにしても、どうやって人間の入出力を集めるかというと、もう『MATRIX』みたいなものを作って、人間につないで脳の入出力を取る、みたいなことをしないといけないぐらいになってるのかもしれないですね。

データが用意できない企業はどうするか

でも、通常の一般人や、通常の企業にそんな余裕はないですね。独自のAI技術を開発するには、データが用意できないというのがあります。ですので、演算して試行錯誤する費用も馬鹿にならないので、じゃあ、我々一般人が実用的にAI系技術を使っておもしろいシステムを作っていこうとするには、どうすればいいのかという話なんですけれども、実質的な制限がやっぱりあります。

それはなにかというと、そういうのをどうやって超えていくかという話なんですけど。結局ゼロから作るのは無理なので、研究者の方が公開されている演算モデルであるとか、人によっては自信のある方なのか、公開しちゃって大丈夫なのかと思うすごいものがたまにあるんですけれども。トレーニング済みのパラメータなんかも公開しちゃってる例もあるので、そういうものを組み合わせて作っていこうと。

専門家が突き詰めて計算してトレーニングした公開パラメータは、そうそう素人では超えられないんじゃないかなと、ここ1~2年で感じています。巨大なモデルを自分のデータだけでトレーニングしても、量よりバリエーションの不足のせいで、うまく汎用性の高いものはできなくなったりとか。

じゃあ公開されているデータから作ったからといって、独自の価値を持つものはできない。こういう相反する事情もあって、やっぱりできているものを使わざるをえないのかなというのがあります。

しかし、それを調整して自分のデータをできあいのものに追加トレーニングしちゃうと劣化しちゃうと。劣化が非常に大きいので、微調整するぐらいじゃないと失われる汎用性のほうが大きいというのがあります。ケースに特化した学習をさせると、もうどんどん汎用性は劣化していっちゃうので注意してほしいですね。

一番最初に言った2017年に作ったPASHALYというのでは、トレーニング済みのAI系モデルは3個ぐらい使っていて、追加トレーニングはしていない。あとはつなぎの部分だけちょっとトレーニングをして、クラウドソーシングかなにかでデータを用意して調整だけするようにして作っています。

データが少ない場合

次に、少ないデータ。良いデータは少ないので、そうすると小さいモデルしかトレーニングできなくて、低次元な機能になっちゃうと。ちょっとさっきの裏側の話になるんですけれども。ですので独自に作れるのは、現実的には単体だと、人間の何らかの作業の補助とか、一次振り分け程度のものならすぐできる可能性は高いです。公開モデルを組み合わせる場合に、つなげる部分を調整するというのにデータを集めて使う。

とはいえ、それでも小さいとはいえ試行錯誤は必要で。コツとしては、データのバリエーションというんですかね。そういうものに対して、処理モデルが小さいと収まらなくて、いつまでもできるようにならないと思いますけれども。

じゃあ処理モデルが十分に大きければいいのかというと、大きすぎると今度はそのデータだけを覚えて、その間のデータに対する入出力ができないということになってくるので、適度に詰め込むことがどうも必要らしいことがわかっています。ですので、データが少ない場合は、小さいモデルしかトレーニングできないということになっちゃいます。

あまりPASHALYの例を出すのはあれなんですけれども、クラウドソーシングで100万円ぐらいかけて。クラウドソーシングの業者さんに聞くと、やっぱり普通はフルスクラッチで作ろうとすると、何千万かけてデータを用意するらしい、みたいな話を聞いたことがあります。

それでも、データを効率的に用意しなくちゃいけないので、なんのデータをタギングしてもらうかを選定するために、自分で2万件ぐらいデータを作って、それを使って30万件ぐらいのタギングをしてもらって100万円みたいな感じになっていますね。

それでもAI系技術ってなんで使うんだ? という感じで、既存のものをビルディングブロックしながら、最小限のデータで調整したり作ったりして、最小限のコストで実現するというのが我々一般人の現実解になるのかなと思います。

しかし、そうやってできてきたものは人間の劣化版で、既存のある機能の組み合わせの焼き直しに見えちゃうので、そういうものに付加価値を持たせてシステム化するには、人間にできないことを組み込んでいく必要があるのかなと。それがやっぱり大量のデータと大量照合をする、データベース化なんじゃないかなと思います。