![見出し画像](https://assets.st-note.com/production/uploads/images/93703934/rectangle_large_type_2_f7e78e9aa3cb03aceacf0c9150e75d35.png?width=1200)
強化学習で遊ぶ part2 「AIにサッカーさせてみる」
UnityのML-agentsを利用し、サッカーAIを強化学習で育てる記事です。
~~~前回の内容はこちら~~~
はじめに
![](https://assets.st-note.com/img/1671596188245-4lcden7rX9.png?width=1200)
博士じゃ。前回に引き続き、強化学習で遊んでいくぞ。
![](https://assets.st-note.com/img/1671596187753-BKfQpmyVYW.png?width=1200)
![](https://assets.st-note.com/img/1671596200837-c8QedegbTc.png?width=1200)
助手です!前回はサッカーのルールも教えてないのに、AIが自ら学習してゴールまで決めてましたね!
けど、もっと沢山のナガメ(AI)でサッカーするのを見てみたいですね。
![](https://assets.st-note.com/img/1671515111874-5POq9MHh0O.png?width=1200)
![](https://assets.st-note.com/img/1671525041073-8lKbYQZhdO.png?width=1200)
前回は学習を早めるために、狭い空間で2対2のサッカーをさせたの。次は人数を増やしてみるぞ。助手くん、設定を頼む。
![](https://assets.st-note.com/img/1671525041132-NdwxJruWy9.png?width=1200)
![](https://assets.st-note.com/img/1671525041192-CxAq0u4oRB.png?width=1200)
了解です!マップのサイズを2倍、人数を1チーム2人から4人にしてみますね。
![](https://assets.st-note.com/img/1671525041199-8q584Dp6Uj.png?width=1200)
フィールドサイズ拡大とAIをさらに4人追加
![](https://assets.st-note.com/img/1671530170644-k89kyPfN5h.png?width=1200)
![](https://assets.st-note.com/img/1671530483386-OHhyV6qpZT.png)
Elementの追加は右下の+ボタンからできます
報酬の変更
![](https://assets.st-note.com/img/1671530305106-3EoP5xgOA6.png?width=1200)
できました!早速学習を始めますね!
![](https://assets.st-note.com/img/1671530305106-CPFFDi9X30.png?width=1200)
![](https://assets.st-note.com/img/1671530327047-1SHCfTxZ26.png?width=1200)
まあ待つのじゃ。学習環境をよく見ると、ボールをゴールに入れるにはかなりの回数キックせねばならん。こういう学習は、報酬が疎になりやすい(ほとんど報酬がもらえない)。まずはちょっとしたことで報酬を与えてやらねばならん。
![](https://assets.st-note.com/img/1671530327133-edBPB5SWu1.png?width=1200)
![](https://assets.st-note.com/img/1671530327277-9xa8Nwsn4X.png?width=1200)
ちょっとしたこと・・・。じゃあ、ボールにタッチするごとに報酬を与えるようにしてみます!
![](https://assets.st-note.com/img/1671530327333-5jwDYg4aBH.png?width=1200)
![](https://assets.st-note.com/img/1671531269380-FT3oxyTOHF.png?width=1200)
![](https://assets.st-note.com/img/1671531336934-GrxKOE56P4.png?width=1200)
これで、ボールにタッチするごとに0.1(変更した値)×0.2(サンプルで設定された値)=0.02の報酬がもらえるようになりました。それでは強化学習スタート!
![](https://assets.st-note.com/img/1671531336999-1NboKSEbdN.png?width=1200)
~~~1日後~~~
![](https://assets.st-note.com/img/1671596286822-W2Hca6RA78.png?width=1200)
さて、どうなったか見てみるかの。
![](https://assets.st-note.com/img/1671596286851-rmNxGGnxuz.png?width=1200)
学習結果1
![](https://assets.st-note.com/production/uploads/images/93770063/picture_pc_8eb8b08fa30c521e9bc1046e572b4944.gif?width=1200)
コマ送りに見えますが、noteの仕様です
![](https://assets.st-note.com/img/1671596287021-pyDAW1Hmj4.png?width=1200)
おお、ゴールが決まっていますね。よく見ると、攻めている赤チームは全員がボールに向かっていかないで、自陣もバランスよく守っているように見えます。私だったら周りを見ないでボールに走っちゃいそう・・・。
![](https://assets.st-note.com/img/1671596287029-JbhdsXuh7N.png?width=1200)
![](https://assets.st-note.com/production/uploads/images/93770470/picture_pc_110e936f967b07418ececdcae60180aa.gif?width=1200)
![](https://assets.st-note.com/img/1671597297322-5Yv9EEwJKu.png?width=1200)
こちらの試合では、壁際で攻防しているのが見えるの。場外のないフィールドならではの押し合いは2対1で赤チームが不利じゃったが、青チームが開けたスキを通しておる。AI同士ならではの駆け引きがありそうじゃな。
![](https://assets.st-note.com/img/1671597297319-03g3H6VUVG.png?width=1200)
![](https://assets.st-note.com/img/1671597669321-i93kiTFGsd.png?width=1200)
パスとかはしてないんですね~。学習が足りないのでしょうか?
![](https://assets.st-note.com/img/1671597669357-KqBT0P9qGq.png?width=1200)
![](https://assets.st-note.com/img/1671597712665-JfuDu1I476.png?width=1200)
この学習環境じゃと、サッカーボールをキックしているというより押しているようじゃ。ボールを軽くするか、キックのパワーを調整してやればうまくいかないかのう。
![](https://assets.st-note.com/img/1671597712718-6ya7SxToe4.png?width=1200)
![](https://assets.st-note.com/img/1671597712904-9ZpyArRx31.png?width=1200)
やってみますね。
![](https://assets.st-note.com/img/1671597712927-bjUmtX6Ecy.png?width=1200)
キックパワーをアップしてみる
![](https://assets.st-note.com/img/1671598489856-EfN15QQYE0.png?width=1200)
m_KickPowerパラメータを変更
![](https://assets.st-note.com/img/1671598770464-9mYmIprC84.png?width=1200)
ポイントじゃが、パラメータを変えたからといって学習を最初から始める必要はない。学習済みのモデルを使い、段階的にタスクや難易度をあげて学習させることを”カリキュラム学習”といったりする。問題が難しい場合は、簡単な問題(ボールを触るだけで報酬を貰えるなど)にわけるカリキュラム学習で強化学習を進めるとうまくいく場合があるぞ。
![](https://assets.st-note.com/img/1671598770513-dLAHqIcvNp.png?width=1200)
![](https://assets.st-note.com/img/1671599268409-VjrDrVqwRL.png?width=1200)
ふむふむ。じゃあ学習したモデルを再利用しますね。8人の広い環境でゴールできるようになっているので、ボールにタッチするごとに与えていた報酬はゼロに戻しておきます。
![](https://assets.st-note.com/img/1671599268383-cyXuxug0jq.png?width=1200)
~~~さらに数時間後~~~
学習結果2
![](https://assets.st-note.com/production/uploads/images/93845564/picture_pc_ae0583d2f8b31033e5b93887da6e97e1.gif?width=1200)
![](https://assets.st-note.com/img/1671602851021-Q75OY53MfX.png?width=1200)
オウンゴールしないよう回り込んでボールをとることができておる。じゃが、正面のキックのパワーを上げても、その影響がない背面で押しておるの~。
![](https://assets.st-note.com/img/1671602850939-RVo5mysZwP.png?width=1200)
![](https://assets.st-note.com/img/1671602851136-lJPJXuCFDO.png?width=1200)
想定してた早いキックが見れませんね・・・。なんででしょう?
![](https://assets.st-note.com/img/1671602851144-uVHHx3ARma.png?width=1200)
![](https://assets.st-note.com/img/1671687497303-nT6ZjSgB7a.png?width=1200)
やはり、ボールに触れることで報酬を与えていたことが原因かの。キックで1回しかタッチしないより、押し続けたほうが報酬が沢山もらえるからの。
![](https://assets.st-note.com/img/1671687497384-hyZ6wk05aG.png?width=1200)
![](https://assets.st-note.com/img/1671688390062-JMKbjY2Ceq.png?width=1200)
いろいろ試行錯誤がいるんですね。
![](https://assets.st-note.com/img/1671688390011-4vtvTLc9wj.png?width=1200)
![](https://assets.st-note.com/img/1671688980244-L9j4utwft3.png?width=1200)
いくつか対策はあるぞ。
・報酬をもっと小さくする。
・キックパワーが高いので初期段階でもゴールする可能性が高い→タッチするときの報酬を与えない
・正面でキックした場合のみ小さい報酬を与える
最初の学習で、タッチした場合に報酬を与えるとうまくいくことが分かっておる。そこで今回は3番目の方法を試してみるぞ。このように、報酬の与え方を考えることを報酬設計というのじゃ。
![](https://assets.st-note.com/img/1671688980156-g9SxUZOfIt.png?width=1200)
![](https://assets.st-note.com/img/1671699678217-b9YsBvjOtV.png?width=1200)
報酬の与え方ってたくさん考えられるんですね。報酬設計、大事です。
![](https://assets.st-note.com/img/1671699678229-DLjvg1qxyn.png?width=1200)
~~~更に1日後~~~
学習結果3
![](https://assets.st-note.com/img/1671700334936-c6JZerLRu4.png?width=1200)
学習って、時間かかるんですね~。
![](https://assets.st-note.com/img/1671700334985-MVgH05TlNO.png?width=1200)
![](https://assets.st-note.com/img/1671700355660-sIEFIXPVY5.png?width=1200)
そうじゃな。もっと沢山のマシンがあれば沢山報酬設計を試すことができるが、こういった試行錯誤も強化学習を楽しむポイントじゃ。失敗しても焦らず、なぜそうなったのかを見極めていくぞ。
![](https://assets.st-note.com/img/1671700355630-63g1brrAhE.png?width=1200)
![](https://assets.st-note.com/img/1671700355866-zAsMyxOEZJ.png?width=1200)
了解です!じゃあ、早速学習の成果を見せてもらいましょう!
![](https://assets.st-note.com/img/1671700355865-I21PKeAlug.png?width=1200)
![](https://assets.st-note.com/production/uploads/images/93905277/picture_pc_659d6aa61004f5300f3cca5c5c4802dc.gif?width=1200)
![](https://assets.st-note.com/img/1671700504625-DXlO9nIQ8C.png?width=1200)
いいですね!しっかり正面(ナガメのお面がある方)でキックしてます!報酬設計って大事ですね~。
![](https://assets.st-note.com/img/1671700504687-9NhTIz3P3J.png?width=1200)
![](https://assets.st-note.com/img/1671700607032-nrcfuJLT03.png?width=1200)
4人の配置も面白いの。相手ゴール付近に1人、自分のゴールを守るのに3人の構成になっておる。キックパワーが高いので、まっすぐ蹴られるとボールの速度が早くて少ない人数じゃと止められないから守りに人数を割いているのかもしれんの。
![](https://assets.st-note.com/img/1671700607071-tjJyzCzCeR.png?width=1200)
![](https://assets.st-note.com/img/1671762066426-7ZjmRsVp2Z.png?width=1200)
最初の頃と比べて、チーム全体で協力してゴールするような動きができてますね。私達は協力して!とか言ってないのに。強化学習って面白~い!
![](https://assets.st-note.com/img/1671762066431-mSdES8otaW.png?width=1200)
![](https://assets.st-note.com/img/1671762988400-37GUxNxpvG.png?width=1200)
人数を増やしたことで面白い動きが見れたの。どうやって問題を解くかをAIに任せているので、人間側が想定してない、もしくはどうすべきかわからない環境でもうまく行動してくれるのじゃ。
![](https://assets.st-note.com/img/1671762988337-JRKbzEBWTj.png?width=1200)
おわりに
![](https://assets.st-note.com/img/1671762072723-XywEx9DnVr.png?width=1200)
前の記事でも書いたが、問題設定とゴール(報酬)を適切に決めることが強化学習を成功させる重要なポイントじゃ。
サッカーは一つの例じゃが、世の中にはどちらが効率良いのかな?どうすると便利になるのかな?と言った問題がたくさんある。そういった問題に強化学習を使ってみると良いかもしれんの。もし身近に気になることがあったら、是非コメントで教えて欲しいのじゃ。それじゃあまたの~~。
![](https://assets.st-note.com/img/1671762072763-OsgRQrW5fI.png?width=1200)