DDPGについて勉強したのでメモしておきます。
概要(箇条書きで)
- DDPGはDeep Deterministic Policy Gradient の略
- Actor-Critic手法の1つ
- Deep Q Network(DQN)とは異なり行動が連続値の場合にもつかえる
- DPG,DQNをベースとした手法
DDPGの構成
Actor-Critc手法なので、actor,criticからなります。
また、Target networkもあるのでもネットワークは4つなります。
ここでは、以下のように各ネットワークのパラメータを定義します。
\(\theta ^Q\): クリティックのパラメータ
\(\theta ^{\mu}\): アクターのパラメータ
\(\theta ^{\hat{Q}}\): ターゲットクリティックのパラメータ
\(\theta ^{\hat{\mu}}\): ターゲットアクターのパラメータ
行動選択
行動選択ですが、Target Actorに状態を入力します。
Target Actorに状態\(s\)を入力し、行動\(a\)(連続値)を出力します。
さらに、探索を行うためにオルンシュタイン=ウーレンベック過程に従ったノイズ\(\mathcal{N} \)を加えた値をアクションとします。
数式にすると以下のようになります。
\begin{aligned}a_t = \mu(s_{t-1} | \theta ^{\hat{\mu}}) + \mathcal{N} \end{aligned}
学習方法
DQNと同様にExperience Replyにより、経験をサンプリングし学習していきます。
以下では、サンプリングした経験の集合を\(B\)とします。
Criticの学習
Criticではサンプリングした経験(\(<s_i , a_i , r_i,s_{i+1}> \ \in B\))を使って、以下の誤差を最小化していきます。
\begin{aligned}L = \frac{1}{|B|} \sum_{i \in B} (r_i + \gamma Q(s_{i+1},\underbrace{\mu(s_{i+1} | \theta ^{\hat{\mu}})}_{actor’s \ \ output} |\theta ^{\hat{Q}}) – Q(s_i ,a_i | \theta ^Q))^2\end{aligned}
遷移先の状態でのアクターから出力された行動の行動価値を使います。
この誤差のイメージとしてはこんな感じになります。(このイメージだとわかりにくくなった・・・)
Actorの学習
アクターのほうですが、以下のような勾配の最大化を行います。
\begin{aligned} \nabla _{\theta ^{\mu}} \mu = \nabla _{\theta ^{Q}} Q(s,\mu (s|\theta ^{\mu})|\theta ^{Q})\end{aligned}
これは連鎖律を使えば、バッチ内においてのDeterministic Policy Gradientを計算することと同じであることがわかります。
Targetの更新
Actor, Critic共にソフトアップデートにより更新します
実装
githubにあげました。
https://github.com/tocom242242/deep-RL-tf2/blob/master/agents/ddpg_agent.py
参考文献
- https://towardsdatascience.com/deep-deterministic-policy-gradients-explained-2d94655a9b7b
- https://arxiv.org/pdf/1509.02971.pdf
- http://proceedings.mlr.press/v32/silver14.pdf