0 复习

由于actor-critic 是 policy gradient 和DQN的一个结合,所以我们先对这两个进行一个简单的复习:

0.1 policy gradient

强化学习笔记:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客

在policy network中,我们使用梯度上升的方法更新参数。梯度计算方法如下:(这里的N是采样次数,我们为了更新θ,采样N次)

这个式子是在说,我们先让 agent 去跟环境互动(采样),那我们可以计算出在某一个状态 s,采取了某一个动作 a 的概率

接下来,我们去计算在某一个状态 s 采取了某一个动作 a 之后,到游戏结束为止,累积奖励有多大。我们把从时间 t 到时间 T 的奖励通通加起来,并且会在前面乘一个折扣因子γ。

我们会减掉一个 baseline b,减掉这个值 b 的目的,是希望括号这里面这一项是有正有负的。如果括号里面这一项是正的,我们就要通过更新θ来增加在这个状态采取这个动作的机率;如果括号里面是负的,我们就要通过更新θ来减少在这个状态采取这个动作的机率。

我们把用 G 来表示累积奖励。

但 G 这个值,其实是非常不稳定的。因为互动(采样)的过程本身是有随机性的,所以在某一个状态 s 采取某一个动作 a,然后计算累积奖励,每次算出来的结果都是不一样的(因为后续各状态选取action都是按照概率选取的,所以之后各个状态、各个action的路径是不一样的) 。

假设我们可以采样足够的次数,在每次更新参数之前,我们都可以采样足够的次数,那其实没有什么问题。但问题就是我们每次做 policy gradient,每次更新参数之前都要做一些采样,这个采样的次数其实是不可能太多的,我们只能够做非常少量的采样。所以会有一定的误差。这也是policy gradient的不足之处

0.2 DQN

那么针对之前所说的policy gradient的不足之处,有没有什么办法可以让整个训练过程变得稳定一些呢?

我们在状态 s 采取动作 a 的时候,直接用一个网络去估测在状态 s 采取动作 a 的时候,G 的期望值。如果这件事情是可行的,那之后训练的时候,就用期望值来代替采样的值,这样会让训练变得比较稳定。

这边就需要引入基于价值的(value-based)的方法。基于价值的方法就是 Q-learning。Q-learning 有两种函数,有两种 critics:

  • 第一种 critic 是,它的意思是说,假设 actor 是 π,拿 π 去跟环境做互动,当我们看到状态 s 的时候,接下来累积奖励 的期望值有多少。

  • 还有一个 critic 是把 s 跟 a 当作输入,它的意思是说,在状态 s 采取动作 a,接下来都用 actor π 来跟环境进行互动,累积奖励的期望值是多少。

可以用 TD 或 MC 来估计。用 TD 比较稳定,用 MC 比较精确。

DQN 笔记 State-action Value Function(Q-function)_UQI-LIUWJ的博客-CSDN博客

1 actor-critic

随机变量 G的期望值正好就是 Q

Q-function 的定义就是在某一个状态 s,采取某一个动作 a,假设 policy 就是 π 的情况下会得到的累积奖励的期望值有多大,而这个东西就是 G 的期望值。

所以假设用来代表这一项的话,把 Q-function 套在这里就结束了,我们就可以把 Actor 跟 Critic 这两个方法结合起来。

有不同的方法来表示 baseline,但一个常见的做法是用价值函数来表示 baseline。

价值函数是说,假设 policy 是π,在某一个状态 s 一直互动到游戏结束,期望奖励(expected reward)有多大。没有涉及到动作,涉及到动作。

会是的期望值(关于不同action的期望值),所以会有正有负,所以代换后的 这一项就会是有正有负的。合理。

所以我们就把 policy gradient 里面 这一项换成了

2 advantage actor-critic (A2C)

2.1 大致思想

如果你这么实现的话,有一个缺点是:你要估计 2 个 网络:Q-network 和 V-network。不仅耗时,而且不确定性大。

事实上在这个 Actor-Critic 方法里面。你可以只估测 V 这个网络,你可以用 V 的值来表示 Q 的值,可以写成的期望值,即

你在状态 s 采取动作 a,会得到奖励 r,然后跳到状态。但是你会得到什么样的奖励 r,跳到什么样的状态,它本身是有随机性的。所以要把右边这个式子,取期望值它才会等于 Q-function。

