首页系统综合问题谈谈深度学习中的 Batch_Size

谈谈深度学习中的 Batch_Size

时间2023-05-03 02:11:40发布分享专员分类系统综合问题浏览196

今天小编给各位分享size的知识,文中也会对其通过谈谈深度学习中的 Batch_Size和深度机器学习中的batch的大小对学习效果有何影响等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • 谈谈深度学习中的 Batch_Size
  • 深度机器学习中的batch的大小对学习效果有何影响
  • 深度机器学习中的batch的大小对学习效果有何影响
  • 怎么选取训练神经网络时的Batch size?
  • 一、谈谈深度学习中的 Batch_Size

    Batch_Size(批尺寸)是机器学习中一个重要参数,涉及诸多矛盾,下面逐一展开。

    首先,为什么需要有 Batch_Size 这个参数?

    Batch 的选择,首先决定的是下降的方向。如果数据集比较小,完全可以采用全数据集 ( Full Batch Learning )的形式,这样做至少有 2 个好处:其一,由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。其二,由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。 Full Batch Learning 可以使用 Rprop只基于梯度符号并且针对性单独更新各权值。

    对于更大的数据集,以上 2 个好处又变成了 2 个坏处:其一,随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。其二,以 Rprop 的方式迭代,会由于各个 Batch 之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来 RMSProp 的妥协方案。

    既然 Full Batch Learning 并不适用大数据集,那么走向另一个极端怎么样?

    所谓另一个极端,就是每次只训练一个样本,即 Batch_Size = 1。这就是在线学习(Online Learning)。线性神经元在均方误差代价函数的错误面是一个抛物面,横截面是椭圆。对于多层神经元、非线性网络,在局部依然近似是抛物面。使用在线学习,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛如图所示

    可不可以选择一个适中的 Batch_Size 值呢?

    当然可以,这就是批梯度下降法(Mini-batches Learning)。因为如果数据集足够充分,那么用一半(甚至少得多)的数据训练算出来的梯度与用全部数据训练出来的梯度是几乎一样的。

    在合理范围内,增大 Batch_Size 有何好处?

    内存利用率提高了,大矩阵乘法的并行化效率提高。跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。

    盲目增大 Batch_Size 有何坏处?

    内存利用率提高了,但是内存容量可能撑不住了。跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

    调节 Batch_Size 对训练效果影响到底如何?

    这里跑一个 LeNet 在 MNIST 数据集上的效果。MNIST 是一个手写体标准库,我使用的是 Theano 框架。这是一个 Python 的深度学习库。安装方便(几行命令而已),调试简单(自带 Profile),GPU / CPU 通吃,官方教程相当完备,支持模块十分丰富(除了 CNNs,更是支持 RBM / DBN / LSTM / RBM-RNN / SdA / MLPs)。在其上层有 Keras 封装,支持 GRU / JZS1, JZS2, JZS3 等较新结构,支持 Adagrad / Adadelta / RMSprop / Adam 等优化算法。如图所示

    运行结果如上图所示,其中绝对时间做了标幺化处理。运行结果与上文分析相印证:

    Batch_Size 太小,算法在 200 epoches 内不收敛。随着 Batch_Size 增大,处理相同数据量的速度越快。随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。

    欢迎一起讨论。

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

    感觉就是大batch size在显存能允许的情况下收敛速度是比较快的但有时的确会有陷入局部最小的情况,小batch size引入的随机性会更大些,有时候能有更好的效果,但是就是收敛速度慢一些……

    还有就是除了batch size这个参数外,如果在solver setting中有momentum这个参数的话也要注意batch size的选取,具体参考一下caffe的tutorial
    关于训练参数怎么选取可以参考以下一些文章:
    Bengio的 Practical recommendations for gradient-based learning

    Lecun 和 Bottou的 Efficient Backprop

    还有一个代码上的细节,就是caffe的代码实现上选取一个batch的时候似乎是按着数据库的图片顺序选取输入图片的,所以在生成数据库的时候切记要shuffle一下图片顺序~
    供题主参考,求大神指正~
    2017年6月3号 update:
    一年多之后忽然又想起了这个答案的存在,那我就多说几句,随着batch normalization的普及,收敛速度已经不像前bn时代一样需要非常玄学的调参,现在一般都还是采取大batch size,毕竟GPU友好嘛,高票答案说的batch size大了一个epoch update数量少了的这个缺点在bn面前似乎也没太多存在感了。不过bn的坏处就是不能用太小的batch size,要不然mean和variance就偏了。所以现在一般是显存能放多少就放多少。而且实际调起模型来,真的是数据分布和预处理更为重要,数据不行的话 玩再多花招也没用

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

    没有影响,batch的意思是一次计算处理数据的量,比如一次计算同时处理N张图片(batchsize=N)。这个会影响训练和测试的速度。batch大,处理得快;但batch太大,需求的内存空间大。

    三、怎么选取训练神经网络时的Batch size?

    选取训练神经网络时先选好batch size,再调其他的超参数。并且实践上来说,就两个原则——batch size别太小,也别太大,其他都行。

    因为合适的batch size范围和训练数据规模、神经网络层数、单元数都没有显著的关系。合适的batch size范围主要和收敛速度、随机梯度噪音有关。

    为什么batch size别太小。别太小的限制在于,batch size太小,会来不及收敛。

    所以batch size下限主要受收敛的影响。所以在常见的setting(~100 epochs),batch size一般不会低于16。如果你要选更小的batch size,你需要给自己找到很好的理由。

    为什么batch size别太大:

    batch size别太大的限制在于两个点。

    1、batch size太大,memory容易不够用。这个很显然,就不多说了。

    2、batch size太大,深度学习的优化training loss降不下去和泛化generalization gap都会出问题。

    随机梯度噪音的magnitude在深度学习的continuous-time dynamics里是正比于learning rate/batch size。batch size太大,噪音就太小了。

    而大家已经知道,随机梯度噪音对于逃离saddle points[2]和sharp minima [3]都必不可少的作用。前者可以解释为什么优化出问题,后者则可以解释为什么泛化出问题。



    关于size的问题,通过《深度机器学习中的batch的大小对学习效果有何影响》、《怎么选取训练神经网络时的Batch size?》等文章的解答希望已经帮助到您了!如您想了解更多关于size的相关信息,请到本站进行查找!

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    size
    西门子S7-200软件安装出错处理大全 worth、worthwhile、worthy的用法区别是什么?