李宏毅机器学习(28)

Deep Reinforcement Learning深度强化学习

Reinforcement Learning就是强化学习,最著名的应用就是Alpha Go。
有人认为AI=Deep Learning + Reinforcement Learning。

那么强化学习具体是什么呢?我们以下面的例子讲解:
有两个物体:机器Agent环境Environment,Agent从Environment观察到的一切东西统称为状态State,Agent对Environment的改变称为行动Action,Environment根据Action传达给Agent的叫做反馈Reward
比如下面机器把水杯打碎,又把水擦干净。
在这里插入图片描述
在这里插入图片描述
再以围棋为例,棋手就是Agent,棋局就是Environment,落子就是Action,输赢结果就是Reward。
但大多数情况,由于无法预测最后的胜负,因此Reward可能为0。
在这里插入图片描述
与监督学习对比。
监督学习要数据告诉机器该怎么做。但很多时候(比如围棋),人也不知道正确做法是什么。
而强化学习就不怕这个问题,机器会根据最后的结果自己学习如何做。
在这里插入图片描述
强化学习还可以运用于对话机器人。但面临一个问题:如何获得反馈?围棋有输赢,对话可没有。
目前没有太好的办法,只好让人来主观判断一段话将的好不好。

强化学习的难点

  1. Reward可能会延迟。有些Action不会在短期产生结果,但在长期来看很重要。
  2. Agent的行为会影响看到的数据,因此要让Agent会自己探索不同的Action。

在这里插入图片描述

Policy-based

Policy-based就是学一个Actor。所谓Actor,就是一个Function。机器观察到的state就是输入,做出的Action就是输出。而Environment对机器的Reward可以用来找出最好的Function。
在这里插入图片描述

我们知道,找一个Function有三个步骤:
在这里插入图片描述
首先,我们要决定模型,比如说模型是一个NN。输出就是选择不同Action的几率。
在这里插入图片描述

然后,我们要决定如何评价一个Function。设Actor为 π θ ( s ) π_θ(s) πθ(s)。我们 π θ ( s ) π_θ(s) πθ(s)玩一遍这个游戏就可以知道Total Reward: R θ R_θ Rθ,我们要最大化 R θ R_θ Rθ
但由于Actor和游戏本身有随机性,因此每次 R θ R_θ Rθ每次会不一样。因此我们需要最大化的是 R θ R_θ Rθ的期望值。
在这里插入图片描述

τ = { s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . , s T , a T , r T } τ=\{s_1,a_1,r_1,s_2,a_2,r_2,...,s_T,a_T,r_T\} τ={s1,a1,r1,s2,a2,r2,...,sT,aT,rT}是一轮游戏的流程, θ θ θ是当前的参数,则 τ τ τ出现的几率是 P ( τ ∣ θ ) P(τ|θ) P(τθ)
枚举所有可能的 τ τ τ,即可算出最终分数的期望值。
但实际上不可能真的穷举,我们只能让 π θ ( s ) π_θ(s) πθ(s)玩N轮游戏,得到 τ 1 , τ 2 , . . . τ N τ^1,τ^2,...τ^N τ1,τ2,...τN,计算这些情况下的 R θ R_θ Rθ平均值,近似看为期望值 R ˉ θ \bar R_θ Rˉθ
在这里插入图片描述

最后第三步,找出最好的Function。方法还是Gradient Descent。
我们要找到一组参数 θ ∗ θ^* θ来最大化 R ˉ θ \bar R_θ Rˉθ,还是老样子求微分即可。
在这里插入图片描述
注意:每次只对 P ( τ ∣ θ ) P(τ|θ) P(τθ)求微分,然后进行一点变形,变成求 ▽ l o g P ( τ ∣ θ ) ▽logP(τ|θ) logP(τθ)
在这里插入图片描述
在这里插入图片描述

