第十八章 Python 机器学习入门之强化学习
目录
当构建好了强化学习的算法,我们还可以对算法进行一些改进,本文主要讲了两个改进。一个是小批量另一个是软更新。
使用小批量,它可以加速强化学习算法,而且也适用于监督学习,加速监督学习算法;
软更新,它可以帮助强化学习算法更好地收敛。
Mini-batch
从监督学习开始,这是一个住房规模和价格的数据集,可以使用线性回归预测房价,为了求参数,我们提出了一个代价函数,并使用梯度下降更新参数。
我们的数据集很小,假设只有47个训练示例,那如果我们有一个非常大的数据集怎么办?假设m= 1亿,
那么我们梯度下降的每一步都需要计算超过1亿个样本的平均值,这是非常慢的。
梯度下降的每一步都意味着我们将计算这个总和或超过1亿个示例的平均值,然后我们采用一个微小的梯度下降步骤,然后返回并必须扫描我们整个1 亿个示例数据集再次计算下一步的导数。再采取另一个微小的梯度下降步骤。
以此类推,当数据集非常大时,这种梯度下降算法结果很慢。
小批量梯度下降的想法是不在此循环的每次迭代中使用所有的 1亿个训练示例,我们在这个大的数据集中选择一个较小的数据集,假设取1000个训练示例m=1000。
在每一步中,我们不会使用全部1亿个训练示例,而是选择100个或m 个主要示例的子集,代价函数前面的1/m 做出相应的更新。现在通过梯度下降的每次迭代只需要查看1000个而不是1亿个示例,每一步都需要更少的时间,这会导致更有效的算法。
在算法的第一次迭代中,可能对数据的子集部分进行迭代;第二次迭代中,对数据的子集部分进行迭代以此类推。每次迭代运行得更快。
图右边,一个房子尺寸和价格得数据集,如果我们一次使用5个数据子集来采取一个梯度下降步骤,下一次迭代中,我们采用另外5个不同得示例来进行梯度下降步骤,以此类推,我们可以对所以数据进行梯度下降。
来看一下梯度下降,对于批量梯度下降,梯度下降得每一步都会使得参数可靠,接近代价函数得全局最小值;
对于小批量梯度下降或小批量学习算法,在进行梯度下降时,它可能不会一直朝着全局最小值运动,甚至可能照着远离全局最小值得方向运行,但是对于整体(平均)来说,小批量梯度下降将趋向全局最小值,不可靠而且有点乱,但是每次迭代得计算代价要低得多(我们选择得是小批量),所以小批量学习或小批量下降,当我们有一个非常大的数据集时,它是一个更快的算法。
事实上,对于监督学习,我们有一个非常大的数据集,小批量学习或小批量梯度下降与其他优化算法(如Atom)一起使用比批量梯度下降更常见,
回到我们的强化学习算法,这是我们之前看到的算法,在这里使用小批量学习算法。
虽然我们的 回放缓冲区 (Replay buffer)中存储了10000个最近的元组,我们每次训练模型时,并不是使用全部的10000个元组。同样的,我们获取子集,比如说一次训练1000个元组示例,并使用这1000个示例来创建仅1000个示例的神经网络。
事实证明,这将使得训练模型的每次迭代都多一点,但是这比一次训练10000个模型要快得多,这个强化学习算法总体上会加快速度,这就是小批量可以加快速度的方式。不管是监督学习算法还是强化学习算法都可以使用小批量来加快速度。
soft update
第二个改进是软更新,它可以使算法收敛更加可靠,强化学习算法的最后一步是将Q = Qnew,这可能存在一个问题,如果我们把一个新的神经网络训练成新的,但是它并不是一个好的神经网络,也就有说Qtest可能还没有原来的Q 好,软更新的方法有助于防止这种情况的发生,来看看软更新怎么发挥作用。
对于神经网络,Q会有一些参数W,B,当我们训练新的神经网络时,我们会得到一些参数W_new ,B_new,
如果不适应软更新,我们会设置W= W_new ,B= B_new,这就是Q = Qnew的意思。
通过软更新,我们所做的就是设置W=0.01W_new + 0.99 W , B= 0.01B_new + 0.99B ,这里的0.01 和0.99 都是我们可以设置的超参数。
事实证明,使用软更新方法会导致强化学习算法更可靠的收敛,这使得强化学习算法不太可能振荡或转向或具有不良特性。