深度强化学习实验室

官网:http://www.neurondance.com/

论坛:http://deeprl.neurondance.com/

作者:高新根博士(DeepRL-Lab研究员)

编辑:DeepRL

本文章读者能简单理解如下几个问题:

  • 估计值函数的主要方法有哪些?(文章中将简单介绍这些方法)

  • 为什么说TD(Temporal Difference Method )算法的估计量高偏差低方差?

  • 为什么说MC(Monte Carlo Method)算法的估计量无偏差高方差?

  • -return如何做到在方差和方差间找平衡点的?

  • TD()为何比-return有计算方面的优势?

  • TD、MC、-return以及TD()之间的关系是什么?

  • 策略梯度(Policy Gradient)方法为何经常用到优势函数(Advantage Function)?

  • 最常用的优势函数的估计方法GAE(Generalized Advantage Estimation)与 -return有什么关系?

大部分强化学习算法中需要用到值函数(状态值函数或者动作值函数),估计值函数的方法主要有时序差分(Temporal-difference, TD)算法和蒙特卡罗(Monte Carlo, MC)方法。这些方法各有优缺点,TD算法的估计量具有高偏差(Bias)低方差(Variance)的特点,相反,MC算法的估计量具有低偏差高方差的特点。Hajime在2000年提出了一种巧妙地在偏差与方差间找平衡的方法,称为-return(按照Sutton的RL书的叫法)。TD()是Sutton提出的能够使计算消耗更平均的-return的变种。

此外,一部分策略梯度(Policy Gradient)的方法经常会选择优势函数来构造策略梯度。泛化优势估计(Generalized Advantage Estimation, GAE)是John Schulman提出的估计优势函数的方法,它实际是将-return方法应用于估计优势函数的方法。

本篇文章将几个最基本的估计值函数的方法(包括TD、MC、-return和TD())以及估计优势函数的方法(GAE)放在一起介绍,为的是梳理这些方法之间的关系(文末讨论),希望对读者有所帮助。除了常规介绍这些方法的具体内容外,笔者总结本文与其它相关文章的增加的主要信息有:

  • 简单分析了这些方法偏差与方差的高低特点,比如为何说TD算法高偏差低方差。

  • 简单梳理了这些方法之间的关系

1.值函数的估计方法

1.1 时序差分算法

强化学习中Agent与环境的交互过程是由马尔可夫决策过程(Markov Decision Process, MDP)描述的。MDP对环境做了一个假设,称作马尔可夫性质,即下一时刻的状态只由上一时刻的状态和动作决定。该假设下,状态转移概率分布可以被简化:

马尔可夫性质决定了值函数(状态值与动作值函数)可以写成递归的形式,即贝尔曼等式:其中  为状态转移概率分布。

贝尔曼等式清晰地展示了值函数之间的迭代规律,或者说是相邻两个时刻的值函数间的关系: (以状态值函数为例)当前时刻的状态值等于下一时刻的回报值与下一时刻的状态值的和的期望。

假设当前需要估计某个策略  对应的值函数  ,我们可以用一个参数化函数  来近似真实的状态值函数  。贝尔曼等式可以用于作为评判近似的值函数是否接近真实值函数的标准:如果近似的值函数也具有贝尔曼等式的迭代性质,就可以认为  是  合适的近似函数。按照该思路,可以用如下的时序差分误差作为度量  性能的标准,即TD-error或者TD-residual:

一种常见的方式是最小化TD-error的平方值为目标指导参数  的优化,即求解如下最优化问题:

此外,Q函数也可以用同样的方法进行估计。

挖个坑找个时间补:TD算法可以用贝尔曼算子来做另外一种解读。

(3) TD算法的特点——高偏差低方差

TD算法可以看成是利用策略  生成的样本  ,并且使用  作为值函数  的估计量。整个优化的过程,近似值函数  与真实的值函数之间一直存在误差,它们之间的关系可以表示为:

其中,  为近似误差。

接着按照检验估计量无偏性的思路,检查估计量的期望与估计量之间是否相等。估计量  的期望可以做如下转化:

可以看出估计量中存在  这个无法避免的偏差。

此外由于估计量中的随机变量维度较少,即只有当前时刻的回报值  ,以及下一时刻的状态  ,使值函数的估计量能够保持在较低水平。

1.2 蒙特卡罗算法

题外话:这里介绍的蒙特卡洛算法是指蒙特卡罗估计(用于估计/预测值函数),区别于蒙特卡罗控制(用蒙特卡罗估计方法预测值函数并用值函数提升策略)。

