深度強化學習第十二章——Deep Deterministic Policy Gradient(DDPG)

Hogwarts掃地老太太發表於2020-11-08

從名字上看DDPG是由D(Deep)+D(Deterministic)+PG(Policy Gradient)組成

1.Deterministic Policy Gradient(DPG)

首先,我們先來了解下DPG是什麼

確定性策略梯度(Deterministic Policy Gradient,簡稱DPG)。

1.2 為什麼要DPG

不是有策略梯度(PG)了嗎,為什麼還有有DPG嘞

對於某一些動作集合來說,它可能是連續值,或者非常高維的離散值,這樣動作的空間維度極大。如果我們使用隨機策略,即像DQN一樣研究它所有的可能動作的概率,並計算各個可能的動作的價值的話,那需要的採集大量樣本。

即通過PG學習得到了隨機策略之後,在每一步行為時,我們還需要對得到的最優策略概率分佈進行取樣,才能獲得action的具體值。

而action通常是高維的向量,比如25維、50維。在高維的action空間的頻繁取樣,無疑是很耗費計算能力。

而且計算梯度需要通過蒙特卡洛取樣來進行估算,也需要在高維的action空間進行取樣,耗費+1。

簡單來說,就是像暴力求解一樣,太燒計算機了,得換種解法

所以在2014年,由Deepmind的D.Silver等提出 Deterministic policy gradient algorithms,即確定性策略演算法。
一定的策略 μ \mu μ,對應一定的確定性動作的策略網路的引數 θ μ \theta^{\mu } θμ,在同一個狀態 s s s處,,動作 a t a_t at是唯一確定的,

a t = μ ( s ∣ θ μ ) a_t=\mu(s|\theta^{\mu}) at=μ(sθμ)

在這之前,業界普遍認為,環境模型無關(model-free)的確定性策略是不存在的,而D.Silver等通過嚴密的數學推導,證明了DPG的存在。

為了更好地理解DPG,我們先回顧一下策略梯度(PG),基於Q值的梯度計算公式:

▽ θ J ( π θ ) = E s ∼ p π , a ∼ π θ [ ▽ θ l o g π θ ( a ∣ s ) Q π ( s , a ) ] \bigtriangledown _{\theta }J(\pi_{\theta})=E_{s\sim p^{\pi},a\sim \pi_{\theta}}[\bigtriangledown _{\theta }log\pi_{\theta}(a|s)Q^{\pi}(s,a)] θJ(πθ)=Espπ,aπθ[θlogπθ(as)Qπ(s,a)]

隨機性策略梯度需要在整個動作空間 π θ \pi_{\theta}% πθ取樣,而DPG梯度公式如下:
▽ θ J ( μ θ ) = E s ∼ p μ [ ▽ θ μ θ ( s ) ▽ a Q μ ( s , a ) ∣ a = μ θ ] \bigtriangledown _{\theta }J(\mu_{\theta})=E_{s\sim p^{\mu}}[\bigtriangledown _{\theta }\mu_{\theta}(s)\bigtriangledown _{a}Q^{\mu}(s,a)|_{a=\mu_{\theta}}] θJ(μθ)=Espμ[θμθ(s)aQμ(s,a)a=μθ]

跟隨機策略梯度的式子相比,對動作的積分變為回報Q函式對動作的導數。

2. Deep Deterministic Policy Gradient(DDPG)

Deepmind在2016年提出DDPG,將深度學習神經網路融合進DPG的策略學習方法。

DPG對比DPG,核心改進是:採用卷積神經網路作為策略網路和Q網路,且DDPG有四個網路。

DDPG採用確定性策略 μ \mu μ來選取動作 a t = μ ( s ∣ θ μ ) a_{t}=\mu (s|\theta^{\mu }) at=μ(sθμ),其中 θ μ \theta^{\mu } θμ產生確定性動作的策略網路的引數。

2.1 AC演算法

Actor-Critic(AC)演算法分為Actor和Critic兩部分。
Actor的前身是policy gradient,它可以輕鬆地在連續動作空間內選擇合適的動作,value-based的Q-learning只能解決離散動作空間的問題。
但是又因為Actor是基於一個episode的return來進行更新的,所以學習效率比較慢。這時候我們發現使用一個value-based的演算法作為Critic就可以使用TD方法實現單步更新,這其實可以看做是拿偏差換方差。
這樣兩種演算法相互補充就形成了我們的Actor-Critic。

Actor 基於概率分佈選擇行為, Critic 基於 Actor 生成的行為評判得分, Actor 再根據 Critic 的評分修改選行為的概率。

2.2 DDPG的四個網路

