1.Actor-Critic算法简介

Actor-Critic从名字上看包括两部分,演员 (Actor) 和评价者 (Critic) 。其中 Actor 使用我们上一节讲到的策略函数,负责生成动作 (Action) 并和环境交互。而Critic使用我们之前讲到了的价值函数,负责评估Actor的表现,并指导Actor下一阶段的动作。
        回想上一篇的策略梯度,策略函数就是我们的 Actor,但是那里是没有 Critic 的,我们当时使用了蒙特卡罗法来计算每一步的价值部分替代了 Critic 的功能,但是场景比较受限。因此现在我们使用类似 DQN 中用的价值函数来替代蒙特卡罗法,作为一个比较通用的 Critic 。
        也就是说在Actor-Critic算法中,我们需要做两组近似,第一组是策略函数的近似:

第二组是价值函数的近似,对于状态价值和动作价值函数分别是:

对于我们上一节讲到的蒙特卡罗策略梯度 reinforce 算法,我们需要进行改造才能变成Actor-Critic算法。

首先,在蒙特卡罗策略梯度reinforce算法中,我们的策略的参数更新公式是:

梯度更新部分中,∇θlogπθ(st,at) 是分值函数,不用动,要变成 Actor 的话改动的是 vt ,这块不能再使用蒙特卡罗法来得到,而应该从 Critic 得到。
        而对于Critic来说,这块是新的,不过我们完全可以参考之前DQN的做法,即用一个Q网络来做为 Critic , 这个 Q 网络的输入可以是状态,而输出是每个动作的价值或者最优动作的价值。
        现在我们汇总来说,就是 Critic 通过Q网络计算状态的最优价值 vt , 而 Actor 利用 vt 这个最优价值迭代更新策略函数的参数 θ ,进而选择动作,并得到反馈和新的状态,Critic 使用反馈和新的状态更新 Q 网络参数 w , 在后面 Critic 会使用新的网络参数 w 来帮 Actor 计算状态的最优价值 vt。

2.Actor-Critic算法可选形式

在上一节已经对 Actor-Critic 算法的流程做了一个初步的总结,不过有一个可以注意的点就是,我们对于 Critic 评估的点选择是和上一篇策略梯度一样的状态价值 vt,实际上,我们还可以选择很多其他的指标来做为 Critic 的评估点。而目前可以使用的 Actor-Critic 评估点主要有:

 

3.Actor-Critic算法流程

这里给一个Actor-Critic算法的流程总结,评估点基于 TD 误差,Critic 使用神经网络来计算 TD 误差并更新网络参数,Actor 也使用神经网络来更新网络参数  

算法输入:迭代轮数 T,状态特征维度 n, 动作集 A, 步长 α,β,衰减因子 γ ,探索率 ϵ,Critic 网络结构和 Actor 网络结构。

输出:Actor 网络参数 θ, Critic网络参数 w

  1. 随机初始化所有的状态和动作对应的价值 Q。

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

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

          b) 在 Actor 网络中使用 ϕ(S) 作为输入,输出动作 A ,基于动作 A 得到新的状态 S′,反馈 R。

          c) 在 Critic 网络中分别使用 ϕ(S),ϕ(S‘′) 作为输入,得到Q值输出 V(S),V(S′)

          d) 计算 TD 误差 δ=R+γV(S′)−V(S)

          e) 使用均方差损失函数  ∑(R+γV(S′)−V(S,w))2 作 Critic 网络参数 w 的梯度更新

          f)  更新 Actor 网络参数 θ:

θ=θ+α∇θlogπθ(St,A)δ

对于 Actor 的分值函数 ∇θlogπθ(St,A) ,可以选择 softmax 或者高斯分值函数。

上述 Actor-Critic 算法已经是一个很好的算法框架,但是离实际应用还比较远。主要原因是这里有两个神经网络,都需要梯度更新,而且互相依赖。但是了解这个算法过程后,其他基于 Actor-Critic 的算法就好理解了。

4.Actor-Critic算法实例

5.Actor-Critic算法小结

基本版的Actor-Critic算法虽然思路很好,但是由于难收敛的原因,还需要做改进。
        目前改进的比较好的有两个经典算法,一个是 DDPG 算法,使用了双 Actor神经网络和双Critic 神经网络的方法来改善收敛性。这个方法我们在从 DQN 到 Nature DQN 的过程中已经用过一次了。另一个是 A3C 算法,使用了多线程的方式,一个主线程负责更新 Actor 和 Critic 的参数,多个辅线程负责分别和环境交互,得到梯度更新值,汇总更新主线程的参数。而所有的辅线程会定期从主线程更新网络参数。这些辅线程起到了类似 DQN 中经验回放的作用,但是效果更好。

参考文章:强化学习(十四) Actor-Critic - 刘建平Pinard - 博客园 (cnblogs.com)