(1) MC算法——基于值函数的定义

蒙特卡罗算法直接从值函数的定义出发,将回报值的累加作为值函数的估计量。假设  为策略  生成的样本,MC方法将  的折扣累加形式  作为状态  下的状态值的估计量。(Q函数也可以用同样的方法进行估计。)

(2) MC算法的特点——无偏差高方差

再一次按照检验估计量无偏性的思路,检查估计量的期望与估计量之间是否相等。MC方法对状态值的估计量的期望等于状态值函数的定义:

显然MC算法对状态值的估计量是无偏估计量。

此外由于估计量中的随机变量为t时刻之后所有的回报值  ,维度高,决定了该估计量具有高方差的特点。

1.3 -return算法

前面对TD算法和MC算法的介绍可以发现它们是两个极端:TD算法高偏差低方差,而MC算法无偏差高方差。 -return方法是一种试图在偏差和方差之间找到平衡点的方法。

我们从TD算法出发,尝试找一种降低其估计量偏差的方法。前面的分析中可以知道TD算法为了减少方差(减少估计量中的随机变量数),仅用到1步的回报值(当前时刻的回报值  )以及下一时刻的状态值  ,而状态值  中的近似误差带来了偏差,偏差为  ,受到折扣因子  加权影响的。如果用到2步的回报值,即用t和t+1时刻的回报值  、  以及t+2时刻的近似状态值  也可以作为状态值的估计量,即  ,该估计量的偏差为  ,受到权重  影响。如果继续考虑n步的情况,可以看出估计量的偏差为  ,由于  ,  随n的增大而降低,可以发现n越大偏差越小。

假设RL环境的设置是Episodic的情况(总有一个终止状态),t+N时刻为终止状态,按照上述的思路可以列出N种(n从1到N)关于的状态值的估计量:

n为1即为TD算法的估计量,n为N是MC算法的估计量。-return算法对这N个估计量进行加权平均,在TD于MC算法中找折中点,通过这种方式在偏差和方差间找平衡。加权平均的方式如下所示:

每一项前面的权重的和为1。其中  ,当  即为TD算法,当  即为MC算法。注意到n越大,对应的估计量的分量  的权重越小。

1.4 TD()算法

-return方法虽然有平衡偏差与方差的优点,但它必须用到当前时刻之后直到到达终止状态的所有数据(forward view),也就是说只有在一条episode结束后才能计算出对应的状态估计量,使得计算消耗在时间上极不平均。

TD()是利用了当前时刻之前的样本(backward view),不必等到episode结束才进行计算,时计算消耗在时间上更平均。它的思路类似于基于动量的梯度优化器,如(Adagrad、RMSProp、Adam等),让梯度不仅受当前时刻的样本影响,还收到先前梯度方向的影响。具体做法是增加一个包含先前参数梯度信息的轨迹向量:

其中,  是根据当前时刻的样本计算出的梯度分量,  包含先前样本计算出的梯度分量信息。实际梯度的方向由  决定(步长和正负由TD-error决定),即:

虽然上述操作使得TD()在计算上显得更优雅,但显然它的合理性弱于-return,实际效果也可能会弱于-return。实际上如果在TD算法中用到基于动量的梯度优化器,基本上等同于TD(  )的效果。

题外话:(off-line与on-line)如果估计值函数时,需要等到episode结束才能开始计算可以成这样的算法为off-line方法(如-return);否则称为on-line方法(如TD())。

2.优势函数的估计方法

2.1 优势函数

优势函数可以用比较直白的话来解释:它用于度量在某个状态下选取某个具体动作的合理性——它直接给出动作的性能与所有可能的动作的性能的均值的差值。如果该差值(优势)大于0,说明动作  优于平均,是个合理的选择;如果差值(优势)小于0,说明动作  次于平均,不是好的选择。度量状态下的动作  的性能最合适的形式就是动作值函数(即Q函数);而度量状态所有可能动作的性能的均值的最合适形式是状态值函数(即V函数)  。这里给出优势函数的定义式:

题外话:优势函数对于策略梯度的意义

优势函数与策略梯度(Policy Gradient)类算法天然契合。

可以将梯度式子拆成两部分看:(1)  是状态  情况下取到动作的对数似然的梯度方向。如果参数沿着该方向走,则提升了(鼓励)动作的概率;如果参数沿着该梯度的负方向走,则降低了(打压)动作的概率。(2) 这个标量决定了参数  应该沿着正方向走还是负方向走。

