マリオをある意味スーパープレイな遺伝的アルゴリズムとニューラルネットワーク学習のみで全自動クリアしてしまう「MarI/O」
進化的アルゴリズムの1つである遺伝的アルゴリズムと人工神経回路網(ニューラルネットワーク)を用いて、人間が解法を教えることなく、機械学習のみで「スーパーマリオワールド」のドーナツ平野1をクリアすることに挑んだプログラムが「MarI/O」です。
プログラムを作ったのはセス・ブリングさんで、ソースコードはPastebinで公開されています。
NEATEvolve.lua - Pastebin.com
http://pastebin.com/ZZmSNaHX
Watch this learning AI smash Super Mario World with ease
http://thenextweb.com/insider/2015/06/14/watch-this-learning-neural-network-annihilate-super-mario-world-with-ease/
実際に、「MarI/O」がスーパーマリオワールドをクリアしているところ、そしてその仕組みを解説しているのが以下のムービーです。
MarI/O - Machine Learning for Video Games - YouTube
ムービーの冒頭1分弱は、まるで普通にスーパーマリオワールドを早解きしているだけのように見えます。
しかし、プレイヤーは人間ではなく、「MarI/O」というプログラムです。
クリア時の残りタイムは354、つまり46秒でのクリア。
スタート地点まで戻って、マリオの「頭の中」をのぞいてみると、こんな構造になっています。この四角形とそれらを結ぶカラフルな線が「ニューラルネットワーク」で、人間の脳機能の働きを表現したもの。
画面上部左側は、この世界を模式的に表現しています。赤い棒がマリオ、白い四角が固定オブジェクト、黒い四角が移動オブジェクト(敵)で、浮かんでいるコインなどは無視されています。
右側にあるのはニューラルネットワークが使用する入力ボタン。
中央には、それらを結ぶラインが形成されています。今回はこの「頭脳」で24時間考えてたどり着ける最適解を目指します。
上部の表記が「Gen 0」とありますが、これは第0世代。まだまだトレーニング段階。
マリオにはダッシュやジャンプなどいくつかの動きがありますが、ニューラルネットワークはまずは「右に走り続ける」を選択しました。うまくキノコを拾ってスーパーマリオになっても敵にぶつかって元通りに縮んでしまい……
敵の攻撃をよけることなく、やられてしまいました。これで「右に走り続けるだけではダメ」ということが学習できました。
何度も何度もいろいろな進み方を試行していきます。画面上部の「Fitness」と書かれた欄の数字は、ステージをどこまで進んだかを示しています。
世代を重ねるごとにどんどんと経験が蓄積されていって「どうすればやられることなく、少しでも前へ進めるか」がわかってくるので、ライン数はぐんぐん伸びていきます。
たとえば第16世代、1020まで進みました。
これは第20世代、1268まで進んだところで穴に落ちてしまいました。
こうした手法は「Neuro Evolution of Argumenting Toplogies(NEAT)」と呼ばれています。
世代を重ねれば重ねるほど最適解を発見できるわけなので、6月15日に開催された「任天堂ワールド・チャンピオンシップ2015」決勝戦のとんでもないステージでも、山ほど世代を重ねていけば、人間では考えられないようなプレイでクリアしてくれるはずです。
・関連記事
物理モデルのガンダムを遺伝的アルゴリズムで歩かせたムービーがすごい - GIGAZINE
IBMが人間の脳と同じ構造を持つプロセッサーの開発に成功 - GIGAZINE
どのようにすれば外国語の新しい単語を脳は覚えることができるのか? - GIGAZINE
人間の脳はいったいどれほど多くのことを憶えることができるのか? - GIGAZINE
・関連コンテンツ