首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >干货 | 如何理解深度学习分布式训练中的large batch size与learning rate的关系?

干货 | 如何理解深度学习分布式训练中的large batch size与learning rate的关系?

作者头像
AI科技评论
发布于 2018-03-14 06:42:57
发布于 2018-03-14 06:42:57
2.9K0
举报
文章被收录于专栏:AI科技评论AI科技评论

问题详情:

深度学习进行分布式训练时,常常采用同步数据并行的方式,也就是采用大的batch size进行训练,但large batch一般较于小的baseline的batch size性能更差,请问如何理解调试learning rate能使large batch达到small batch同样的收敛精度和速度?

回答:

最近在进行多GPU分布式训练时,也遇到了large batch与learning rate的理解调试问题,相比baseline的batch size,多机同步并行(之前有答案是介绍同步并行的通信框架NCCL 谭旭:如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?)等价于增大batch size,如果不进行精细的设计,large batch往往收敛效果会差于baseline的小batch size。因此将自己的理解以及实验总结如下,主要分为三个方面来介绍:(1)理解SGD、minibatch-SGD和GD,(2)large batch与learning rate的调试关系,(3)我们的实验。

(1)理解SGD、minibatch-SGD和GD

机器学习优化算法中,GD(gradient descent)是最常用的方法之一,简单来说就是在整个训练集中计算当前的梯度,选定一个步长进行更新。GD的优点是,基于整个数据集得到的梯度,梯度估计相对较准,更新过程更准确。但也有几个缺点,一个是当训练集较大时,GD的梯度计算较为耗时,二是现代深度学习网络的loss function往往是非凸的,基于凸优化理论的优化算法只能收敛到local minima,因此使用GD训练深度神经网络,最终收敛点很容易落在初始点附近的一个local minima,不太容易达到较好的收敛性能。

另一个极端是SGD(stochastic gradient descent),每次计算梯度只用一个样本,这样做的好处是计算快,而且很适合online-learning数据流式到达的场景,但缺点是单个sample产生的梯度估计往往很不准,所以得采用很小的learning rate,而且由于现代的计算框架CPU/GPU的多线程工作,单个sample往往很难占满CPU/GPU的使用率,导致计算资源浪费。

折中的方案就是mini-batch,一次采用batch size的sample来估计梯度,这样梯度估计相对于SGD更准,同时batch size能占满CPU/GPU的计算资源,又不像GD那样计算整个训练集。同时也由于mini batch能有适当的梯度噪声[8],一定程度上缓解GD直接掉进了初始点附近的local minima导致收敛不好的缺点,所以mini-batch的方法也最为常用。

关于增大batch size对于梯度估计准确度的影响,分析如下:

假设batch size为m,对于一个minibatch,loss为:

梯度

整个minibatch的梯度方差为:

由于每个样本

是随机从训练样本集sample得到的,满足i.i.d.假设,因此样本梯度的方差相等,为

等价于SGD的梯度方差,可以看到batch size增大m倍,相当于将梯度的方差减少m倍,因此梯度更加准确。

如果要保持方差和原来SGD一样,相当于给定了这么大的方差带宽容量,那么就可以增大lr,充分利用这个方差容量,在上式中添加lr,同时利用方差的变化公式,得到等式

因此可将lr增加sqrt(m)倍,以提高训练速度,这也是在linear scaling rule之前很多人常用的增大lr的方式[4]。下一小节将详细介绍增大lr的问题。

(2)large batch与learning rate

在分布式训练中,batch size 随着数据并行的worker增加而增大,假设baseline的batch size为B,learning rate为lr,训练epoch数为N。如果保持baseline的learning rate,一般不会有较好的收敛速度和精度。原因如下:对于收敛速度,假设k个worker,每次过的sample数量为kB,因此一个epoch下的更新次数为baseline的1/k,而每次更新的lr不变,所以要达到baseline相同的更新次数,则需要增加epoch数量,最大需要增加k*N个epoch,因此收敛加速倍数会远远低于k。对于收敛精度,由于增大了batch size使梯度估计相较于badeline的梯度更加准确,噪音减少,更容易收敛到附近的local minima,类似于GD的效果。

为了解决这个问题,一个方法就是增大lr,因为batch变大梯度估计更准,理应比baseline的梯度更确信一些,所以增大lr,利用更准确的梯度多走一点,提高收敛速度。同时增大lr,让每次走的幅度尽量大一些,如果遇到了sharp local minima[8](sharp minima的说法现在还有争议,暂且引用这个说法),还有可能逃出收敛到更好的地方。

