强化学习算法:AC系列详解
文章目录
- AC
- A2C
- A3C
- References
AC
Actor-Critic算法分为两部分,actor的前身是policy gradient,它可以轻松地在连续动作空间内选择合适的动作,value-based的Q-learning只能解决离散动作空间的问题。但是又因为Actor是基于一个episode的return来进行更新的,所以学习效率比较慢。这时候我们发现使用一个value-based的算法作为Critic就可以使用TD方法实现单步更新,这其实可以看做是拿偏差换方差。这样两种算法相互补充就形成了我们的Actor-Critic。
Actor 基于概率分布选择行为, Critic 基于 Actor 生成的行为评判得分, Actor 再根据 Critic 的评分修改选行为的概率。
- 优点:可以进行单步更新,不需要跑完一个episode再更新网络参数,相较于传统的PG更新更快。传统PG对价值的估计虽然是无偏的,但方差较大,AC方法牺牲了一点偏差,但能够有效降低方差;
- 缺点:Actor的行为取决于 Critic 的Value,但是因为 Critic本身就很难收敛和actor一起更新的话就更难收敛了。(为了解决收敛问题, Deepmind 提出了 Actor Critic 升级版 Deep Deterministic Policy Gradient,后者融合了 DQN 的一些 trick, 解决了收敛难的问题)。
算法流程图如下所示:
AC算法与策略梯度法在第一步生成样本和第三步策略改进上并没有显著区别,主要区别在于第二步:我们现在尝试去拟合一个值函数(Q,V,A都行),以期能得到一个更好的梯度估计。我们真正从policy gradient的“估计收益”变为了“拟合模型”。
Q函数取决于状态和行为两个维度,因此输入是对应两个空间的笛卡尔积。但是维度越大,同样的样本数估计的方差越大。给定当前的状态和行为,当前的收益就确定了,可以把当前的收益提出来:
Qπ(st,at)=r(st,at)+∑t′=t+1TEπθ[r(st′,at′)∣st,at]Q^\pi(s_t,a_t)=r(s_t,a_t)+\sum_{t'=t+1}^T\mathbb{E}_{\pi_\theta}[r(s_{t'},a_{t'})|s_t,a_t]Qπ(st,at)=r(st,at)+t′=t+1∑TEπθ[r(st′,at′)∣st,at]
而后边那块求和项其实就是值函数的期望:
Est+1∼p(st+1∣st,at)[Vπ(st+1)]\mathbb{E}_{s_{t+1}\sim p(s_{t+1}|s_t,a_t)}[V^\pi(s_{t+1})]Est+1∼p(st+1∣st,at)[Vπ(st+1)]
如果我们愿意做一点近似,用轨迹样本来估计这个期望——此时不是使用整条轨迹,而仅仅是看一步以后的状态,那么我们的Q函数可以近似为:
Qπ(st,at)≈r(st,at)+Vπ(st+1)Q^\pi(s_t,a_t)\approx r(s_t,a_t)+V^\pi(s_{t+1})Qπ(st,at)≈r(st,at)+Vπ(st+1)
与此同时,优势函数也可以被近似为:
Aπ(st,at)≈r(st,at)+Vπ(st+1)−Vπ(st)A^\pi(s_t,a_t)\approx r(s_t,a_t)+V^\pi(s_{t+1})-V^\pi(s_{t})Aπ(st,at)≈r(st,at)+Vπ(st+1)−Vπ(st)
这么一来,其实我们只要去拟合值函数V就好,其他的都可以被近似表示,这样拟合神经网络的维度的输入空间就只需要是状态空间了。因为实用性和便利性,绝大多数的AC算法都是仅训练一个critic神经网络V(而非Q+V),使得输入状态为sss,输出给定策略下值函数的估计量V^π(s)\hat{V}^\pi(s)V^π(s)。
critic网络的训练数据与损失如下:
批量和在线的AC算法流程图如下所示,注意这两个都是on-policy算法:
A2C
上述AC方法中,使用状态价值函数作为baseline的方法,即使用优势函数AAA代替累积收益GGG(或是行为价值函数QQQ),称之为Advantage Actor-Critic (A2C)(AC部分最后的算法图其实就是A2C)。优势函数还有一个好处,Q−VQ-VQ−V可以反应当前状态下某一行为下的价值相对于平均价值的好坏,从而使得结果有正有负,梯度更新后会使得更新后的策略尽量避免选择这些结果为负的形态行为对,使得更新后的策略分布方差更小。
注意:REINFORECE等很多policy-based算法也会去估计值函数,但它们不是actor-critic方法,因为其中的价值函数网络并没有作为策略网络更新的目标,而仅仅是作为baseline出现的。只要价值函数网络以任何形式出现在目标中(即原来GtG_tGt的位置上),都是actor-critic方法,下图列出了各种不同actor-critic方法用到的策略梯度。
A3C
A3C是异步版本的A2C算法,其异步的方法是使用带不同探索参数的不同的CPU来采样,每个CPU上的采样积累到一定的数量之和再一起拿去更新网络参数。具体的示意图和算法如下图所示。
A3C有一个主网络,n个worker线程,每个线程里有和公共的主网络一样的网络,也是一个A2C网络,每个线程会独立的和环境进行交互得到经验数据,这些线程之间互不干扰,独立运行。从伪代码中可以看出A3C主要包括如下几个部分:
- 将主网络参数复制到n个子网络中;
- 子网络与环境交互产生样本;
- 抽取样本,计算子网络(策略网络与价值网络)的梯度并累积求和(与A2C方法一致);
- 使用得到的累积梯度更新主网络(策略网络与价值网络),回到步骤1进入下一个loop。
其实从伪代码可以看出A3C和A2C在更新参数的时候并不太一样,A3C是一种n-step的方法(降低方差的同时也降低了偏差),而A2C是一种1-step方法。
A3C的优点:
- 强化学习算法不稳定很大程度上是由于强化学习得到一连串的数据之间具有相关性,只有打破只有的相关性才能得到一个稳定的算法。前面了解到的DQN就是使用了经验池的方法来打破数据时间的相关性,通过从经验池里面采样,使得相关性较低的样本能够在同一个batch里面用来更新价值函数。这里使用了异步的方法来打破数据之间的相关性,多个actor探索到的经历不同,这样actor之间的样本相关性就降低了,从而稳定了算法。而且经验池的使用要求使用off-policy的方法,而采取异步的方法则可以使用更稳定的on-policy方法。
- 在不同的actor上能够分别采用不同的探索参数(如果不同actor探索参数不一致,感觉就得采用off-policy了),从而增加全局探索的多样性;同时,实际上不同的actor也能够去探索环境的不同部分。
注意:本篇博客所讲算法都是on-policy的。
最后对于AC方法心里有个小疑问:在AC方法更新策略网络和价值网络时(例如A3C伪代码的倒数第四第五行),如果没有target价值网络的话,更新公式中它们都会包含(R−V(si∣θv′))(R-V(s_i|\theta_v'))(R−V(si∣θv′)),价值网络的梯度更新会倾向于使这一项为0,而策略网络需要使用这一项的值来计算梯度,这会不会导致网络难收敛等问题。
一点想法:(R−V(si∣θv′))(R-V(s_i|\theta_v'))(R−V(si∣θv′))会得到当前行状态为价值相对于平均状态价值的好坏,我们希望策略梯度往(R−V(si∣θv′))(R-V(s_i|\theta_v'))(R−V(si∣θv′))大的方向更新;在计算价值网络梯度时,在当前策略下,V(si∣θv′)V(s_i|\theta_v')V(si∣θv′)应该等于RRR,因此更新梯度,希望使得R−V(si∣θv′)=0R-V(s_i|\theta_v')=0R−V(si∣θv′)=0。即整个流程都是按Bellman期望方程更新的。
(感觉还是有点迷迷糊糊,希望大家能指正。)
References
[1] CSDN:【强化学习】Actor-Critic算法详解
[2] 知乎:【强化学习入门 3】强化学习策略梯度类方法
[3] CDSN:深度强化学习8——Actor-Critic(AC、A2C、A3C)
强化学习算法:AC系列详解相关推荐
- 直播 | 256核CPU实现每秒一百万帧的Atari!强化学习并行模拟器EnvPool详解
近日,新加坡Sea AI Lab提出了一个全新的环境模拟并行执行库EnvPool,使用C++的线程池以及异步执行的机制优化了大规模RL环境的并行,能够兼容已有的gym与dm_env API以及几乎所有 ...
- 强化学习之AC系列算法(AC、A2C、A3C)
文章目录 AC算法 AC A2C A3C AC算法 我们之前讲过基于价值的强化学习,我们也讲过基于策略的强化学习,这节课所讲的AC系列算法就是同时使用了这两种方法包含有:AC--Actor Criti ...
- 三维深度学习之pointnet系列详解(一)
目前二维深度学习取得了很大的进步并且应用范围越来越广,随着三维设备的发展,三维深度学习得到了很大的关注. 最近接触了三维深度学习方面的研究,从pointnet入手,对此有了一点点了解希望记录下来并分享 ...
- 强化学习Q-learning(超详解)
如何估计Vπ(s)V^{\pi}(s)Vπ(s) Vπ(s)V^{\pi}(s)Vπ(s)代表我们的主体是π\piπ在当前局面sss得分的期望值. Monte-Carlo(MC) based appr ...
- 离线强化学习(Offline RL)系列3: (算法篇) IQL(Implicit Q-learning)算法详解与实现
[更新记录] 论文信息:Ilya Kostrikov, Ashvin Nair, Sergey Levine: "Offline Reinforcement Learning with Im ...
- 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BRAC算法原理详解与实现(经验篇)
论文原文:[Yifan Wu, George Tucker, Ofir Nachum: "Behavior Regularized Offline Reinforcement Learnin ...
- 离线强化学习(Offline RL)系列3: (算法篇) AWAC算法详解与实现
[更新记录] 论文信息:AWAC: Accelerating Online Reinforcement Learning with Offline Datasets [Code] 本文由UC Berk ...
- 离线强化学习(Offline RL)系列3: (算法篇) Onestep 算法详解与实现
[更新记录] 论文信息: David Brandfonbrener, William F. Whitney, Rajesh Ranganath, Joan Bruna: "Offline R ...
- 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BEAR算法原理详解与实现
论文信息:Stabilizing Off-Policy Q-Learning via Bootstrapping Error Reduction 本文由UC Berkeley的Sergey Levin ...
最新文章
- python合成gif动图_Python图像处理之gif动态图的解析与合成操作详解
- 基于PHP的图片共享网站设计,基于php实现的web图片共享系统(论文+程序)
- 深度学习(二十二)Dropout浅层理解
- java 生成水印,Java 用html模板生成 Pdf 加水印
- Eclipse——通过Eclipse Marketplace安装SVN插件subclipse以及简单使用
- Session的模拟
- NSLog 打印出方法函数,行数,内容
- 机械专业中的计算机应用系统,计算机在机械行业中的应用
- asdm如何管理ips模块_自动驾驶深受高精度定位困扰,ST如何应对挑战?
- 愿你与生活交手多年,依然满怀新鲜,
- android硬编码h264数据,并使用rtp推送数据流,实现一个简单的直播-MediaCodec(二)
- 【转自心声】华为眼中管理者的18种惰怠行为
- 【bWAPP】XSS通关记录
- python大学考试题及答案填空_大学慕课2020Python编程基础题目及答案
- OL3实现空间查询的代码示例
- 关于安装wordcloud库的那些事
- 科普|新消费时代,Martech 永远的神?
- Camera4 MTK camera驱动结构介绍
- linux 重建ext4分区表,Linux 格式化U盘为ext4格式以及修复分区表方法
- 内积到底是什么?和卷积的联系是什么
热门文章
- 如何把视频语音转换成文字呢?
- 如何编写没有工作经验的简历
- 小米手机通用线刷教程
- 北科大matlab期末考试,MATLAB 第一次实验课课堂作业
- 解决gns3连接不上本地的几种情况
- tomcat启动报错:apache-tomcat-6.0.45/webapps/manager does not exist or is not a readable directory
- 深扒联易融招股书:毛利率高、研发占比低,近三年合计亏约30亿
- 云计算、大数据和人工智的区别和联系
- 描述文件是什么?也算是APP的一种吗?
- iOS--系统升级之后Xcode无法识别