李宏毅机器学习系列-强化学习之Q-Learning

评判家(Critic)

评判家基于价值的一种学习方式,我们前面说的是基于策略的。
评判家在评判什么呢,他不想策略决定我们要用什么action,而是去评价某一个actor π \pi π有多好。
他有一个状态价值函数 V π ( s ) V^\pi(s) Vπ(s),就是评价在给定一个actor π \pi π时,看到某个s状态后,一直玩到游戏结束,累计奖励的期望是多少,其实就是输入一个s,输出一个数值:
在这里插入图片描述
举个例子,比如下面的,第一个状态下的V是比较高的,因为他还有好多外星人没打,第二个就稍微小一点了,防护罩也没了,怪也近了:
在这里插入图片描述
其实V这个函数是衡量某一个actor的好坏,因为你想上面的第一张图,同样这个状态,如果是一个好的actor可能可以全部收割,那分数就高了,但是如果是个不好的,都不会移动,不会专门打,那就惨了,所以V跟actor是有关的。

比如棋魂里的例子,以前的啊光用大马步飞是不太好的,因为以前没什么经验,也就对应的actor不怎么样,会影响后面的奖励,但是现在的阿光变强了,用大马步飞可能就比较合适,不同的actor在不同的状态,会影响后面的累计奖励的期望。比如说当你还是小孩的时候,别想着要开车,开车会很惨的,当你18岁成年了,那你可以开车了,开的稳稳的:
在这里插入图片描述

怎么衡量 V π ( s ) V^\pi(s) Vπ(s)

蒙特卡洛法(MC)

这个方法就可以看成一个回归问题,从某个 s a s_a sa时候到游戏最后的累计奖励为 G a G_a Ga,从某个 s b s_b sb时候到游戏最后的累计奖励为 G b G_b Gb,我们希望模型输出的V跟他们越接近越好。但是这个方法就是要把游戏给玩完,有些游戏很长,就尴尬了:
在这里插入图片描述

时序差分算法(TD)

因为蒙特卡洛法要把游戏玩完才算,这样很耗时,收集样本就比较困难,那么看看时序差分算法,他不需要把游戏玩完,只需要在某个 s t s_t st下,采取 a t a_t at,获得 r t r_t rt,转到 s t + 1 s_{t+1} st+1即可。我们可以得到前一个的估计V是后一个的估计V+上前一个的奖励,即 V π ( s t ) = V π ( s t + 1 ) + r t V^\pi(s_t)=V^\pi(s_{t+1})+r_t Vπ(st)=Vπ(st+1)+rt,然后我们实际做的就是让模型输出前后两个V,求他们的差,让差和前一个状态的奖励越接近越好,貌似也是一个回归问题:
在这里插入图片描述

MC和TD对比

我们知道MC是要把游戏玩完为止的,因为游戏一般都具有随机性,每一步的奖励都可能是随机的,所以最后的累计奖励可能是不一样的,所以会导致比较大的方差。而TD只是某一个状态的奖励,方差相对较小,但是 V π ( s t + 1 ) V^\pi(s_{t+1}) Vπ(st+1)可能会不准确,那样就会有影响:
在这里插入图片描述
举个例子,比如下面的8次游戏:
在这里插入图片描述
我们可以算 V π ( s b ) = 3 / 4 V^\pi(s_{b})=3/4 Vπ(sb)=3/4这个没有问题但是 V π ( s a ) V^\pi(s_{a}) Vπ(sa)呢,用MC方法算起来就是0,因为最后得到的奖励是0,如果用TD的话,应该是 V π ( s a ) = V π ( s b ) + 3 / 4 + 0 = 3 / 4 V^\pi(s_{a})=V^\pi(s_{b})+3/4+0=3/4 Vπ(sa)=Vπ(sb)+3/4+0=3/4,所以用不同的方法来计算是不同的,也就是说不同的方法可能有不同的假设,比如MC可能就是假设 s b s_b sb受到了 s a s_a sa的影响,使得奖励是0了,但是 s b s_b sb的期望是3/4,可能刚好是运气不好巧合了,这个时候用TD来算 V π ( s a ) = 3 / 4 V^\pi(s_{a})=3/4 Vπ(sa)=3/4

另一种评判 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)

