DDPG-強化學習算法

Background

DDPG是一種同時學習Q-函數和策略的算法。它使用off-policy的數據以及bellman方程去學習Q函數,然後用Q函數去學習策略。

這種方法與Q-learning聯繫密切,源於那麼一種思路:如果你知道最優的動作值函數Q(s,a)Q^*(s,a), 則當給定狀態,最優動作a(s)a^*(s)可以通過解決一下問題而找出:a(s)=argmaxaQ(s,a).a^*(s) = \arg \max_a Q^*(s,a).
DDPG將學習Q(s,a)Q^*(s,a)的近似與學習a(s)a^*(s)的近似進行交織,並且這樣做的方式特別適合於具有連續動作空間的環境。但是,DDPG特別適合具有連續動作空間的環境是什麼意思? 這關係到我們如何計算maxaQ(s,a)max_aQ^*(s,a)中的最大動作.

當離散動作數量有限時,最大值沒有問題,因爲我們可以分別計算每個動作的Q值並直接比較它們。 (這也立即爲我們提供了最大化Q值的操作。)但是,當操作空間是連續的時,我們無法詳盡地評估該空間,並且解決優化問題並不是容易的事情。 使用普通的優化算法會使計算maxaQ(s,a)max_aQ^*(s,a)成爲昂貴的子程序。 而且由於每次代理要在環境中執行操作時都需要運行它,因此這是不可接受的。

因爲動作空間是連續的,所以假設函數Q(s,a)Q^*(s,a)關於動作自變量是可微的。 這使我們能夠爲利用該事實的策略μ(s)\mu(s)設置有效的基於梯度的學習規則。 然後,不必每次都希望計算maxaQ(s,a)max_aQ(s,a)時運行昂貴的優化子過程,而是可以使用maxaQ(s,a)Q(s,μ(s))max_aQ(s,a)\approx Q(s,\mu(s))對其進行近似。 請參閱“關鍵方程式”部分的詳細信息。

Quick Facts

  • DDPG是一個off-policy算法
  • DDPG僅能用於連續動作空間的環境
  • DDPG可以視爲連續動作空間的Deep Q-learning
  • SpinningUP中的DDPG不支持並行運算

Key Equations

DDPG的Q-learning部分

首先,讓我們回顧一下描述最佳作用值函數的Bellman方程, Q(s,a):Q^*(s,a):Q(s,a)=EsP[r(s,a)+γmaxaQ(s,a)]Q^*(s,a) = \underset{s' \sim P}{{\mathrm E}}\left[r(s,a) + \gamma \max_{a'} Q^*(s', a')\right] 其中sPs'\sim P是簡稱,即下一個狀態ss'是從一個分佈爲P(s,a)P(\cdot|s,a)的環境中採樣的。

Bellman方程是學習Q(s,a)Q^*(s,a)的起點。假設近似器是一個神經網絡Qϕ(s,a)Q_\phi(s,a),參數爲ϕ,\phi,我們收集了一個轉移對(s,a,r,s,d)(s,a,r,s',d)集合D\mathcal D(q其中dd表示狀態ss'是否終結)。我們設置一個均方Bellman誤差(MSBE)函數,它告訴我們QϕQ_\phi滿足Bellman 方程的程度:L(ϕ,D)=E(s,a,r,s,d)D[(Qϕ(s,a)(r+γ(1d)maxaQϕ(s,a)))2]L(\phi, {\mathcal D}) = \underset{(s,a,r,s',d) \sim {\mathcal D}}{{\mathrm E}}\left[ \Bigg( Q_{\phi}(s,a) - \left(r + \gamma (1 - d) \max_{a'} Q_{\phi}(s',a') \right) \Bigg)^2 \right]這裏,在評估(1d)(1-d), 我們用了一個python慣例,True:1,False:0。當"d==True"表示當ss'是終結狀態的時候,Q函數應該顯示:代理不會得到額外獎勵在這個狀態之後。