假设选用优势函数作为,即:

接着分析两种情况:(1):说明动作优于平均值,值得鼓励,正好它的值为正数可以让参数沿着正梯度方向走。(2)  :说明动作次于平均值,应该避免,正好它的值为负数可以让参数沿着负梯度方向走。因此说优势函数与策略梯度天然契合。

2.2 优势函数与TD-error

介绍到TD算法时提到TD-error的形式如下:

如果将优势函数稍微化简,可以发现它实际上是TD-error的期望:

也就是说可以用TD-error作为优势函数的估计量。

为了求得TD-error,需要用到值函数 ,实际算法中一般用到近似的值函数  ,因此与TD算法一样,由于近似误差的存在,直接将  作为优势函数的估计量会有较大的偏差。

2.3 泛化优势估计(GAE)

泛化优化估计(GAE)实际上是-return应用在估计优势函数的版本。可以按照介绍-return方法中的使用n步回报值的思路列出N种优势函数的估计量。

其中Sutton的书中将最后一项  称为蒙特卡罗误差(Monte Carlo error)。这些估计量的偏差同样随着n的增加而减小,方差随着n的增大而增大。GAE采用了同-return一样的加权平均方法来权衡优势函数估计量的偏差与方差:

当N趋近无穷大时,该估计量可以化简成简单的形式:

实际情况下N很难达到无穷大,因此这个形式的优势函数估计量还是有近似误差的。

3.画重点

估计值函数的方法中,TD算法方差小但偏差大;MC算法无偏但方差大;-return是一种折中又相对简单的方法,但需要采样完一整条episode才能计算(off-line)。TD()是对-return算法的改进,用类似动量优化方法(Adagrad、RMSProp、Adam等)使算法无需在采样到episode的结尾才进行计算,让计算消耗平摊在每个时间点上。GAE实际上是-return用于估计优势函数的版本。

主要参考来源

Sutton R , Barto A . Reinforcement Learning:An Introduction[M]. MIT Press, 1998.

Schulman, John & Moritz, Philipp & Levine, Sergey & Jordan, Michael & Abbeel, Pieter. (2015). High-Dimensional Continuous Control Using Generalized Advantage Estimation.

Kimura, H. and S. Kobayashi. “An Analysis of Actor/Critic Algorithms Using Eligibility Traces: Reinforcement Learning with Imperfect Value Function.” ICML (1998).

原文地址:https://zhuanlan.zhihu.com/p/345687962

总结1:周志华 || AI领域如何做研究-写高水平论文

总结2:全网首发最全深度强化学习资料(永更)

总结3:  《强化学习导论》代码/习题答案大全

总结4:30+个必知的《人工智能》会议清单

总结52019年-57篇深度强化学习文章汇总

总结6:   万字总结 || 强化学习之路

总结7:万字总结 || 多智能体强化学习(MARL)大总结

总结8:深度强化学习理论、模型及编码调参技巧

第97篇:MuZero算法过程详细解读

第96篇:  值分布强化学习(Distributional RL)总结

第95篇:如何提高"强化学习算法模型"的泛化能力?

第94篇:多智能体强化学习《星际争霸II》研究

第93篇:MuZero在Atari基准上取得了新SOTA效果

第92篇:谷歌AI掌门人Jeff Dean获冯诺依曼奖

第91篇:详解用TD3算法通关BipedalWalker环境

第90篇:Top-K Off-Policy  RL论文复现

第89篇:腾讯开源分布式多智能TLeague框架

第88篇:分层强化学习(HRL)全面总结

第87篇:165篇CoRL2020 accept论文汇总

第86篇:287篇ICLR2021深度强化学习论文汇总

第85篇:279页总结"基于模型的强化学习方法"

第84篇:阿里强化学习领域研究助理/实习生招聘

第83篇:180篇NIPS2020顶会强化学习论文

第82篇:强化学习需要批归一化(Batch Norm)吗?

第81篇:《综述》多智能体强化学习算法理论研究

第80篇:强化学习《奖励函数设计》详细解读

第79篇: 诺亚方舟开源高性能强化学习库“刑天”

第78篇:强化学习如何tradeoff"探索"和"利用"?

第77篇:深度强化学习工程师/研究员面试指南

第76篇:DAI2020 自动驾驶挑战赛(强化学习)

第75篇:Distributional Soft Actor-Critic算法

第74篇:【中文公益公开课】RLChina2020

第73篇:Tensorflow2.0实现29种深度强化学习算法