Actor-Critic算法相关推荐

  1. 强化学习论文笔记:Soft Actor Critic算法

    Soft Actor Critic是伯克利大学团队在2018年的ICML(International Conference on Machine Learning)上发表的off-policy mod ...

  2. CS294(285) Actor Critic算法系列

    CS294(285) Actor Critic算法系列 CS294(285) Actor Critic之agents(https://duanzhihua.blog.csdn.net/article/ ...

  3. 深度增强学习--Actor Critic

    Actor Critic value-based和policy-based的结合 实例代码 1 import sys 2 import gym 3 import pylab 4 import nump ...

  4. 【强化学习笔记】2020 李宏毅 强化学习课程笔记(PPO、Q-Learning、Actor + Critic、Sparse Reward、IRL)

    前言 如果你对这篇文章感兴趣,可以点击「[访客必读 - 指引页]一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接. 文章目录 前言 Introduction Two Learning Mod ...

  5. actor critic玩cartpole

    只能玩到reward=200多,git actor critic采用单步更新,每一步游戏后Actor和Critic都进行学习. Actor网络使用交叉熵损失,是因为r_s为正时需要增加选择a_s的概率 ...

  6. 【强化学习】Actor Critic原理

    PG算法是一种只基于policy的一种方法,存在的问题就是该算法需要完整的状态序列,且单独对策略函数进行迭代更新,不太容易收敛. Actor-critic方法呢是一种将 策略(Policy Based ...

  7. An Actor–Critic based controller for glucose regulation in type 1 diabetes

    a b s t r a c t \qquad 控制器基于Actor-Critic(AC)算法,受强化学习和最优控制理论(optimal control theory)的启发.控制器的主要特性是: 同时 ...

  8. 深度强化学习Soft-Actor Critic算法高性能Pytorch代码(改写自spinningup,低环境依赖,低阅读障碍)

    写在前面 DRL各种算法在github上各处都是,例如莫凡的DRL代码.ElegantDRL(易读性NO.1) 很多代码不是原算法的最佳实现,在具体实现细节上也存在差异,不建议直接用在科研上. 这篇博 ...

  9. 【强化学习】Actor-Critic(演员-评论家)算法详解

    1 Actor Critic算法简介 1.1 为什么要有Actor Critic Actor-Critic的Actor的前身是Policy Gradient,这能让它毫不费力地在连续动作中选取合适的动 ...

  10. 强化学习70年演进:从精确动态规划到基于模型

    作者 | Nathan Lambert 译者 | 泓礼 编辑 | 夕颜 出品 | AI科技大本营(ID: rgznai100) [导读]这是一份帮你了解强化学习算法本质的资源,无需浏览大量文档,没有一 ...

最新文章

  1. vim php psr2 插件,将vim打造成c++超级ide(vim插件安装)
  2. “SQL Server does not allow remote connections”错误的解决
  3. 牛客题霸 NC22 合并两个有序的数组
  4. 请简单叙述微型计算机的诞生,2012湖南省计算机等级考试试题 二级C试题考资料...
  5. 使用verilog实现基于FPGA的TDC设计
  6. angularjs详解
  7. 华为徐直军:今年超3亿设备搭载鸿蒙系统
  8. 华为全球分析师大会:HMS Core全球开发者应用集成的数量加速增长,打造全场景智慧体验...
  9. 使用Unity开发RPG游戏完整指南(全)
  10. 类图中表达总体与局部的关系_软件工程测试题3
  11. 2017cpu服务器性能排行,2017年CPU天梯图 最新CPU性能排名
  12. MODULE_AUTHOR 功能
  13. 程序与生活:你是软件程序员还是软件工程师?
  14. The client-side rendered virtual DOM tree is not matching server-rendered content. 问题
  15. 机器学习综述——机器学习理论基础与发展脉络
  16. Markdown 文本编辑图片居中显示以及题注
  17. 嵌入式消息队列artemis
  18. MemFire教程|PostgreSQL RLS介绍
  19. 【工作经验分享】,大厂面试经验分享
  20. 二次开发发票管理软件应该注意的事项

热门文章

  1. Redis底层原理之跳跃表
  2. 02JavaWeb之MyBatis详解、SqlSession执行、mapper代理执行、动态SQL语句、注解开发、resultMap、resultType、多参数传递
  3. 新手选车系列之(二): 选欧美车还是亚洲车
  4. joseph环c语言课程设计,Joseph环的C语言模拟实现
  5. 大容量数据传输,原来可以这么玩
  6. Synaptics触摸板无法实现双指单击模拟鼠标右键点击的解决办法
  7. LeetCode231_231. 2 的幂
  8. 【已解决】react developer tools F12 开发者工具中看不到
  9. vant weapp 多选上传图片_使用vant组件upLoad上传视频或图片
  10. 个人拍脑门想起来的100本书