当前位置: 首页 > news >正文

【强化学习】#10 Actor-Critic:从QAC到A3C/A2C

尽管在上一篇末尾,我们向REINFORCE引入了基线来缓解GtG_tGt带来的高方差,但仍然没有触及问题的核心,即GtG_tGt采样中的随机性。如果将采样值GtG_tGt替换为期望值Q(st,at)Q(s_t,a_t)Q(st,at)V(st,at)V(s_t,a_t)V(st,at),就能显著降低方差。期望值作为价值函数则可以由价值函数近似来给出。

Actor-Critic算法将策略梯度与价值函数近似相结合。其中策略函数是Actor(演员),负责根据当前的状态决定动作;价值函数是Critic(评论家),负责在演员做完动作后根据环境反馈评价这个动作有多好。

QAC

QAC是最简单的Actor-Critic算法,它直接使用动作价值函数Qw(st,at)Q_w(s_t,a_t)Qw(st,at)来代替GtG_tGt作为策略函数的更新依据(本系列同时使用价值函数与策略函数时,价值函数的参数记为www,策略函数的参数记为θ\thetaθ

θt+1=θt+α∇θln⁡πθ(at∣st)⋅Qw(st,at) \theta_{t+1}=\theta_t+\alpha\nabla_\theta\ln\pi_\theta(a_t|s_t)\cdot Q_w(s_t,a_t) θt+1=θt+αθlnπθ(atst)Qw(st,at)

在QAC中,Q网络的更新目标不再基于Q学习而是SARSA,因为Q学习是离线策略的,评估的是贪心策略而非Actor执行的探索策略。基于SARSA的Q网络的估计目标是在状态sts_tst下执行动作ata_tat,并且之后都遵循当前策略πθ\pi_\thetaπθ的期望累计回报,即标签为

yt=rt+γ⋅Qw(st+1,at+1) y_t=r_t+\gamma\cdot Q_w(s_{t+1},a_{t+1}) yt=rt+γQw(st+1,at+1)

网络输出与标签的误差即TD误差

δt=rt+γ⋅Qw(st+1,at+1)−Qw(st,at) \delta_t=r_t+\gamma\cdot Q_w(s_{t+1},a_{t+1})-Q_w(s_t,a_t) δt=rt+γQw(st+1,at+1)Qw(st,at)

则损失函数为

L=12δt2=12[rt+γ⋅Qw(st+1,at+1)−Qw(st,at)]2 L=\frac12\delta_t^2=\frac12[r_t+\gamma\cdot Q_w(s_{t+1},a_{t+1})-Q_w(s_t,a_t)]^2 L=21δt2=21[rt+γQw(st+1,at+1)Qw(st,at)]2

参数更新公式为

wt+1=wt−αδt⋅∇wQw(st,at) w_{t+1}=w_t-\alpha\delta_t\cdot\nabla_wQ_w(s_t,a_t) wt+1=wtαδtwQw(st,at)

于是QAC算法的完整流程如下:

  1. Actor根据当前状态sts_tst和策略πθ\pi_\thetaπθ选择动作ata_tat
  2. 环境反馈奖励rtr_trt和新状态st+1s_{t+1}st+1
  3. 在新状态st+1s_{t+1}st+1下根据策略πθ\pi_\thetaπθ采样下一个动作at+1a_{t+1}at+1
  4. Critic计算Qw(st,at)Q_w(s_t,a_t)Qw(st,at)Qw(st+1,at+1)Q_w(s_{t+1},a_{t+1})Qw(st+1,at+1)
  5. Actor用Critic的评价更新策略θt+1=θt+α∇θln⁡πθ(at∣st)⋅Qw(st,at)\theta_{t+1}=\theta_t+\alpha\nabla_\theta\ln\pi_\theta(a_t|s_t)\cdot Q_w(s_t,a_t)θt+1=θt+αθlnπθ(atst)Qw(st,at)
  6. Critic用TD误差更新估计wt+1=wt−αδt∇wQw(st,at)w_{t+1}=w_t-\alpha\delta_t\nabla_wQ_w(s_t,a_t)wt+1=wtαδtwQw(st,at)
  7. 重复上述步骤直至策略和价值估计收敛。

Advantage Actor Critic

同样地,Actor-Critic算法也可以引入基线来过滤状态本身价值高低带来的波动。Advantage Actor Critic(本文简称AAC,但实际上没有缩写用于指代这一原始算法,网上许多文章对它的谬称A2C其实是A3C之后才出现的变体,详见后文)采取优势函数作为策略函数A(s,a)=Q(s,a)−V(s)A(s,a)=Q(s,a)-V(s)A(s,a)=Q(s,a)V(s)的更新依据

θt+1=θt+α∇θln⁡πθ(at∣st)⋅Aw(st,at) \theta_{t+1}=\theta_t+\alpha\nabla_\theta\ln\pi_\theta(a_t|s_t)\cdot A_w(s_t,a_t) θt+1=θt+αθlnπθ(atst)Aw(st,at)

但是优势函数包含QQQVVV两种函数,同时学习二者很麻烦,因此AAC利用了一个关键等式

Q(st,at)=E[rt+γ⋅V(st+1)] Q(s_t,a_t)=\mathbb E[r_t+\gamma\cdot V(s_{t+1})] Q(st,at)=E[rt+γV(st+1)]

由此优势函数就可以只用一个VVV网络和采样奖励来估计

Aw(st,at)=E[rt+γ⋅Vw(st+1)]−Vw(st)≈rt+γ⋅Vw(st+1)−Vw(st) \begin{split} A_w(s_t,a_t)&=\mathbb E[r_t+\gamma\cdot V_w(s_{t+1})]-V_w(s_t)\\ &\approx r_t+\gamma\cdot V_w(s_{t+1})-V_w(s_t) \end{split} Aw(st,at)=E[rt+γVw(st+1)]Vw(st)rt+γVw(st+1)Vw(st)

对优势函数的单次采样正是状态价值函数的TD误差δt\delta_tδt,因此AAC和QAC的参数更新可写成相似的形式

wt+1=wt−αδt⋅∇wVw(st) w_{t+1}=w_t-\alpha\delta_t\cdot\nabla_wV_w(s_t) wt+1=wtαδtwVw(st)

AAC算法的完整流程如下:

  1. Actor根据当前状态sts_tst和策略πθ\pi_\thetaπθ选择动作ata_tat
  2. 环境反馈奖励rtr_trt和新状态st+1s_{t+1}st+1
  3. Critic计算Vw(st)V_w(s_t)Vw(st)Vw(st+1)V_w(s_{t+1})Vw(st+1)
  4. Actor用Critic的评价更新策略θt+1=θt+αAw(st,at)⋅∇θln⁡πθ(at∣st)\theta_{t+1}=\theta_t+\alpha A_w(s_t,a_t)\cdot\nabla_\theta\ln\pi_\theta(a_t|s_t)θt+1=θt+αAw(st,at)θlnπθ(atst)
  5. Critic用TD误差更新估计wt+1=wt−αδt⋅∇wVw(st)w_{t+1}=w_t-\alpha\delta_t\cdot\nabla_wV_w(s_t)wt+1=wtαδtwVw(st)
  6. 重复上述步骤直至策略和价值估计收敛。

尽管在AAC中,Aw(st,at)A_w(s_t,a_t)Aw(st,at)的计算方式就是TD误差δt\delta_tδt,但为了阐明其背后的意义,即Actor最大化优势函数以优化动作选择,Critic最小化TD误差以使估计更准确,在更新公式中不会将二者混为一谈。

A3C与A2C

在DQN中,我们提到经验相关的问题,即一个智能体连续与环境交互得到的数据存在相关性。DQN使用经验回放来解决,但仍然存在一些局限性:

  • 需要大量内存存储经验。
  • 采取离线学习,为了重复利用数据和稳定训练将所有旧策略的数据均用于学习新策略,存在滞后性,且新策略数据的加入会使得数据分布不平稳。
  • 对环境的探索效率有上限,不主动产生新的探索行为,探索由行为策略决定。

A3C(Asynchronous Advantage Actor Critic)在AAC的基础之上,为了解决经验相关问题,提出了数据并行化。A3C允许多个智能体并行运行在多个环境实例中,网络分为全局共享网络和每个智能体的本地网络两种。每个智能体的工作流程如下:

  1. 从全局网络同步最新的参数Θ,W\Theta,WΘ,W到自己的本地网络θ,w\theta,wθ,w
  2. 使用本地网络保持参数不变在自己的环境实例中独立运行nnn步,或遇到终止状态sTs_TsT提前终止,并对每一步记录(st,at,rt)(s_t,a_t,r_t)(st,at,rt)
  3. 如果最后一步不是终止状态,则使用本地Critic计算Rn=Vw(stn)R_n=V_w(s_{t_n})Rn=Vw(stn),否则RT=0R_T=0RT=0
  4. 从最后一步到第一步反向遍历:
    1. 计算当前步的累积回报Rt=rt+γRt+1R_t=r_t+\gamma R_{t+1}Rt=rt+γRt+1
    2. 计算当前步的优势A(st,at)=Rt−Vw(st)A(s_t,a_t)=R_t-V_w(s_t)A(st,at)=RtVw(st)
    3. 累积Critic梯度gw←gw+[Rt−Vw(st)]⋅∇wVw(st)g_w\leftarrow g_w+[R_t-V_w(s_t)]\cdot\nabla_wV_w(s_t)gwgw+[RtVw(st)]wVw(st)
    4. 累积Actor梯度gθ←gθ+A(st,at)⋅∇θπθ(at∣st)g_\theta\leftarrow g_\theta+A(s_t,a_t)\cdot\nabla_\theta\pi_\theta(a_t|s_t)gθgθ+A(st,at)θπθ(atst)
  5. 将累积梯度异步地上传到全局网络并更新:
    1. Θ←Θ+αgθ\Theta\leftarrow\Theta+\alpha g_\thetaΘΘ+αgθ
    2. W←W+βgwW\leftarrow W+\beta g_wWW+βgw
  6. 重复上述步骤直至全局网络的策略和价值估计收敛。

A3C的论文使用nnn步回报的TD误差来估计优势函数。相比单步TD,它依赖于更少的价值函数估计,偏差更小;相比蒙特卡洛,它只往后采样nnn步回报,方差更可控。

A3C的异步在于每个智能体一旦完成一次遍历即可更新全局网络参数,无需等待其他智能体做好更新准备。在A3C提出数据并行化后,人们在实践中发现同步更新比异步更新更好用,于是多智能体并行的、同步的Advantage Actor Critic算法,即A2C成为了主流,而原始的单智能体的AAC几乎不再被使用,因此在学术界没有简称。

在A2C中,有一个主进程用于控制所有智能体,其流程如下:

  1. 主进程向所有智能体广播全局网络的参数;
  2. 主进程等待所有智能体都完成接收后,广播指令使所有智能体同时开始一个批次的训练;
  3. 所有智能体都完成运行后,计算出本地累积梯度发送给主进程;
  4. 主进程接收到所有智能体的累积梯度后,计算它们的平均梯度来一次性对全局网络进行更新;
  5. 重复上述步骤直至全局网络的策略和价值估计收敛。

同步机制让所有的智能体在同一时刻都拥有统一的起点和目标,让全局网络能够得到统一的更新,避免了使用过时的梯度来更新一个已经进化的模型(梯度冲突),使得训练曲线更加平滑稳定,对随机性的敏感度更低。

http://www.dtcms.com/a/474842.html

相关文章:

  • 存储栈学习笔记
  • 廊坊网站快速排名优化域名更换网站
  • 个人网站制作程序南昌地宝网租房信息网
  • 一流的龙岗网站设计内网建设网站
  • 大连网站建设服务东莞营销网站建设价格
  • 外贸网站做多少钱的4399影视在线观看免费高清
  • 网站层级关系装修平台网站有哪些
  • 【完整源码+数据集+部署教程】 落叶植物叶片分类系统源码和数据集:改进yolo11-LVMB
  • 公司网站宣传设计方案本地最新招聘信息
  • 茶叶网站flash模板免费下载wordpress开发的网站有哪些
  • wordpress ajax 注册个人做seo怎么赚钱
  • seata原理源码分析(二)事务模式-TCC(一) 织入拦截器,rpc,资源分析
  • 网站建设创意广告苏州北京网站建设
  • TwinCAT3配置OPC UA Server过程总结
  • 做网站需要用什么软件百度商店应用市场
  • 以Copilot重构CRUD流程为例
  • 网站备案证书放到哪里网站需要服务器
  • 【网络工程师】企业网络骨干链路冗余与环路避免实践
  • MATLAB双缝干涉实验模拟程序
  • 做网站现在用什么语言长沙seo网络优化
  • 创建对象内存分析
  • linux学习——总结
  • 上海网站搜索引擎优化如何搭建网站建设环境
  • 词根学习笔记 | Ag系列
  • IMX6ULL学习笔记_Boot和裸机篇(6)--- IMX6ULL简单SHELL以及SEGGER ES的Printf和字节对齐问题
  • 《C++二叉引擎:STL风格搜索树实现与算法优化》
  • 营销网站售后调查百度竞价调价软件
  • 给网站设置关键词重庆建网站一般多少钱
  • Seo建设网站的步骤郑州外贸网站建设及维护
  • Java内部类:全面解析与实践指南