概述
我们在前面两章介绍了Policy Based范畴的经典策略梯度方法和基于AC框架的PPO方法,在上述方法中,策略梯度都为如下形式:
- ∇ J ( θ ) = E τ ∼ P ( τ ; θ ) [ R ( τ ) ∑ t = 1 T ∇ log π θ ( a t ∣ s t ) ] nabla Jleft(thetaright)=E_{tausim Pleft(tau;thetaright)}left[Rleft(tauright)sum_{t=1}^Tnablalogpi_thetaleft(a_tleft|s_tright.right)right] ∇J(θ)=Eτ∼P(τ;θ)[R(τ)∑t=1T∇logπθ(at∣st)]
上面这个式子中包含了需要从状态空间采样的 R ( τ ) Rleft(tauright) R(τ)和需要从行动空间采样的 π θ ( a t ∣ s t ) pi_thetaleft(a_tleft|s_tright.right) πθ(at∣st)两个部分,因此,需要采样的量比较大。为了解决这一问题,DeepMind的David Silver等人提出了确定性策略梯度算法Deterministic policy gradient algorithms,将原有的概率性策略:
- π ( a ∣ s ) = P ( a t = a ∣ s t = s ) pileft(aleft|sright.right)=Pleft(a_t=aleft|s_t=sright.right) π(a∣s)=P(at=a∣st=s)
改为了确定性策略:
- a = μ ( s ) a=muleft(sright) a=μ(s)
这样从理论上来说,需要采样的数据量就比之前要小。
但个人觉得随机性策略与确定性策略针对的其实是不同场景,例如棋类等某些对抗场景下,随机性策略要比确定性策略更有效,因此,并不存在谁好谁坏的问题。不管怎么说,下面我们开始介绍确定性策略相关内容。
确定性策略梯度DPG
首先我们将带参数 θ theta θ的确定性策略定义为如下形式:
- μ θ : S → A ; θ ∈ R n mu_theta:Srightarrow A;thetain R^n μθ:S→A;θ∈Rn
这里与前面不同的就是,策略由原有的概率函数,变为一个确定性函数。同时,定义我们的状态转移概率为如下形式:
- p ( s → s ′ , t , μ ) pleft(srightarrow s',;t,;muright) p(s→s′,t,μ)
这个状态转移函数,其实和前面的时一样的,它是和环境相关,但同时也和策略本身相关。那么,确定性策略的目标函数就可以写成如下形式:
- J ( μ θ ) = E [ r 1 γ ∣ μ ] = ∫ S ρ μ ( s ) r ( s , μ θ ( s ) ) d s = E s ∼ ρ μ [ r ( s , μ θ ( s ) ) ] Jleft(mu_thetaright)=Eleft[r_1^gamma;left|muright.right]\;;;;;;;;;;=int_Srho^muleft(sright)rleft(s,;mu_thetaleft(sright)right)operatorname ds\;;;;;;;;;;=E_{ssimrho^mu}left[rleft(s,;mu_thetaleft(sright)right)right] J(μθ)=E[r1γ∣μ]=∫Sρμ(s)r(s,μθ(s))ds=Es∼ρμ[r(s,μθ(s))]
由上式可以看出,这里的定义与随机策略其实是一致的,即不同策略下折扣收益的均值,同时可以表示为不同状态分布下的收益。那么,基于这个目标函数,如果要对参数 θ theta θ进行调整,以使目标函数最大,那么其策略梯度就可以表示为如下形式:
- ∇ θ J ( μ θ ) = ∫ S ρ μ ( s ) ∇ θ μ θ ( s ) ∇ a Q μ ( s , a ) ∣ a = μ θ ( s ) d s = E s ∼ ρ μ [ ∇ θ μ θ ( s ) ∇ a Q μ ( s , a ) ∣ a = μ θ ( s ) ] nabla_theta Jleft(mu_thetaright);=int_Srho^muleft(sright)nabla_thetamu_thetaleft(sright)nabla_aQ^muleft(s,aright)vert_{a=mu_thetaleft(sright)}operatorname ds\;;;;;;;;;;;;;;;;=E_{ssimrho^mu}left[nabla_thetamu_thetaleft(sright)nabla_aQ^muleft(s,aright)vert_{a=mu_thetaleft(sright)}right] ∇θJ(μθ)=∫Sρμ(s)∇θμθ(s)∇aQμ(s,a)∣a=μθ(s)ds=Es∼ρμ[∇θμθ(s)∇aQμ(s,a)∣a=μθ(s)]
在David Silver的论文中,也没有讲具体的推导过程,但好像是在附录中对成立的条件进行了说明。其实具体推导,可以参见我们前面的经典策略梯度方法中相关推导,比较类似,只是在这里利用了链式求导法则。
根据上面的策略梯度,我们就可以得到on-policy Deterministic Actor-Critic的更新公式如下所示:
- δ t = r t + γ Q ω ( s t + 1 , a t + 1 ) − Q ω ( s t , a t ) delta_t=r_t+gamma Q^omegaleft(s_{t+1},a_{t+1}right)-Q^omegaleft(s_t,a_tright) δt=rt+γQω(st+1,at+1)−Qω(st,at) (1)
- ω t + 1 = ω t + α ω δ t ∇ ω Q ω ( s t , a t ) omega_{t+1}=omega_t+alpha_omegadelta_tnabla_omega Q^omegaleft(s_t,a_tright) ωt+1=ωt+αωδt∇ωQω(st,at) (2)
- θ t + 1 = θ t + α θ ∇ θ μ θ ( s t ) ∇ a Q μ ( s t , a t ) ∣ a = μ θ ( s ) theta_{t+1}=theta_t+alpha_thetanabla_thetamu_thetaleft(s_tright)nabla_aQ^muleft(s_t,a_tright)vert_{a=mu_thetaleft(sright)} θt+1=θt+αθ∇θμθ(st)∇aQμ(st,at)∣a=μθ(s) (3)
同时,off-policy Deterministic Actor-Critic的更新公式如下所示:
- δ t = r t + γ Q ω ( s t + 1 , μ θ ( s t + 1 ) ) − Q ω ( s t , a t ) delta_t=r_t+gamma Q^omegaleft(s_{t+1},mu_thetaleft(s_{t+1}right)right)-Q^omegaleft(s_t,a_tright) δt=rt+γQω(st+1,μθ(st+1))−Qω(st,at) (4)
- ω t + 1 = ω t + α ω δ t ∇ ω Q ω ( s t , a t ) omega_{t+1}=omega_t+alpha_omegadelta_tnabla_omega Q^omegaleft(s_t,a_tright) ωt+1=ωt+αωδt∇ωQω(st,at) (5)
- θ t + 1 = θ t + α θ ∇ θ μ θ ( s t ) ∇ a Q μ ( s t , a t ) ∣ a = μ θ ( s ) theta_{t+1}=theta_t+alpha_thetanabla_thetamu_thetaleft(s_tright)nabla_aQ^muleft(s_t,a_tright)vert_{a=mu_thetaleft(sright)} θt+1=θt+αθ∇θμθ(st)∇aQμ(st,at)∣a=μθ(s) (6)
上面两组更新式子中,唯一的区别就是(1)式和(4)式的中间项,变成了 μ θ ( s t + 1 ) mu_thetaleft(s_{t+1}right) μθ(st+1),这个可以看作是一个Target Actor,这也是off-policy的特点,即将用来计算更新值的策略和与环境互动的策略分开,我理解这个直观的感觉是起一个稳定器的感觉。
深度确定性策略梯度DDPG
其实DDPG和DPG的关系,就好像Q-Learning和DQN的关系一样,用深度神经网络来拟合上面的Critic和Actor,用深度神经网络的权重,来代替前面的
ω
omega
ω和
θ
theta
θ。提出这个算法的文章Continuous Control with Deep Reinforcement Learning的作者还是DeepMind的一票人,其中也包括了DPG的David Silver等。
其思路和DQN对Q-Learning的扩展基本一致,同时也使用了经验回放和独⽴的目标网络两个DQN中使用的技巧,同时,为了解决确定性策略的Exploration和策略更新的稳定性问题,还增加了随机量和soft-replace。具体算法伪代码如下所示:
- 由上面算法的第一和第二行可以看出,DDPG建立了两个Actor网络,这是前面DPG算法中off-policy的部分;同时,还建立了两个Critic网络,这个就是模仿DQN建立的目标网络部分,用这个目标网络来计算TD目标值;
- 算法第八行中的 N t N_t Nt就是为解决策略Exploration所添加的随机量;
- 第十行这里就是存储每步的状态,为后面update中使用经验回放作准备。
- 算法最后两行,就是soft-replace部分,不是完全更新,而是只更新网络中很小的一部分 τ tau τ,按照算法中的介绍,需要满足条件: τ < < 1 tau<<1 τ<<1。
总结
DDPG算法如果按照类别来分,应该为policy based & model-free & off-policy & actor-critic算法,和我们前面讲的PPO不同点很多,其中最重要的有两个:
- 一是在输出策略方面,DDPG输出的是确定性策略,PPO则是概率分布;
- 二是在AC结构方面,PPO中的Critic输出是价值函数,输入只有state;而DDPG中的Critic输出是类似于DQN的行为-状态值,所以输入包含action。这也直接导致了DDPG中的Critic在更新计算TD差分值时,使用到了目标策略网络Actor的输出,而PPO中的Critic是自己独立更新的。
最后
以上就是优雅西牛为你收集整理的基础算法篇(七),确定性策略的DPG与DDPG确定性策略梯度DPG深度确定性策略梯度DDPG总结的全部内容,希望文章能够帮你解决基础算法篇(七),确定性策略的DPG与DDPG确定性策略梯度DPG深度确定性策略梯度DDPG总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复