根據AC演算法,聯想到使用策略網路充當Actor,使用價值網路充當Critic,再根據上述DPG演算法,Actor部分不再使用自己的Loss函式和Reward進行更新,而是使用Critic部分Q值對action的梯度來對actor進行更新。

事實上如果我們只用當前價值網路評估Q值,會產生過估計。
用DQN的改進方法中的Double DQN(DDQN):
先在當前Q網路中先找出最大Q值對應的動作,在目標網路裡面去計算目標Q值,我們能不能採用類似的方法去估計Q值?回到DDPG,critic部分增加一個目標網路與DDQN的目標Q網路功能類似,但是還需要選取動作用來估計目標Q值,由於我們有自己的Actor策略網路,用類似的做法,增加一個Actor目標網路,對經驗回放池中取樣的下一狀態使用貪婪法選擇動作。

於是我們得到了DDPG的四個網路:

  1. Actor當前網路:負責策略網路引數\theta的迭代更新,負責根據當前狀態S選擇當前動作A,用於和環境互動生成S’, R
  2. Actor目標網路:負責根據經驗回放池中取樣的下一狀態 S’ 選擇最優下一動作 A’,網路引數\theta^{’}定期從\theta複製
  3. Critic當前網路:根據目標Q值對網路引數 w 進行迭代更新,負責計算當前Q值,其中目標Q值
    y j = { R t e m i n a l i s t r u e R + γ Q ′ ( S ′ , A ′ , w ′ ) t e m i n a l i s f a l s e y_{j}=\left\{\begin{matrix} R & teminal &is& true\\ R+\gamma Q^{'}(S^{'},A^{'},w^{'}) & teminal &is&false \end{matrix}\right. yj={RR+γQ(S,A,w)teminalteminalisistruefalse
  4. Critic目標網路:負責計算目標Q值中的Q{’}(S{’},A{’},w{’}),網路引數 w’ 定期從 w 複製

3.DDPG 與 DPG

DDPG從當前網路到目標網路的複製和DQN不一樣。回想DQN,我們是直接把將當前Q網路的引數複製到目標Q網路, DDPG這裡沒有使用這種硬更新,而是使用了軟更新,即每次引數只更新一點點

θ ′ ← τ θ + ( 1 − τ ) θ ′ \theta^{'}\leftarrow \tau \theta+(1-\tau )\theta^{'} θτθ+(1τ)θ
w ′ ← τ w + ( 1 − τ ) w ′ w^{'}\leftarrow \tau w+(1-\tau )w^{'} wτw+(1τ)w

其中 τ \tau τ是更新系數,同時,為了學習過程可以增加一些隨機性,探索潛在的更優策略,通過Ornstein-Uhlenbeck process(OU過程)為action新增噪聲,最終輸出的動作A為

A = π θ ( S ) + O U n o i s e A=\pi_{\theta}(S)+OU noise A=πθ(S)+OUnoise

最後對於 Actor當前網路,這裡由於是確定性策略,原論文定義的損失梯度為

▽ J ( θ ) = 1 m ∑ j = 1 m ( ▽ a Q ( s i , a i , w ) ∣ s = s i , a = π θ ( s ) ▽ θ π θ ( s ) ∣ s = s i ) \bigtriangledown J(\theta )=\frac{1}{m} \sum _{j=1}^{m}(\bigtriangledown _{a}Q(s_{i},a_{i},w)|_{s=s_{i},a=\pi_{\theta}(s)}\bigtriangledown_{\theta }\pi_{\theta}(s)|_{s=s_{i}}) J(θ)=m1j=1m(aQ(si,ai,w)s=si,a=πθ(s)θπθ(s)s=si)

假如對同一個狀態,我們輸出了兩個不同的動作 a 1 和 a 2 a_{1}和a_{2} a1a2,從Critic當前網路得到了兩個反饋的Q值,分別是 Q 1 , Q 2 Q_{1},Q_{2} Q1,Q2,假設 Q 1 > Q 2 Q_{1}>Q_{2} Q1>Q2,即採取動作 a 1 a_{1} a1可以得到更多的獎勵,那麼策略梯度的思想是什麼呢,就是增加a_{1}的概率,降低a_{2}的概率,也就是說,Actor想要儘可能的得到更大的Q值。所以我們的Actor的損失可以簡單的理解為得到的反饋Q值越大損失越小,得到的反饋Q值越小損失越大,因此只要對狀態估計網路返回的Q值取個負號即可,即:

J ( θ ) = − 1 m ∑ j = 1 m Q ( s i , a i , w ) J(\theta )=-\frac{1}{m} \sum _{j=1}^{m}Q(s_{i},a_{i},w) J(θ)=m1j=1mQ(si,ai,w)

DDPG可以看做是DDQN、Actor-Critic和DPG三種方法的組合演算法.

參考:謝宜廷的部落格

相關文章