【导读】深度学习优化是构建深度学习模型中的一个关键问题。来自NUS的研究人员发布了《大规模深度学习优化》综述论文,DL优化目标是双重的: 模型准确性和模型效率。至于模型的准确性,研究了最常用的优化算法,从梯度下降变量到(大批量)自适应方法,从一阶方法到二阶方法。此外,还阐述了在大批量训练中出现的泛化差距这一有争议的问题。

深度学习在人工智能的广泛应用中取得了可喜的成果。更大的数据集和模型总是产生更好的性能。然而,我们通常花更长的训练时间在更多的计算和通信上。在这项综述中,我们的目标是提供一个清晰的草图,关于优化大规模深度学习的模型准确性和模型效率。我们研究最常用于优化的算法,阐述大批量训练中出现的泛化缺口这一有争议的话题,并回顾SOTA解决通信开销和减少内存占用的策略。

https://www.zhuanzhi.ai/paper/9f75513e868ff294b34ab94275cab043

引言

目前,深度学习(DL)已经在广泛的人工智能应用领域取得了可喜的结果,包括计算机视觉(如图像分类[42,47,66],目标检测和分割[35,41,65,85]),自然语言处理(如语言建模[28,117]和机器翻译[108,114]),信息检索(例如,推荐系统[43])和许多其他。规模是DL上升的主要推动力[28,42,55,56,94,104]。更大的数据集和神经网络在所有通常需要更多计算和更长的训练时间的任务中总是产生更好的性能。

因此,近年来,学术界和工业界对在具有更高计算能力和内存限制的TPU和GPU等设备的大集群上扩展DL和分布式训练的兴趣激增。数据并行已经成为分布式训练的主要实践。它将一个大的批处理分布到多个设备,其中每个设备持有一个相同的模型副本,计算局部批处理的梯度,最后在每次迭代收集梯度来同步参数更新。通过最新的优化技术,它现在能够在成千上万的GPU设备上训练非常大的批量。然而,这种规模的训练需要克服算法和系统相关的挑战。其中一个主要的挑战是模型精度在超过某一点(例如32k)时的大批量下降。单纯地增加批处理大小通常会导致泛化性能下降,并降低计算效益。此外,我们不能总是通过使用更多的处理器来提高训练速度,因为通信成本是不可忽略的开销。多处理器协同训练一个任务可以减少整体训练时间,但相应的处理器间通信成本很高,限制了模型的可扩展性。更糟糕的是,拥有数百亿到数万亿参数的模型显然无法装入单个设备的内存中,简单地增加更多设备也无助于扩大训练规模。这种限制阻止DL研究人员探索更高级的模型体系结构。现有的工作研究和开发了克服这些问题的优化技术,以加速大规模深度神经网络(DNN)的训练。我们将这些工作分为两类,一种努力在大规模设置下保持/提高模型的准确性,另一种强调模型的效率,设计不太需要通信和内存的算法。重要的是,它们不是相互排斥的,而是可以协同使用,以进一步加快训练。

该综述的总体结构如图1所示。第2节介绍了一个典型的有监督学习神经网络优化问题的公式。我们将大规模DL优化大致分为模型精度和模型效率两部分。第3节介绍了梯度下降优化系列,包括梯度下降变种、动量SGD和自适应梯度算法。随着具有数据并行性的大批训练在DL中日益普及,同时也带来了挑战,第4节讨论了在这一设置中存在的问题,并回顾了主要的SOTA优化策略来改善这种情况。第5部分深入探讨了泛化差距——批量训练中的一个辩论话题。第6节介绍了二阶优化。然后我们将注意力转向模型效率。第7节调研了通信瓶颈,第8节重点讨论了高效存储技术。最后,第9节对本文进行总结。

梯度下降优化算法

训练DNN是一个优化过程,即在网络中找到使损失函数最小的参数。梯度下降及其变体算法是最常用的神经网络优化算法[87]。为了控制梯度下降法的振动,引入了动量控制的思想。此外,将学习率与前一阶段的梯度相适应,有利于避免波动。在本节中,我们简要梳理了目前主流的优化算法,包括梯度下降变分算法(3.1节)、动量算法(3.2节)和自适应梯度算法(3.3节)。

大批量训练

大型DNN和大型数据集推动了深度学习的发展[28,42,55,56,94,104]。然而,在海量数据集上训练大型模型是计算密集型的。例如,BERT和ResNet-50等SOTA DL模型在16个TPUv3芯片上训练3天,在8个Tesla P100 GPU上训练29个小时[28,42]。一种直观的加速训练的方法是增加更多的计算能力(例如,更多的GPU节点)并使用数据并行(见图1)。考虑到通信(即在每次迭代时同步更新)是一个问题,必须尽可能多地利用每个GPU来分摊通信成本。因此,需要使用大批量来将更多的数据分配到每个GPU上。批量大小的非平凡增长常常导致测试性能下降,如[45,52,54,61]中观察到的。我们在4.1节中描述了大批量引入的训练难点,在4.2节中描述了大批量训练的配方(即带热身策略的线性LR缩放),在4.3节中描述了其他补充策略,如自适应分层学习和4.4节中描述了自适应批量大小。最后在第4.5节中讨论我们可以扩大批量的程度。

泛化差距

