DDPG算法

1、DDPG原理

什么是DDPG呢

什么是DDPG呢?它是Actor-Critic 和 DQN 算法的结合体。DDPG的全称是Deep Deterministic Policy Gradient。

我们首先来看Deep,正如Q-learning加上一个Deep就变成了DQN一样,这里的Deep即同样使用DQN中的经验池和双网络结构来促进神经网络能够有效学习。

再来看Deterministic,即我们的Actor不再输出每个动作的概率,而是一个具体的动作,这更有助于我们连续动作空间中进行学习。之前不太理解这个连续动作空间是什么意思,既然policy gradient和dqn都是输出每个动作的概率和q值,那么我们为什么还要用policy gradient呢?这个连续动作空间的例子可以举一个么?既然已经诚心诚意的发问了,那么我就班门弄斧回答一下。假如想要通过强化学习得到一个词的32维词向量,哇,这个词向量的动作空间可是无限大的呀,[1,0....0]是一个动作,[0,1...0]是一个动作,如果加上小数,那更是数不过来啦,这时候我们根本不可能去计算每个动作的概率或者q值,我们只能给定状态即一个单词,直接输出一个合适的词向量。类似于这种情况,DDPG就可以大显神威了。

DDPG实现框架和算法

online 和 target 网络

以往的实践证明,如果只使用单个"Q神经网络"的算法,学习过程很不稳定,因为Q网络的参数在频繁gradient update的同时,又用于计算Q网络和策略网络的gradient, 参见下面等式(1),(2),(3).

基于此,DDPG分别为策略网络、Q网络各创建两个神经网络拷贝,一个叫做online,一个叫做target:

