DDPG-强化学习算法
文章目錄
- Background
- Quick Facts
- Key Equations
- DDPG的Q-learning部分
- DDPG的策略學(xué)習(xí)部分
- Exploration vs. Exploitation(探索vs.利用)
- Documentation
- References
- Why These Papers?
Background
DDPG是一種同時(shí)學(xué)習(xí)Q-函數(shù)和策略的算法。它使用off-policy的數(shù)據(jù)以及bellman方程去學(xué)習(xí)Q函數(shù),然后用Q函數(shù)去學(xué)習(xí)策略。
這種方法與Q-learning聯(lián)系密切,源于那么一種思路:如果你知道最優(yōu)的動(dòng)作值函數(shù)Q?(s,a)Q^*(s,a)Q?(s,a), 則當(dāng)給定狀態(tài),最優(yōu)動(dòng)作a?(s)a^*(s)a?(s)可以通過(guò)解決一下問(wèn)題而找出:a?(s)=arg?max?aQ?(s,a).a^*(s) = \arg \max_a Q^*(s,a). a?(s)=argamax?Q?(s,a).
DDPG將學(xué)習(xí)Q?(s,a)Q^*(s,a)Q?(s,a)的近似與學(xué)習(xí)a?(s)a^*(s)a?(s)的近似進(jìn)行交織,并且這樣做的方式特別適合于具有連續(xù)動(dòng)作空間的環(huán)境。但是,DDPG特別適合具有連續(xù)動(dòng)作空間的環(huán)境是什么意思? 這關(guān)系到我們?nèi)绾斡?jì)算maxaQ?(s,a)max_aQ^*(s,a)maxa?Q?(s,a)中的最大動(dòng)作.
當(dāng)離散動(dòng)作數(shù)量有限時(shí),最大值沒(méi)有問(wèn)題,因?yàn)槲覀兛梢苑謩e計(jì)算每個(gè)動(dòng)作的Q值并直接比較它們。 (這也立即為我們提供了最大化Q值的操作。)但是,當(dāng)操作空間是連續(xù)的時(shí),我們無(wú)法詳盡地評(píng)估該空間,并且解決優(yōu)化問(wèn)題并不是容易的事情。 使用普通的優(yōu)化算法會(huì)使計(jì)算maxaQ?(s,a)max_aQ^*(s,a)maxa?Q?(s,a)成為昂貴的子程序。 而且由于每次代理要在環(huán)境中執(zhí)行操作時(shí)都需要運(yùn)行它,因此這是不可接受的。
因?yàn)閯?dòng)作空間是連續(xù)的,所以假設(shè)函數(shù)Q?(s,a)Q^*(s,a)Q?(s,a)關(guān)于動(dòng)作自變量是可微的。 這使我們能夠?yàn)槔迷撌聦?shí)的策略μ(s)\mu(s)μ(s)設(shè)置有效的基于梯度的學(xué)習(xí)規(guī)則。 然后,不必每次都希望計(jì)算maxaQ(s,a)max_aQ(s,a)maxa?Q(s,a)時(shí)運(yùn)行昂貴的優(yōu)化子過(guò)程,而是可以使用maxaQ(s,a)≈Q(s,μ(s))max_aQ(s,a)\approx Q(s,\mu(s))maxa?Q(s,a)≈Q(s,μ(s))對(duì)其進(jìn)行近似。 請(qǐng)參閱“關(guān)鍵方程式”部分的詳細(xì)信息。
Quick Facts
- DDPG是一個(gè)off-policy算法
- DDPG僅能用于連續(xù)動(dòng)作空間的環(huán)境
- DDPG可以視為連續(xù)動(dòng)作空間的Deep Q-learning
- SpinningUP中的DDPG不支持并行運(yùn)算
Key Equations
DDPG的Q-learning部分
首先,讓我們回顧一下描述最佳作用值函數(shù)的Bellman方程, Q?(s,a):Q^*(s,a):Q?(s,a):Q?(s,a)=Es′~P[r(s,a)+γmax?a′Q?(s′,a′)]Q^*(s,a) = \underset{s' \sim P}{{\mathrm E}}\left[r(s,a) + \gamma \max_{a'} Q^*(s', a')\right] Q?(s,a)=s′~PE?[r(s,a)+γa′max?Q?(s′,a′)]其中s′~Ps'\sim Ps′~P是簡(jiǎn)稱(chēng),即下一個(gè)狀態(tài)s′s's′是從一個(gè)分布為P(?∣s,a)P(\cdot|s,a)P(?∣s,a)的環(huán)境中采樣的。
Bellman方程是學(xué)習(xí)Q?(s,a)Q^*(s,a)Q?(s,a)的起點(diǎn)。假設(shè)近似器是一個(gè)神經(jīng)網(wǎng)絡(luò)Q?(s,a)Q_\phi(s,a)Q??(s,a),參數(shù)為?,\phi,?,我們收集了一個(gè)轉(zhuǎn)移對(duì)(s,a,r,s′,d)(s,a,r,s',d)(s,a,r,s′,d)集合D\mathcal DD(q其中ddd表示狀態(tài)s′s's′是否終結(jié))。我們?cè)O(shè)置一個(gè)均方Bellman誤差(MSBE)函數(shù),它告訴我們Q?Q_\phiQ??滿足Bellman 方程的程度:L(?,D)=E(s,a,r,s′,d)~D[(Q?(s,a)?(r+γ(1?d)max?a′Q?(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]L(?,D)=(s,a,r,s′,d)~DE????(Q??(s,a)?(r+γ(1?d)a′max?Q??(s′,a′)))2???這里,在評(píng)估(1?d)(1-d)(1?d), 我們用了一個(gè)python慣例,True:1,False:0。當(dāng)"d==True"表示當(dāng)s′s's′是終結(jié)狀態(tài)的時(shí)候,Q函數(shù)應(yīng)該顯示:代理不會(huì)得到額外獎(jiǎng)勵(lì)在這個(gè)狀態(tài)之后。
Q-learning算法作為函數(shù)近似,比如說(shuō)DQN(及其變種)和DDPG,都極大基于最小化MSBE損失函數(shù)。這里有兩個(gè)主要的技巧值得說(shuō)明,以及一個(gè)詳細(xì)的DDPG細(xì)節(jié)。
- 技巧1:回放緩存。所有蓄念一個(gè)深度神經(jīng)網(wǎng)絡(luò)其近似Q?(s,a)Q^*(s,a)Q?(s,a)的標(biāo)準(zhǔn)算法都能用經(jīng)驗(yàn)回放。這是一個(gè)先前經(jīng)驗(yàn)的集合D\mathcal DD。 未來(lái)讓算法有穩(wěn)定的表現(xiàn),緩存應(yīng)該足夠大以包括一大范圍的經(jīng)驗(yàn),但是任何經(jīng)驗(yàn)都保留不一定總是好的。如果你只用經(jīng)常出現(xiàn)的數(shù)據(jù),你就會(huì)過(guò)擬合;如果你用太多經(jīng)驗(yàn),你可能會(huì)降低訓(xùn)練的速度。
我們已經(jīng)提到DDPG是一種off-policy算法:這一點(diǎn)與突出顯示原因和方式一樣重要。 請(qǐng)注意,重播緩沖區(qū)應(yīng)包含舊的體驗(yàn),即使它們是使用過(guò)時(shí)的策略獲得的也是如此。 為什么我們完全可以使用這些? 原因是Bellman方程式并不關(guān)心使用了哪個(gè)轉(zhuǎn)換元組,或如何選擇動(dòng)作,或在給定的轉(zhuǎn)移后會(huì)發(fā)生什么,因?yàn)閷?duì)于所有可能的轉(zhuǎn)換,最佳Q函數(shù)都應(yīng)滿足Bellman方程式。 因此,當(dāng)嘗試通過(guò)MSBE最小化擬合Q函數(shù)時(shí),我們經(jīng)歷的任何轉(zhuǎn)移對(duì)都是公平的游戲。
- 技巧2:目標(biāo)網(wǎng)絡(luò)。 Q-learning算法使用目標(biāo)網(wǎng)絡(luò),式子r+γ(1?d)max?a′Q?(s′,a′)r + \gamma (1 - d) \max_{a'} Q_{\phi}(s',a')r+γ(1?d)a′max?Q??(s′,a′)叫做目標(biāo),英文當(dāng)我們最小化MSBE損失的時(shí)候,我們嘗試去使Q-函數(shù)更像目標(biāo)。問(wèn)題在于,目標(biāo)取決于我們嘗試訓(xùn)練的相同參數(shù):?\phi?。 這使得MSBE最小化不穩(wěn)定。 解決方案是使用一組參數(shù),這些參數(shù)接近?\phi?,但是具有時(shí)間延遲,也就是說(shuō),第二個(gè)網(wǎng)絡(luò)(稱(chēng)為目標(biāo)網(wǎng)絡(luò))之后于第一個(gè)網(wǎng)絡(luò)。 目標(biāo)網(wǎng)絡(luò)的參數(shù)表示為?targ\phi_{\text{targ}}?targ?。
在基于DQN的算法中,每隔一定數(shù)量的步驟,目標(biāo)網(wǎng)絡(luò)就從主網(wǎng)絡(luò)復(fù)制一次。 在DDPG風(fēng)格的算法中,通過(guò)每次主網(wǎng)絡(luò)通過(guò)polyak平均更新,就更新一次目標(biāo)網(wǎng)絡(luò):?targ←ρ?targ+(1?ρ)?,\phi_{\text{targ}} \leftarrow \rho \phi_{\text{targ}} + (1 - \rho) \phi,?targ?←ρ?targ?+(1?ρ)?,其中ρ\rhoρ是一個(gè)在0,1之間的參數(shù)(通常接近1)。這個(gè)超參數(shù)在spoinningup叫做polyakpolyakpolyak
DDPG細(xì)節(jié):計(jì)算目標(biāo)動(dòng)作的最大動(dòng)作。在連續(xù)動(dòng)作空間中計(jì)算這個(gè)是個(gè)難點(diǎn)。DDPG 解決這個(gè)問(wèn)題通過(guò)用目標(biāo)策略網(wǎng)絡(luò)計(jì)算一個(gè)動(dòng)作,這個(gè)動(dòng)作近似地最大化Q?targ.Q_{\phi_{targ}}.Q?targ??.目標(biāo)策略網(wǎng)絡(luò)正如目標(biāo)Q-function:在訓(xùn)練過(guò)程中通過(guò)polyakpolyakpolyak平均化策略參數(shù)。
綜上,DDPG的Q-learning通過(guò)隨機(jī)梯度下降最小化下面的MSBE損失:L(?,D)=E(s,a,r,s′,d)~D[(Q?(s,a)?(r+γ(1?d)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],L(?,D)=(s,a,r,s′,d)~DE????(Q??(s,a)?(r+γ(1?d)Q?targ??(s′,μθtarg??(s′))))2???,其中μθtarg\mu_{\theta_{targ}}μθtarg??是目標(biāo)策略。
DDPG的策略學(xué)習(xí)部分
DDPG的策略學(xué)習(xí)是相對(duì)簡(jiǎn)單的。我們想去學(xué)習(xí)一個(gè)確定性網(wǎng)絡(luò)μθ(s)\mu_\theta(s)μθ?(s),它給出了最大化Q?(s,a)Q_\phi(s,a)Q??(s,a)的動(dòng)作。因?yàn)閯?dòng)作空間是連續(xù)的,我們假設(shè)Q-function是關(guān)于動(dòng)作可導(dǎo)的,我們用梯度上升(只針對(duì)策略參數(shù))去解決:max?θEs~D[Q?(s,μθ(s))].\max_{\theta} \underset{s \sim {\mathcal D}}{{\mathrm E}}\left[ Q_{\phi}(s, \mu_{\theta}(s)) \right].θmax?s~DE?[Q??(s,μθ?(s))].注意到Q-function參數(shù)在這里被視為常量。
Exploration vs. Exploitation(探索vs.利用)
DDPG訓(xùn)練一個(gè)確定性策略以一個(gè)off-policy的方式。因?yàn)椴呗允谴_定的,如果代理要on-policy探索,一開(kāi)始它可能不會(huì)嘗試足夠多分支的動(dòng)作去找到有用的學(xué)習(xí)信號(hào)。為了讓DDPG策略探索得更好,我們加入了噪聲給它的那些動(dòng)作在訓(xùn)練的時(shí)候。原始DDPG的作者建議時(shí)間相關(guān)的 OU 噪聲,但是最近更多的結(jié)果表明,不相干的非0高斯噪聲也能很好起作用。因?yàn)檫@個(gè)形式更簡(jiǎn)單,更被偏好。為了更好地得到高質(zhì)量的訓(xùn)練數(shù)據(jù),你可以在訓(xùn)練的時(shí)候減少噪聲的幅度。(我們?cè)趫?zhí)行過(guò)程中不執(zhí)行此操作,并且在整個(gè)過(guò)程中保持噪聲等級(jí)固定)
在測(cè)試時(shí),要查看策略如何充分利用它所學(xué)到的知識(shí),我們不會(huì)在操作中增加噪音。
我們的DDPG實(shí)施在培訓(xùn)開(kāi)始時(shí)使用了一個(gè)技巧來(lái)改進(jìn)探索。 對(duì)于開(kāi)始時(shí)有固定數(shù)量的步驟(使用start_steps關(guān)鍵字參數(shù)設(shè)置),代理將從有效動(dòng)作的均勻隨機(jī)分布中采樣動(dòng)作。 之后,它將返回到正常的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)\thetaθtarg?←ρθtarg?+(1?ρ)θwhere ρ\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.
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的DDPG-强化学习算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 强化学习核心文章一百篇
- 下一篇: PPO-强化学习算法