0 废话
好多天没写博客,不过也没闲着,把李宏毅老师的课看完了,但是就是不想总结,总觉得太费时间,回宿舍了看看他的机器学习,算是再补补基础吧,发现有一些内容还是之前没学过的,反正老师讲的有趣,看着挺好玩的。伯克利的强化学习看了两集,因为作业要申请mujoco,又发现了一个github上的一个好项目,链接为:https://github.com/dennybritz/reinforcement-learning,很多基础的程序,和sutton的书还有这个课几乎是配套的,非常好,于是开始跟着这么码代码,目前写到DQN了,写一写代码感觉对课程的内容理解的更深了,所以现在再写博客应该描述的会更清楚些。
1 介绍
Model free 的意思是指不需要知道具体的 MDP,直白些解释的话,就是不需要知道状态转移的概率,不能像动态规划那样一下把所有的状态全部更新;而 prediction 和 control 的区别是,前者使用固定的 policy,只更新值函数,而后者在更新值函数的时候也会更新 policy。
而这节课主要介绍了几种方法,分别是蒙特卡洛(Monte-Carlo)、时序查分(Temporal-Difference)和TD(),他们的区别就是估计当前状态的值需要向后走多少步,MC 是一直走知道终止状态,TD(n)就是走 n 步,而TD()是将走1步到走到终止状态的返回值做了加权平均,而是一个加权平均的参数,在后边会有介绍。
2 Monte-Carlo Learning
给定策略,和当前的状态,可得到一个马尔科夫链:
计算的返回值(相当于综合考虑的奖赏)为:
则值函数为 Gt 的期望:
具体的方法为:每次从状态 s 执行到终止状态,就累加状态 s 的总返回值S(s),状态 s 的计数 N(s) 加以,每次都更新值函数为 :
其实这个式子等价于下面的式子:
进而将 1 / N(s) 改成 为:
3 Temporal-Difference Learning
每次更新值时,只向后执行一步是TD(0),相比 MC,TD 的不同就是在于 Gt,改为了如下式子:
所以值函数的迭代公式变为了:
这里还有两个名词说明,不然写程序时看不懂,其实就是一个式子拆开写成了两个,这里直接贴PPT:
下面三个图分别介绍的TD、MC 和 DP 的区别,描述的非常好,这里就不多介绍了:
4 TD()
TD(n) 包括了 TD(0) 和 MC,当n等于0时就是TD(0),当n为无穷时就是MC如下图所示:
而 TD()就是对n从0到无穷的TD(n)的返回值做了加权平均,值越大表示约看重长远的值,也就越接近 MC ,示意图如下所示:
而 TD() 有两种计算方式,一种是 Forward-view TD(λ), 一种是 Backward View TD(λ),下面分别介绍:
4.1 Forward-view TD()
粗俗的解释:向前看的TD(lambda),就是在 St 时一直向后走,走到终止状态,然后在通过上述的式子更新V(St)这个比较容易理解,就不多赘述。
4.2 Backward-view TD()
如果是前向的话,每次更新当前的值函数都要向后迭代到终止状态,时间复杂度和 MC 是一样的,但是走的都是一样的路径,却要走很多次,所以太浪费时间,所以能不能只走一次呢?
Backwaed-view TD() 就是只走一次,只是没走一步更新前面走过的所有状态的值函数,由前面的公式知,离当前状态越远的状态受当前值的影响约小,而且这个值要每次衰减 倍,那么这个影响怎么得到的呢?答案就是保存每个状态的资格迹(eligibility trace),下面解释什么是资格迹,公式如下:
每个状态的资格迹初始值是0,然后每走一步资格迹衰减 倍,如果当前刚好是这个状态的话加 1。所以这个值就衡量的当前状态对之前所有状态的影响的大小,所以更新之前的状态的时候就用当前值乘资格迹就OK了(实际是当前值和预期值的差(叫做TD-error)乘资格迹),公式如下图所示: