スポンサーリンク

【Unity】機械学習を強化してみよう (ML-Agents v0.8.1)

前回までの話

ML-Agentsのチュートリアルを実施しました。チュートリアルまでの内容では、学習が十分ではありません。

今回は自分が納得する動きを学習するまで強化したいと思います。

強化のアプローチについて

強化すると言ってもどういじればいいのでしょうか?これは、簡単です。
1.たくさん学習させる。
2.正しく学習させる。
人間と同じように考えています。勉強方法が多少間違っていても、時間をかければ成長するでしょう。
人間が教えることもできますが、今回は自己学習(ディープラーニング)させますので、正解した時の報酬とペナルティを見直しします。

学習の時間を増やす

ml-agents-master\config\trainer_config.yamlのmax_steps:を5.0e4から増やします。30.0e4にしました。

default:
trainer: ppo
batch_size: 1024
beta: 5.0e-3
buffer_size: 10240
epsilon: 0.2
gamma: 0.99
hidden_units: 128
lambd: 0.95
learning_rate: 3.0e-4
max_steps: 30.0e4
memory_size: 256
normalize: false
num_epoch: 3
num_layers: 2
time_horizon: 64
sequence_length: 64
summary_freq: 1000
use_recurrent: false
use_curiosity: false
curiosity_strength: 0.01
curiosity_enc_size: 128

たぶん、このパラメータの詳細をしっかりと勉強する必要があるとおもいますが、今回は省略します。

マニュアルは上記になります。

結果が下記になります。ずいぶん上達しました。しかしながらまだ改善の余地がありそうです。

改善点は2点。1点目はゆっくり動くこと。2点目は落ちないこと。次にこれを改善します。

報酬を見直し

人間と同じようにAIの脳も成功体験を得ることにより成長します。報酬は SetReward(1.0f); 値は-1~+1のFlort浮動小数点型になります。
チュートリアルでは下記のようになっています。

// Reached target
        if (distanceToTarget < 1.42f)
        {
            SetReward(1.0f);
            Done();

        }
        // Fell off platform
        if (this.transform.position.y < 0)
        {
            Done();
        }

学習時間を増やした結果、ターゲットに向かってとろとろ動きます。これを見直しするために、時間がかかるとペナルティを与えます。
SetReward(-0.0005f); と記述しました。1SETP単位に必ずペナルティを受けるようになります。なので、ペナルティが少なくなるように素早く動くはずです。
値は、何回か動作させて学習効率を見ながら決めました。小さすぎると学習に時間が掛かります。大きすぎるとTargetにHITすることの成功報酬が見えなくなります。1000Step単位の報酬を見て、-1~+1の間になるように調整しました。
次にFloorからの落下ですが、落下した場合ペナルティを与えます。-1を与えました。
上記以外にも思考錯誤をしています。ターゲットに接近した場合に報酬を少し与えるようにしましたが、ターゲットに少しずつ接近すると報酬が大きくなるため、安定したAIにはなりませんでした。残念ながら不採用となりました。

SetReward(-0.0005f);
        // Reached target
        if (distanceToTarget < 1.42f)
        {
            SetReward(1.0f);
            Done();

        }
        // Fell off platform
        if (this.transform.position.y < 0)
        {
          SetReward(-1.0f);
    	  Done();
        }

結果


格段によくなりました。まだまだ改善する余地があると思いますが、そのためにはボールの操作性の向上や与える情報を増やしてやることになるため、今回のチュートリアルはここまでにします。

まとめ

今回、UnityとML-AgentsとTensorFlowを使って、機械学習、ディープラーニングと学んでみました。確かにあらゆる分野で利用できる可能性をこれだけのことで感じました。Unityから、TensorFlowを利用できるため映像処理などはPythonで考えるよりずいぶんと容易にできると思います。
もっと違うAIを作ってみたくなりました。次は、何をやろうかなー