概要
理想的には人工知能に人工知能を作らせたい。
しかし現状では難しい点もいくつかあるので、
第一歩としてcifar-10のタスクに対して
最適なニューラルネットワークを自動的に作り出すソースコードを書いた。
そもそもなぜ作ろうと思ったか?
もし、人間を超えた知能を持つ人工知能の作り方、という答えが存在したとして
それを発見するためにはやはりプログラムなり自動化されたもので探すことで
研究者が手作業で探るより早く発見できる可能性があると思う。
そこで、まずは今のニューラルネットワークでわかっている限りの技術や考え方を取り
入れつつそれを最適に組み合わせるコードを書こうと思った。
実装したコード
やったこと
理想的には超難問を用意してニューラルネットワークに解かせるか
問題をadversarial nets的にニューラルネットに作らせる方法がある。
しかしはじめなので、自分のやりたいことを整理しつつ他人に知ってもらう意味をこめて
簡単なタスクでコーディングしてみた。
課題はcifar10の画像認識としてニューラルネットワークの構成を最適化する。
手順は
1.ランダムに複数のニューラルネットワークの構成を作り出す
2.ニューラルネットワークを順位づけして優秀なものから優先的に
遺伝的アルゴリズム的に新しいニューラルネットワークを作る
これを繰り返す。
理想としてはニューラルネットワークの構成に最大限の自由な選択肢を与えたい。
ノード・活性化関数・embedding・記憶行列、なんでもすべてありで
すべて自由に構成させたい。むしろニューラルネットワークという概念すらこえた自由な数理モデルを生み出せることが理想だと思う。
今回は、ノードの集まりをクラスターと呼んでそのクラスター単位で自由に
接続を持てるニューラルネットワークの構成にした。
仕組み







結果
50000stepで64%程度を達成した。
低いけど今回は精度達成が目標ではないので仕組みづくりとしては成功としたい。
コーディングの改善すべき点として、インプットが分割できない点にある。
つまり、画像を入力するとすべてのクラスターで画像の全画素数値を使うので
畳み込みなど画像を局所的に使って分けて処理するということができないということである。
ここは今後のためにも改善したいが、そこだけ頑張って今更畳み込みやinceptionを発見しても
後出しジャンケン的で意味があまりないので、あくまで未知のニューラルネットワーク構造を
発見させることを目標としたい。
今後の予定
とにかく人工知能にとって「記憶」はそこから学習する上でも
時系列データを処理する上でも重要なので
言語処理などの時系列タスクを解くために
上よりもっと自由でいろんな機能を作れるコーディングをする予定。
補足
ニューラルネットワークを自己進化させようと取り組んだ例は過去にもあることは把握している。最も近い例はneuro-evolutionでNeuroEvolution of Augmenting Topologies (NEAT)はゲームのマリオの攻略人工知能などでも使われていた。
ただしアプローチとしてはゲームなどの一見、一つの行動がどう動けば正解か、不正解かがはっきりしないものに対して強化学習的に使われてきたように思う。
あくまで、本プロジェクトの目的は超人工知能を実現するために
自動的に人工知能を作り出す方法を開発することであって
一つの特定のタスクに対してうまくいくようニューラルネットワークを最適化することではない。