ランド研究所の「機械学習による航空支配」を実装する（その６）：トレーニング・データの重要性と GAN の性能向上

本記事は、ランド研究所の「機械学習による航空支配」を実装する（その６）です。

[Air Dominance Through Machine Learning: A Preliminary Exploration of Artificial Intelligence–Assisted Mission Planning, 2020](https://www.rand.org/pubs/research_reports/RR4311.html)

（その５）で、GANによるミッション・プランナーが生成するプランについて調べ、トレーニング・データのバランスに問題がありそうなことがわかったので、w1 : w2 : w3 = 1500 : 1500 : 1500 となるようデータをランダムに選択しトレーニングを再度行いました。

作成したCodesのGitHubのリンクは下記です。
>https://github.com/DreamMaker-Ai/AirDominace_1D_GAN_Git

#1. トレーニング履歴
トレーニング・データをバランスさせた場合、トレーニング履歴は下図のようになりました。図には、バランスを考えずにトレーニング・データを作って GAN のトレーニングを行った場合と、バランスさせてトレーニングを行った場合の結果を併記しています。'selected-samples'とある水色のラインと赤のラインが、バランスさせてトレーニングを行った時の結果です。

やはり、データをバランスさせてトレーニングすると性能が向上し、学習も安定します。全ミッションに対して成功率は 50% を超えていて、理論的な上限の 58.44% に近づきました。図から見て取れるように、2k エポックでもまだ性能向上中なので、トレーニングをもっと続ければ、成功率はまだ向上しそうな感じです。

図１．１
![W&B Chart 2021_3_10 16_05_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/a34036be-8b7c-006b-54bb-0fa014b5cd4a.png)

成功できるミッション条件に対する成功率（理論的な上限100%）についても、2k エポックの学習時点で、85% 程度の成功率が達成できています。
図１．２
![W&B Chart 2021_3_10 16_05_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/3e77706d-12af-12a0-5d57-dea6f9063f98.png)


（その５）の図１．１に対応するのが下図になります。ミッション条件 w1, w2 で成功する割合が増えています。

図１．３
![w1 w2, w3 ratio in success & not success plans.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/4b1682d6-ea98-d1e3-89b0-059c34ccc287.png)

ここで、w1, w2, w3 の定義は以下となっています。

図１．４
![ミッション成功／不成功のミッション条件に依る類型.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/be75ab24-40b1-20c6-5566-ea6e48100628.jpeg)

（その５）の図１．２に対応させて、1000 エポック以降の平均値を計算したのが下図になります。

図１．５
![Performance of Improved GAN Planner.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/29cb59e1-e747-b0dd-f0d7-3b483feea306.png)

（その５）の図１．２は下図でしたので、成功率が 42.29% から 48.62% に増加しています。

図１．６
![Performance of GAN Planner over Potential Success Missions.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/f472c2b7-9654-6ee5-e9b2-462e35d01031.png)

これらの図からSuccess部分のみを取り出して、成功する上限内訳、ランダム・プランナーによる成功内訳、（その５）の GAN Planner による成功内訳、トレーニング・データをバランスさせてトレーニングした今回の Improved GAN Planner による成功内訳を比較したのが下図になります。

図１．７
![Breakdown of Succeeded Missions.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/f5c41cd6-078b-f3f8-f7c4-c2d977271328.png)

Improved GAN Plannerでは、GAN Plannerよりも、トレーニングに使うw1, w2のデータ数は増えていますが、w3 のデータ数は実は減っています。にも関わらず、w1, w2だけではなく、w3 のミッション条件についても成功率が 39.46% → 43.96% と向上しています。

これについては、w3 の特徴を学習するには、削減したデータ数でも十分なことに加え、以下の理由が考えられます。

ミッション条件 w1, w2, w3 は、その境界は連続的です。非連続に条件が切り替わるわけではありません。このため、ニューラルネットの活性化も連続的に変化しているはずです。このため、w1, w2 の条件下で、 w3 との境界近傍で学習が進むことによって、連続的に境界面近くの w3 の学習も、それに引っ張られて進むのではないかと推測します。


#2. さらなる性能向上を目指すには

さらなる性能向上のために出来そうなことを、思いつくままに列挙しておきます。

1. 今回は２０００エポックまで学習させましたが、未だ成功率は向上中でサチレーションしていません。したがって、学習を継続すれば性能向上する可能性があります。
1. 混合分布のような複雑な分布を生成し易くするために、MDN（Mixture of Density Network）を適用する方法が考えられます。
1. 今回、プランを生成する元となっている正規分布の次元は、全く適当に決めています。これを最適化することで性能向上するはずです。ただし、次元を変えて試行してみるしかしょうがないので、かなりの計算パワーが必要です。
1. 今回は、正例（成功）だけを使ってトレーニングしていますが、負例（失敗プラン）も使えば、日々の生活と同じように、失敗からも学べる可能性があります。このためには、Generator, Discriminator への条件入力に、ミッションの成否も入力すれば、正例だけでなく負例（失敗プラン）も使って、トレーニングできるようになります。具体的には、条件入力にミッション成功／不成功を埋め込んだもの又は One-hot 化したものを追加で入力してトレーニングします。そしてプランを生成する時には、ミッション成功を入力します。そうすれば失敗からも学べる可能性が出てきます。しかしながら、余計なことをも学習しなければならないので、学習が足りないと、かえって悪い結果になってしまう可能性もあります。これについては、そのうち試してみたいと思います。
1. 今回使ったのは、ほぼオリジナルの初期の GAN です。GANは登場して以来、様々な工夫、改良がなされています。最新の GAN を使うことで、性能向上できる可能性があります。


#3. GANプランナーが生成するプラン
##3.1 ケース w1
（その５）と同様に、成功したプランの例を下図に示します。

図３．１．１
![model-sigmoid-selected-samples-my_generator_model_2000-w1-trial-3-engage-success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/5727eae4-1bc4-9b6a-f597-823863fc28be.png)

全プランを平均したものが下図になります。生成したプランの内 99.6% (=996/1000) はミッションに成功しているので、平均でもミッションに成功できています。

図３．１．２
![model-sigmoid-selected-samples-my_generator_model_2000-w1-trial-3-engage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/e71f160f-e2de-c1c2-e472-c8ab5c4b3749.png)

生成したプランの fighter 進出レンジと jammer 進出レンジの分布は次のようになっています。データのバランスを取ったことで、Fighter 進出レンジの分布は非常にシャープなものとなっています。また、Jammer も必要以上に（この場合 44km 程度以上に）進出させないことが学習できています。

図３．１．３
![model-sigmoid-selected-samples-my_generator_model_2000-w1-trial-3-fighter_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/e4e20f3c-fb69-09db-e2e1-a94a138233d9.png)


図３．１．４
![model-sigmoid-selected-samples-my_generator_model_2000-w1-trial-3-jammer_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/c140ffdb-5381-6cd8-fed5-e49829b59ed7.png)


一方で、成功プランを生成できない場合もあります。下図に生成したプランの平均を示します。このケースの場合、あと少しだけFighterの進出レンジを抑えれば良いだけなのですが、学習しきれていません。この原因が、学習が足りないためなのか、ネットが小さい（あるいは浅い）ためなのか、データが不足しているためなのかは、もっと分析しないと判りません。

図３．１．５
![model-sigmoid-selected-samples-my_generator_model_2000-w1-trial-5-engage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/d40d3088-7e33-dcc9-3925-259b879caf31.png)

図３．１．６
![model-sigmoid-selected-samples-my_generator_model_2000-w1-trial-5-fighter_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/beaa60b7-8603-b9d3-5ffb-7bf30e17f517.png)

図３．１．７
![model-sigmoid-selected-samples-my_generator_model_2000-w1-trial-5-jammer_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/a8a4e76c-2290-d631-f60f-d08dbc3ad6e7.png)


##3.2 ケース w2

この場合、ミッションを成功させるには、かなり狭い範囲に、Fighter と Jammer を進出させる必要があるのですが、どちらの進出分布もかなりシャープとなっていてそれを学習できています。（その５）のように、Jammerのプランが原点方向に長く尾を引くようなこともありません。これは大きな進歩です。このミッション条件では、生成したプランの内の32.5% (325/1000)が成功プランでした。

図３．２．１
![model-sigmoid-selected-samples-my_generator_model_2000-w2-trial-11-engage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/49298262-a02d-5c27-b1ae-4e80a1b840c0.png)

図３．２．２
![model-sigmoid-selected-samples-my_generator_model_2000-w2-trial-11-engage-success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/d4b846a2-21cd-5869-7c36-883396679033.png)

図３．２．３
![model-sigmoid-selected-samples-my_generator_model_2000-w2-trial-11-fighter_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/39cd1c25-117e-0861-1b6f-c9f3c05b529c.png)

図３．２．４
![model-sigmoid-selected-samples-my_generator_model_2000-w2-trial-11-jammer_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/5eb69c0a-fe33-513c-9bfb-4b3d483fc0cd.png)

下図のプランでは、Jammer を前方に進出させきれていません。その結果、成功するプランを生成できませんでした。

図３．２．５
![model-sigmoid-selected-samples-my_generator_model_2000-w2-trial-7-engage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/1647e37d-2719-5849-c792-3d7af42b1a9b.png)

下図は、上と同じミッション条件ですが、成功したプランです。Jammer をギリギリまで進出させています。

図３．２．６
![model-sigmoid-selected-samples-my_generator_model_2000-w2-trial-7-engage-success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/a7e63cf4-d800-fabf-fb0d-6830b79ad8ab.png)

このミッション条件でのプランの分布は下図になっています。Jammerの分布が学習しきれていません。

図３．２．７
![model-sigmoid-selected-samples-my_generator_model_2000-w2-trial-7-fighter_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/9b42fd12-91d3-7922-4996-7d482b8af665.png)

図３．２．８
![model-sigmoid-selected-samples-my_generator_model_2000-w2-trial-7-jammer_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/1e119bce-2dcc-1666-1558-af4c043bbf25.png)

##3.3 ケースw3

ケース3では、Jammer をあまり前に出さず、Fighter はギリギリまで前に出すようなプランの分布が学習できています。また、成功するプランが生成できる割合も 100% (=1000/1000) と高くなっています。

図３．３．１
![model-sigmoid-selected-samples-my_generator_model_2000-w3-trial-0-engage-success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/f47ddf81-9037-be10-8681-3042b621f712.png)

プランの平均としても成功しています。

図３．３．２
![model-sigmoid-selected-samples-my_generator_model_2000-w3-trial-0-engage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/2b508ac8-3205-e44d-dabd-a54456dd4041.png)

図３．３．３
![model-sigmoid-selected-samples-my_generator_model_2000-w3-trial-0-fighter_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/4008ff62-ffce-c72e-39a2-cb2450dcd062.png)

図３．３．４
![model-sigmoid-selected-samples-my_generator_model_2000-w3-trial-0-jammer_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/71daed83-9dbf-e34e-2c4e-fc1295d63800.png)

下図は別のケースの例です。

図３．３．５
![model-sigmoid-selected-samples-my_generator_model_2000-w3-trial-8-engage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/9f68e5d7-b8b2-77ba-62b9-a6c789c72ec6.png)

図３．３．６
![model-sigmoid-selected-samples-my_generator_model_2000-w3-trial-8-engage-success.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/6a3fd5cb-1e6a-c316-0a50-cf1ab3724ec5.png)

プランの分布は下図になっています。

図３．３．７
![model-sigmoid-selected-samples-my_generator_model_2000-w3-trial-8-fighter_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/0af31edf-2bf4-ce1c-662f-501452ebc2ca.png)

図３．３．８
![model-sigmoid-selected-samples-my_generator_model_2000-w3-trial-8-jammer_ingress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/aabc96d8-bd88-deba-10ba-3625687966d7.png)

#4. GAN のロスと精度（accuracy）履歴
参考までに、GAN の GAN のロスと精度（accuracy）のトレーニング履歴を記載しておきます。解釈は難しいのですが、少なくとも学習が不安定になったりはしていないようです。

図４．１
![W&B Chart 2021_3_10 16_05_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/91a7c19a-7362-7afa-3265-9fc15282ddbc.png)

図４．２
![W&B Chart 2021_3_10 16_06_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/81e47b0f-d4d0-fa2f-454b-69bda3d97d2c.png)

図４．３
![W&B Chart 2021_3_10 16_09_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/6e9507f2-6e6f-7ca2-f917-cdb43985e653.png)

図４．４
![W&B Chart 2021_3_10 16_11_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366937/c4fb7cd8-18e3-6981-c8ae-a8de65ec9748.png)

#5. まとめ

1次元問題に対する GAN によるミッション・プランナーの実装はこれで終わりです。やってみた個人的な感想を纏めておきます。

##5.1 GAN によるミッション・プランニングについての感想

- 画像生成や音楽生成といったエンタメ領域だけではなく、データ（或いは、グッドなシミュレータ）さえあれば、ビジネス領域でも GAN が使えそうだ、という感じがしました。

- ```多数のプランを確率的に生成でき、（Explainable とまでは言いませんが）、プランの統計量を見ることで、どういうプランを Ai が生成しようとしているのか見えてくるのは、大きな強み```だと思いました。強化学習でも、[C51](A Distributional Perspective on Reinforcement Learning)など価値函数の分布を求める試みはあるのですが、あまり進んでいないのが現状です。（ただでさえもなかなかうまく学習してくれず、尋常ではない計算機パワーとコーディング能力を要求される強化学習で、そこまでやるのは大変な気がします）。

- 当たり前ですが、トレーニング・データは非常に重要です。このやり方で良いプランナーを作るには、GAN で生成したい内容を、まんべんなく、しかも一様に表しているデータを集めることが、一番のキー・ポイントとなる気がしました。このためには、ドメイン知識が非常に重要になると思います。

##5.2 不満点とアイデア

今回実装したGANは、プランの成否について何も教えてくれません。成功しようがないミッション条件でも、何食わぬ顔で失敗プランを提示して来ます。これは問題です。プランの成功確率等を併せて提示して欲しいと思います。

これは、成功、不成功の２クラス分類問題、或いは、w1, w2, w3, l1, l2 の多クラス分類と考えれば、ACGAN の枠組みが使えるような気がします。（気がするだけで、よく考えたわけではありません）。これは面白そうなので、そのうちやってみたいところです。
[Conditional Image Synthesis With Auxiliary Classifier GANs, 2016](https://arxiv.org/abs/1610.09585)

conditional GAN の代わりに、conditional VAE (Variatiuonal Auto Encoder) を使っても同じようなことができそうです。この場合、通常のVAE と違って、潜在空間次元は入出力次元よりも大きくする必要があると思われます。これは、成功ミッションとプランを埋め込んだ潜在空間（多様体）を学習するという意味でなんだかおもしろそうな感じがしますので、その内時間があればやってみたいところです。
[Semi-Supervised Learning with Deep Generative Models, 2014](https://arxiv.org/abs/1406.5298)
[Learning Structured Output Representation using Deep Conditional Generative Models, 2015](https://proceedings.neurips.cc/paper/2015/hash/8d55a249e6baa5c06772297520da2051-Abstract.html)

#（その７）へ続く
（その７）からは、ミッション・プランニング問題を強化学習でアプローチします。

# 過去記事へのリンク
- [ランド研究所の「機械学習による航空支配」を実装する（その1）：レポートのまとめ](https://qiita.com/DreamMakerAi/private/95e0aad16e450cb0c53d)
- [ランド研究所の「機械学習による航空支配」を実装する（その2）：1次元問題について](https://qiita.com/DreamMakerAi/items/72c90f9df5339dedd9cd)
- [ランド研究所の「機械学習による航空支配」を実装する（その3）： 1D simulator for GAN と Random mission planner の実装）](https://qiita.com/DreamMakerAi/private/1a0e25a9f673e531ee6f)
- [ランド研究所の「機械学習による航空支配」を実装する（その4）： conditional GAN の実装とトレーニング](https://qiita.com/DreamMakerAi/private/3a416d5cb64d9b7e86db)
- [ランド研究所の「機械学習による航空支配」を実装する（その5）：トレーニング結果の分析](https://qiita.com/DreamMakerAi/items/6c78181b71c470632fcf)