但是lr不能无限制的增大,原因分析如下。深度神经网络的loss surface往往是高维高度非线性的,可以理解为loss surface表面凹凸不平,坑坑洼洼,不像y=x^2曲线这样光滑,因此基于当前weight计算出来的梯度,往前更新的learing rate很大的时候,沿着loss surface的切线就走了很大一步,有可能大大偏于原有的loss surface,示例如下图(a)所示,虚线是当前梯度的方向,也就是当前loss surface的切线方向,如果learning rate过大,那这一步沿切线方向就走了很大一步,如果一直持续这样,那很可能就走向了一个错误的loss surface,如图(b)所示。如果是较小的learning rate,每次只沿切线方向走一小步,虽然有些偏差,依然能大致沿着loss sourface steepest descent曲线向下降,最终收敛到一个不错的local minima,如图(c)所示。

同时也可以根据convex convergence theory[2]得到lr的upper bound:lr<1/L,L为loss surface的gradient curve的Lipschitz factor,L可以理解为loss梯度的变化幅度的上界。如果变化幅度越大,L越大,则lr就会越小,如果变化幅度越小,L越小,则lr就可以很大。这和上图的分析是一致的。

因此,如何确定large batch与learing rate的关系呢?

分别比较baseline和k个worker的large batch的更新公式[7],如下:

这个是baseline(batch size B)和large batch(batch size kB)的更新公式,(4)中large batch过一步的数据量相当于(3)中baseline k步过的数据量,loss和梯度都按找过的数据量取平均,因此,为了保证相同的数据量利用率,(4)中的learning rate应该为baseline的k倍,也就是learning rate的linear scale rule。

linear scale rule有几个约束,其中一个约束是关于weight的约束,式(3)中每一步更新基于的weight都是前一步更新过后的weight,因此相当于小碎步的走,每走一部都是基于目前真实的weight计算梯度做更新的,而式(4)的这一大步(相比baseline相当于k步)是基于t时刻的weight来做更新的。如果在这k步之内,W(t+j) ~ W(t)的话,两者近似没有太大问题,也就是linear scale rule问题不大,但在weight变化较快的时候,会有问题,尤其是模型在刚开始训练的时候,loss下特别快,weight变化很快,W(t+j) ~ W(t)就不满足。因此在初始训练阶段,一般不会直接将lr增大为k倍,而是从baseline的lr慢慢warmup到k倍,让linear scale rule不至于违背得那么明显,这也是facebook一小时训练imagenet的做法[7]。第二个约束是lr不能无限的放大,根据上面的分析,lr太大直接沿loss切线跑得太远,导致收敛出现问题。

同时,有文献[5]指出,当batchsize变大后,得到好的测试结果所能允许的lr范围在变小,也就是说,当batchsize很小时,比较容易找打一个合适的lr达到不错的结果,当batchsize变大后,可能需要精细地找一个合适的lr才能达到较好的结果,这也给实际的large batch分布式训练带来了困难。

(3)我们的实验

最近在考虑分布式训练NLP相关的深度模型的问题,实验细节如下,由于某些工作暂时还不方便透露,只提供较为简略的实验细节:

模型baseline参数为batch size 32, lr 0.25,最终的accuracy为BLEU score: 28.35。现在进行分布式扩展到多卡并行。

实验1:只增加并行worker数(也就相当于增大batch size),lr为baseline的lr0保持不变

可以看到随着batch的变大, 如果lr不变,模型的精度会逐渐下降,这也和上面的分析相符合。

实验2:增大batch size,lr相应增大

可以看到通过增加lr到5*lr0(理论上lr应该增加到8倍,但实际效果不好,因此只增加了5倍),并且通过warmup lr,达到和baseline差不多的Bleu效果。最终的收敛速度大约为5倍左右,也就是8卡能达到5倍的收敛加速(不考虑系统通信同步所消耗的时间,也就是不考虑系统加速比的情况下)。

深度学习并行训练能很好的提升模型训练速度,但是实际使用的过程中会面临一系列的问题,包括系统层面的架构设计、算法层面的参数调试等,欢迎有兴趣的朋友多多探讨。

