Top AI技術開発とかのブログ - Atelier 強化学習でストリートファイターⅡに挑戦!!ハードモードでもクリアできるのか!?
2022年3月30日

強化学習でストリートファイターⅡに挑戦!!ハードモードでもクリアできるのか!?

ストリートファイターⅡにAIで挑戦してみました

皆さんこんにちは、データアーティストの代表の山本です。
会社ブログ復活第一弾では『愛されるAI』をめざしたAIキャラクター『タミ子』の誕生物語を紹介させてもらいました。

また、タミ子はe sportsの情報発信番組『eSports high TV』のナレーターもさせてもらいました。そのYouTube企画の中で、AIの力だけで『ストリートファイターⅡ』をクリアできるのか?というものがありました。

ハードモードで勝ち越すことを目標とした、複数回にわたる大きめの企画だったので、今回は、このブログを読むだけであらすじがわかるダイジェスト版をご紹介したいと思います。

ゲームAIで使われる強化学習ってなんだろう?

AIにゲームの勝ち方を学習させるには、通常『強化学習(reinforcement learning)』という手法を用います。強化学習では環境と報酬を定義し、ある環境でどのような行動をとると、より高い報酬を得られるか?を学習していきます。

ストリートファイターⅡの場合は例えばキャラクター同士の位置が環境、相手にダメージを与えると報酬がもらえる、行動はパンチやジャンプなどのプレイヤーの操作になります。どのような環境・報酬の設定をし、どのような対戦をするかによって、強いAIを作れるかどうかが決まります。

環境・報酬・行動の図

まずにすぐに取れる情報で、ガイル(ノーマル)に挑戦してみよう!

ゲームから取得可能な情報として、自キャラクターや敵キャラクターの位置、ヒットポイントがあります。環境としては位置だけを用いて、報酬は相手のヒットポイントを減らすほど上がり、自分が減るほど下がるように設定します。この情報だけでプレイする場合、AIからするとこれだけの情報しか与えられていないことになるので、このままだとそこまで強くなれないことは容易に想像がつきますが、とりあえずノーマルモードで10000ステップほど学習をしてみようと思います。一回行動をすると1ステップとなります。

AIがとらえている環境の図

自キャラクターとしてはリュウ、敵キャラクターとしてはガイルを選択しました。1,000ステップ学習した結果ですが、正直初めてゲームをやる子供よりも若干下手というレベルです。特に目的無くぴょんぴょん飛び跳ねているだけに見えます。結果として当然負けてしまいます。

これは設定が悪いのか?それとも学習回数が少ないのか?全く同じ条件で10倍の10,000ステップ学習することにしました。するとまぁなんということでしょう!ガイルに普通に勝てるようになりました!自分と敵の位置しかわからないのであれば、飛び道具の必殺技であるソニックブームを持つガイルとは相性が悪いかと思うのですが、ひたすら竜巻旋風脚をすることで、ソニックブームをすり抜けるという攻略方法を見出しました。画像的には竜巻旋風脚の軸の方の足に、ばっちりソニックブームが当たっている気がするのですが、そこはゲームのヒット判定の問題ですり抜けているようです。戦績としては10戦中全勝で勝ち越しているので、ノーマルモードのガイルよりは強くなったということにしましょう!

ガイルを倒せるならエドモンド・本田もいける!?

次の対戦相手は歌舞伎模様のメイクをした日本の力士、エドモンド・本田です。ガイルのような飛び道具を持たないので、位置情報だけで戦うのに適した相手だと思われます。まずはガイルで学習したAIでそのまま臨みます。例のごとく竜巻旋風脚 連発戦法です。あれ?おかしい?なんかすごく迎撃されてしまうんですが、強パンチを押したときに出る大振りの百烈張り手であっさり反撃されてしまいます。あれだけ勢いつけてクルクル回っている足に対して、静止状態からの百烈張り手で迎撃できるエドモンド・本田フィジカルの強さに感服です。

百烈張り手で竜巻旋風脚が迎撃されるアップ図

ガイルに勝てるAIであればエドモンド・本田でそのままいけるかと思ったのですが、中々そうもいかなかったため、改めてエドモンド・本田で追加10,000ステップ学習しています。するとどうでしょう、まさにこうあってほしいという想定通りの学習をしてくれました。しっかり距離をとって、飛び道具の必殺技の波動拳をひたすら打ちまくる戦略を発見しました。戦い方としては大分下品ではありますが、戦績としては10戦中8勝で勝ち越しているノーマルレベルのエドモンド・本田よりも強くなりました。

波動拳でエドモンド・本田のスーパー頭突きを迎撃している図