但是在A3C 论文里面,通过实验发现,把期望值直接摘掉,效果更好,于是就有:

因为叫做 Advantage function。所以这整个方法就叫 Advantage Actor-Critic

2.2 大体流程

我们有一个 初始的 actor  π,用他去跟环境做互动,先采样收集资料。

在 policy gradient 方法里面收集资料以后,你就要拿去通过梯度上升的方法更新 policy。

但是在 actor-critic 方法里面,你先拿这些采样得到的资料去估计价值函数V(用 TD 或 MC 来估计价值函数) 。接下来,你再基于价值函数,套用下面这个式子去更新 π,得到新的actor π'。

然后你有了新的 π 以后,再去跟环境互动,再收集新的资料,去估计价值函数。然后再用新的价值函数 去更新 policy,去更新 actor。

2.3 tips

2.3.1 前几层共享参数

我们需要估计两个网络:V function 、 policy 的网络(也就是 actor)。

  • Critic 网络输入一个状态,输出一个标量。
  • Actor 网络π(s) 输入一个状态,
    • 如果动作是离散的,输出就是一个动作的概率分布。
    • 如果动作是连续的,输出就是一个连续的向量。
  • 这两个网络,actor 和 critic 的输入都是 s,所以它们前面几个层是可以共享的。

假设你今天是玩 Atari 游戏,输入都是图像。输入的图像都非常复杂,图像很大,通常你前面都会用一些 CNN 来处理,把那些图像抽象成高级的信息。把像素级别的信息抽象成高级信息这件事情,其实对 actor 跟 critic 来说是可以共用的。所以通常你会让 actor 跟 critic 的前面几个层共用同一组参数,那这一组参数可能是 CNN 的参数。

换句话说,先把输入的像素变成比较高级的信息,然后再给 actor 去决定说它要采取什么样的行为;给 critic去计算V function。

2.3.2 探索机制exploration

在做 Actor-Critic 的时候,有一个常见的探索的方法是去约束 π 的输出的分布

这个约束是希望这个分布的熵(entropy)不要太小,希望这个分布的熵可以大一点,也就是希望不同的动作它的被采用的概率平均一点。

这样在测试的时候,它才会多尝试各种不同的动作,才会把这个环境探索的比较好,才会得到比较好的结果。

3 A3C

3.1 大体思想(来自李宏毅教授)

强化学习有一个问题就是它很慢,那怎么增加训练的速度呢?李宏毅教授举了一个很直观的例子:

有一次鸣人说,他想要在一周之内打败晓,所以要加快修行的速度,他老师就教他一个方法:用影分身进行同样修行。两个一起修行的话,经验值累积的速度就会变成 2 倍,所以鸣人就开了 1000 个影分身来进行修行。这个其实就是 Asynchronous(异步的) Advantage Actor-Critic,也就是 A3C 这个方法的精神。

3.2 主体框架

        A3C 这个方法就是同时开很多个 worker,那每一个 worker 其实就是一个影分身。那最后这些影分身会把所有的经验,通通集合在一起。你如果没有很多个 CPU,可能也是不好实现的,你可以实现 A2C 就好。

  • A3C 一开始有一个 global network。假设 global network 的参数是θ1​,你会开很多个 worker。每一个 worker 就用一张 CPU 去跑。比如你就开 8 个 worker,那你至少 8 张 CPU。每一个 worker 工作前都会将 global network 的参数复制过来。
  • 接下来你就去跟环境做互动。每一个 actor 跟环境做互动,互动完之后,你就会计算出梯度。计算出梯度以后,用你的梯度去更新 global network 的参数。(就是这个 worker 算出梯度以后,就把梯度传回给中央的控制中心,然后中央的控制中心就会拿这个梯度去更新原来的参数。)

  • 下一步,这个worker将更新完的参数θ2复制回来,继续同样的过程。

注意,所有的 actor 都是平行跑的,每一个 actor 就是各做各的,不管彼此。

所以每个人都是去要了一个参数以后,做完就把参数传回去。

因此当第一个 worker 做完想要把参数传回去的时候,本来它要的参数是θ1​,等它要把梯度传回去的时候。可能别人已经把原来的参数覆盖掉,变成θ2​了。但是没有关系,global network 对θ2进行更新(使用worker传回的梯度)。

