強化學習 之 DDPG

2021-09-25 16:46:39 字數 3340 閱讀 8438

1、【強化學習】ddpg(deep deterministic policy gradient)演算法詳解

2、deep reinforcement learning - 1. ddpg原理和演算法(pg、dpg、ddpg描述)

3、深度強化學習(綱要、概括總結)

deep deterministic policy gradient (ddpg) 是google deepmind 提出的一種使用 actor critic 結構,但是輸出的不是行為的概率,而是具體的行為,用於連續動作的**。

ddpg 結合了之前獲得成功的 dqn 結構,提高了actor critic的穩定性和收斂性。

ddpg和actor-critic 形式差不多,也需要有基於 策略 policy 的神經網路 和基於 價值 value 的神經網路。但是為了體現 dqn 的思想,每種神經網路我們都需要再細分為兩個。

policy gradient 這邊有估計網路和現實網路。估計網路(eval_net)用來輸出實時的動作,供 actor 在現實中實行.;而現實網路(target_net)則是用來更新價值網路系統的。

價值系統這邊也有現實網路和估計網路。他們都在輸出這個狀態的價值,而輸入端卻有不同。狀態現實網路會拿著 從動作現實網路來的動作 加上 狀態的觀測值 加以分析;而狀態估計網路則是拿著 當時 actor 施加的動作 當做輸入。

在實際運用中,ddpg 的這種做法的確帶來了更有效的學習過程。

actor 引數的更新

關於 actor 部分,他的引數更新同樣會涉及到 critic,如上式所示。

前半部分 grad[q] 是從 critic 來的,這是在說:這次 actor 的動作要怎麼移動,才能獲得更大的 q

而後半部分 grad[u] 是從 actor 來的,這是在說:actor 要怎麼樣修改自身引數,使得 actor 更有可能做這個動作。

所以兩者合起來就表示:actor 要朝著更有可能獲取大 q 的方向修改動作引數了。

critic 引數的更新

critic 的更新借鑑了 dqn 和 double q learning 的方式,有兩個計算 q 的神經網路。q_target 中依據下一狀態,用 actor 來選擇動作,而這時的 actor 也是乙個 actor_target (有著 actor 很久之前的引數)。

使用這種方法獲得的 q_target 能像 dqn 那樣切斷相關性,提高收斂性。

critic 和 actor 分別建立兩個不同的網路 target_net(真實)、eval_net(**)

actor 部分

actor 更新:

with tf.variable_scope('policy_grads'):

# 這是在計算 (dq/da) * (da/dparams)

self.policy_grads = tf.gradients(

ys=self.a, xs=self.e_params, # 計算 ys 對於 xs 的梯度

grad_ys=a_grads # 這是從 critic 來的 dq/da

)with tf.variable_scope('a_train'):

# 負的學習率為了使我們計算的梯度往上公升, 和 policy gradient 中的方式乙個性質

opt = tf.train.adamoptimizer(-self.lr)

# 對 eval_net 的引數更新

其中,a_grad 由是 critic 生成並傳送給 actor,在 critic 中如下計算 a_grad:

with tf.variable_scope('a_grad'):

self.a_grads = tf.gradients(self.q, a)[0] # dq/da

此處的 a 是來自 actor 根據 s 計算而來的:「self.a = self._build_net(s, scope=『eval_net』, trainable=true)」。

critic 部分

critic 更新:

# 計算 target q

with tf.variable_scope('target_q'):

self.target_q = r + self.gamma * self.q_ # self.q_ 根據 actor 的 target_net 來的

# 計算誤差並反向傳遞誤差

with tf.variable_scope('td_error'):

self.loss = tf.reduce_mean(tf.squared_difference(self.target_q, self.q)) # self.q 又基於 actor 的 target_net

with tf.variable_scope('c_train'):

self.train_op = tf.train.adamoptimizer(self.lr).minimize(self.loss)

**融合 actor 和 critic **

actor = actor(...)

# 將 actor 同它的 eval_net 和 target_net 產生的 a 和 a_ 傳給 critic

critic = critic(..., actor.a, actor.a_)

# 將 critic 產出的 dq/da 加入到 actor 的 graph 中去

actor.add_grad_to_graph(critic.a_grads)

強化學習的DDPG

鏈結 處理連續動作空間下,引數過多,運算過於複雜的問題。想象一下,乙個機械人每個時間步有7個動作,如腿 胳膊等各個關節。你可以調整的是每個部位對應電機的電壓。先簡單看作每個動作有3個動作狀態,那麼每個時間步就對應有37 2187 3 7 2187 37 218 7個動作空間。如果將k這個數字更細粒度...

強化學習之SAC和DDPG內容大彙總

最前沿 深度解讀soft actor critic 演算法 pytorch 彙總 ddpg ac sac ppo sac github中pytorch soft actor critic 閱讀及pytorch 實現 資訊熵 深度強化學習 ddpg演算法原理和實現 ddpg解決pendulum v0問...

強化學習 強化學習基礎

為了應對車載網路中通訊環境快速變化的難題,可以使用強化學習進行解決,這裡對強化學習的基礎進行整理。主要的應用場景為車載網路中資源分配問題。本文源自莫煩python 強化學習章節,有需要請查閱原文 20200413補充了一些內容,來自這篇部落格,是李巨集毅的深度強化學習的筆記。強化學習的主要構成有 a...