ニコニコ
ユーザーブロマガは2021年10月7日をもちましてサービスを終了いたしました。
このページは皆さまから投票いただいた記事を保存したものです。

shu3のブロマガ

『人工知能の挑戦』動画で使っている人工知能の仕組み

2016-02-26 17:45:37
どもども。最近、こんな動画を上げました。


動画内ではあんまり仕組みの説明をしていません。普通に動画を見る層にもカジュアルに楽しんでもらおうと思っているので、難しい説明はかなり省略しています。あくまで成長していく過程をみんなで楽しもうじゃないのー、というコンセプトなので。そして、これからも説明は最小限にするつもりなんですけど、コメントを見ていると詳しく知りたい層も少しいるのかなーと思いまして。ブロマガの記事で説明してみますー。

私個人は人工知能、NN、機械学習などの専門家でもなんでもなく、かじった程度ですので誤りはあるかと思います。正しい情報を知りたい方は原典や専門書を読まれることをオススメします。というのを前提に、誤解を恐れずに、なるべく初心者にわかりやすいよう疑問に応える感じで書いてみようと思います。

ゲーム画面は認識しているの?

はい、認識しています。

以下の画面で左側に写っているものは、主人公を中心としてゲーム画面を32x32で表したものです。



黒のマスが飛んでくるもの(玉)。灰色が敵。白が主人公が乗ることができる足場です。これはゲームと連動して変化してきます。

そして、この32x32のゲーム画面を入力として「ニューラルネットワーク」というものを組み立てます。これが画像の真ん中の部分ですね。



ニューラルネットワークっていうのは簡単にいえば人間の脳みその神経回路を簡易的にコンピューターで表したものです。脳みそは「ニューロン」っていうやつの塊です。ニューロンは信号を受け取り、中で「なんか処理」したあとに、信号を出力するものらしいです。そして出力された信号を別のニューロンが受け取って…、みたいなのが繰り返され、結果的に人間は思考したり、記憶したりします。

で、今回は入力信号をゲーム画面として、中間の「ニューロンたち=ニューラルネットワーク(NN)」に放り投げているわけです。そして出力は下の画像でいう右側のゲームのボタンになります。



動画の中で「ちっちゃい脳みそを作る」と言っていますが、まさにそんな感じで、魔界村の1面をやるだけの特別なミニ脳みそを作っているわけです。

遺伝的アルゴリズムはどこに使ってるの?

ニューラルネットワークの構築に遺伝的アルゴリズム(GA)を利用しています。

ニューラルネットワークで一番むずかしいのはそれをどう組み合わせたら欲しい結果がでるのか、という構築部分です。この構築部分には色々な方法がありますが、NEATというアルゴリズムでは構築にGAを使っています。

つまり、魔界村を解くためのニューラルネットワーク構築にGAを利用した、が正しいです。

しかし、ニコニコ動画ではこんなにGAに親しみがあるとは思いませんでした。いやーGAは視覚的に面白いですもんね。私もこの動画を発想したのは、GAでリフトに乗る学習をさせてる動画をBlenderで作ってた人がいたからなんですよね(その動画は消えてしまっていました…残念)。

グラディウスを学習させてみた』とはどう違うの?



ゲームを解く方法が異なります。グラディウスの方はGAを適用するところが「時間経過ごとのゲームパッド操作を構築する」というところです。動画内のコメントで「目隠しでランダムにプレイして良さそうなものを選んでいく」みたいなのがありましたけど、それがこのグラディウスのやりかたです。

今回の魔界村はニューラルネットワークが肝なので、わりと人工知能っぽい感じです。

(このグラディウス動画も見ていて面白いのでおすすめです)

ぶっちゃけこの人工知能すごくないよね

今回の魔界村のNN方式とグラディウスのGA方式、どちらの方がゲームを解く能力が優れているのかと考えると、圧倒的にグラディウス方式がいいと思っています。そもそも敵とか玉に反応するプログラムを書いたらそれが一番簡単で優れているでしょうね。

が、これの面白いところは人間が考えていなかった発想で動き出すところです。これはあたかも「コンピューター自身が思考しているんじゃね?」って感じで見ていて面白いんですよ。

あと、そもそも、この動画で使っているニューラルネットワークの構築プログラム自体が専門家(ガチ勢)からみたらおもちゃみたいなものだと思ってください。あくまで成長を楽しむものです。盆栽みたいな感じで、じじいの老後の楽しみだと思ってください(ゲフゲフ)

全部自分で作ったの!?

動画内でも出していますが、元ネタは「MarI/O」という海外の動画(SethBling)のコードを参考にしています。ゲーム画面から入力の部分は自分で作りました。またいろんなパラメータ調整とか雑多な部分は書き換えています。が、ニューラルネットワークの構築部分はSethBlingのコードによるものです。関係ないですけど、SethBlingのほかの動画もかなり面白いです。

評価値が悪いんじゃないの?

今回は「どれだけ右に進んだか」だけでやっていますが、後編では色々と試行錯誤しています(動画で見せるかどうかは未定)。

しかし、評価値の設定はかなり難しいですね…。いろいろ試したけど結局「どれだけ右に進んだか」が正解のような気もしていますよ…。

まとめ

では、後編もお楽しみに…(ボスが倒せない…ん…だが…)。

参考文献
MarI/O - Machine Learning for Video Games
NEATの論文
SethBlingの書いたMarI/Oのコード


投稿者:

shu3

プロフィールページ