Q-learning算法作爲函數近似,比如說DQN(及其變種)和DDPG,都極大基於最小化MSBE損失函數。這裏有兩個主要的技巧值得說明,以及一個詳細的DDPG細節。

  • 技巧1:回放緩存。所有蓄念一個深度神經網絡其近似Q(s,a)Q^*(s,a)的標準算法都能用經驗回放。這是一個先前經驗的集合D\mathcal D。 未來讓算法有穩定的表現,緩存應該足夠大以包括一大範圍的經驗,但是任何經驗都保留不一定總是好的。如果你只用經常出現的數據,你就會過擬合;如果你用太多經驗,你可能會降低訓練的速度。

我們已經提到DDPG是一種off-policy算法:這一點與突出顯示原因和方式一樣重要。 請注意,重播緩衝區應包含舊的體驗,即使它們是使用過時的策略獲得的也是如此。 爲什麼我們完全可以使用這些? 原因是Bellman方程式並不關心使用了哪個轉換元組,或如何選擇動作,或在給定的轉移後會發生什麼,因爲對於所有可能的轉換,最佳Q函數都應滿足Bellman方程式。 因此,當嘗試通過MSBE最小化擬合Q函數時,我們經歷的任何轉移對都是公平的遊戲。

  • 技巧2:目標網絡。 Q-learning算法使用目標網絡,式子r+γ(1d)maxaQϕ(s,a)r + \gamma (1 - d) \max_{a'} Q_{\phi}(s',a')叫做目標,英文當我們最小化MSBE損失的時候,我們嘗試去使Q-函數更像目標。問題在於,目標取決於我們嘗試訓練的相同參數:ϕ\phi。 這使得MSBE最小化不穩定。 解決方案是使用一組參數,這些參數接近ϕ\phi,但是具有時間延遲,也就是說,第二個網絡(稱爲目標網絡)之後於第一個網絡。 目標網絡的參數表示爲ϕtarg\phi_{\text{targ}}

在基於DQN的算法中,每隔一定數量的步驟,目標網絡就從主網絡複製一次。 在DDPG風格的算法中,通過每次主網絡通過polyak平均更新,就更新一次目標網絡:ϕtargρϕtarg+(1ρ)ϕ,\phi_{\text{targ}} \leftarrow \rho \phi_{\text{targ}} + (1 - \rho) \phi,其中ρ\rho是一個在0,1之間的參數(通常接近1)。這個超參數在spoinningup叫做polyakpolyak

DDPG細節:計算目標動作的最大動作。在連續動作空間中計算這個是個難點。DDPG 解決這個問題通過用目標策略網絡計算一個動作,這個動作近似地最大化Qϕtarg.Q_{\phi_{targ}}.目標策略網絡正如目標Q-function:在訓練過程中通過polyakpolyak平均化策略參數。

綜上,DDPG的Q-learning通過隨機梯度下降最小化下面的MSBE損失:L(ϕ,D)=E(s,a,r,s,d)D[(Qϕ(s,a)(r+γ(1d)Qϕtarg(s,μθtarg(s))))2],L(\phi, {\mathcal D}) = \underset{(s,a,r,s',d) \sim {\mathcal D}}{{\mathrm E}}\left[ \Bigg( Q_{\phi}(s,a) - \left(r + \gamma (1 - d) Q_{\phi_{\text{targ}}}(s', \mu_{\theta_{\text{targ}}}(s')) \right) \Bigg)^2 \right],其中μθtarg\mu_{\theta_{targ}}是目標策略。

DDPG的策略學習部分

DDPG的策略學習是相對簡單的。我們想去學習一個確定性網絡μθ(s)\mu_\theta(s),它給出了最大化Qϕ(s,a)Q_\phi(s,a)的動作。因爲動作空間是連續的,我們假設Q-function是關於動作可導的,我們用梯度上升(只針對策略參數)去解決:maxθEsD[Qϕ(s,μθ(s))].\max_{\theta} \underset{s \sim {\mathcal D}}{{\mathrm E}}\left[ Q_{\phi}(s, \mu_{\theta}(s)) \right].注意到Q-function參數在這裏被視爲常量。

Exploration vs. Exploitation(探索vs.利用)

DDPG訓練一個確定性策略以一個off-policy的方式。因爲策略是確定的,如果代理要on-policy探索,一開始它可能不會嘗試足夠多分支的動作去找到有用的學習信號。爲了讓DDPG策略探索得更好,我們加入了噪聲給它的那些動作在訓練的時候。原始DDPG的作者建議時間相關的 OU 噪聲,但是最近更多的結果表明,不相干的非0高斯噪聲也能很好起作用。因爲這個形式更簡單,更被偏好。爲了更好地得到高質量的訓練數據,你可以在訓練的時候減少噪聲的幅度。(我們在執行過程中不執行此操作,並且在整個過程中保持噪聲等級固定)

在測試時,要查看策略如何充分利用它所學到的知識,我們不會在操作中增加噪音。

我們的DDPG實施在培訓開始時使用了一個技巧來改進探索。 對於開始時有固定數量的步驟(使用start_steps關鍵字參數設置),代理將從有效動作的均勻隨機分佈中採樣動作。 之後,它將返回到正常的DDPG探索。

在這裏插入圖片描述

Documentation

spinup.ddpg(env_fn, actor_critic=, ac_kwargs={}, seed=0, steps_per_epoch=5000, epochs=100, replay_size=1000000, gamma=0.99, polyak=0.995, pi_lr=0.001, q_lr=0.001, batch_size=100, start_steps=10000, act_noise=0.1, max_ep_len=1000, logger_kwargs={}, save_freq=1)
https://spinningup.openai.com/en/latest/_modules/spinup/algos/ddpg/ddpg.html#ddpg

Paramemeters:

  • env_fn – A function which creates a copy of the environment. The environment must satisfy the OpenAI Gym API.
  • actor_critic - A function which takes in placeholder symbols for state and action, and returns the main outputs from the agent’s computation
  • ac_kwargs (dict) – Any kwargs appropriate for the actor_critic function you provided to DDPG.
  • seed (int) – Seed for random number generators.
  • steps_per_epoch (int) – Number of steps of interaction (state-action pairs) for the agent and the environment in each epoch.
  • epochs (int) – Number of epochs to run and train agent.
  • replay_size (int) – Maximum length of replay buffer.
  • gamma (float) – Discount factor. (Always between 0 and 1.)
  • polyak (float) – Interpolation factor in polyak averaging for target networks. Target networks are updated towards main networks according to:θtargρθtarg+(1ρ)θ\theta_{targ}\leftarrow\rho\theta_{targ}+(1-\rho)\thetawhere ρ\rho is polyak. (Always between 0 and 1, usually close to 1.)
  • pi_lr (float) – Learning rate for policy.
  • q_lr (float) – Learning rate for Q-networks.
  • batch_size (int) – Minibatch size for SGD.
  • start_steps (int) – Number of steps for uniform-random action selection, before running real policy. Helps exploration.
  • act_noise (float) – Stddev for Gaussian exploration noise added to policy at training time. (At test time, no noise is added.)
  • max_ep_len (int) – Maximum length of trajectory / episode / rollout.
  • logger_kwargs (dict) – Keyword args for EpochLogger.
  • save_freq (int) – How often (in terms of gap between epochs) to save the current policy and value function.

References

Deterministic Policy Gradient Algorithms, Silver et al. 2014
Continuous Control With Deep Reinforcement Learning, Lillicrap et al. 2016

Why These Papers?

Silver 2014 is included because it establishes the theory underlying deterministic policy gradients (DPG). Lillicrap 2016 is included because it adapts the theoretically-grounded DPG algorithm to the deep RL setting, giving DDPG.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章