李宏毅机器学习(28)

本文深入浅出地介绍了强化学习的基本概念,包括状态、行动和奖励,以及Policy-based(基于策略)和Critics-based(基于评估)的方法。重点讲解了Actor学习Actor函数,如何通过梯度下降优化函数,以及如何通过蒙特卡洛和时序差分学习来改进状态评价函数Vπ。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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θ的期望值。
在这里插入图片描述

τ={s1,a1,r1,s2,a2,r2,...,sT,aT,rT}τ=\{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(τθ)求微分,然后进行一点变形,变成求▽logP(τ∣θ)▽logP(τ|θ)logP(τθ)
在这里插入图片描述
在这里插入图片描述

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

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

还存在一个问题,我们看下图的例子。
在原始公式中,一个τττ周期内的所有Action所乘上的权重都是相同的(R(τ)R(τ)R(τ))。这似乎是反直觉的:一个周期内有那么多Action,他们有好有坏,为什么权重相同呢?而且,有时候在周期内某个Action影响力可能很大,从而掩盖了其他Action的影响力,让其他Action“躺赢”或者“背锅”显然是不合适的。
在这里插入图片描述
在这里插入图片描述
因此,我们重新设计公式:我们让每个Action的权重改为从这个Action到结束的Reward和,即:每个Action只对自己之后的事情负责,因为之前的事情和他没什么关系。这显然是符合直觉的。
在这里插入图片描述
我们还可以在再进一步,加入一组权重γxγ^xγx表示距离为xxx的两个Action互相之间的影响。一般来说γ<1γ<1γ<1并且随着距离增大而减小。毕竟距离越远彼此之间越没啥关系。
我们将权重这一项统记为Aθ(st,at)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后将结果尽量向某一局游戏结果贴合。
在这里插入图片描述
第二种,时序查分算法。我们只需要知道从状态sas_asa到状态sbs_bsb需要做Actionaaa,获得Rewardrrr。那我们就可以训练一个Network,让Vπ(sb)−Vπ(sa)V^π(s_b)-V^π(s_a)Vπ(sb)Vπ(sa)尽可能接近rrr
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值