残りのキャラクターに対しても何の工夫もなく全く同じ方法でどんどん学習を進めて行くことで、ノーマルレベルであれば全キャラクターに対して勝ち越すことが出来ました。相手がどんなポーズなのか、飛び道具が飛んできているのかを一切把握していない状態でも、ノーマルモードであれば勝ち越せるということにむしろ感動を覚えました。

勝ち越し表

いよいよハードモードに挑戦!!設定を変えず学習量を増やすだけでいけるのか?!

まずはノーマルモードで鍛えたAIでそのまま挑戦です。はい、ダメでした。ぼろ負けです。それはそうですとも。ハードモードの動きの癖を掴んでいないので勝てなくて当然です。想定通りなのでまったくひるみません。ということで、例のごとくそのままハードモードでさらに10倍の100,000ステップ学習の末、再挑戦しました。はい、ダメでした。ぼろ負けです。あれ?こんなに勝てないものだろうか、、、一部のキャラクターには競っていますが、やはり飛び道具をもつリュウ、ケン、ダルシム、ガイルとは相性が悪いようです。

戦績表

開眼せり!!飛び道具をよけられるぜ!小さなモーションも見逃さない!!

位置情報で学習するだけ限界があるので、いよいよ画像を学習させることにします。今までの環境に加え画像を圧縮した情報を加え学習を行います。画像の圧縮の際にはまず色を白黒にして、その上でよく使われるdeep learningの画像圧縮の手法である畳み込みネットワークを使います。若干違うのですが、雰囲気としては解像度の高い画像の画素数をぐっと下げたことをイメージしてください。さあ、これで準備は整った。飛び道具だって認識できる(はず)!!相手のモーションから次の攻撃も予測できる(はず)!!
この状況でまた100,000回学習しました。するとどうでしょう。想定をはるかに超えるとても素敵な動きをしています。まずは波動拳をよけられるようになりました。なんと想定通り。

波動拳をよける図(gif)

そしてさらに恐ろしいことに相手のわずかなモーションから次の攻撃を読み取り即座に防御できるようになったのです。例えば下の例ですと、相手が昇龍拳を打とうとかがんだ瞬間をすかさずとらえ、防御をし、その着地タイミングで投げを放つという、地元の名人さながら動きを見せています。

昇竜拳を防御してから投げる図(gif)

各キャラクターに対して学習を行うことでついに全キャラクターについて勝ち越すことが出来るようになりました!!

ただこの学習方法だと、相手が自分に近づいてきているのか、遠ざかっているのかの時間的概念を加味することが出来ません。ということで今の瞬間の画像だけでなく数ステップ前の画像も入れて学習してみたのですが、予想に反して勝率は改善しませんでした。これは学習に入れる要素を複雑にしすぎたせいで、学習しきる前に試合に臨んでしまっていることに対応しているのだと思います。何事も複雑に考えすぎるとうまくいきませんね。見るべき要素を絞ってそこを突き詰めていくことが大切という学びを得ました。もっと学習ステップ数を増やせば勝率が上がり始めるかもしれませんが、今回は当初の目標であるハードモードで勝ち越しが出来たのでこれ以上の学習は行いませんでした。

頂上決戦!!最強AI対最強AI!!本当の強さとは?

企画の最後に、今回鍛えたAI同士で対決させてみました。ハードモードよりもさらに強いAI同士の戦い。どれほど高度な戦いになるのでしょうか?

AI同士で対決しているサムネイル

、、、、、あれ?なんか二人とも飛んでるだけなんですけど。特に近づこうとしないんですけど。

うーん、、、あ!!わざわざ相手に近づいてリスクをとるよりも、相手が近づいてこないならこっちも近づかない方が報酬が高くなるのか!!今までは相手がガンガンせめてくるから仕方なしに火の粉を払っていたということだったんですね。
しまったぁ、一定時間内にダメージを与えないと報酬が下がるような仕組みを入れておくべきでした。

ただただ、『本当の強さとは、剣を持つことでなく、剣を置くときにはじめてたどり着ける』的な、格闘マンガでたまに見る感じのフレーズに近い状態に、図らずもAIがたどりついたので、これも一つの成功と言えるでしょう!!

ということで、ストリートファイターⅡをAIがプレイする企画はここまでです。
今後もエンターテインメントの中に技術が垣間見えるようなコンテンツを紹介していければと思いますのでよろしくお願いいたします。

eSports high TV YouTube チャンネル:https://www.youtube.com/c/TOKYOeSPORTSHIGH

©️ CAPCOM CO., LTD. 2018 ALL RIGHTS RESERVED.