优化通常是一项极其困难的任务,尤其是在训练神经网络时。对于非凸高维函数,有可能存在许多局部极小点和鞍点。优化方法,如SGD,一般收敛于参数空间的不同区域,高度依赖于网络架构的设计、优化器的选择、变量初始化等多种考虑[92]。泛化这个术语指的是一个假设如何很好地适用于训练集中没有看到的新例子。如4.1节所述,我们可以看到,尽管训练函数的值相似,但用大批量方法训练的模型在测试数据上的表现要比小批量方法差[45,52,70,92]。这种泛化性能的持续下降被称为泛化差距。弄清这一差距的根源并找到消除这一差距的方法具有重大的现实意义,但仍是一个悬而未决的问题。本节的结构如下。第5.1节介绍了sharp and flat (wide) minima的概念;5.2节讨论了局部最小值的锐度/平整度与其泛化能力之间的关系;第5.3节解释了所谓的泛化差距,第5.4节提供了一个有点相反的解释。

二阶优化

DL中的优化,无论是理论上还是经验上,目前都由一阶梯度方法主导[2,3,15,21,26,116]。二阶优化方法,包括二阶导数和/或数据的二阶统计,是远远不普遍的,尽管强大的理论性质,由于其令人望而却步的计算,内存和通信成本。在本节中,我们将在6.1节中建立二阶优化基础知识,从6.2节中的经典牛顿方法开始,并转向一些最新的算法,如Hessian-Free方法(在6.3节中)、K-FAC(在6.4节中)和Shampoo40

通信

大规模分布式训练提高了训练更深、更大模型的效率,其中采用了数据并行,充分利用了多个workers的计算能力。SGD计算效率高,并且得到了DL工具包TensorFlow[1]、PyTorch[77]和DeepSpeed[83]的良好支持,因此通常被选择为优化方法。在数据并行的SGD中,每个worker处理其训练数据的随机小批,然后通过一个All-Reduce步骤或通过一个集中的参数服务器来同步本地更新,该服务器聚集了来自所有worker的随机梯度,并采取Broadcast步骤,将更新后的参数向量传送回所有workers。重复梯度同步的过程,直到满足适当的收敛准则。

内存

更大的模型通常需要更多的计算和内存资源来训练。训练这些模型所需的内存数量可能比单个GPU上可用的内存数量大几个数量级。在本节中,我们将看到一些流行的技术如何成功地在不影响模型性能的情况下降低训练神经网络的内存需求。第8.1节介绍了混合精度训练[72]如何使用更少的位来保留训练期间的权值和梯度,从而降低内存负担。第8.2节介绍了两种有效内存的自适应优化器,Adafactor[93]和SM3[10]。与上述方法正交,ZeRO[81]不改变模型优化方法,也不影响模型收敛,而是通过消除数据并行中的冗余来降低内存成本(章节8.3)。

结论

鉴于更大的数据集和更大的模型持续产生的准确性的显著提高,大规模的深度学习已成为一个不可避免的趋势。随着数据集大小和DNN复杂度的增加,深度学习的计算强度、通信成本和内存需求均成比例增加。为了提高训练速度已经付出了相当大的努力。在本文中,我们给出了大规模深度学习优化的概述。一般来说,目标是双重的: 模型准确性和模型效率。至于模型的准确性,我们研究了最常用的优化算法,从梯度下降变量到(大批量)自适应方法,从一阶方法到二阶方法。此外,我们还阐述了在大批量训练中出现的泛化差距这一有争议的问题。至于模型的效率,我们总结了SOTA技术在解决通信开销和内存占用方面的昂贵成本。我们希望这篇文章可以为那些有兴趣进行大规模训练的人提供一个清晰的草图。

成为VIP会员查看完整内容
52

相关内容

「大规模图神经网络系统」最新2022综述:从算法到系统
专知会员服务
110+阅读 · 2022年1月14日
专知会员服务
14+阅读 · 2021年7月7日
最新《注意力机制与深度学习结合》综述论文
专知会员服务
75+阅读 · 2021年6月17日
专知会员服务
197+阅读 · 2020年3月6日
最新《分布式机器学习》论文综述最新DML进展,33页pdf
专知会员服务
117+阅读 · 2019年12月26日
深度学习算法与架构回顾
专知会员服务
77+阅读 · 2019年10月20日
【综述论文】2020年最新深度学习自然语言处理进展综述论文!!!
深度学习自然语言处理
13+阅读 · 2020年4月6日
详解深度学习中的双下降现象
计算机视觉life
5+阅读 · 2019年12月19日
深度学习算法与架构回顾
专知
7+阅读 · 2019年5月5日
7个实用的深度学习技巧
机器学习算法与Python学习
16+阅读 · 2019年3月6日
精华 | 深度学习中的【五大正则化技术】与【七大优化策略】
机器学习算法与Python学习
5+阅读 · 2017年12月28日
深度学习中的五大正则化方法和七大优化策略
全球人工智能
11+阅读 · 2017年12月25日
Arxiv
0+阅读 · 2022年1月20日
Arxiv
3+阅读 · 2020年5月1日
Accelerated Methods for Deep Reinforcement Learning
Arxiv
6+阅读 · 2019年1月10日
Arxiv
5+阅读 · 2018年5月1日
VIP会员
相关资讯
【综述论文】2020年最新深度学习自然语言处理进展综述论文!!!
深度学习自然语言处理
13+阅读 · 2020年4月6日
详解深度学习中的双下降现象
计算机视觉life
5+阅读 · 2019年12月19日
深度学习算法与架构回顾
专知
7+阅读 · 2019年5月5日
7个实用的深度学习技巧
机器学习算法与Python学习
16+阅读 · 2019年3月6日
精华 | 深度学习中的【五大正则化技术】与【七大优化策略】
机器学习算法与Python学习
5+阅读 · 2017年12月28日
深度学习中的五大正则化方法和七大优化策略
全球人工智能
11+阅读 · 2017年12月25日
微信扫码咨询专知VIP会员