优化算法-1:mini-batch
本文来自于网易云课堂
本周主要学习优化算法来加快神经网络的训练过程。机器学习的应用是一个高度依赖经验的过程,伴随着大量迭代,需要训练诸多模型才能找到合适的那一个。所以,优化算法能够帮助你快速训练模型。深度学习没有在大数据领域发货最大的效果,我们可以利用一个巨大的数据集来训练神经网络,而在巨大的数据集基础上进行训练速度很慢。所以,使用快速的优化算法会大大提高效率。
1mini-batch梯度下降法
假如我们有大量的样本,可能是500万个,如果采用batch梯度下降法(就是一次性处理全部训练集,名字就是这么叫的,只能接受),需要一次训练500万个样本然后实现一次梯度下降,重复进行,这样速度很慢。而mini-batch梯度下降法是将样本数划分成5000个小的mini-batches,每个mini-batch可以划分为1000个样本,用符号和来表示,这样就可以同时处理单个的mini-batch,而不是处理全部的X和Y训练集。
怎么进行mini-batch梯度下降呢?过程其实和整个数据集是一样的,只不过mini-batch分解成很多个mini-batch而已。
for t = 1,……5000
forward prop on
…
Compute cost
Backprop to compute grandients
update parameters
mini-batch在迭代的过程中不总是下降的,虽然是下降趋势,但存在很多噪声。噪声存在的原因是可能某个t成本很低而另一个t成本较高。
决定mini-batch的一个变量是size。一个极端情况是size=m,这个时候就是batch梯度下降法,这种算法每次迭代时间很长。另一个极端情况就是size=1,叫做随机梯度下降法(stochastic gradient decent),每个样本都是一个mini-batch,这种算法每次只处理一个样本,丧失了向量化带来的加速,效率非常低。实际上,我们要选择的mini-batch在两者之间。一个不大不小的mini-batch既可以利用向量化带来的加速,又不用等待整个样本处理完就可以继续下一步的工作。
既然mini-batch是中间值,那么这个中间值是多少呢?下面给出几个指导原则。
- 如果是小的训练集,直接使用batch梯度下降法,可能小于2000个样本就可以。
- 如果样本较大,典型的mini-batch是64、128、256、512、1024(比较少见),这个是考虑到电脑存储方式选择了2的次方,这样运行效率会更高一些。Adrew Ng会尝试几个不同的值,来确定哪个可以让算法运行的更快。