【强化学习】Actor-Critic公式推导分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37895339/article/details/74612572

本文是在DQN与stochastic policy gradient基础上进行介绍,部分公式源头可以在DQNstochastic policy gradient中找到。

一、AC算法

在之前的随机策略梯度算法中,我们可以采用类似蒙特卡洛的方法采样一条轨迹后对策略进行更新,如下所示
θJ(θ)=1Ni=0Nt=0T[θlogπθ(ai,tsi,t)(t=tTr(si,t,ai,t)b)](1) \nabla_{\theta}J(\theta)=\frac{1}{N}\sum_{i=0}^N\sum_{t=0}^T[\nabla_{\theta}\log \pi_{\theta}(a_{i,t}|s_{i,t})(\sum_{t'=t}^Tr(s_{i,t},a_{i,t})-b)] \qquad(1)
我们用整个轨迹的回报表示整个序列的价值,这个估计是准确无偏的,但是在真实的训练过程中,为了控制学习时间,我们无法完成足够数量的交互采样,有限次的采样有时并不能很好的代表轨迹真实的期望。每一个交互得到的序列会存在一定的差异,对应的回报也会存在一定的差异,因此不充足的交互会给轨迹回报引入较大的方差,这就是蒙特卡洛方法的缺陷,没有偏差但是方差大,在随机策略梯度算法中引入基线bb来减小方差。

Actor-Critic算法就是牺牲一定的偏差来减小方差的方法。其核心思想是通过一个单独的模型来估计轨迹的累积回报,而不再用采样完一条轨迹后的真实累积回报。另一个好处就是,Actor-Critic算法可以在每一步进行模型的更新,而不用等到一条轨迹交互结束后才能更新一次模型。每一次采样使用类似DQN的方法更新价值函数模型,然后利用价值函数估计的轨迹价值进行策略函数的更新。

公式(1)为随机策略梯度模型的梯度(优化)方向,我们可以使用如下的方法来替代轨迹梯度权值t=tTr(si,t,ai,t)b\sum_{t'=t}^Tr(s_{i,t},a_{i,t})-b

  1. 直接使用状态值函数估计的轨迹回报作为轨迹梯度权值:q(s,a)q(s,a)
  2. 直接使用优势函数作为轨迹的梯度权重:A(s,a)=q(s,a)V(s)A(s,a)=q(s,a)-V(s)
  3. 使用TD-error作为轨迹梯度权值:r(st,at)+v(st+1)v(st)r(s_t,a_t)+v(s_{t+1})-v(s_t)

上述三种替代方式都可以在一定程度上减低方差,但是偏差会增大。更进一步,还可以利用TD(λ)TD(\lambda)的方式来平衡偏差与方差的关系。Actor-Critic选用第三种TD-error的方式作为轨迹梯度的权值,这种方法在计算量以及减小方差上都有较好的效果。为了估计v(s)v(s)引入价值模型,这也是Actor-Critic命名的由来,Actor表示策略模型,Critic表示价值模型。

Actor-Critic可以每运行一步进行一次学习,其核心公式为
δ=rt(st,at)+vω(st+1)vω(st)ωt+1=ωt+αωδtωvω(st)θt+1=θt+αθθlogπθ(atst)δt \begin{aligned} \delta = r_t(s_t,a_t)+v_\omega(s_{t+1})-v_\omega(s_t)\\ \omega_{t+1}=\omega_t+\alpha^\omega\delta_t\nabla_\omega v_\omega(s_{t})\\ \theta_{t+1}=\theta_t+\alpha^{\theta}\nabla_{\theta}\log \pi_{\theta}(a_t|s_t)\delta_t \end{aligned}
第一行为计算该步的TD-error,第二行为更新价值模型参数,第三行为更新策略模型参数。更新价值模型参数的公式推导分析可以看DQN,更新策略模型的公式推导可以看SPG
在这里插入图片描述

二、A3C算法

A3C(Asynchronous Advantage AC)采用异步更新的方式,加快了模型的学习速度。AC及policy gradient是一个on-policy的策略,每次模型与环境交互后更新模型,再用新的模型去与环境交互进行下一次更新。A3C是一种并行采样交互与训练的算法,归类为off-policy。在算法中同时启动N个线程,使用N个agent同时与环境进行交互,只要对环境设置不同,则每个线程采样得到的数据将会有区别。每个线程按照Actor-Critic算法的方式独立的进行环境交互与学习,每个线程完成训练并得到参数更新量后,异步的将该线程的参数更新量更新到全局模型中,下一次训练开始前,从全局模型中获取最新的模型参数,使用新同步到的全局模型参数进行下一次交互更新。
在这里插入图片描述

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试