本章起我们开始讨论用函数来拟合估计值函数,我们用参数
1.值函数逼近
本书中所有值函数的更新都是通过目标(target)来进行的,当我们使用函数逼近时,直接将目标公式中的值函数替换为拟合的函数即可。机器学习中的监督学习算法都可以用于函数拟合,它的本质就是利用已有信息来预测未知的值函数。但是不是所有的还函数逼近方法都等价适用于强化学习。比如,复杂的神经网络和统计学方法是静态的训练集合,但是在强化学习中则要求在线的学习。此外,强化学习还要求能解决非静态的问题。
2. 预测目标
首先我们定义一个状态分布
![a97473edeb218612ea2ed7f91c2e04bd.png](https://i-blog.csdnimg.cn/blog_migrate/0d4a5bd9f3f94ee62a8028614ba393d5.png)
虽然
3. 随机梯度和半随机梯度
现在我们假设每一步我们观察到的状态值都是真实值,但是我们还是无法保证能准确拟合所有状态。假设我们采样到的状态都来自同一个状态分布,为了最小化
![96745afb9e9ec7a0a01195892fbd484a.png](https://i-blog.csdnimg.cn/blog_migrate/5102226af86299a4ecd4299a8fe88de7.png)
![304383c67e9e5eec26999f583989a1c7.png](https://i-blog.csdnimg.cn/blog_migrate/a342140ebccb6175902ee6bd433000ed.png)
SGD能确保收敛到一个局部最优点。现在我们假设目标输出为
![43ab110256b6ffd950be2aca2ad3fa03.png](https://i-blog.csdnimg.cn/blog_migrate/4fd5da334450690d8cca204d118ebe6a.png)
以MC算法为例,其梯度下降法的伪代码为:
![de9d8dd99bc0b63ec42db86dc8fdf40c.png](https://i-blog.csdnimg.cn/blog_migrate/1e8baeb0cd548291c2a1e8e7aca3be42.jpeg)
但是对于像DP这样的自展公式来说,目标内也包含了拟合参数,这样就无法进行有效地梯度下降。因此,自展方法实际上不能进行真正的梯度下降,在这些方法里,只考虑了改变参数在估计值上的影响,而忽视了它在目标上的影响。我们称这样的方法为半梯度方法(semi-gradient)。
半梯度方法虽然不如梯度法稳定,但是它学习的速度快,且可以处理连续和在线问题。
![d6f5d5f97b896aaa522ca370f2b014d4.png](https://i-blog.csdnimg.cn/blog_migrate/1735cb56967f40f63a3b48cbac1b85a9.jpeg)
状态聚集(state aggregation)是一种泛化函数拟合的形式,它将状态分组处理,对每个组使用相同的值。它是SGD的一种特殊形式。
4. 线性方法
对应每个状态,都有个特征向量x:
![acaf89155969eb6edd1703304ec7c06d.png](https://i-blog.csdnimg.cn/blog_migrate/cc9cdeea963d7952c4df2ceaac077803.png)
则用线性方法来拟合值函数就是将w和x作内积:
![0c0cb20570e474ff9a71c14466a7d2eb.png](https://i-blog.csdnimg.cn/blog_migrate/4d22effef790af2cd5e79010a4e39fc6.png)
对线性方法来说,特征是基函数,因为它们形成了一组线性基。
当使用SGD时,值函数的梯度和更新公式为:
![01388b44ed3f1d29f43d6bfeb4f79779.png](https://i-blog.csdnimg.cn/blog_migrate/733418aa1d878d2c7c11aff559a7703e.png)
![fa8e309bc71ea280adcbc707fd8dd254.png](https://i-blog.csdnimg.cn/blog_migrate/3d82a9d372019fc85921239e198451c5.png)
基本上对所有的线性方法都具有良好的收敛性,并且只有一个最优解。
对于TD(0)来说,它使用的是半梯度法,与SGD不同,其更新公式为:
![1ab1bb40058184b1488bd73115368fc9.png](https://i-blog.csdnimg.cn/blog_migrate/aab121f63041c85fce42ff3d615ae9da.png)
当系统达到稳定时,有
![fd0c7f58216c0d05cf447e0ceef98810.png](https://i-blog.csdnimg.cn/blog_migrate/fec2a47da778f45e6847be1f02ab7771.png)
![593bddd453555053f87581ad99a44a30.png](https://i-blog.csdnimg.cn/blog_migrate/bba376c5b466b72935803242293eed48.png)
因此如果系统收敛,我们可以得到:
![016f0c64802a72006187670d99b641d8.png](https://i-blog.csdnimg.cn/blog_migrate/d50613fb79af15788b444a32d372e747.png)
这个式子被称为TD定点(fixed point)。实际上所有线性半梯度TD(0)都会收敛到这个点。书上给出了详细证明。
在TD定点,误差由最小可能误差决定上界:
![0080b65c1a3ed782f3482c0b923e3336.png](https://i-blog.csdnimg.cn/blog_migrate/b37651b37c6f459a06b9bbd2806ee11b.png)
在实际中
半梯度n步TD算法如下图所示:
![59e1d84ab6386c238797cf98972ceac4.png](https://i-blog.csdnimg.cn/blog_migrate/8de548dcb2135ea84c3c87092c01dcce.jpeg)
算法中的关键公式即为:
![3712b00aa3d1fa4ca2b5d9ca38298423.png](https://i-blog.csdnimg.cn/blog_migrate/bf264e07eed2cab00c76c5099cc212a1.png)
与第七章的类似。
5. 线性方法的特征建立
本节主要介绍了几种常用的线性特征建立方式,此处不展开讲解,主要包括了多项式法(polynomials)、傅里叶基(Fourier basis)、科斯编码(coarse coding)、瓦片编码(tile coding)和径向基函数(RBF)几种方法,各有优劣。
6. 人为选择步长
大部分SGD算法需要人为设计步长,但是理论知识又无法提供帮助。书中建议了一个经验公式,设使用了
7. 非线性拟合:ANN
本节主要介绍了神经网络的基本概念与在RL中的应用,并举了一些例子,如DQN中的用CNN来提取游戏画面的特征等等。
8. 最小二乘TD
之前介绍的方式都是每一步计算一次,但当我们有更多的计算资源时,我们可以做的更好。回忆一下我们在第四节介绍的TD定点:
![1ef7c5a32b04b4074909abd83037d4f5.png](https://i-blog.csdnimg.cn/blog_migrate/7d0551086d27559c787ced4e0fcc840e.png)
实际上我们不需要一步一步计算A和b,可以用TD最小二乘算法直接求解(LSTD):
![15f2227464345f73188395c698bd86cb.png](https://i-blog.csdnimg.cn/blog_migrate/d416e75b750946db6c9ae8f962b880d4.png)
这样计算的数据利用率更高,但是也更加消耗计算资源,其计算复杂度为
但是求逆过程可以有更简单的表现形式,使其复杂度减少为
![31cc8f7b8f6afe84225bff66151b3f94.png](https://i-blog.csdnimg.cn/blog_migrate/3cdb7fa610c4250fc7452766d7973930.png)
![97385a74324eaf1b224934f7ec1bb5fa.png](https://i-blog.csdnimg.cn/blog_migrate/38e35f0907cbfc2f57fbfffd1e33ec57.jpeg)
9. 基于记忆的函数逼近
前面提到的方法都是更新参数来减小误差的,在更新后训练样本都会被丢弃。基于记忆的函数法很不同,它将训练集的数据都储存起来,当某一状态被查询时会取出相关的样本进行训练,这也被称为懒惰学习(lazy learning),因为训练的过程时被延迟的,当系统查询并给出结果后才进行。
基于记忆的学习是无参数方法,它不受限于一类固定的拟合函数,而是由训练样本决定,当训练数据足够多时,就能保证拟合函数更好的准确性。基于记忆的方法根据储存与查询方式的不同而不同。在此我们关注于本地学习方法(local-learning),它根据查询值的临近值来拟合函数。类似于传统机器学习中的KNN算法。在查询后,本地估计值被丢弃。
基于记忆的方法有很多有点,它不受参数化模型的限制,同时学习速度很快,还可以解决维度诅咒的问题。但是对于大型数据集,查询会比较耗费时间。
10. 基于核的函数逼近
这一节主要是利用核函数来进行函数拟合,与SVM的原理一样。核函数在数值上表达了不同状态的相关性。核回归是一种基于记忆的方法,通过计算核加权平均来得到结果,它拟合了目标函数(target function):
![60258638504448172d180fcf8cdd4d98.png](https://i-blog.csdnimg.cn/blog_migrate/cdaf2952d19d4d9c1c5c533b6fed80ed.png)
11. 兴趣和重要性(interest and emphasis)
在有些情况下我们只关注部分状态,函数拟合的资源是有限的,如果能更有目标性地计算,那么训练效果会更好。现在我们假设根据一个MDP有多个同步的状态分布,所有的分布都公式跟随着目标策略产生的周期而产生,但是会因为周期的初始化状态不同而不同。
现在我们介绍一些新的概念。首先我们介绍一个非负标量,随机变量
![57b684ac53c53c2cc729bf2e12e14f65.png](https://i-blog.csdnimg.cn/blog_migrate/b6d3d44ecdfbe2ff04ee9b742cd32778.png)
其中重要性计算为:
![0b793ba7399dc2b28453d60c71d9e4aa.png](https://i-blog.csdnimg.cn/blog_migrate/450d3fa7c78e71289aadd68bef1f0030.png)
12. 小结
本节我们学习了利用值函数拟合来进行同步预测。传统的方法还是基于线性拟合的梯度下降与半梯度下降法,其是利用参数化拟合来最小化均方值误差来实现的。此外,我们还介绍了非线性与非参数拟合的方式,如现在很热门的深度强化学习。