2.2 理解 mini-batch 梯度下降法(Understanding mini-batch gradient descent)

Batch gradient descent和Mini-batch gradient descent的cost曲线:

对于一般的神经网络模型,使用Batch gradient descent,随着迭代次数增加,cost是不断减小的。而使用Mini-batch gradient descent,随着在不同的mini-batch上迭代训练,其cost不是单调下降,而是受类似noise的影响,出现振荡。但整体的趋势是下降的,最终也能得到较低的cost值

出现细微振荡的原因是不同的mini-batch之间是有差异的。可能第一个子集(X{1},Y{1})(X^{\{1\}},Y^{\{1\}})是好的子集,而第二个子集(X{2},Y{2})(X^{\{2\}},Y^{\{2\}})包含了一些噪声noise。出现细微振荡是正常的

如果mini-batch size=m,即为Batch gradient descent,只包含一个子集为(X{1},Y{1})=(X,Y)(X^{\{1\}},Y^{\{1\}})=(X,Y)

如果mini-batch size=1,即为Stachastic gradient descent,每个样本就是一个子集(X{1},Y{1})=(x(i),y(i))(X^{\{1\}},Y^{\{1\}})=(x^{(i)},y^{(i)}),共有m个子集

蓝色的线代表Batch gradient descent,紫色的线代表Stachastic gradient descent。Batch gradient descent会比较平稳地接近全局最小值,但因为使用了所有m个样本,每次前进的速度有些慢。Stachastic gradient descent每次前进速度很快,但路线曲折,有较大的振荡,最终会在最小值附近来回波动,难达到最小值。而且在数值处理上不能使用向量化的方法来提高运算速度

mini-batch size不能设置得太大(Batch gradient descent),也不能设置得太小(Stachastic gradient descent)。相当于结合了Batch gradient descent和Stachastic gradient descent各自的优点,既能使用向量化优化算法,又能较快速地找到最小值。mini-batch gradient descent的梯度下降曲线如下图绿色所示,每次前进速度较快,且振荡较小,基本能接近全局最小值。

  • 总体样本数量m不太大时,例如m2000m\leq2000,建议直接使用Batch gradient descent

  • 总体样本数量m很大时,建议将样本分成许多mini-batches。推荐常用的mini-batch size为64,128,256,512。都是2的幂。原因是计算机存储数据一般是2的幂,这样设置可以提高运算速度

  • mini-batch 中确保 X{t}X{\{t\}}Y{t}Y{\{t\}}要符合 CPU/GPU 内存,取决于应用方向以及训练集的大小。如果处理的 mini-batch 和 CPU/GPU 内存不相符,不管用什么方法处理数据,算法的表现都急转直下变得惨不忍睹

从训练集(X,Y)中构建小批量

  • 随机洗牌(Shuffle):创建训练集(X,Y)的混洗版本,X和Y的每一列代表一个训练示例。随机混洗是在X和Y之间同步完成的。这样在混洗之后第ii列的X对应的例子就是Y第ii列中的标签。混洗步骤可确保将示例随机分成不同的小批次

  • 分区(Partition):将混洗(X,Y)分区为小批量mini_batch_size(此处为64)。训练示例的数量并非总是可以被mini_batch_size整除。最后一个小批量可能会更小

Last updated