強化學習筆記之【DDPG演算法】
- 強化學習筆記之【DDPG演算法】
- 前言:
- 原論文虛擬碼
- DDPG 中的四個網路
- 程式碼核心更新公式
前言:
本文為強化學習筆記第二篇,第一篇講的是Q-learning和DQN
就是因為DDPG引入了Actor-Critic模型,所以比DQN多了兩個網路,網路名字功能變了一下,其它的就是軟更新之類的小改動而已
本文初編輯於2024.10.6
CSDN主頁:https://blog.csdn.net/rvdgdsva
部落格園主頁:https://www.cnblogs.com/hassle
部落格園本文連結:
真 · 圖文無關
原論文虛擬碼
- 上述程式碼為DDPG原論文中的虛擬碼
需要先看:
Deep Reinforcement Learning (DRL) 演算法在 PyTorch 中的實現與應用【DDPG部分】【沒有在選擇一個新的動作的時候,給policy函式返回的動作值增加一個噪音】【critic網路與下面不同】
深度強化學習筆記——DDPG原理及實現(pytorch)【DDPG虛擬碼部分】【這個跟上面的一樣沒有加噪音】【critic網路與上面不同】
【深度強化學習】(4) Actor-Critic 模型解析,附Pytorch完整程式碼【選看】【Actor-Critic理論部分】
如果需要給policy函式返回的動作值增加一個噪音,實現如下
def select_action(self, state, noise_std=0.1):
state = torch.FloatTensor(state.reshape(1, -1))
action = self.actor(state).cpu().data.numpy().flatten()
# 新增噪音,上面兩個文件的程式碼都沒有這個步驟
noise = np.random.normal(0, noise_std, size=action.shape)
action = action + noise
return action
DDPG 中的四個網路
注意!!!這個圖只展示了Critic網路的更新,沒有展示Actor網路的更新
- Actor 網路(策略網路):
- 作用:決定給定狀態 ss 時,應該採取的動作 a=π(s)a=π(s),目標是找到最大化未來回報的策略。
- 更新:基於 Critic 網路提供的 Q 值更新,以最大化 Critic 估計的 Q 值。
- Target Actor 網路(目標策略網路):
- 作用:為 Critic 網路提供更新目標,目的是讓目標 Q 值的更新更為穩定。
- 更新:使用軟更新,緩慢向 Actor 網路靠近。
- Critic 網路(Q 網路):
- 作用:估計當前狀態 ss 和動作 aa 的 Q 值,即 Q(s,a)Q(s,a),為 Actor 提供最佳化目標。
- 更新:透過最小化與目標 Q 值的均方誤差進行更新。
- Target Critic 網路(目標 Q 網路):
- 作用:生成 Q 值更新的目標,使得 Q 值更新更為穩定,減少振盪。
- 更新:使用軟更新,緩慢向 Critic 網路靠近。
大白話解釋:
1、DDPG例項化為actor,輸入state輸出action
2、DDPG例項化為actor_target
3、DDPG例項化為critic_target,輸入next_state和actor_target(next_state)經DQN計算輸出target_Q
4、DDPG例項化為critic,輸入state和action輸出current_Q,輸入state和actor(state)【這個引數需要注意,不是action】經負均值計算輸出actor_loss
5、current_Q 和target_Q進行critic的引數更新
6、actor_loss進行actor的引數更新
action實際上是batch_action,state實際上是batch_state,而batch_action != actor(batch_state)
因為actor是頻繁更新的,而取樣是隨機取樣,不是所有batch_action都能隨著actor的更新而同步更新
Critic網路的更新是一發而動全身的,相比於Actor網路的更新要複雜要重要許多
程式碼核心更新公式
- 上述程式碼與虛擬碼對應,意為計算預測Q值
- 上述程式碼與虛擬碼對應,意為使用均方誤差損失函式更新Critic
- 上述程式碼與虛擬碼對應,意為使用確定性策略梯度更新Actor
- 上述程式碼與虛擬碼對應,意為使用策略梯度更新目標網路
Actor和Critic的角色:
- Actor:負責選擇動作。它根據當前的狀態輸出一個確定性動作。
- Critic:評估Actor的動作。它透過計算狀態-動作值函式(Q值)來評估給定狀態和動作的價值。
更新邏輯:
- Critic的更新:
- 使用經驗回放緩衝區(Experience Replay)從中取樣一批經驗(狀態、動作、獎勵、下一個狀態)。
- 計算目標Q值:使用目標網路(critic_target)來估計下一個狀態的Q值(target_Q),並結合當前的獎勵。
- 使用均方誤差損失函式(MSELoss)來更新Critic的引數,使得預測的Q值(target_Q)與當前Q值(current_Q)儘量接近。
- Actor的更新:
- 根據當前的狀態(state)從Critic得到Q值的梯度(即對Q值相對於動作的偏導數)。
- 使用確定性策略梯度(DPG)的方法來更新Actor的引數,目標是最大化Critic評估的Q值。
個人理解:
DQN演算法是將q_network中的引數每n輪一次複製到target_network裡面
DDPG使用係數\(\tau\)來更新引數,將學習到的引數更加soft地複製給目標網路
DDPG採用了actor-critic網路,所以比DQN多了兩個網路