[1] Li M, Zhang T, Chen Y, et al. Efficient mini-batch training for stochastic optimization[C]// Acm Sigkdd International Conference on Knowledge Discovery & Data Mining. ACM, 2014:661-670.

[2] Bottou L, Curtis F E, Nocedal J. Optimization Methods for Large-Scale Machine Learning[J]. 2016.

[3] Dekel O, Gilad-Bachrach R, Shamir O, et al. Optimal distributed online prediction using mini-batches[J]. Journal of Machine Learning Research, 2012, 13(1):165-202.

[4] Krizhevsky A. One weird trick for parallelizing convolutional neural networks[J]. Eprint Arxiv, 2014.

[5] Breuel T M. The Effects of Hyperparameters on SGD Training of Neural Networks[C]., 2015.

[6] Mishkin D, Sergievskiy N, Matas J. Systematic evaluation of CNN advances on the ImageNet[J]. 2016.

[7] Goyal, Priya, et al. "Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour." arXiv preprint arXiv:1706.02677 (2017).

[8] Keskar N S, Mudigere D, Nocedal J, et al. On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima[J]. 2016.

[9]Scaling Distributed Machine Learning with System and Algorithm Co-design - Google Search

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技评论 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
6万字解决算法面试中的深度学习基础问题
真的是千呼万唤始出来emmmm,去年春招结束写了篇面试的经验分享。在文中提到和小伙伴整理了算法岗面试时遇到的常见知识点及回答,本想着授人以渔,但没想到大家都看上了我家的 !但因本人执行力不足,被大家催到现在才终于想着行动起来分享给大家,笔者在这里给各位读者一个大大的抱歉,求原谅呜呜~~相信今年参加秋招的小伙伴们一定都拿到理想的offer啦,明年准备找工作的小盆友如果觉得本文还有些用可以收藏哈。
对白
2022/04/01
6410
6万字解决算法面试中的深度学习基础问题
深度学习——优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)
在机器学习、深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化器,都是什么呢,又该怎么选择呢? 在 Sebastian Ruder 的这篇论文中给出了常用优化器的比较,今天来学习一下: https://arxiv.org/pdf/1609.04747.pdf 本文将梳理: 每个算法的梯度更新规则和缺点 为了应对这个不足而提出的下一个算法 超参数的一般设定值 几种算法的效果比较 选择哪种算法 ---- 0.梯度下降法深入理解 以下为个人总结,如有错误
10JQKA
2018/05/09
8.3K0
深度学习——优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)
炼丹师的自我修养:如何分析训练过程loss异常
在面对模型不收敛的时候,首先要保证训练的次数够多。在训练过程中,loss并不是一直在下降,准确率一直在提升的,会有一些震荡存在。只要总体趋势是在收敛就行。若训练次数够多(一般上千次,上万次,或者几十个epoch)没收敛,再考虑采取措施解决。
NewBeeNLP
2021/07/23
23.9K0
深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
深度学习基础入门篇六:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
汀丶人工智能
2023/04/20
5.2K0
深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)
作者灯会为21届中部985研究生,凭借自己整理的面经,去年在腾讯优图暑期实习,七月份将入职百度cv算法工程师。在去年灰飞烟灭的算法求职季中,经过30+场不同公司以及不同部门的面试中积累出了CV总复习系列,此为深度学习上篇。
昱良
2021/07/01
9240
深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)
batch size设置
深度学习中经常看到epoch、 iteration和batchsize,下面按自己的理解说说这三个的区别:
狼啸风云
2020/07/13
3.9K0
周期性学习率(Cyclical Learning Rate)技术[通俗易懂]
学习率(learning_rate, LR)是神经网络训练过程中最重要的超参数之一,它对于快速、高效地训练神经网络至关重要。简单来说,LR决定了我们当前的权重参数朝着降低损失的方向上改变多少。
全栈程序员站长
2022/08/30
1.6K0
周期性学习率(Cyclical Learning Rate)技术[通俗易懂]
深度学习中的优化算法
本文介绍了深度学习中常用的优化算法,包括一阶优化算法(如SGD、Adam等)和二阶优化算法(如SGD+momentum、Adam等),并分析了它们在实际应用中的优缺点以及不同场景下的使用。
GavinZhou
2018/01/02
1.5K0
深度学习中的优化算法
三辩三驳:这篇论文告诉你传统优化分析与现代DL有哪些不匹配
从事机器学习方面相关研究的人都了解,网络模型的最终性能少不了优化。其中损失函数扮演了非常重要的角色,而随机梯度下降算法(SGD)由于其良好的收敛性,常常被用来进行梯度更新。为了加快收敛速度,缩短训练时间,同时为了提高求解精度,采用随机梯度下降算法应该注意学习率(Learning Rate, LR)等参数的调整。那么 LR 的大小对现代深度学习与传统优化分析的是怎样的呢?下面通过一篇论文进行解答。
机器之心
2020/11/13
7520
三辩三驳:这篇论文告诉你传统优化分析与现代DL有哪些不匹配
深度学习-加快训练速度
SGD是batch=1的情况下的训练示例[1240]SGD是batch=X的情况下的训练示例
freesan44
2021/10/12
7250
训练过程–Batchsize(总之一般情况下batchsize能设多大就设多大)[通俗易懂]
1)内存利用率提高了,大矩阵乘法的并行化效率提高。 2)跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。 3)在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。 随着 Batch_Size 增大,处理相同数据量的速度越快。 随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。” 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。
全栈程序员站长
2022/08/01
7.7K0
Learning Rate Schedule:CNN学习率调整策略
本文同时发布在我的个人网站:https://lulaoshi.info/blog/learning-rate-schedule.html
PP鲁
2022/09/20
1.7K0
Learning Rate Schedule:CNN学习率调整策略
分布式深度学习(I):分布式训练神经网络模型的概述
原文: Distributed Deep Learning, Part 1: An Introduction to Distributed Training of Neural Networks 作者: Alex Black、Vyacheslav Kokorin 翻译: KK4SBB 责编:何永灿,关注人工智能,投稿请联系heyc@csdn.net或微信号289416419 本文是分布式训练神经网络模型三篇系列文章的第一篇。 在第一篇文章,我们首先了解一下如何使用GPU分布式计算来显著提高深度学习模型
用户1737318
2018/06/06
3.4K0
深度学习中的优化算法与实现
通过这么长时间的学习,我们应该对于通过深度学习解决问题的大体流程有个宏观的概念了吧?
BBuf
2020/10/10
1.1K0
深度学习中的优化算法与实现
神经网络训练技巧汇总(Tricks)
神经网络构建好,训练不出好的效果怎么办?明明说好的,拟合任意函数(一般连续)?可以参考:http://neuralnetworksanddeeplearning.com/
算法进阶
2023/08/28
6200
神经网络训练技巧汇总(Tricks)
[MachineLearning] 超参数之LearningRate
关于Gradient descent 算法,不打算细说概念,公式什么的.贴一张Andrew的PPT:
wOw
2018/09/18
2.4K0
[MachineLearning] 超参数之LearningRate
Batch Normalization论文翻译——中英文对照
本文提出了一种用于图像识别的深度学习网络模型,该模型采用了一种改进的卷积神经网络结构,并使用了批量归一化、激活函数和优化算法等技术。实验结果表明,该模型在图像分类任务上具有较好的性能表现,同时具有较好的扩展性和鲁棒性。
Tyan
2017/12/28
1.2K0
Batch Normalization论文翻译——中英文对照
深入剖析深度学习中Batch Size大小对训练过程的影响
(2)有些时候不可避免地要用超大batch,比如人脸识别,可能每个batch要有几万甚至几十万张人脸图像,训练过程中超大batch有什么优缺点,如何尽可能地避免超大batch带来的负面影响?
AI算法与图像处理
2019/10/28
7.8K0
深入剖析深度学习中Batch Size大小对训练过程的影响
【深度学习】参数优化和训练技巧
学习率是一个非常非常重要的超参数,这个参数呢,面对不同规模、不同batch-size、不同优化方式、不同数据集,其最合适的值都是不确定的,我们无法光凭经验来准确地确定lr的值,我们唯一可以做的,就是在训练中不断寻找最合适当前状态的学习率。
Twcat_tree
2023/11/23
4740
【深度学习】参数优化和训练技巧
Batch Size对神经网络训练的影响
这篇文章非常全面细致地介绍了Batch Size的相关问题。结合一些理论知识,通过大量实验,文章探讨了Batch Size的大小对模型性能的影响、如何影响以及如何缩小影响等有关内容。
NewBeeNLP
2021/10/20
1.1K0
推荐阅读
相关推荐
6万字解决算法面试中的深度学习基础问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档