能登さんが発行された技術系同人誌、「深層強化学習による東方AI」のダウンロード版を入手したので読みました。BoothとGumroadで販売されているおり、特に理由はありませんがGumroadで購入しました。 第13回 博麗神社例大祭で頒布した『深層強化学習による東方AI』のダウンロード版をBooth https://t.co/ZysBlu7LY4 およびGumroad https://t.co/HtgRa44sr6 にて販売しています. pic.twitter.com/7rDT2qG9uq — 何もわからん (@ntddk) 2016年5月8日 東方紺珠伝というシューティングゲームを、深層機械学習によってクリアさせようというものです。 この種の話でまず思い浮かぶのが、八重樫さんによるvArashiです。Linux Conference 2002にて発表された資料(PDF)もあります。今になって資料を見ていると、既に10年以上前の話となってしまって当時とはずいぶん状況が変わっているなあと思います。ビデオ入力はBT848でNTSC出力をキャプチャしていますし、捜査対象は初代Playstationなのでコントローラー操作は単純な電気信号です。 自分自身もこの領域については興味を持っていて、REVIVE USBを組み立てたのもその一環だったりします。今欲しいものはLinuxでも動く、できるだけ遅延の少ないHDMIキャプチャーです。USBカメラでOpenCVをちょこっと触ったりもしました。 しかしながら、近年のゲーミング環境をみると、このような仕組みがあまり歓迎されない状況になってきています。対人要素の強いソーシャルゲームやBOT、RMTといった要素があるので、ある程度は理解できるのですが… この著者のアプローチは画像を入力としている点ではvArashiと同じです。大きく異なるのは、深層強化学習を用いている点です。とはいえ、vArashiも通常のアルゴリズムで記述した部分を深層強化学習での実装にお聞かることは可能ではありそうです。 実際に深層強化学習でゲームをクリアさせるという試みはDeepMindが実現しています(Kotaku Japanの記事)。技術的にはその延長です。この書籍では基礎となるQ学習とニューラルネットワークの要素技術である逆誤差伝搬法、畳込みニューラルネットワーク、LSTMのざっくりとした解説がなされています。 また、東方Project作品をクリアする他の既存実装の紹介もされていまする。中にはDLLインジェクションを行い、ゲーム内の情報を直接参照しているものもあります。5種類紹介されていますが、そのうちの一つは深層学習を用いているそうです(東方ProjectをDeepLearningで攻略した…かった。)。ただ、残念ながら最高難度での1面クリアは達成できなかったとのことでした。 この書籍での手法は、難易度Normalの1面をクリアできたことがツイートで示されています。また、戦果の中で「弾幕ごっこのためだけに生みだされたというのに,並の人間に劣るとはいただけな い.」と書かれています。DeepMindが取り組んでいたもっとシンプルなゲーム郡(スペースインベーダーなど)と比較すれば、東方プロジェクトのゲームは敵弾の数が桁違いに多く、個人的にはそこまで行けることは十分な偉業だと思います。 今後の展望のなかに、人間のプレイヤーの行動を元に学習できないか、という提案があります。「視線追跡デバイスを併用してみるのもよさそうだ.」ともありますが、このアプローチについて大昔のログインで実際にシューティングプレイヤーへアイトラッキングデバイスを装着させた記事があったことを思い出します。 詳細は覚えていないのですが、「不慣れなプレイヤーは主に自機を中心に見ているが、上級プレイヤーは自機の少し先を見ている傾向がある」といった内容だった気がします。1980年台頃の話だったので、さすがにWebなどにその記録は残っていないようです。確か横スクロールのシューティングゲーム(グラディウス?)だったような… 当時は「そんなものか」としか思いませんでしたが、今となってはこの傾向は私個人の経験にはかなり適合しているように思います。特に攻撃を中心とした動きをする場合には視線は主に出現した(あるいはこれから出現する)敵の方向にあります。その場合、自機の位置は感覚的に覚えていて、敵弾については意識はするものの、その移動先が極端に自機に向かない場合を除いて無視します。この心の内部モデルにある自機と敵弾との位置関係にズレがあると、被弾するケースがよくあります。そして「あれ、なんで今死んだんだ?」という感想をいだきます。上手い人ほど、このズレがないのだろうと個人的に思っています。 しかし、比較的速度の遅い敵弾が大量に降ってくる状況、いわゆる弾幕を避けるという場面についてはこの限りではありません。この時は、視点が自機よりになります。ただし完全に自機を見るわけではなく、自機に向かってくる方向の敵弾郡を見ます。そして、一定時間後に敵弾が移動したあとを想像し、その時により広い空間になるであろう場所とそこへの経路を考えます。そして実際に移動しながら同じように次の場面ではどこの空間が広くなるか、ということを考え得るという繰り返しです。 これ以外のケースで行う避け方に、「ちょん避け」と呼ばれるものがあります。これは、高速かつ正確に自機を狙ってくる敵弾が出現する場合に用いる方法で、敵弾が発射されるタイミングにあわせてちょっとだけ移動する、という動きを繰り返すものです。近代のシューティングだと、正確な自機狙いの敵弾と正確な自機の隣を狙った敵弾を交互におり混ぜてくることがあり、両方を避けるためにこのような動きをします。また、完全に画面端まで追い詰められにくくする目的もあります。追い詰められてしまった場合、うまく敵弾を避けられるタイミングで入力を反転させる「切り返し」という操作が必要になります。 このように、 局面によって戦略を変えるという行為はシューティングに限らず、様々な競技で見られます。囲碁もおそらくそうでしょう。AlphaGoの仕組みの話を見聞きした限りでは、単純に現在の局面と、予想される読み手の局面評価を単純に有利・不利で区別しているように感じました。囲碁とシューティングゲームではゲームとしての前提がいろいろ違いますが、アプローチ自体はそう変わりないのかもしれません。 ところで怒首領蜂最大往生の陰蜂は、未だノーコンティニュークリアが出ていないようですね。その存在が明らかになってから、トップシューターレベルの人たちが「これは無理だ」と感じているようなので、7年超でクリア者の出た緋蜂とは違い、本当に人類には攻略不可能かもしれません。これを機械学習でクリア出来たらすごいでしょうね。 最後に、この本はビデオゲームを機械学習でクリアさせてみたい、という人には良い本だと思います。ただし、深層学習については別途専門書を購入する、あるいはAndrew Ng先生のオンラン講座を受ける(日本語字幕付き)のがよいでしょう。