深度学习中的优化算法

写在前面

  深度学习在很多情况下都涉及优化。
  寻找神经网络上的一组参数 θ ,它能显著地降低代价函数 J ( θ ) ,该代价函数通常包括整个训练集上的性能评估和额外的正则化项。
  机器学习是一个高度依赖经验的过程,伴随着大量迭代的过程,你需要训练诸多模型,才能找到合适的那一个,所以,优化算法能够帮助你快速训练模型。
  深度学习没有在大数据领域发挥最大的效果,我们可以利用一个巨大的数据集来训练神经网络,而在巨大的数据集基础上训练速度很慢。

Mini-batch梯度下降法

  之前的Batch梯度下降法是每次把整个训练集拿来训练,当训练集很大,比如上百万时,处理速度是很慢的。可以把训练集分割为小一点的子训练集,这些子集被取名为mini-batch。对于每一个mini-batch来说,梯度下降过程和之前的batch梯度下降法是一样的,只不过是样本数量变少了。执行完整个训练集称为进行“1 epoch”的训练,意味着遍历了整个训练集。
  如果你有一个较大的数据集,那么mini-batch梯度下降法比batch梯度下降法运行地更快。batch梯度下降法一次遍历只做一次梯度下降,而mini-batch梯度下降法一次遍历可以做多次梯度下降。

Mini-batch梯度下降法的理解

这里写图片描述
  使用batch梯度下降法时,每次迭代都需要遍历整个训练集,可以预期每次迭代成本都会下降,如果在某次迭代中增加了,那肯定出了问题,可能是你的学习率太大。
  使用mini-batch梯度下降法,如果你做出成本函数在整个过程中的图,则并不是每次迭代都是下降的,因为每次迭代都在训练不同的样本集或者说训练不同的mini-batch。作出图型,你可能会看到整体趋势是下降的,但是会出现波动。

mini-batch size

  如果mini-batch的大小等于样本大小m,其实就是batch梯度下降法。
  如果mini-batch的大小为1,这叫做随机梯度下降法。随机梯度下降法永远不会收敛,而是会一直在最小值附近波动,但他并不会达到最小值并停留。且会失去向量化带来的加速,因为一次只处理一个样本,效率过于低下。总之随机梯度下降法计算得到的并不是准确的一个梯度,容易陷入到局部最优解中
  实际上选择的mini-batch大小在二者之间,如果训练集较小(小于2000个样本),直接使用batch梯度下降法。一般的mini-batch大小为64到512,考虑到电脑内存设置和使用的方式,如果mini-batch大小是2的n次方,代码会运行地快一些。
  最后需要注意的是在这里的mini-batch中,要确保每一个mini-batch符合CPU/GPU内存,这取决于你的应用方向以及训练集的大小。

猜你喜欢

转载自blog.csdn.net/hywel_xue/article/details/82492690