强化学习笔记:Actor-critic相关推荐

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

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

  2. 强化学习笔记 DDPG (Deep Deterministic Policy Gradient)

    1 总述 总体来讲,和actor-critic 差不多,只不过这里用了target network 和experience relay 强化学习笔记 experience replay 经验回放_UQ ...

  3. 【李宏毅深度强化学习笔记】6、Actor-Critic、A2C、A3C、Pathwise Derivative Policy Gradient

    [李宏毅深度强化学习笔记]1.策略梯度方法(Policy Gradient) [李宏毅深度强化学习笔记]2.Proximal Policy Optimization (PPO) 算法 [李宏毅深度强化 ...

  4. 莫烦强化学习笔记整理(九)DDPG

    莫烦强化学习笔记整理(九)DDPG 1.DDPG 要点 2.DDPG 算法 actor critic actor与critic结合 类似于DQN的记忆库 回合更新 链接: DDPG代码. 1.DDPG ...

  5. 深度强化学习笔记之PPO实现细节(2)

    深度强化学习笔记之PPO实现细节(2) 本文主要参考于Coding PPO from Scratch with PyTorch系列,但本文并不会像该系列一样手把手讲解全部的实现细节,只是记录一下自己在 ...

  6. 【李宏毅深度强化学习笔记】3、Q-learning(Basic Idea)

    [李宏毅深度强化学习笔记]1.策略梯度方法(Policy Gradient) [李宏毅深度强化学习笔记]2.Proximal Policy Optimization (PPO) 算法 [李宏毅深度强化 ...

  7. 强化学习笔记:PPO 【近端策略优化(Proximal Policy Optimization)】

    1 前言 我们回顾一下policy network: 强化学习笔记:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客 它先去跟环境互动,搜集很多的 路径τ.根据它搜集 ...

  8. python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)

    [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...

  9. 142页ICML会议强化学习笔记整理,值得细读

    作者 | David Abel 编辑 | DeepRL 来源 | 深度强化学习实验室(ID: Deep-RL) ICML 是 International Conference on Machine L ...

最新文章

  1. 有关自动目视解译系统的假设
  2. 044_CSS33D转换
  3. linux to extract contents between patterns
  4. DM8168学习--引导顺序
  5. Linux信号量之用户态信号量(Posix信号量->无名信号量)
  6. java8.0 platform图_Java Platform SE binary语言-Java编程32位/64位版(jdk-jeb)下载V8.0.2510.8官方安装版-西西软件下载...
  7. win7变成xp风格了怎么改回_微软看了会沉默,把 Windows 10 变成经典 98 风格
  8. 凹入表形式打印树形结构_体育场径向环形大悬挑钢结构综合施工技术研究
  9. easyui datagrid 获得共多少条记录_聊城市优化简化获得电力流程做法在全省供电系统推广...
  10. Java API —— ArrayList类 Vector类 LinkList类
  11. atitit.软件gui按钮and面板---os区-----软链接,快捷方式
  12. 魅族mx4pro刷linux,魅族MX4 Pro刷recovery教程_魅族MX4 Pro第三方recovery下载
  13. CDN月95计费方式
  14. 如何自制daplink_DAPLINK功能介绍
  15. 像素三国志在线html5小游戏,像素三国志
  16. QlikView常用函数(整理)
  17. 2022钉钉发布会|云钉低代码新模式、新能力、新机遇
  18. 笔记本电脑查看电池损耗的方法
  19. A40I工控主板(SBC-X40I)CAN接口测试
  20. 工作站(集群)使用说明及相关工具

热门文章

  1. COM 组件设计与应用(一)
  2. lwip中dns相关函数gethostbyname()的原理
  3. 使用Python进行科学计算:NumPy入门
  4. 用Spring Security实现后台登录及权限认证功能
  5. 华为手机怎么看图片属性_如果不能用联发科芯片,华为手机该怎么办,有一招就看华为用不用...
  6. java -cp 引用多个包_javac编译单文件、多文件引入jar包、-cp解决无法加载主类问题...
  7. ubuntu查看cudnn是否安装成功_深度学习之目标检测系列(0) -ubuntu18.04+RTX2080Ti+cuda+cudnn安装...
  8. mysql批量修改http为https,墨涩网 - typecho系统升级全站https数据库批量替换网址/内容——墨涩网...
  9. php 修改 wordpress,修改WordPress中文章编辑器的样式的方法详解
  10. 计数信号量的删除与状态查询