ひきぷろのプログラミング日記

プログラミングの日記です。

メタ人工知能

今回はちょっといつもと違う感じで、プログラミングの話ではなくて想像していることを書いてみます。

人工知能がこの先発展するとして、このようなパターンもあるのではないかと個人的に思っていることについて挙げてみます。思い付きなので、考えが足りないところもあると思いますが、後で自分自身、読み返すつもりで残してみます。

今現在の人工知能とは

今現在のニューラルネットワークによる人工知能を一言でいうと、最適な関数を1つ、自動的に合成する技術と言えると思います。例えば、車の自動運転や将棋の思考ルーチンは、1つの大きな関数と捉えることができます。
今のところ、関数が大きすぎるがゆえに(?)、深いネットワークを人間が構築する必要があって、まだまだ手動での調整が必要になっています。どのような要素を使用して、何層にして、組み合わせはこうで・・というようなことを狙って決めてあげないと、うまく関数を合成することができません。
この先の技術の発展により、そういった、人間が介入してあげないとうまく関数を合成できないというような事態はなくなっていくだろうと予想しています。

では、どのような方法によって、手動による調整を減らしていけるでしょうか。個人的に思う、方法論について挙げてみます。

関数のサイズを小さくする

今のところ、人工知能によって合成する関数が大きすぎるのではないかと考えています。もう少し1つ1つの関数のサイズを小さくして、それぞれの組み合わせによって大きな関数を合成することもできるのではないでしょうか。
そう仮説を立てたとして、考えをさらに積み上げるにあたり、何が問題になるかというと、どのように関数のサイズを決めるかというところが課題の1つになると思います。また、どのように関数を組み合わせるかということも課題になりそうです。

実行計画を作る

小さな関数はそれぞれ、何か1つの課題を解くものとして考えてみます。1つの小さな課題を解くことを組み合わせて、大きな1つの課題を解くと考えると、小さな関数同士は、順序のある、実行の計画によって組み合わされると都合が良いのではないでしょうか。実行の計画は、有向グラフのように書き表すことができると思います。グラフ内の1つ1つのノードが、それぞれ小さな関数になるようなものを想像しています。
その、有向グラフを考え出す人工知能を作り、グラフ内のそれぞれのノード1つにつき、別の人工知能を作ることで、小さな課題を小さく解くことができるのではないかと思います。課題のサイズが小さくまとめられると、解く時間を短縮できるメリットもありそうですし、それぞれのノードが、1つ前の結果を考慮することなしに別々に解くことができるという性質があるとすれば、並列性も上げることができそうです。
つまり、メタ人工知能を作り、メタ人工知能によって考え出された計画によって、小さな人工知能をたくさん作るということができるのではないかと考えています。

メタ人工知能

上に書いたようなメタ人工知能の作り方は、実現性や有効性があるのかどうか、僕には今のところ分かりませんが、小さな人工知能を作りだす、さらに上位概念の人工知能という発想は現在でも作ること自体はできそうに思います。

実行の計画は分野を超えられるか

メタ人工知能が作る実行の計画は、関数を合成したい分野を横断して、汎用的なものを作ることができるでしょうか。おそらく、直接1段階ではできないと考えています。というのは、現実の物事は分野が違うと、構成要素となる、小さな関数が全く違うものになります。例えば、近所へ買い物に行く時の実行の計画と、将棋の次の手を考える時の実行の計画では、考える時の構成要素が大きく異なります。

概念を1段階上がる

実行の計画を作るという関数の上に、さらに大きな関数でメタ人工知能を作ることができるのではないでしょうか。上に挙げたような、実行の計画をする分野の、分類をする関数によって、計画の分野が特定できるような気がします。その関数も、下位の概念の関数と同様に、自動で合成することができるのではないかと考えています。

概念をどこで分けるか

今のところの人工知能は、概念と知識のベースを分離することなく、ニューラルネットワークの1つの層として一緒に保存してしまっているように思っています。画像認識の研究を見ると、最初の方の層で画像のエッジを認識しているように見え、後の層でさらに上の概念、猫であるとか犬であるということを認識しているようだと書かれています。概念を1段階上がる度に、ニューラルネットワークの層を増やすのではなく、人工知能を1段階増やした方が自然なのではないかというような気がします。今の人工知能では、学習された概念を1段階だけ再利用するということが非常に難しそうです。構成要素を層から、人工知能自体にすることで、再利用性が上がるのではないかな?という風に思います。

今挙げた中で足りないもの

小さな関数のサイズをどのように決めるかということがまだ考えられていない気がします。

