深度机器学习中的batch的大小对学习效果有何影响?

知乎链接

凸函数,凹函数:凸函数是一个定义在某个向量空间的凸子集C(区间)上的实值函数f,而且对于凸子集C中任意两个向量, f((x1+x2)/2)>=(f(x1)+f(x2))/2,则f(x)是定义在凸子集c中的凸函数(该定义与凸规划中凸函数的定义是一致的,下凸)。凹

多层神经网络通常是一个非凸的函数。非凸的本质难题是鞍点数目太多,除非深度网络设计使得非凸的函数绘景类似一个漏斗(类似“V”型)且最小值就在漏斗尖口(“V”尖尖的底部)附近(CNN奇迹般的是),RMSprop方法会一冲到底,效率高。一些深度的贝叶斯模型不用初始化训练,直接暴力利用上面的优化不一定有效果。原因可能(目前还很难理论分析)在于函数绘景类似一个W型或者VVV…V型,而不是单纯的V型。直观来说,尖尖底太多了,利用上面的优化的结果就仁者见仁,智者见智了。

目前除了SGD优化方法的变种都是为了增加弃坑速度而作的,即增加脱离局部最小值的速度,使得网络更快的收敛。如下图所示:
深度机器学习中的batch的大小对学习效果有何影响?

总结:训练过程中,batch_size的选取对模型精度和模型泛化能力的影响:

  1. batch_size过大,模型没有BN层,模型收敛速度变慢。而且模型容易陷入局部最小值,模型精度低。
  2. batch_size适中,模型没有BN层,模型收敛速度很快,模型不容易陷入局部最小值,而且模型精度很高。
  3. batch_size过小,比如说小于数据集中的类别个数,模型没有BN层,模型会出现不收敛的情况。
  4. batch_size适中,模型的泛化能力会得到提升。
  5. 在GPU性能没有被完全利用的情况下,batch_size越大,模型训练的速度越快。

总结:如何确定batch_size

  1. 根据数据集的大小和样本数目确定batch_size。
    样本类别数目较少,而且模型没有BN层,batch_size就设置得较小一点。
    样本类别数目较多,而且模型没有BN层,batch_size就设置得较大一点。尽量保证一个batch里面各个类别都能取到样本。
    数据集很小,可以采取Full Batch Learning。每次用所有的训练集进行训练。
    2 . batch_size的大小设置为8的倍数。
    3 . 有BN层的模型,而且数据集也很大,类别也较多时,batch_size尽量越大越好。