最后我们得到 ▽ l o g P ( τ ∣ θ ) = ∑ t = 1 T ▽ l o g P ( a t ∣ s t , θ ) ▽logP(τ|θ)=\sum_{t=1}^{T}{▽logP(a_t|s_t,θ)} logP(τθ)=t=1TlogP(atst,θ),即在当前参数 θ θ θ和观察到 s t s_t st时,做出Action a t a_t at的概率求log和。
这也是很符合直觉的。当我们在某一情况下采取了某一行动,发现结果是好的,那我们当然会增加这个几率。反之会降低这个几率。
在这里插入图片描述

我们观察到 ▽ l o g P ( a t n ∣ s t n , θ ) = ▽ P ( a t n ∣ s t n , θ ) P ( a t n ∣ s t n , θ ) ▽logP(a^n_t|s^n_t,θ)=\frac{▽P(a^n_t|s^n_t,θ)}{P(a^n_t|s^n_t,θ)} logP(atnstn,θ)=P(atnstn,θ)P(atnstn,θ),为什么要除以 P ( a t n ∣ s t n , θ ) P(a^n_t|s^n_t,θ) P(atnstn,θ)呢?因为我们发现,有但Action可能会出现多次,就算他的回报可能不是很好,但积少成多最后机器就会选择这个Action,尽管实际上一些这个Action并不怎么样。而真正很好的Action可能很难出现,但这才是通关的关键。因此我们要除以 P ( a t n ∣ s t n , θ ) P(a^n_t|s^n_t,θ) P(atnstn,θ)来消除出现次数对Gradient Descent的影响。
在这里插入图片描述
但有一个问题:在理想情况下,Reward比较小的Action出现几率会越来越小(就算他的Reward是正的),只有Reward相对大的Action几率才会变大。但由于我们是对每个Action进行抽样,有可能某些Action没被抽样到(比如那些Reward很大的Action),这样就会让那些Reward很小但是正的Action几率变大。这是不利于游戏的。
所以我们可以设一个基准值 b b b,只有Reward超过 b b b的Action几率才会增加。
在这里插入图片描述

还存在一个问题,我们看下图的例子。
在原始公式中,一个 τ τ τ周期内的所有Action所乘上的权重都是相同的( R ( τ ) R(τ) R(τ))。这似乎是反直觉的:一个周期内有那么多Action,他们有好有坏,为什么权重相同呢?而且,有时候在周期内某个Action影响力可能很大,从而掩盖了其他Action的影响力,让其他Action“躺赢”或者“背锅”显然是不合适的。
在这里插入图片描述
在这里插入图片描述
因此,我们重新设计公式:我们让每个Action的权重改为从这个Action到结束的Reward和,即:每个Action只对自己之后的事情负责,因为之前的事情和他没什么关系。这显然是符合直觉的。
在这里插入图片描述
我们还可以在再进一步,加入一组权重 γ x γ^x γx表示距离为 x x x的两个Action互相之间的影响。一般来说 γ < 1 γ<1 γ<1并且随着距离增大而减小。毕竟距离越远彼此之间越没啥关系。
我们将权重这一项统记为 A θ ( s t , a t ) A^θ(s_t,a_t) Aθ(st,at)
在这里插入图片描述

Critics-based

相比于Policy,Critics的评价方法很不一样:他有一个状态评价函数 V π V^π Vπ,输入是Environment的一个状态State,然后根据Actor也就是 π π π的情况,输出从当前这个状态开始到结束,一共能获得多少期望的Reward,记为 V π ( s ) V^π(s) Vπ(s)
比如打砖块时, V π V^π Vπ会输出从现在到结束大概能得多少分。
比如下围棋, V π V^π Vπ会输出现在的局势下双方胜率是多少。
在这里插入图片描述
在这里插入图片描述
那么,如何做这个 V π V^π Vπ呢?一般有两种办法。

第一种,蒙特卡洛法。先观察 π π π玩很多次游戏。然后看到一个state后将结果尽量向某一局游戏结果贴合。
在这里插入图片描述
第二种,时序查分算法。我们只需要知道从状态 s a s_a sa到状态 s b s_b sb需要做Action a a a,获得Reward r r r。那我们就可以训练一个Network,让 V π ( s b ) − V π ( s a ) V^π(s_b)-V^π(s_a) Vπ(sb)Vπ(sa)尽可能接近 r r r
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值