如果这篇博客帮助到你,可以给我充个电加个油哦~
CC BY 4.0 (除特别声明或转载文章外)
一、DDPG介绍
从DDPG这个名字看,它是由D(Deep)+D(Deterministic )+ PG(Policy Gradient)组成。DDPG与Actor-Critic 形式差不多,需要有基于策略 Policy 的神经网络和基于价值 Value 的神经网络,但是为了体现 DQN 的思想,每种神经网络我们都需要再细分为两个,Policy Gradient 这边,我们有估计网络和现实网络,估计网络用来输出实时的动作,供 actor 在现实中实行,而现实网络则是用来更新价值网络系统的。所以我们再来看看价值系统这边,我们也有现实网络和估计网络,他们都在输出这个状态的价值,而输入端却有不同,状态现实网络这边会拿着从动作现实网络来的动作加上状态的观测值加以分析,而状态估计网络则是拿着当时 Actor 施加的动作当做输入。
二、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个样本{ϕ(Sj),Aj,Rj,ϕ(S′j),is_endj},j=1,2.,,,m,计算当前目标Q值yj:
\(yj=\left\{\begin{matrix} Rj,is_endj is true \\\ Rj+γQ′(ϕ(S′j),πθ′(ϕ(S′j)),w′),is_endj is false {matrix}\right.\)
g) 使用均方差损失函数1m∑j=1m(yj−Q(ϕ(Sj),Aj,w))2,(通过神经网络的梯度反向传播来更新Critic当前网络的所有参数w)
h) 使用J(θ)=−1m∑j=1mQ(si,ai,θ),(通过神经网络的梯度反向传播来更新Actor当前网络的所有参数θ)
i) 如果T%C=1,则更新Critic目标网络和Actor目标网络参数:
w′←τw+(1−τ)w′
θ′←τθ+(1−τ)θ′
j) 如果S′是终止状态,当前轮迭代完毕,否则转到步骤b)
以上就是DDPG算法的主流程,要注意的是上面2.f中的πθ′(ϕ(S′j))是通过Actor目标网络得到,而Q′(ϕ(S′j),πθ′(ϕ(S′j)),w′)则是通过Critic目标网络得到的。
三、DDPG讲解
DDPG有4个网络,在了解这4个网络的功能之前,我们先看看DDQN的两个网络:当前Q网络和目标Q网络的作用。
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这里没有使用这种硬更新,而是使用了软更新,即每次参数只更新一点点,即:
w′←τw+(1−τ)w′
θ′←τθ+(1−τ)θ′
其中τ是更新系数,一般取的比较小,比如0.1或者0.01这样的值。
同时,为了学习过程可以增加一些随机性,增加学习的覆盖,DDPG对选择出来的动作A会增加一定的噪声N,即最终和环境交互的动作A的表达式是:A=πθ(S)+N
我们来看看DDPG的损失函数。对于Critic当前网络,其损失函数和DQN是类似的,都是均方误差,即:J(w)=1m∑j=1m(yj−Q(ϕ(Sj),Aj,w))2
假如对同一个状态,我们输出了两个不同的动作a1和a2,从Critic当前网络得到了两个反馈的Q值,分别是Q1,Q2,假设Q1>Q2,即采取动作1可以得到更多的奖励,那么策略梯度的思想是什么呢,就是增加a1的概率,降低a2的概率,也就是说,Actor想要尽可能的得到更大的Q值。所以我们的Actor的损失可以简单的理解为得到的反馈Q值越大损失越小,得到的反馈Q值越小损失越大,因此只要对状态估计网络返回的Q值取个负号即可,即:J(θ)=−1m∑j=1mQ(si,ai,w)