第72篇:【万字长文】解决强化学习"稀疏奖励"

第71篇:【公开课】高级强化学习专题

第70篇:DeepMind发布"离线强化学习基准“

第69篇:深度强化学习【Seaborn】绘图方法

第68篇:【DeepMind】多智能体学习231页PPT

第67篇:126篇ICML2020会议"强化学习"论文汇总

第66篇:分布式强化学习框架Acme,并行性加强

第65篇:DQN系列(3): 优先级经验回放(PER)

第64篇:UC Berkeley开源RAD来改进强化学习算法

第63篇:华为诺亚方舟招聘 || 强化学习研究实习生

第62篇:ICLR2020- 106篇深度强化学习顶会论文

第61篇:David Sliver 亲自讲解AlphaGo、Zero

第60篇:滴滴主办强化学习挑战赛:KDD Cup-2020

第59篇:Agent57在所有经典Atari 游戏中吊打人类

第58篇:清华开源「天授」强化学习平台

第57篇:Google发布"强化学习"框架"SEED RL"

第56篇:RL教父Sutton实现强人工智能算法的难易

第55篇:内推 ||  阿里2020年强化学习实习生招聘

第54篇:顶会 || 65篇"IJCAI"深度强化学习论文

第53篇:TRPO/PPO提出者John Schulman谈科研

第52篇:《强化学习》可复现性和稳健性,如何解决?

第51篇:强化学习和最优控制的《十个关键点》

第50篇:微软全球深度强化学习开源项目开放申请

第49篇:DeepMind发布强化学习库 RLax

第48篇:AlphaStar过程详解笔记

第47篇:Exploration-Exploitation难题解决方法

第46篇:DQN系列(2): Double DQN 算法

第45篇:DQN系列(1): Double Q-learning

第44篇:科研界最全工具汇总

第43篇:起死回生|| 如何rebuttal顶会学术论文?

第42篇:深度强化学习入门到精通资料综述

第41篇:顶会征稿 ||  ICAPS2020: DeepRL

第40篇:实习生招聘 || 华为诺亚方舟实验室

第39篇:滴滴实习生|| 深度强化学习方向

第38篇:AAAI-2020 || 52篇深度强化学习论文

第37篇:Call For Papers# IJCNN2020-DeepRL

第36篇:复现"深度强化学习"论文的经验之谈

第35篇:α-Rank算法之DeepMind及Huawei改进

第34篇:从Paper到Coding, DRL挑战34类游戏

第33篇:DeepMind-102页深度强化学习PPT

第32篇:腾讯AI Lab强化学习招聘(正式/实习)

第31篇:强化学习,路在何方?

第30篇:强化学习的三种范例

第29篇:框架ES-MAML:进化策略的元学习方法

第28篇:138页“策略优化”PPT--Pieter Abbeel

第27篇:迁移学习在强化学习中的应用及最新进展

第26篇:深入理解Hindsight Experience Replay

第25篇:10项【深度强化学习】赛事汇总

第24篇:DRL实验中到底需要多少个随机种子?

第23篇:142页"ICML会议"强化学习笔记

第22篇:通过深度强化学习实现通用量子控制

第21篇:《深度强化学习》面试题汇总

第20篇:《深度强化学习》招聘汇总(13家企业)

第19篇:解决反馈稀疏问题之HER原理与代码实现

第18篇:"DeepRacer" —顶级深度强化学习挑战赛

第17篇:AI Paper | 几个实用工具推荐

第16篇:AI领域:如何做优秀研究并写高水平论文?

第15篇:DeepMind开源三大新框架!

第14篇:61篇NIPS2019DeepRL论文及部分解读

第13篇:OpenSpiel(28种DRL环境+24种DRL算法)

第12篇:模块化和快速原型设计Huskarl DRL框架

第11篇:DRL在Unity自行车环境中配置与实践

第10篇:解读72篇DeepMind深度强化学习论文

第9篇:《AutoML》:一份自动化调参的指导

第8篇:ReinforceJS库(动态展示DP、TD、DQN)

第7篇:10年NIPS顶会DRL论文(100多篇)汇总

第6篇:ICML2019-深度强化学习文章汇总

第5篇:深度强化学习在阿里巴巴的技术演进

第4篇:深度强化学习十大原则

第3篇:“超参数”自动化设置方法---DeepHyper

第2篇:深度强化学习的加速方法

第1篇:深入浅出解读"多巴胺(Dopamine)论文"、环境配置和实例分析

