DDPG 原理說明

DDPG也是延續著之前的觀念而來,是融合了Actor-Critic與DQN的experience replay而演化而來的演算法,完整架構圖如下所示,一樣是有兩個網路,Critic計算動作的好壞,Actor根據Critic網路調整參數獲得更好的策略

Critic network

Critic網路更新方式與之前介紹的Actor-Critic網路更新方式一樣,差別在於此處引用了兩個網路(target與now),這個概念源自於Double DQN,在此篇論文中發現一值更新同一個網路容易造成不穩定的現象,因此提出再創造一個網路(target)然後賦予相同的參數值,然後更新參數的時候更新原本的網路即可(now),等訓練一段時間後再把現now網路的參數再賦予給target網路,這麼做可以使得訓練更穩定,因此選取$q_{t+1}$的値時是選擇選取target網路所給予的q值



```python=
self.target_q = R + self.gamma * self.q_
self.loss = tf.reduce_mean(tf.squared_difference(self.target_q, self.q))
self.train_op = tf.train.AdamOptimizer(self.lr).minimize(self.loss)
``` 

Actor network

Actor 更新的概念很新穎,是採取連續微分的方式計算出action應該變動的方向,設計此網路時比較特殊,首先必須終止梯度計算倒傳遞到Actor網路,再來就是將Critic網路dq/da的梯度計算出來,然後再算出Actor網路da/dparams的微分,之後將兩者微分相乘並套用到Actor網路的參數上即可完成更新網路的動作了

```python=
#程式碼取自莫凡python
self.a = tf.stop_gradient(a)
# provided by Critic network
a_grads = tf.gradients(self.q, a)[0]   # tensor of gradients of each sample (None, a_dim)
# Actor network:caculate policy gradients
policy_grads = tf.gradients(ys=self.a, xs=e_params, grad_ys=a_grads)
train_op = opt.apply_gradients(zip(policy_grads, e_params))
```

Experirence replay

這概念也是源自於DQN網路,在訓練的過程中會持續的收集經驗,並且會設定一個buffer size,這個值代表要收集多少筆經驗,每當經驗庫滿了之後,每多一個經驗則最先收集到的經驗就會被丟棄,因此可以讓經驗庫一值保持滿的狀態並且避免無限制的收集資料造成電腦記憶體塞滿。

學習的時候則是從這個經驗庫中隨機抽取成群(batch)經驗來訓練DDPG網路,周而復始的不斷進行學習最終網路就能達到收斂狀態

因此完整的DDPG 虛擬碼如下(取自論文),取代target網路的時候論文不是採取複製全部的權重而是使用逐漸的取代並且設置一個參數來決定取代的比重

參考資料

1.https://www.youtube.com/watch?v=E9vH6WD_eSE

2.https://www.youtube.com/watch?v=i6Mi2_QM3rA

3.https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow/blob/master/contents/9_Deep_Deterministic_Policy_Gradient_DDPG/DDPG.py

4.強化學習調參方法

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments