加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

发布时间:2019-03-26 00:54:12 所属栏目:教程 来源:36氪
导读:编者按:本文节选自《深度学习理论与实战:提高篇 》一书,原文链接http://fancyerii.github.io/2019/03/14/dl-book/ 。作者李理,环信人工智能研发中心vp,有十多年自然语言处理和人工智能研发经验,主持研发过多款智能硬件的问答和对话系统,负责环信中

这个算法和之前的forward view实现不同,它不需要等到Episode结束就可以更新V(s)了。更新的量是δt乘以Et(s)再乘以学习率α。因此如果Et(s)很大,那说明状态s的“责任”也很大,因此它需要更新的比较多。那些状态的s对应的Et(s)大呢?显然如果St=s,那么它会较大,另外如果在这之前的Si=s,那么也会有非零的值,但是i距离t越远,衰减的就越多。如果在t时刻之前状态s完全没有出现过,那么E就是0。因为是根据当前的错误往前找“责任”,所以就是所谓的backward view,如下图所示。

注意:上面公式会对所有的状态都进行V(s)的更新,而不(只)是更新V(St),当然如果Et(s)=0,那么时间更新量是零。

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

图:Backward View

这看起来有些道理,但是这种方法怎么就和前面的forward view是一样的效果呢?下面我们来简单的验证一下。首先来验证一种特例,当λ=0时:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

也就是只有St会有更新,其余的状态的Et(s)都是0,所有上式就是:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

这正是TD(0)。

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

Backward View和Forward View等价定理

这个定理我们不做证明,但我们需要“读懂”它的意思。offline更新指的是等到一个Episode完成之后做一次更新,而不是每一步都更新,与之相反的是online更新。我们通过一个例子来说明其中的区别,假设一个Episode是:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

那么算法会对状态s更新两次,对t更新一次。如果是online的,第二次计算使用的是第一次的结果来更新:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

这里的δ1会依赖于V1(s),δ2会依赖于)V2(s)。最终的效果是:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

而offline更新公式是一样的,但是δ1δ1和δ2δ2都只依赖于V1(s)V1(s)。

关于定理,另外一点就是公式里的s是Episode里出现的所有状态。这其实s是Forward View和Backward View的区别。Forward View在每一个时刻t只更新一个状态St的V值,因为t会影响所有后面的状态,所以它要往前看知道终止时刻T,而Backward View一次更新所有的状态。因此offline的算法可以根据最初的值计算每个时刻的错误δt,然后累加起来就是整个Episode对状态s的更新。

我们不证明(验证)这个定理,但是验证一个特例(λ=1)。假设一个Episode状态s只出现了一次,并且出现在时刻k。根据Et(s)的公式:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

因为s只在时刻k出现一次,因此k时刻前E(s)都是0,而k时刻是,k+1时刻是γγ,…。根据前面TD(1)的Backward View的算法,我们可以计算到Episode结束时关于状态s累积的错误是:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

首先我们看一下上个公式的第一个等号就是代入,最后一个等号的部分就是MC的δ。如果第二个等号成立,那么就说明TD(1)和MC是等价的。之前的Forward View我们已经说明了MC和TD(1)是等价的,如果MC又和TD(1)的Backward View等价,那么就证明了TD(1)的Forward View和Backward View是等价的,我们来证明一下第二个等式∑t=kT1γtkδt=(GkV(Sk))如下(为了之前的习惯,我们把k换成了t):

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

上面的每一行的最后一列和前以后的第二列抵消掉,只剩下第一列,第二列的最后一个的γTtV(ST)和第三列的第一个V(St)。因为V(ST)=0,所以就得到上面的结果。

上面只是证明了一个状态s,因此TD(1)的Backward View是和First-Visit MC大致等价的。不完全等价的原因是MC方法是Online更新的。也存在和Online的TD Backward View的算法,它和Online的Forward View等价,我们这里不介绍了。

函数近似(Function Approximation)

前面我们介绍的都是表格(Tabular)的方法,比如Q(s,a),我们可以把状态看成行,action看成列,则这个表格的大小是 |S|×|A|。这种方法只能解决状态和action空间是离散而且比较小的问题。但是很多实际的问题的状态空间和action空间都是很大甚至是连续的空间。比如我们让Agent玩一个视频弹球游戏,状态是当前时刻和之前时刻(为了能表示弹球的速度)的两帧图像。假设图像大小是80x80,图像是RGB的,那么状态空间的大小是256^(3×80×80),存储这么大的空间是不可能的。而且即使能够存下,训练时模拟的Episode也不能每种状态都见过。

对于连续的状态空间,我们可以通过量化把它变成离散的空间,比如后面我们会用到的gym里的MountainCar,如下图所示。它的状态包括两个连续值,位置和速度,速度的范围是(-0.07,0.07),位置的范围是(-1.2,0.6),我们可以把这个范围均匀的切分为40个区间,每个区间的大小分别是0.0035和0.045。

但是怎么量化本身就是一个复杂的问题,量化的区间太大,那么就会丢失信息,而量化的区间太小,就会使得状态空间爆炸。而且有的值不是均匀分布的,某些范围可能要用比较精细的划分而另外的范围不需要精细的划分。

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

mountain car

对于连续的复杂的问题,更好的办法是使用一个函数来近似这个表格,这就叫做函数近似方法。比如把Q(s,a)表示为参数w的函数Qw(s,a)。这样不过|S|×|A|有多大,它的实际存储和计算只取决于参数ww和模型结构(简单的线性模型还是复杂的多层神经网络)。

使用函数近似Q(s, a)还有一个好处就是它的泛化能力会增强,比如我们在模拟学习的时候可能没有经历过状态(0.53, 0.12),但是我们有类似的状态(0.54, 0.11)。如果根据表格的方法,状态(0.53, 0.12)的值函数是未知的,但是使用函数之后就能计算出它们有近似的Value(通常的模型都是连续的函数)。

我们来看一个简单的函数近似方法,使用函数来近似状态值函数vπ(s),假设函数为v^(s,w)。那么我们可以把普通的MC求vπ(s)的方法改造成函数近似的算法:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(19)—— 强化学习简介(五)

使用函数近似的MC算法

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读