本文是自己学习David Silver课程的学习笔记:原视频可以在油管或者B站上搜到。
PPT的连接如下:http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html。网速慢的话可以点击这里。
这里将会讲更深层次的东西,我们将会讲强化学习是如何应用到实际生活当中的。
强化学习需要解决large-scale的问题,什么是large-scale问题呢?
我们之前说的都是基于表格的强化学习算法,每个状态、每个动作值函数在表格中都有体现,但是对于Large-Scale问题,这种基于表格的方法并不使用,因为其状态空间、动作空间都是巨大的,我们无法去做这样一张巨大的表格。所以我们需要建立一个函数逼近模型,来逼近这个表格。
自然而然我们就会想到将状态值函数,动作值函数,利用一个近似函数将其替代。因为这两者是我们选择动作的依据,如果这两者被近似替代地很成功的话,我们就可以很好地做出动作,从而实现整个强化学习算法。
针对大规模MDP问题,我们无法将整个强化学习探索过程中的数据都给记录下来,因为数据量太大了,就算你可以这样记录下来,那么在计算过程当中也会非常地幔。
使用参数w来做这个值函数近似还有一些好处,我们可以对未知状态做出一个预测,因为理论上我们是拟合了所有的状态值函数。如果我们想要更新这些参数的话,我们就需要用到之前所说的蒙特卡洛方法,TD方法。
参数近似的方法有很多种:
- Linear combinations of features(组合特征)
- Neural network(神经网络)
- Decision tree(决策树)
- Nearest neighbour(邻近取样)
- Fourier / wavelet base(傅里叶变换,小波)
在这里我们主要考虑可微函数逼近(differentiable function approximators)像组合特征、神经网络。在训练神经网络的时候我们一般需要数据满足独立同分布。但是在强化学习智能体与环境交互时产生的数据是不满足独立同分布的,由此我们需要很多技巧来处理这件事情,我们之后再说。
在使用神经网络进行非线性逼近的话,我们需要先了解一下梯度下降算法:
那么我们将要如何将梯度下降算法应用到深度强化学习当中去呢?假设当前的状态值函数真实值是7,我们神经网络的估计值是7.5,那么我们可以利用最小化均方差来训练神经网络,从而完成神经网络对值函数的近似。
神经网络的输入就是能够充分表达状态的特征向量,但是很多时候我们很难去提取这样的特征向量,现在一般常用的做法是直接将图像像素信息输入进神经网络当中去。
在数学上来表示这样的公式如下图所示:
强化学习与监督学习不一样,监督学习是直接告诉你应该需要输出的是什么,强化学习只是告诉你你输出的是好的还是坏的,有多好还是有多坏。都是通过奖励来对其进行衡量。由于强化学习的学习目标是使得整个回合的奖励最大,由此提出了蒙特卡洛的方法,这样的计算量太大,提出了基于TD的方法,这种方法的好处就是我们不必等到整个回合结束再来对其进行更新。
蒙特卡洛方法是一个无偏估计的方法,TD的方法是一个有偏的估计方法。
由于强化学习在处理序列决策问题,因此数据之间的相关性比较重,DeepMind团队提出了经验回放(experience replay)的技巧:
将数据放入经验库当中,然后随机对其进行抽样,这种方法我们就能够打破数据之间的相关性。这个方法是在DQN算法里面被提出来的,同时被提出来的还有设立目标网络: