可以参考这篇文章:龙鹏-言有三:【AI不惑境】学习率和batchsize如何影响模型的性能?​zhuanlan.zhihu.com

目前深度学习模型多采用批量随机梯度下降算法进行优化,随机梯度下降算法的原理如下,

n是批量大小(batchsize),η是学习率(learning rate)。可知道除了梯度本身,这两个因子直接决定了模型的权重更新,从优化本身来看它们是影响模型性能收敛最重要的参数。

学习率直接影响模型的收敛状态,batchsize则影响模型的泛化性能,两者又是分子分母的直接关系,相互也可影响,因此这一次来详述它们对模型性能的影响。

模型性能对batchsize虽然没有学习率那么敏感,但是在进一步提升模型性能时,batchsize就会成为一个非常关键的参数。(关于学习率对模型性能的影响,可以参考上文)

1 大的batchsize减少训练时间,提高稳定性

这是肯定的,同样的epoch数目,大的batchsize需要的batch数目减少了,所以可以减少训练时间,目前已经有多篇公开论文在1小时内训练完ImageNet数据集。另一方面,大的batch size梯度的计算更加稳定,因为模型训练曲线会更加平滑。在微调的时候,大的batch size可能会取得更好的结果。

2 大的batchsize导致模型泛化能力下降

在一定范围内,增加batchsize有助于收敛的稳定性,但是随着batchsize的增加,模型的性能会下降,如下图,来自于文[5]。

这是研究者们普遍观测到的规律,虽然可以通过一些技术缓解。这个导致性能下降的batch size在上图就是8000左右。

那么这是为什么呢?

研究[6]表明大的batchsize收敛到sharp minimum,而小的batchsize收敛到flat minimum,后者具有更好的泛化能力。两者的区别就在于变化的趋势,一个快一个慢,如下图,造成这个现象的主要原因是小的batchsize带来的噪声有助于逃离sharp minimum。

Hoffer[7]等人的研究表明,大的batchsize性能下降是因为训练时间不够长,本质上并不少batchsize的问题,在同样的epochs下的参数更新变少了,因此需要更长的迭代次数。

总之batchsize在变得很大(超过一个临界点)时,会降低模型的泛化能力。在这个临界点之下,模型的性能变换随batch size通常没有学习率敏感。

3 学习率和batchsize的关系

通常当我们增加batchsize为原来的N倍时,要保证经过同样的样本后更新的权重相等,按照线性缩放规则,学习率应该增加为原来的N倍[5]。但是如果要保证权重的方差不变,则学习率应该增加为原来的sqrt(N)倍[7],目前这两种策略都被研究过,使用前者的明显居多。

从两种常见的调整策略来看,学习率和batchsize都是同时增加的。学习率是一个非常敏感的因子,不可能太大,否则模型会不收敛。同样batchsize也会影响模型性能,那实际使用中都如何调整这两个参数呢?

研究[8]表明,衰减学习率可以通过增加batchsize来实现类似的效果,这实际上从SGD的权重更新式子就可以看出来两者确实是等价的,文中通过充分的实验验证了这一点。

研究[9]表明,对于一个固定的学习率,存在一个最优的batchsize能够最大化测试精度,这个batchsize和学习率以及训练集的大小正相关。

对此实际上是有两个建议:如果增加了学习率,那么batch size最好也跟着增加,这样收敛更稳定。

尽量使用大的学习率,因为很多研究都表明更大的学习率有利于提高泛化能力。如果真的要衰减,可以尝试其他办法,比如增加batch size,学习率对模型的收敛影响真的很大,慎重调整。

参考文献

[1] Smith L N. Cyclical learning rates for training neural networks[C]//2017 IEEE Winter Conference on Applications of Computer Vision (WACV). IEEE, 2017: 464-472.

[2] Loshchilov I, Hutter F. Sgdr: Stochastic gradient descent with warm restarts[J]. arXiv preprint arXiv:1608.03983, 2016.

[3] Reddi S J, Kale S, Kumar S. On the convergence of adam and beyond[J]. 2018.

[4] Keskar N S, Socher R. Improving generalization performance by switching from adam to sgd[J]. arXiv preprint arXiv:1712.07628, 2017.

[5] Goyal P, Dollar P, Girshick R B, et al. Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour.[J]. arXiv: Computer Vision and Pattern Recognition, 2017.

[6] Keskar N S, Mudigere D, Nocedal J, et al. On large-batch training for deep learning: Generalization gap and sharp minima[J]. arXiv preprint arXiv:1609.04836, 2016.

[7] Hoffer E, Hubara I, Soudry D. Train longer, generalize better: closing the generalization gap in large batch training of neural networks[C]//Advances in Neural Information Processing Systems. 2017: 1731-1741.

[8] Smith S L, Kindermans P J, Ying C, et al. Don't decay the learning rate, increase the batch size[J]. arXiv preprint arXiv:1711.00489, 2017.

[9] Smith S L, Le Q V. A bayesian perspective on generalization and stochastic gradient descent[J]. arXiv preprint arXiv:1710.06451, 2017.

python batch_size_深度学习中的batch的大小对学习效果有何影响?相关推荐

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

    写在前面:整理自知乎:深度学习中的batch的大小对学习效果有何影响? Batch_size参数的作用: 决定了下降的方向. 极端一: batch_size为全数据集(Full Batch Learn ...

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

    深度机器学习中的batch的大小对学习效果有何影响? 如题,在深度学习中,刚入门的小弟一直听闻一个batch中同时训练多个数据可以得到较好的效果,于是小弟在caffe上跑deepID的网络时对如何选取 ...

  3. 深度学习中的batch、epoch、iteration

    名词解释 名词 定义 Epoch 使用训练集的全部数据对模型进行一次完整的训练,被称为"一代训练" Batch 使用训练集中的一小部分样本对模型权重进行一次反向传播的参数更新,这一 ...

  4. 深度学习中的batch和epoch

    Batch是大小,epoch是数量 什么是Batch? Batch大小是一个超参数,用于定义在更新内部模型参数之前要处理的样本数.将批处理视为循环迭代一个或多个样本并进行预测.在批处理结束时,将预测与 ...

  5. 【CV】深度学习中Epoch, Batch, Iteration的含义

    Epoch 使用训练集的全部数据样本进行一次训练,称为一次epoch,即所有训练集的样本都在神经网络中进行了一次正向传播和一次反向传播 神经网络中需要有多次epoch,每次epoch中会进行一次更新权 ...

  6. 深度学习中的batch理解(batch size 一次喂给神经网络的数据大小量)

    本文引用自:训练神经网络时如何确定batch size? 文章目录 前言 回顾 Batch Size Which one? 前言 当我们要训练一个已经写好的神经网络时,我们就要直面诸多的超参数了.这些 ...

  7. 深度学习中batch_size、epoch和iteration的含义

    iteration:1个iteration等于使用batchsize个样本训练一次: epoch:1个epoch等于使用训练集中的全部样本训练一次,通俗的讲epoch的值就是整个数据集被轮几次. 比如 ...

  8. Python Web 深度学习实用指南:第三部分

    原文:Hands-On Python Deep Learning for the Web 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 深度学习 译文集],采用译后编辑 ...

  9. Python Web 深度学习实用指南:第四部分

    原文:Hands-On Python Deep Learning for the Web 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 深度学习 译文集],采用译后编辑 ...

最新文章

  1. 《从问题到程序:用Python学编程和计算》——第3章 基本编程技术 3.1 循环程序设计...
  2. 内核调试相关变量说明
  3. python获取链接跳转后地址_爬虫:获取多次跳转后的页面url
  4. 开源后5个月,Google的深度学习都有哪些改变?
  5. JVM之常用基础参数详解
  6. 【Error】Less-loader 版本过高,TypeError: this.getOptions is not a function
  7. AngularJs学习笔记--html compiler
  8. SGU---104 DP
  9. 马尔科夫模型系列文章(一)——马尔科夫模型
  10. mysql查询所有男生中姓王的_数据库6.22
  11. Mybatis常用的OGNL表达式
  12. SLF4J user manual
  13. html设计效果图,网页效果图如何制作?
  14. 戴尔微型计算机云处理器,为创作与品质而生 戴尔全新XPS15 OLED云解析
  15. mysql bak文件怎么打开_如何打开数据库备份文件(.bak)
  16. JAVA编程基本步骤
  17. 疯狂来往android版,疯狂来往下载app
  18. element自定义邮箱和手机号校验规则
  19. None和nan、NaN、NAN
  20. 护眼台灯什么价位的好?五百元内适合学生党的护眼台灯

热门文章

  1. C++编译器与链接器工作原理
  2. linux 渲染程序图层管理,Linux驱动多图层开发--lcdc/framebuffer的注册(RK平台)
  3. c语言 信号函数,C语言中进程信号集的相关操作函数详解
  4. solidworks属性管理器_老式经典|如何提高SOLIDWORKS的运行速度
  5. 测速源码_解密,相亲交友直播系统源码,高并发如何做到不卡顿
  6. syslinux引导扇区不支持ntfs文件系统_磁盘与文件系统
  7. 开门红讨采头,开工喜庆红色PSD分层海报模板
  8. 秋季海报设计元素|水彩手绘纹理植物素材,从人群中脱颖而出。
  9. 设计干货素材模板|常见的UI设计手法
  10. lambda不是python的保留字_python-nonlocal关键字的使用,lambda表达式(学习到function到变...