强化学习笔记:Actor-critic
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相关推荐
- 【强化学习】Actor Critic原理
PG算法是一种只基于policy的一种方法,存在的问题就是该算法需要完整的状态序列,且单独对策略函数进行迭代更新,不太容易收敛. Actor-critic方法呢是一种将 策略(Policy Based ...
- 强化学习笔记 DDPG (Deep Deterministic Policy Gradient)
1 总述 总体来讲,和actor-critic 差不多,只不过这里用了target network 和experience relay 强化学习笔记 experience replay 经验回放_UQ ...
- 【李宏毅深度强化学习笔记】6、Actor-Critic、A2C、A3C、Pathwise Derivative Policy Gradient
[李宏毅深度强化学习笔记]1.策略梯度方法(Policy Gradient) [李宏毅深度强化学习笔记]2.Proximal Policy Optimization (PPO) 算法 [李宏毅深度强化 ...
- 莫烦强化学习笔记整理(九)DDPG
莫烦强化学习笔记整理(九)DDPG 1.DDPG 要点 2.DDPG 算法 actor critic actor与critic结合 类似于DQN的记忆库 回合更新 链接: DDPG代码. 1.DDPG ...
- 深度强化学习笔记之PPO实现细节(2)
深度强化学习笔记之PPO实现细节(2) 本文主要参考于Coding PPO from Scratch with PyTorch系列,但本文并不会像该系列一样手把手讲解全部的实现细节,只是记录一下自己在 ...
- 【李宏毅深度强化学习笔记】3、Q-learning(Basic Idea)
[李宏毅深度强化学习笔记]1.策略梯度方法(Policy Gradient) [李宏毅深度强化学习笔记]2.Proximal Policy Optimization (PPO) 算法 [李宏毅深度强化 ...
- 强化学习笔记:PPO 【近端策略优化(Proximal Policy Optimization)】
1 前言 我们回顾一下policy network: 强化学习笔记:Policy-based Approach_UQI-LIUWJ的博客-CSDN博客 它先去跟环境互动,搜集很多的 路径τ.根据它搜集 ...
- python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)
[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...
- 142页ICML会议强化学习笔记整理,值得细读
作者 | David Abel 编辑 | DeepRL 来源 | 深度强化学习实验室(ID: Deep-RL) ICML 是 International Conference on Machine L ...
最新文章
- 有关自动目视解译系统的假设
- 044_CSS33D转换
- linux to extract contents between patterns
- DM8168学习--引导顺序
- Linux信号量之用户态信号量(Posix信号量->无名信号量)
- java8.0 platform图_Java Platform SE binary语言-Java编程32位/64位版(jdk-jeb)下载V8.0.2510.8官方安装版-西西软件下载...
- win7变成xp风格了怎么改回_微软看了会沉默,把 Windows 10 变成经典 98 风格
- 凹入表形式打印树形结构_体育场径向环形大悬挑钢结构综合施工技术研究
- easyui datagrid 获得共多少条记录_聊城市优化简化获得电力流程做法在全省供电系统推广...
- Java API —— ArrayList类 Vector类 LinkList类
- atitit.软件gui按钮and面板---os区-----软链接,快捷方式
- 魅族mx4pro刷linux,魅族MX4 Pro刷recovery教程_魅族MX4 Pro第三方recovery下载
- CDN月95计费方式
- 如何自制daplink_DAPLINK功能介绍
- 像素三国志在线html5小游戏,像素三国志
- QlikView常用函数(整理)
- 2022钉钉发布会|云钉低代码新模式、新能力、新机遇
- 笔记本电脑查看电池损耗的方法
- A40I工控主板(SBC-X40I)CAN接口测试
- 工作站(集群)使用说明及相关工具
热门文章
- COM 组件设计与应用(一)
- lwip中dns相关函数gethostbyname()的原理
- 使用Python进行科学计算:NumPy入门
- 用Spring Security实现后台登录及权限认证功能
- 华为手机怎么看图片属性_如果不能用联发科芯片,华为手机该怎么办,有一招就看华为用不用...
- java -cp 引用多个包_javac编译单文件、多文件引入jar包、-cp解决无法加载主类问题...
- ubuntu查看cudnn是否安装成功_深度学习之目标检测系列(0) -ubuntu18.04+RTX2080Ti+cuda+cudnn安装...
- mysql批量修改http为https,墨涩网 - typecho系统升级全站https数据库批量替换网址/内容——墨涩网...
- php 修改 wordpress,修改WordPress中文章编辑器的样式的方法详解
- 计数信号量的删除与状态查询