原创博客,转载请注明出处!
本周讲的是优化算法
1、Mini-batch梯度下降法
本周将学习优化算法,这能让你的神经网络运行得更快。机器学习的应用是一个高度依赖经验的过程,伴随着大量迭代的过程,你需要训练诸多模型,才能找到合适的那一个,所以,优化算法能够帮助你快速训练模型。
其中一个难点在于,深度学习没有在大数据领域发挥最大的效果,我们可以利用一个巨大的数据集来训练神经网络,而在巨大的数据集基础上进行训练速度很慢。因此,你会发现,使用快速的优化算法,使用好用的优化算法能够大大提高你和团队的效率,那么,我们首先来谈谈mini-batch梯度下降法。
可以把训练集分割为小一点的子集训练,这些子集被取名为mini-batch。简单来说,就是假如你有500万个数据,那么每次只取1000个数据,第一次1到1000,标记为x^{1},然后再取1001到2000为x^{2},注意是大括号,还记得我们用x^(i)表示第i个样本,x^[i]表示神经网络的第i层,x^{i}表示mini-batch下降法的第i批。
那么究竟mini-batch梯度下降法的原理是什么?在训练集上运行mini-batch梯度下降法,你运行for t=1……5000
,因为我们有5000个各有1000个样本的组,在for循环里你要做得基本就是对$X^{
{t}}$和$Y^{
{t}}$执行一步梯度下降法。假设你有一个拥有1000个样本的训练集,而且假设你已经很熟悉一次性处理完的方法,你要用向量化去几乎同时处理1000个样本。
使用batch梯度下降法,一次遍历训练集只能让你做一个梯度下降,使用mini-batch梯度下降法,一次遍历训练集,能让你做5000个梯度下降。当然正常来说你想要多次遍历训练集,还需要为另一个while循环设置另一个for循环。所以你可以一直处理遍历训练集,直到最后你能收敛到一个合适的精度。
如果你有一个丢失的训练集,mini-batch梯度下降法比batch梯度下降法运行地更快,所以几乎每个研习深度学习的人在训练巨大的数据集时都会用到,
2、理解mini-batch梯度下降法
你已结知道了如何利用mini-batch梯度下降法来开始处理训练集和开始梯度下降,本节我们将进一步学习如何执行梯度下降法,更好地理解其作用和原理。
使用batch梯度下降法时,每次迭代你都需要历遍整个训练集,可以预期每次迭代成本都会下降,所以如果成本函数 J 是迭代次数的一个函数,它应该会随着每次迭代而减少,如果 J 在某次迭代中增加了,那肯定出了问题,也许你的学习率太大。
使用mini-batch梯度下降法,如果你作出成本函数在整个过程中的图,则并不是每次迭代都是下降的
你需要决定的变量之一是mini-batch的大小, m 就是训练集的大小,极端情况下,如果mini-batch的大小等于 m ,其实就是batch梯度下降法,在这种极端情况下,你就有了mini-batch X^{1} 和 Y^{1} ,并且该mini-batch等于整个训练集,所以把mini-batch大小设为 m 可以得到batch梯度下降法。
另一个极端情况,假设mini-batch大小为1,就有了新的算法,叫做随机梯度下降法,每个样本都是独立的mini-batch,当你看第一个mini-batch,也就是 X^{1} 和 Y^{1} ,如果mini-batch大小为1,它就是你的第一个训练样本,这就是你的第一个训练样本。接着再看第二个mini-batch,也就是第二个训练样本,采取梯度下降步骤,然后是第三个训练样本,以此类推,一次只处理一个。