始めよう!人工知能(AI)最近のコメント人工知能(AI)、データサイエンス、ビッグデータ、確率・統計学などのブログ記事を通して、最新情報を伝えます。seen元記事はこちら。数年前から話題になっている深層学習は、これまでは人工知能研究における飛躍的な進歩として捉えられてきました。深層学習を一躍有名にした画像分類タスクや、セマンティック・セグメンテーション、シーケンス変換、カラー化など、様々な研究成果が日々発表されています。した華々しく目覚ましい成果が相次ぐ中で、なかなかそれらを利用した製品、もっと大きな言葉でいえば深層学習の社会実装はまだまだ過渡的な段階と見做されていました。実際、大手企業が喧伝する「人工知能」技術の中には、深層学習をほとんど使っていないものが少なくありません。彼らは表面上の言葉を変え、「コグニティブ」だとか「人工知能」だとかという言葉で誤魔化すのですが、深層学習を使わない人工知能は1990年代から存在していて、この数十年、ほとんどなんの成果も上げられずに死蔵されていたものをリパッケージングしているに過ぎません。してこのようなことが起きるのかというと、深層学習は、その目覚ましい成果に比べると、実装があまりにも簡単だからです。あまりにも簡単であるが故に、人間の脳の中で起きていることを理解しようとするのと同じくらい、なにが起きているのか理解し説明するのが困難です。すると、このような説明不可能なものはいくら性能が出ていても情報科学の研究としては認めるべきではない、と考える人達によって、深層学習は人工知能研究の主流ではなく傍流に追いやられてしまうのです。残念ながら今現在もそうです。大手企業にも深層学習の可能性に注目し、研究を推進すべきだと主張する人たちも居ます。した人たちの多くは、大手からベンチャーに移籍し、深層学習の研究に集中できる環境を選択しました。その結果、深層学習の研究者を失った大手企業は、旧態依然とした前世代(筆者の分類では第二世代)の人工知能技術をリパッケージングしてマーケティングするしかやることがなくなってしまったのではないかと筆者は考えます。深層学習を研究・活用すべきなのは、むしろベンチャーなのです。ベンチャーにはしがらみがないからです。大企業やアカデミズムの世界では無数のしがらみが存在し、客観的事実(たとえば性能)よりも権威や人間関係がしばしば優先されます。技術が権威付けのための道具に利用されるような場面です。三田紀房「アルキメデスの大戦」では、大艦巨砲主義に取り憑かれた帝国海軍の官僚たちが超弩級戦艦の建造を巡って対立します。技術はあるとき、「好き嫌い」の問題になります。前でいえば「XML」というものがありました。一時期、XMLは全てのフォーマットを飲み込む福音のように扱われた時代がありました。テキストファイルでありながらバイナリフォーマットを飲み込み、さらにはプログラムのロジックのようなものまでXMLで表現しよという試みが実際に行われます。XML万能論は世界を席巻し、ひたすら過激化していきました。実際には構造化文書を扱えるXMLは、理論上はなんでもできたとしても、ほどほどのところで抑えるべきだという議論もあり、結局はもっと簡単に扱えるYAMLやJSONといった形式が出てくることになります。今のHTMLは厳密にはXMLですが、厳密なXMLのルールを適用するとブラウザがうまく表示できなくなったりするため、XMLのルールを緩めたりして適用するという中途半端なことが行われています。そもそもプログラミングロジックそのものをXML化するというのは明らかにやりすぎで、実際にそのようなことをやろうとした試みは全て失敗しました。今はどうなっているかというと、データの相互交換はJSONで、フォーマットの定義はYAMLで、ドキュメントはMarkdownで、それぞれ扱うのが主流です。これは筆者の独断と偏見に基いている話なので、会社によっては「うちはぜんぶXMLだ」という会社もあるでしょうし、「うちはMarkdownではなくてTeXだ」という会社があっても驚きはしません。数ある要素技術のうち、どれを選択するかというのは各社のCTOやCIOに委ねられます。一時期、「うちはRubyオンリーだから強い」と主張する会社がいくつかありました。本当にRubyオンリーの会社は、もちろんiOSやAndroidのアプリを作ることは困難ですし、言葉通り本当にRubyしかやらないとすれば、HTMLやJavaScriptは書けないということですから実際に役立つ仕事をすることは殆どできません。実際には時と場合、目的や規模に応じて、最適な言語は異なります。今人工知能をやるならPythonが強いわけですが、実際の実行効率だけを優先するなら最後はCかアセンブリ言語で書いたほうが効率がいいわけです。「最近のプロセッサはコンパイラの最適化の方が人間の最適化を上回る」という神話を信じてる人がいるのですが、それはレジスタまわしとかのレベルの話であり、もっと言うならばそれはRISCチップの話であり、実際にほとんどのサーバーやPCで用いられているインテルx86(現Core)アーキテクチャはアセンブリ言語をCPU内部でマイクロコードに分解して都度最適化されるので、コンパイラの最適化が常に人間の書いたコードよりもCPUにフィットするというのはほとんどおとぎ話です。コンパラの最適化はやらないよりはもちろんやったほうがいいわけですが。特定の技術に固執するとその組織の生存性は著しく失われます。実際「うちは○○オンリーだから○○のプログラマーしか集めてないんですよ」という会社があったわけですが、今はほとんどなくなってしまいました。○○にはRubyでもObjective-CでもJavaでもなんでも当てはまります。生存性が高く、素早く最新の技術に対応できるのは、言語を選ばない会社です。要は「新しい言語?オーケー、面白そうじゃん」と言える人間ばかりが集まった会社です。いって新しい言語ばかり使っているとそれはそれで道を誤るので、やはりCTOクラスの人間が適切な技術選定を行うことが大前提になります。同じことが人工知能の開発にも言えます。深層学習が話題になり始めた頃、こういうセリフをよく聞きました。機械学習の専門家は深層学習は機械学習のいち分野という認識を持っています。ニューラルネットワークが単純なベイジアンネットワークモデルやサポートベクターマシンに敗北した苦い経験を持っているからです。この前提知識が、時には足枷になります。先日、Google傘下のDeepMind社がTensor2Tensorというオープンソースソフトウェアを発表しました。TensorFlowをバックエンドとしながらも、手軽に色々なモデルを学習させたり推論させたりすることができるというツールキットです。これは極めて汎用的なもので、TensorFlowのフロントエンドとしてはかなり洗練されています。新しいモデルも自由に追加でき、しかもモデル自体の定義も非常に簡潔に記述できます。Tensor2Tensorは、コマンドラインだけから様々なモデルとデータの学習の指示を行うことができます。これからの時代に必要とされるのは、TensorFlowのようなものを作る人と、Tensor2Tensorのようなものを作る人とTensor2Tensorを使いこなす人、3つのレイヤーがあると考えられます。第一の人は理論を整理し高性能な学習が実現できるよう努力する人、いわばCPUを設計する人です。第二の人は独自のニューラルネットワークを構築して目標タスクをクリアできるアルゴリズムやニューラルネットワークを設計する人、いわばOSやアプリケーションを設計する人です。第三の人は、与えられた道具をブラックボックスとみなしてそれを活用して社会実装に役立てる人、つまりコンサルタントや導入を行う人です。深層学習を社会実装するためには、第三の人がアンカーになって深層学習の専門家と現実のビジネスを接続する必要があります。第三の人が正しく深層学習を社会実装していくためには、第二の人がきちんと深層学習をやってくれている必要があります。ところが会社が大きくなりしがらみが増えると、第二の人がそもそも深層学習に懐疑的だったり否定的だったり旧来の技術に愛着があったりして、適切な提案ができないということが現実に発生しています。第三の人にあたるのが人工知能技術の営業マンなわけですが、彼らは技術的見地から自社の技術を否定したり修正させたりする権限を持っておらず、仕方なく深層学習をほとんど使っていない人工知能をムリヤリ顧客に売り込むのです。詳細に関しては無知ですから、「あの会社の営業マンが言うなら」と信じてみるしかありません。それは深層学習を使っていないので、それまでと変わらない成果しか出ないわけで、「話が違うじゃないか」と顧客は憤慨します。酷い時は「もう人工知能を商売にしている人間は金輪際信用しない」と怒リ出すでしょう。深層学習が社会実装されるときの最も大きな障壁はこうしたものです。これに対抗するには、きちんと深層学習を社会実装した例を社会に示すしかありません。Googleのニューラル翻訳はひとつの良いユースケースですが、そうしたものがもっと増える必要があります。