また、人間の考える概念と人工知能の考える概念は同じものなのかという疑問があります。人間の考える概念の層は、本当に効率が良くて、他に分類の方法がないものなんでしょうか。全く別の表現形態で捉えた方が、実はコンピュータにとって効率が良いのかもしれないと考えています。

小さな関数のサイズをどのように決めるか

小さな関数のサイズはどのように決めたら良いでしょうか。直感的には、これは自動で合成することが難しいような気がしています。人間の考える概念の層をコンピュータに適用することが、本当に効率が良いのかという疑問が残るからです。また、コンピュータにとっての効率的な概念の層があるとして、それが組み合わさってできる実行の計画は、人間が認識可能なものでしょうか?人間に認識可能な概念の層が構築されないと、さらに人工知能ブラックボックス化され、何が動いているのか知る手がかりを、現状よりもう一段階失いそうです。どのような概念の層が構築されているかを、人間が知る必要があるのか?というと、最終的にはそうではなくなりそうな気はします。人間が認識可能な構成要素で作られているという制限を加えると、やはりここは手動で構築しなければならないのではないかと思います。

小さな関数で必要とされる精度はどのようなものか

別の面からのお話になりますが、小さな関数で必要とされる精度も考えなければならないことの1つになると思います。
コンピュータは離散的な値 (飛び飛びの、デジタルな値) しか扱うことはできません。画像処理を例に考えると、入力される画像の解像度、出力される画像の解像度や、分類器であれば分類される種類の数ということに制限があります。これは、精度を上げれば上げるほど学習にかかる処理時間が増えるということにも繋がっていますし、分野によっては高解像度が必要とされることや、低解像度で問題がないことがあります。時間は有限ですので、精度についても適切なものを選ぶということが考慮の対象になると考えています。

なぜ全てが自動ではないのか

人工知能を使った関数の合成で、ここは自動でできるのでは?とか、ここは自動でできないのでは?と直感的に思うことがあります。なにかしら、うまく言葉にできない違いがあるのであれば、どのような違いがあるのかも考えてみた方が良いのかなと思っています。もしかすると、僕がそう思っているだけで、うまく構築できれば、今まで書いたようなことは全て自動で合成できるのかもしれません。

実行計画のパス

最初のお話にいったん戻って、実行の計画をメタ人工知能が作るとします。
実行内容を計画する時には、ゴールに至る道筋が複数あることもあります。そう考えると、どのような経路を通ってゴールにたどり着くかを決定することも1つの関数になるのではないかと思います。この関数を合成する場合も、最も処理時間が短いものを選ぶようにすると、不都合があるかもしれません。実行途中で、人間が確認するポイントが必要なこともあると思います。機械的に正確な結果が必要とされる場合は、パスの選択は人工知能ではなく、既存の他のアルゴリズムを選択する方が合理的かもしれません。

実行計画の動的な変更

実行計画を作るとして、パスの決定以外にも必要な要素がありそうです。実行計画を適用する分野にもよると思いますが、処理途中で、計画の次の段階に移るパスが、前段階の結果に左右されることもあると思います。そういったケースでは、動的に計画を変更できる必要が出てきそうです。時系列にデータが処理できる実装方法であれば、動的に変更する構成にも対応できると思います。

人間をどのように取りこむか

人間の介入が必要なポイントが、実行計画によって変わるのではないかと思います。処理の最後に確認できれば良いケースと、途中の成果を確認する必要があるケースがありそうです。また、毎回は必要ないけれど、たまに確認したいということもあるかもしれません。人工知能の環境の中に、人間をどのように取りこんでいくかということも考えないといけないポイントになるのではないかと考えています。

人工知能ボトルネック

今の人工知能の発展にボトルネックがあるとすると、人間の価値観を処理結果に反映しなければならないというところだと思います。例えば、以前発表されていた、Googleの画像合成で出力された画像は、おそらく沢山の人が人間の美意識をまるで無視されているような印象を受けたと思います。人間を無視して学習してもうまく行く分野と、人間の価値判断の基準で、大きく結果が左右される分野を、人間側で事前に分類する必要があるような気がします。計算クラス分類 (NP完全のような) に近い発想で、人工知能適合分野の分類表を作る必要がありそうに思います。

この発想のメタ人工知能は何を解決するか

この発想の人工知能が実現できたとすると、ある程度、解決方法自体が未知の分野に自ら入っていく人工知能が作れるのではないかということと、計画することで達成可能な課題を自ら達成していける人工知能が作れるのではないかという、2つの切り口で前に進めることができるのではないかと考えています。考えがまとまったら、自分でも実装していきたいです。