sykwer’s blog

進捗どうですか

深層強化学習アルゴリズムDDPGをしっかり理解する(3)

 DDPGは、行動空間が連続である制御タスクを学習させる際に、選択肢に挙がる深層強化学習アルゴリズムの一つです.

 

アルゴリズムの幹となっているDeterministicPolicyGradientTheoremをしっかり理解するには、関連する論文を順に読んでいかなくてはならず、理解しにくいアルゴリズムだと思います.

 

web上にも、しっかり理解できるリソースが少なかったので、論文などにあたって記事にしてみました.

 

DeterministicPolicyGradientTheorem自体の解説は、以下の記事に書いてあるので、ちゃんと理解したい人は、下の記事から読んでみてください.

 

sykwer.hatenablog.jp

 

 

1) DPG Theoremのおさらい

前回の記事で解説したDPG-Theoremの導出済みのやつだけ確認しておきます.

 

{\displaystyle \nabla_{\theta} J(\mu^{\theta}) }

{\displaystyle = \mathbf{E}_{s \sim \rho^{\mu}} [ \nabla_{\theta} Q^{\mu}(s, \mu_{\theta}(s)) ] }

{\displaystyle = \mathbf{E}_{s \sim \rho^{\mu}} [ \nabla_{\theta} \mu_{\theta}(s) \nabla_a Q^{\mu}(s, a) |_{a = \mu_{\theta}(s)} ] }

 

これは、期待報酬和を最大化していくには、方策parameterの微小変化に対する、行動価値関数Qの勾配方向にparameterを更新すればよいことを示しています.

 

このアルゴリズムにおいては、方策関数と行動価値関数の2つを関数近似すればいいことが、上の式から分かります.

 

この2つの関数それぞれをDNNで表現した手法がDDPG(Deep Deterministic Policy Gradient)です.

 

2) DDPGのアルゴリズム

DDPGのアルゴリズムの全体像は以下のとおりです.

 

f:id:sykwer:20180411115033p:plain

https://arxiv.org/pdf/1509.02971.pdf

 

 

 着目すべき点は

  • (DQNの論文での手法と同様に) ReplayBufferという、直近の軌道(s_t, a_t, r_t s_t+1)を多数保持しておき、そのリストの中からランダムにミニバッチをつくり、1stepの学習に利用している点. サンプル同士がi.i.d.であるという, 機械学習における前提条件を満たすために必要な手法.
  • (DQNの論文での手法と同様に)  Actorネットワークと, Criticネットワークそれぞれに対して, 学習ネットワークとは別に, targetネットワークを用意します. これは, Criticネットワークの教師データを算出するときに使う学習targetを安定させて, 学習を安定させることを目的としています.
  • Criticネットワークは普通の教師あり学習で更新していき、ActorネットワークはDDPG-Theoremに基づき更新していきます.
  • 学習中のエージェントのとるactionは, Actor学習ネットワークの出力にノイズを加えたものとなります. 学習するpolicyそのものと, 学習中のpolicy(=behavior policy)が異なるので, off-policyな強化学習に分類されます.

 

実際に動くコードで見ないと理解しにくいと思うので, 次の章で実装をします.

 

3) 実装

 RLライブラリにはTensowflow, モデルの実験環境にはaigymを用いて実装をしていきます. 

github.com

 

mainのコードを追うだけでも雰囲気がつかめるので, この記事にはmain.pyと, 特筆すべき部分のコードのみ載せておきます.

main.pyは以下のとおりです. 前章のアルゴリズムと比較するといいと思います. (間違いがあったらご指摘お願いします!)

 

このrepositoryで特に注意すべきは, DDPG-Theoremを使っている部分です. 数式で理解しにくい定理なので, コードで理解するのがいいと思います.

 

 4) 参考文献