このマリオ、AIでステージ攻略を学習するんです! 敵やブロックの位置から割り出された“最適行動”でゴールを目指す姿に「俺より上手いな」

このマリオ、AIでステージ攻略を学習するんです! 敵やブロックの位置から割り出された“最適行動”でゴールを目指す姿に「俺より上手いな」

このマリオ、AIでステージ攻略を学習するんです! 敵やブロックの位置から割り出された“最適行動”でゴールを目指す姿に「俺より上手いな」の画像

 今回紹介する、ToMoMoTo Factoryさんが投稿した『決定木でマリオが学習してみた』という動画では、音声読み上げソフトを使用して、マリオを決定木で学習させていく方法について解説していきます。

投稿者メッセージ(動画説明文より)

ニューラルネットワークでマリオを教育してみた ( sm20467957 )
に引き続いて、決定木でやってみました。
ニューラルネットワークのときと違って、今度こそちゃんと考えている風に行動しています。
ご興味あれば、ご覧ください!

<span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span><span data-mce-type="bookmark" style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">?</span>

 この動画のマリオAIの目標を説明します。状況を判断して行動するマリオAIの作成を目指しています。

 つまり、敵やブロックの位置などからどの行動がベストなのかを考え、行動するAIの実現を目指しています。これにより究極的にはマリオ1で復習したモデルでマリオ2をクリアすることができるのです。

 今回のマリオAIは、ゲーム情報から分析モデルに必要なメモリデータを取り出し、その分析モデルに適用してアクションを決めてアクションの結果からフィードバックを得て分析モデルを更新するという仕組みで作っています。

 お手本プレイからの学習は行わず、マリオ自身が学ぶ仕組みとなっています。

 この仕組みで重要となるのがどんな分析モデルにするかとどんなメモリデータを利用するかです。今回の分析モデルには、決定木を利用します。簡単に説明すると決定木とは、名前の通り木の形のような分析モデルでデータの値の条件に従って、二つに別れていき最終的に根元まで行って答えを決めるモデルです。学習データからデータの値の種類やデータの値の条件内容と木の形を作っていきます。

 木が大きければ大きくなるほど複雑な条件を考えられるようになりますが、同時に複雑になりすぎて過学習といった汎用的なルールが作れない状態に陥いることもあります。過学習とは、要はガリ勉しすぎて頭デッカチになっちゃうと考えれば大体合っています。

 ちなみに今回は、Jumpをする、しないを判定する決定木とJumpをしない場合に右に進む、左に進むを判定する決定木の二つを利用してマリオのアクションを決めています。

 最初のマリオのAIは、シンプルな決定木のモデルでとてもバカです。しかし、マリオは学習するためにそのモデルを利用してゲームをプレイしてデータを集めていきます。

 そして、マリオが死んだときに集めたデータを良いアクションと悪いアクションに分けてそのデータを使って分析モデルを更新して賢くなっていきます。これを繰り返すことによってマリオはどんどん賢くなっていきます。

 次にメモリデータについて説明します。まずはブロック情報の表現について説明します。マリオのステージのブロックは、16ドット×16ドットのマス目になっています。説明のために今回は白い枠の中のブロック情報だけ考えていきます。

 普通にブロック情報のデータ化を考えるとブロックのあり、なしを0、1で表現する方法が考えられます。しかし、データの種類が多くなりすぎてまともな学習ができなくなります。例えば、この例だと変数が56個になるので2の56乗イコール7京のパターンを学習しないといけなくなります。

 そこで、ブロック情報のデータ化をマリオとの距離で表現することにしました。上のブロック距離は、各列のブロックがマリオと同じ高さから何マス目にあるのかで表現します。ブロックがない場合は、すごく遠くにあるという意味にするために十分に大きな値を設定します。下のブロック距離も同様にします。

 これによって0、1で表現する場合と比較して変数の数が減ってパターン数を減らすことができました。ちなみに実際の距離はドットを利用して、より細かな判断を可能にしています。それに加えて範囲ももっと広いので左と下もちゃんと見ています。

 最後に敵情報の表現について説明します。敵情報の表現は、マリオと敵との距離で表現します。また把握する敵はマリオに近い三匹までにします。これは変数の数を減らすためです。三匹未満の場合は、ブロック同様にすごく遠くにいるという意味にするため十分に大きな値を設定します。

 ちなみに、マリオの敵はメモリの構造上五匹までしか出られないようになっています。ブロックや敵の情報以外にもマリオの加速度状況などの情報も使っていますが今回は割愛します。ただもちろんステージの位置や時間とかは使っていません。

 マリオの学習成果を紹介します。やっと1-2まではクリアすることが出来ました。そこそこ状況を判断しているように見えました。ただ一部はステージの形を覚えて行動しているかもしれません。

 学習させたマリオの結果は、ステージの1-1、1-2をクリアすることができましたが、1-3はクリアすることが出来ませんでした。ただ状況を判断しているように見えたのでまだまだ可能性を感じさせます。

 学習の様子をノーカットで楽しみたい方はぜひ動画をご視聴ください。

視聴者のコメント

俺より上手いな
プログラミングのレベルじゃねぇよなw
人間ってすごいな
すごい人間っぽいね
めっちゃ敵から逃げんの笑う

▼動画はこちらから視聴できます▼

『決定木でマリオが学習してみた』

―あわせて読みたい―

・例の万能ツール「エクセル」でアニメーションを作ってみた! 音楽に合わせて彩られる画面、知ってるエクセルと違う…

・知られざる『マリオ』誕生の秘密を解説「ポパイの代わりに作られた」「昔はジャンプマンと呼ばれていた」

関連記事(外部サイト)