【干货】全面总结(值函数与优势函数)的估计方法相关推荐

  1. C++(13)--函数的进阶:内联、传递引用、参数默认值、重载、函数模板

    模块化编程--函数的进阶 1.内联函数 1.1 inline基本情况 1.2 inline 的前世今生-带参的宏替换 2.传递引用(重点) 2.1引用.理由.注意事项 2.3 交换两个变量的数值 3. ...

  2. c语言 方程改main的值_c语言main函数里的参数argv和argc解析

    前言 一般我们平时写main函数的话,一般都是写不带参数的比较多,而且也习惯了这样写:其实标准的形式写法,main函数是带两个参数的,这两个参数分别是:argc和argv,那么这两个参数是表示什么意思 ...

  3. JS箭头函数的优势在哪里

    本文我们介绍箭头(arrow)函数的优点. 更简洁的语法 我们先来按常规语法定义函数: function funcName(params) { return params + 2; } funcNam ...

  4. py6_Python 内置函数/普通自定义函数 及参数和返回值

    ################################################## 目录 活动简介 Python 函数参数 如何定义一个函数 示例定义一个无参函数 形参和实参的概念 ...

  5. C语言:srand函数与rand函数的使用(纯干货)【易懂】

    C语言:srand函数与rand函数的使用(纯干货)[易懂] 文章目录 C语言:srand函数与rand函数的使用(纯干货)[易懂] 一.rand() 二.srand() 三.time() 四.运用: ...

  6. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  7. Go 学习笔记(15)— 函数(01)[函数定义、函数特点、多值返回、实参形参、变长参数,函数作为参数调用]

    1. 函数定义 Go 语言最少有个 main() 函数.函数声明告诉了编译器函数的名称,返回类型和参数. func funcName(parameter_list)(result_list) {fun ...

  8. python函数的用法详解(作用、定义、调用、函数参数、函数返回值、函数说明文档、函数嵌套使用)

    1. 函数的作⽤ 函数就是将⼀段具有独⽴功能的代码块整合到⼀个整体并命名,在需要的位置调⽤这个名称即可完成对应的需求. 函数在开发过程中,可以更⾼效的实现代码重⽤. 2. 函数的使⽤步骤 2.1 定义 ...

  9. eviews怎么回归道格拉斯生产函数_【干货分享】Eviews估计方法汇总

    1最小二乘法 (1)普通最小二乘估计(OLS):这是使用的最为普遍的模型,基本原理就是估计残差平方和最小化,不予赘述.(2)加权最小二乘估计(WLS)       Eviews路径:LS模型设定对话框 ...

最新文章

  1. linux 下 select 函数的用法
  2. 本地连接 阿里云 window 服务器mysql 总是2003
  3. 结婚戒指为什么戴在无名指上的原因
  4. Codeforces problem 67E(多边形求内核的应用)
  5. 解决IE10以下对象不支持“bind“属性或方法
  6. ElasticSearch对地理数据查询(二)
  7. 排序算法总结与C代码
  8. NodeJs将项目上传至服务器
  9. Node JS Buffer使用理解
  10. 全解消能减震神器之“黏滞阻尼器”(上)
  11. 计算机桌面任务栏窗口对话框菜单的功能,电脑下方的任务栏不显示怎么办 在任务栏和开始菜单属性对话框...
  12. nginx的配置优化
  13. 如何选择APP内测分发平台?五年开发者亲述
  14. 把 Win 8.1 升级成 Windows 2012 R2 (再续)
  15. 升级!鹏业云计价i20(西藏)软件V11.0.27版本
  16. Hadoop入门——初识Hadoop
  17. Htc vive Unity 新教程
  18. 大工18秋计算机1答案,大工18秋《专业英语(计算机英语)》在线作业1.docx
  19. [译] 为何前端开发如此不稳定
  20. docker容器的存储管理

热门文章

  1. PCIE之PCB设计规范
  2. ati jti jwt 和_什么是JWT
  3. 重阳节绘画软件测试,2016九九重阳节绘画
  4. 卖家付出佣钱的付出宝账户
  5. 【WPF学习手记】C#产生0~1之间的随机数
  6. 是学Java好呢?还是学C++更有前途?
  7. 机器学习KNN算法实践:预测城市空气质量
  8. 人生得意马蹄急,成长的痛,坚持痛并快乐
  9. Oracle EBS Interface/API(20)-PR自动创建一揽子发放实例
  10. 也说linux使用squid和squidGuard配置代理服务器