再来看看另外一种评判价值函数 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a),他的假设即是在s状态下,用actor π \pi π,强制采取行为a之后的累计奖励的期望值:
在这里插入图片描述
这个通常有两种形式,其实就对应的行为是连续的还是离散的,比如左边的就是连续的行为,输出就是一个值,右边的是离散的,输出的是对应行为得值:
在这里插入图片描述
然后我们看下估计Q函数的例子,玩乒乓球,有三个动作,不动,向上,向下。可以看到第一个图,球离绿色条还远的时候,其实采取哪个都可以,价值都差不多,但是第二个图,球已经在上面了,采取向上才能碰到球,估计值是最正的,其他都是负的,第三张图也是一样,第四章球已经远离了,采取哪个都一样:
在这里插入图片描述

Q-Learning

我们看看Q-Learning是怎么做的,首先可以找一个actor π \pi π,然后和环境做互动,收集一些数据,然后用TD或者MC的方法去训练一个 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a),之后就可以找到一个新的actor π ′ \pi' π,要比 π \pi π好,然后用他来替代 π \pi π,然后继续跟环境互动,这样循环。至于什么叫好后面会说,为什么找到的肯定比 π \pi π好后面也会证明:
在这里插入图片描述
那我们现在来讨论下,actor π ′ \pi' π更好是怎么衡量的。我们所说的更好,其实是在所有的状态s下, π ′ \pi' π的累计奖励的期望值不比 π ′ \pi' π小,也就是下面这个式子。我们知道Q的a是假设强制选的,但是更最大的可能不是同一个a,另外我们要求的是max,如果是连续的a的话可能不太好求,离散的简单了,带进去看哪个大就可以。其实没有另外一个模型 π ′ \pi' π,这个是根据Q求出来的:
在这里插入图片描述
接下来就是要证明在所有的状态s下,$V^{\pi’}(s) >=V^{\pi}(s) $,下面是证明的步骤,我希望还是听听老师讲的,用文字比较难讲,我就说下思路,思路就是把Q写成期望的形式,转换出V,然后继续用V的不等式缩放,最后会发现所要证明的:
在这里插入图片描述

目标网络的训练

你真正在做的时候其实就是是训练两个网络,一个是作为目标的,你希望训练的估计值和目标的估计值越接近越好,也就是一个回归问题,通常我们会固定住目标网络,然后训练很多次,然后把训练好的参数复制给目标网络,然后继续训练,损失函数可以是均差:
在这里插入图片描述

探索

探索的问题,也就是说,你每次都会去使得Q值最大的行为,就不会去探索其他新的行为,这样就好比你去餐馆吃饭,你点了一个菜,觉得好吃,以后可能都只会点这一个菜,或许其他的菜会更好吃。所以为了解决这个问题,有两种方法,一种是设一个值,用来随机选取a,这个值会随着训练而减小,因为训练了多了,你可能尝试了很多a,你会知道到底哪个a可以使得Q最大。另外一种方法叫做玻尔兹曼探索,把采取的行为a变成一种概率,就算可以使得Q大的a也只概率大,其他的a也是有可能被采取到的:
在这里插入图片描述

缓存(Replay Buffer)

这个就是用一个缓存区,把很多的actor π \pi π采样的信息都放进去,里面的信息是来自不同的 π \pi π的,然后满了会把老的清楚掉:
在这里插入图片描述
那么在每次迭代,我们都会取一个批次,然后更新,其实就是off-policy,但是这样有没想过每一批数据里面不一定都是 π \pi π的,而我们要学习的是 Q π Q^\pi Qπ,这样会不会有问题,一种解释是说,我们想要我们的数据越不一样越好,另外一种说是因为是off-policy,可以不是同一个 π \pi π
在这里插入图片描述

算法

最后看下算法,其实就是前面说的总结,先初始化两个网络Q和 Q ^ \hat Q Q^,一个是训练网络,一个是目标网络,参数可以一样,然后每个轮次迭代多次,每次迭代用贪心算法找出一些 ( s t , a t , r t , s t + 1 ) (s^t,a^t,r^t,s_{t+1}) (st,at,rt,st+1),放入缓存,然后从缓存里取出一批数据,然后设定目标,目标就是奖励和下一个状态最大的 Q ^ \hat Q Q^值的和,对应一个a,然后把这个a和对应的s输入Q网络中,使得Q值和y越接近越好,经过多次迭代后,把Q的参数复制给 Q ^ \hat Q Q^
在这里插入图片描述

总结

本篇主要介绍强化学习的Q-learning算法,介绍了蒙特卡罗,时序差分等方法,和一些相关的技巧和要注意的地方,虽然比较复杂,但是多看几遍还是可以理解的。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件,侵删。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值