策 略 网 络 { o n l i n e : μ ( s ∣ θ μ ) : g r a d i e n t 更 新 θ μ t a r g e t : μ ′ ( s ∣ θ μ ′ ) : s o f t   u p d a t e   θ μ ′ 策略网络 

{online:μ(s|θμ):gradient更新θμtarget:μ′(s|θμ′):soft update θμ′

策略网络{online:μ(s∣θμ):gradient更新θμtarget:μ′(s∣θμ′):soft update θμ′​

Q 网 络 { o n l i n e : Q ( s , a ∣ θ Q ) : g r a d i e n t 更 新 θ Q t a r g e t : Q ′ ( s , a ∣ θ Q ′ ) : s o f t   u p d a t e   θ Q ′ Q网络 \quad 

{online:Q(s,a|θQ):gradient更新θQtarget:Q′(s,a|θQ′):soft update θQ′

Q网络{online:Q(s,a∣θQ):gradient更新θQtarget:Q′(s,a∣θQ′):soft update θQ′​

在训练完一个mini-batch的数据之后,通过SGA/SGD算法更新online网络的参数,然后再通过soft update算法更新 target 网络的参数。soft update是一种running average的算法:

s o f t   u p d a t e : τ 一 般 取 值 0.001 { θ Q ′ ← τ θ Q + ( 1 − τ ) θ Q ′ θ μ ′ ← τ θ μ + ( 1 − τ ) θ μ ′ \mathop{soft \ update: } _{\tau 一般取值0.001} 

{θQ′←τθQ+(1−τ)θQ′θμ′←τθμ+(1−τ)θμ′

soft update:τ一般取值0.001​{θQ′←τθQ+(1−τ)θQ′θμ′←τθμ+(1−τ)θμ′​

优点:target网络参数变化小,用于在训练过程中计算online网络的gradient,比较稳定,训练易于收敛。

代价:参数变化小,学习过程变慢。

1. 从随机策略到确定性策略

从DDPG这个名字看,它是由D(Deep)+D(Deterministic )+ PG(Policy Gradient)组成。PG(Policy Gradient)我们在强化学习(十三) 策略梯度(Policy Gradient)里已经讨论过。那什么是确定性策略梯度(Deterministic Policy Gradient,以下简称DPG)呢?

    确定性策略是和随机策略相对而言的,对于某一些动作集合来说,它可能是连续值,或者非常高维的离散值,这样动作的空间维度极大。如果我们使用随机策略,即像DQN一样研究它所有的可能动作的概率,并计算各个可能的动作的价值的话,那需要的样本量是非常大才可行的。于是有人就想出使用确定性策略来简化这个问题。

作为随机策略,在相同的策略,在同一个状态处,采用的动作是基于一个概率分布的,即是不确定的。而确定性策略则决定简单点,虽然在同一个状态处,采用的动作概率不同,但是最大概率只有一个,如果我们只取最大概率的动作,去掉这个概率分布,那么就简单多了。即作为确定性策略,相同的策略,在同一个状态处,动作是唯一确定的,即策略变成

𝜋𝜃(𝑠)=𝑎πθ(s)=a

2. 从DPG到DDPG

在看确定性策略梯度DPG前,我们看看基于Q值的随机性策略梯度的梯度计算公式:

∇𝜃𝐽(𝜋𝜃)=𝐸𝑠∼𝜌𝜋,𝑎∼𝜋𝜃[∇𝜃𝑙𝑜𝑔𝜋𝜃(𝑠,𝑎)𝑄𝜋(𝑠,𝑎)]∇θJ(πθ)=Es∼ρπ,a∼πθ[∇θlogπθ(s,a)Qπ(s,a)]

其中状态的采样空间为𝜌𝜋ρπ, ∇𝜃𝑙𝑜𝑔𝜋𝜃(𝑠,𝑎)∇θlogπθ(s,a)是分值函数,可见随机性策略梯度需要在整个动作的空间𝜋𝜃πθ进行采样。'

而DPG基于Q值的确定性策略梯度的梯度计算公式是:

∇𝜃𝐽(𝜋𝜃)=𝐸𝑠∼𝜌𝜋[∇𝜃𝜋𝜃(𝑠)∇𝑎𝑄𝜋(𝑠,𝑎)|𝑎=𝜋𝜃(𝑠)]∇θJ(πθ)=Es∼ρπ[∇θπθ(s)∇aQπ(s,a)|a=πθ(s)]

    跟随机策略梯度的式子相比,少了对动作的积分,多了回报Q函数对动作的导数。

    而从DPG到DDPG的过程,完全可以类比DQN到DDQN的过程。除了老生常谈的经验回放以外,我们有了双网络,即当前网络和目标网络的概念。而由于现在我们本来就有Actor网络和Critic两个网络,那么双网络后就变成了4个网络,分别是:Actor当前网络,Actor目标网络,Critic当前网络,Critic目标网络。2个Actor网络的结构相同,2个Critic网络的结构相同。那么这4个网络的功能各自是什么呢?

3. DDPG的原理

DDPG有4个网络,在了解这4个网络的功能之前,我们先复习DDQN的两个网络:当前Q网络和目标Q网络的作用。可以复习强化学习(十)Double DQN (DDQN)

DDQN的当前Q网络负责对当前状态𝑆S使用𝜖−ϵ−贪婪法选择动作𝐴A,执行动作𝐴A,获得新状态𝑆′S′和奖励𝑅R,将样本放入经验回放池,对经验回放池中采样的下一状态𝑆′S′使用贪婪法选择动作𝐴′A′,供目标Q网络计算目标Q值,当目标Q网络计算出目标Q值后,当前Q网络会进行网络参数的更新,并定期把最新网络参数复制到目标Q网络。

    DDQN的目标Q网络则负责基于经验回放池计算目标Q值,提供给当前Q网络用,目标Q网络会定期从当前Q网络复制最新网络参数。

现在我们回到DDPG,作为DDPG,Critic当前网络,Critic目标网络和DDQN的当前Q网络,目标Q网络的功能定位基本类似,但是我们有自己的Actor策略网络,因此不需要𝜖−ϵ−贪婪法这样的选择方法,这部分DDQN的功能到了DDPG可以在Actor当前网络完成。而对经验回放池中采样的下一状态𝑆′S′使用贪婪法选择动作𝐴′A′,这部分工作由于用来估计目标Q值,因此可以放到Actor目标网络完成。

基于经验回放池和目标Actor网络提供的𝑆′,𝐴′S′,A′计算目标Q值的一部分,这部分由于是评估,因此还是放到Critic目标网络完成。而Critic目标网络计算出目标Q值一部分后,Critic当前网络会计算目标Q值,并进行网络参数的更新,并定期将网络参数复制到Critic目标网络。

    此外,Actor当前网络也会基于Critic目标网络计算出的目标Q值,进行网络参数的更新,并定期将网络参数复制到Actor目标网络。


    有了上面的思路,我们总结下DDPG 4个网络的功能定位:

1. Actor当前网络:负责策略网络参数𝜃θ的迭代更新,负责根据当前状态𝑆S选择当前动作𝐴A,用于和环境交互生成𝑆′,𝑅S′,R。

2. Actor目标网络:负责根据经验回放池中采样的下一状态𝑆′S′选择最优下一动作𝐴′A′。网络参数𝜃′θ′定期从𝜃θ复制。

3. Critic当前网络:负责价值网络参数𝑤w的迭代更新,负责计算负责计算当前Q值𝑄(𝑆,𝐴,𝑤)Q(S,A,w)。目标Q值𝑦𝑖=𝑅+𝛾𝑄′(𝑆′,𝐴′,𝑤′)yi=R+γQ′(S′,A′,w′)

4. Critic目标网络:负责计算目标Q值中的𝑄′(𝑆′,𝐴′,𝑤′)Q′(S′,A′,w′)部分。网络参数𝑤′w′定期从𝑤w复制。

    DDPG除了这4个网络结构,还用到了经验回放,这部分用于计算目标Q值,和DQN没有什么区别,这里就不展开了。

此外,DDPG从当前网络到目标网络的复制和我们之前讲到了DQN不一样。回想DQN,我们是直接把将当前Q网络的参数复制到目标Q网络,即𝑤′=𝑤w′=w, DDPG这里没有使用这种硬更新,而是使用了软更新,即每次参数只更新一点点,即:

𝑤′←𝜏𝑤+(1−𝜏)𝑤′w′←τw+(1−τ)w′

𝜃′←𝜏𝜃+(1−𝜏)𝜃′θ′←τθ+(1−τ)θ′

其中𝜏τ是更新系数,一般取的比较小,比如0.1或者0.01这样的值。

同时,为了学习过程可以增加一些随机性,增加学习的覆盖,DDPG对选择出来的动作𝐴A会增加一定的噪声N,即最终和环境交互的动作𝐴A的表达式是:

𝐴=𝜋𝜃(𝑆)+A=πθ(S)+N

最后,我们来看看DDPG的损失函数。对于Critic当前网络,其损失函数和DQN是类似的,都是均方误差,即:

𝐽(𝑤)=1𝑚∑𝑗=1𝑚(𝑦𝑗−𝑄(𝜙(𝑆𝑗),𝐴𝑗,𝑤))2J(w)=1m∑j=1m(yj−Q(ϕ(Sj),Aj,w))2

而对于 Actor当前网络,其损失函数就和之前讲的PG,A3C不同了,这里由于是确定性策略,原论文定义的损失梯度是:

∇𝐽(𝜃)=1𝑚∑𝑗=1𝑚[∇𝑎𝑄(𝑠𝑖,𝑎𝑖,𝑤)|𝑠=𝑠𝑖,𝑎=𝜋𝜃(𝑠)∇𝜃𝜋𝜃(𝑠)|𝑠=𝑠𝑖]∇J(θ)=1m∑j=1m[∇aQ(si,ai,w)|s=si,a=πθ(s)∇θπθ(s)|s=si]

这个可以对应上我们第二节的确定性策略梯度,看起来比较麻烦,但是其实理解起来很简单。假如对同一个状态,我们输出了两个不同的动作𝑎1a1和𝑎2a2,从Critic当前网络得到了两个反馈的Q值,分别是𝑄1,𝑄2Q1,Q2,假设𝑄1>𝑄2Q1>Q2,即采取动作1可以得到更多的奖励,那么策略梯度的思想是什么呢,就是增加𝑎1a1的概率,降低𝑎2a2的概率,也就是说,Actor想要尽可能的得到更大的Q值。所以我们的Actor的损失可以简单的理解为得到的反馈Q值越大损失越小,得到的反馈Q值越小损失越大,因此只要对状态估计网络返回的Q值取个负号即可,即:

𝐽(𝜃)=−1𝑚∑𝑗=1𝑚𝑄(𝑠𝑖,𝑎𝑖,𝑤)J(θ)=−1m∑j=1mQ(si,ai,w)

4. DDPG算法流程

    这里我们总结下DDPG的算法流程

输入:Actor当前网络,Actor目标网络,Critic当前网络,Critic目标网络,参数分别为𝜃,𝜃′,𝑤,𝑤′θ,θ′,w,w′,衰减因子𝛾γ,  软更新系数𝜏τ,批量梯度下降的样本数𝑚m,目标Q网络参数更新频率𝐶C。最大迭代次数𝑇T。随机噪音函数\mathcal{N}

输出:最优Actor当前网络参数𝜃θ,Critic当前网络参数𝑤w

1. 随机初始化𝜃,𝑤θ,w, 𝑤′=𝑤w′=w,𝜃′=𝜃θ′=θ。清空经验回放的集合𝐷D

    2. for i from 1 to T,进行迭代。

a) 初始化𝑆S为当前状态序列的第一个状态, 拿到其特征向量𝜙(𝑆)ϕ(S)

b) 在Actor当前网络基于状态𝑆S得到动作𝐴=𝜋𝜃(𝜙(𝑆))+A=πθ(ϕ(S))+N

c) 执行动作𝐴A,得到新状态𝑆′S′,奖励𝑅R,是否终止状态%is\_end$

d) 将{𝜙(𝑆),𝐴,𝑅,𝜙(𝑆′),𝑖𝑠_𝑒𝑛𝑑}{ϕ(S),A,R,ϕ(S′),is_end}这个五元组存入经验回放集合𝐷D

      e) S=S'

f) 从经验回放集合𝐷D中采样𝑚m个样本{𝜙(𝑆𝑗),𝐴𝑗,𝑅𝑗,𝜙(𝑆′𝑗),𝑖𝑠_𝑒𝑛𝑑𝑗},𝑗=1,2.,,,𝑚{ϕ(Sj),Aj,Rj,ϕ(Sj′),is_endj},j=1,2.,,,m,计算当前目标Q值𝑦𝑗yj:

𝑦𝑗={𝑅𝑗𝑅𝑗+𝛾𝑄′(𝜙(𝑆′𝑗),𝜋𝜃′(𝜙(𝑆′𝑗)),𝑤′)𝑖𝑠_𝑒𝑛𝑑𝑗𝑖𝑠𝑡𝑟𝑢𝑒𝑖𝑠_𝑒𝑛𝑑𝑗𝑖𝑠𝑓𝑎𝑙𝑠𝑒yj={Rjis_endjistrueRj+γQ′(ϕ(Sj′),πθ′(ϕ(Sj′)),w′)is_endjisfalse

g)  使用均方差损失函数1𝑚∑𝑗=1𝑚(𝑦𝑗−𝑄(𝜙(𝑆𝑗),𝐴𝑗,𝑤))21m∑j=1m(yj−Q(ϕ(Sj),Aj,w))2,通过神经网络的梯度反向传播来更新Critic当前网络的所有参数𝑤w

h)  使用𝐽(𝜃)=−1𝑚∑𝑗=1𝑚𝑄(𝑠𝑖,𝑎𝑖,𝜃)J(θ)=−1m∑j=1mQ(si,ai,θ),,通过神经网络的梯度反向传播来更新Actor当前网络的所有参数𝜃θ

i) 如果T%C=1,则更新Critic目标网络和Actor目标网络参数:

𝑤′←𝜏𝑤+(1−𝜏)𝑤′w′←τw+(1−τ)w′

𝜃′←𝜏𝜃+(1−𝜏)𝜃′θ′←τθ+(1−τ)θ′

j) 如果𝑆′S′是终止状态,当前轮迭代完毕,否则转到步骤b)

以上就是DDPG算法的主流程,要注意的是上面2.f中的𝜋𝜃′(𝜙(𝑆′𝑗))πθ′(ϕ(Sj′))是通过Actor目标网络得到,而𝑄′(𝜙(𝑆′𝑗),𝜋𝜃′(𝜙(𝑆′𝑗)),𝑤′)Q′(ϕ(Sj′),πθ′(ϕ(Sj′)),w′)则是通过Critic目标网络得到的。

5. DDPG实例

这里我们给出DDPG第一个算法实例,代码主要参考自莫烦的Github代码。增加了测试模型效果的部分,优化了少量参数。代码详见:https://github.com/ljpzzz/machinelearning/blob/master/reinforcement-learning/ddpg.py

这里我们没有用之前的CartPole游戏,因为它不是连续动作。我们使用了Pendulum-v0这个游戏。目的是用最小的力矩使棒子竖起来,这个游戏的详细介绍参见这里。输入状态是角度的sin,cos值,以及角速度。一共三个值。动作是一个连续的力矩值。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容