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

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

メタ人工知能 2

前回、人工知能を作る人工知能を作ることができるのでは?というお話を書きましたが、その実現方法について引き続き書き足してみます。

教師データやゴールとなる設定を言語で書く

人工知能の精度を高める時に、学習という工程が必要になります。学習というのは、目的とする関数の正解の形に近づけていくことを指します。学習には、教師あり学習、教師なし学習という分類があります。
教師あり学習の場合、教師データというものが必要になります。手書きの文字を認識する人工知能の学習工程であれば、実際に手書きされた文字の画像データと、その文字が何だったか (数字であれば、0、1、2…) という、正解データの組を一緒に (大量に) 渡してあげることで、正解の関数に近づけていくことができます。
教師なし学習の場合は、Q学習というアルゴリズムで実装される場合が多いようです。Q学習は、ブロック崩しゲームのような、コンピュータのゲームを自動で解く場合に使用されることがあります。囲碁人工知能の、AlphaGoでもQ学習が使われているようです。

個人的には、上記の方法以外に、コンピュータ言語で学習の道筋とゴールを書くとうまく行くケースがあるのでは?と考えています。どのようにコンピュータ言語で表現するのかは、ぼんやりとして今のところ言葉にするのが難しいです。適用範囲も絞られそうですし、コンピュータ言語で書けたとして、役に立ちそうな分野は何かというのも今のところ分かりません。なんとなくですが、ニューラルチューリングマシンと、この発想の親和性が高いのでは?という予想をしています。

ニューラルチューリングマシンとは

ニューラルチューリングマシンとは、人口知能で使われているニューラルネットワークの中に、チューリングマシンの考え方を組み込んでしまうという発想です。チューリングマシンの詳しい定義は検索して頂けると理解が進むと思いますが、かいつまんで書くと、流れるテープと、テープの読み書きヘッドがあれば、現代のコンピュータはなんでも同じ構造で作れるのでは?というような想像上の機械です。

なぜ組み合わせるのか

チューリングマシンニューラルネットワークに組み込むと、何が便利なのかというと、過去の学習工程を活かすことができそうだという点があります。ニューラルネットワークの記憶部分は、通常、数学でいうと行列、コンピュータでいうと2次元配列のメモリに保存されています。その、行列に保存された内容を使って、なんらかの関数を評価するような構造になっています。また、人工知能の学習は、この行列の中の数値を書き換えることに相当します。通常の人工知能の実装方法では、学習工程が進むと、行列の内容はどんどん上書きされてしまい、途中で学習したものが失われていくという性質もあります。そこで、チューリングマシンのテープに相当するものをニューラルネットワークの外部に持ち、学習過程を保存するようにできれば、途中の学習内容が失われにくいのでは?というような発想で、チューリングマシンを組み合わせるようです。この2つが組み合わさった人工知能があれば、より自動的に学習可能な関数の範囲が広がることが期待できると思います。

コンピュータ言語で学習する

最初に書いたところに戻ります。
コンピュータ言語で学習工程が書けるようになると、最初は、人間が目的とする関数の学習工程を書き、人工知能を実装できそうだという段階があります。その知見が溜まってきたら、次の段階では、人工知能がコンピュータ言語を使って、別の人工知能の学習工程を自動で書いていくような構造が実現できるのではないかと思います。