标题:《CAME:Confidence-guided Adaptive Memory Efficient Optimization》

一、摘要部分

1、提出问题:

Adam和LAMB等自适应梯度方法具有出色的性能,但是却需要额外的内存开销。而如Adafactor这样的内存效率优化器,性能却不如前者(在准确度、误差、速度等方面)

2、解决问题,提出模型:

使用一种置信引导策略,减少内存效率优化器的不稳定性 基于以上策略,提出CAME优化方法,实现以下两个目标: 1)快速收敛 2)低内存使用

3、结论

大量实验证明,CAME在各种NLP任务中训练具有稳定和卓越的性能。与Adam相比,对于32768的大批量BERT预训练,CAME具有更快的收敛速度和更高的精度。

二、介绍部分

1、问题:

1)提出大语言模型(LLM)的鲁棒性依赖于基于自适应梯度优化方法。而如Adam的自适应优化方法需要使用到额外的内存,随着模型规模越来越大,内存限制逐渐变为训练大语言模型的瓶颈。 2)最近出现如Adafactor等的优化器,能够将O(mn)的内存需求减少到O(m+n),大致方法就是用一个n×1和一个1×m的向量来近似代替一个n×m的矩阵,减少内存使用,如图:

虽说减少了内存的使用,但Adafactor在训练中存在性能下降的问题,这是由于它进行上述分解操作时引入误差,导致训练不稳定。

3)在大批量训练的情况下,内存消耗远高于一般训练,在批量大小超过某个界限 时,收敛解的精度显著下降,目前还没有解决该问题的相关工作

2、解决方案:

使用置信引导策略来缓解Adafactor的不稳定性,在此基础之上提出CAME优化器,节约内存的同时获得更快的收敛速度和卓越的性能。

3、提出挑战

使用CAME优化器对BERT进行大批量训练

4、论文贡献如下:

1)探索了一种置信引导策略 2)提出了CAME优化算法 3)通过大量使用证明了CAME的强大性能

三、相关工作部分(了解即可)

1、Adafactor建议在每个训练步骤添加低秩近似(见介绍部分2)点) 2、SM3将二阶梯度矩阵的元素划分为集合构造近似矩阵 以上两种方法在训练中表现不佳且收敛缓慢 3、LARS分层自适应算法将ResNet-50的批量大小扩展到32k 4、LAMB优化器基于LARS,通过TPU v3 Pod可以在76分钟完成BERT训练 5、更大批量的训练对于大多数研究人员来说是昂贵且难以实现的,大批量训练很容易收敛到局部极小值,容易导致模型的泛化能力存在较大差距。传统方法通过调整超参数等方法缩小泛化差距。但很少人尝试减少大批量训练中的内存使用。

四、<手动加粗>方法部分(重点)<手动加粗>

1、Adafactor概述

其中是第t步的梯度,是分解二阶矩后的两个低秩因子,是二阶矩的近似值, 是当前的近似更新,是更新动量,θ是模型的参数,η是学习率,为超参数,ε是正则化常数,d是一个阈值 算法解释(个人解释,有问题希望各位指出): 1)根据t-1步的f计算出梯度 2)使用更新,等是对矩阵进行分解成n×1和一个1×m的向量,减小内存使用 3)是对的近似还原(误差就出现在这,至于为什么除以而不是,单纯因为这样效果更好) 4)的更新方式采用的是RMSprop算法的更新方式 5)=代表,当没有超过阈值d时,=/1即不做处理,当超过阈值d时,=/(/d),即进行归一化处理 6)而后使用对进行更新 7)最后更新θ参数 PS:说实话刚开始直接看算法我也很懵,可以先去一步步了解动量梯度下降法、RMSprop、Adam优化算法,链接如下: ①[双语字幕]吴恩达深度学习deeplearning.ai(p66~p68,比较好理解) ②优化器讲解(还算好理解) ③Adam 优化器背后的数学原理(是好理解的hhh) ④AdaFactor优化器浅析(附开源实现)(数学公式比较多,有点难)

2、Adafactor的错误更新与置信策略

1)由于计算更新存在误差,Adafactor总比Adam收敛的慢,如图:

2)当更新动量与的差异较大,则说明原始Adafactor更新存在较大的误差,优化方向偏离期望方向,收敛缓慢性能不佳,即我们说它具有较低的置信度(如下图(a)),此时需要较小的更新步幅。

3)当更新动量与的差异很小,动量更新动量是稳定的,此时误差小,我们说它具有较高的置信度(如下图(b)),此时需要较大的更新步幅。

综合2)与3),可知在置信度低的时候需要进行较小的更新步幅(迈小步),在置信度大的时候进行较大的更新步幅(迈大步)。故作者将与的残差来表示动量的不稳定性,并将其作为的分母:

这里使用来表示动量的不稳定性,越不稳定时,该项越大,置信度越低,分母增大则计算后所得结果小,进行更新步幅小。反之,越稳定时,该项越小,置信度越高,分母增大则计算后所得结果大,进行更新步幅大。 补充:ε是一个很小的数,一般为,用于避免分母过于小或者为0的情况。作者还提出代表不稳定矩阵(应该就是上面计算出的矩阵),所以就是本文说的置信度。

3、CAME算法

该算法是基于Adafactor优化算法和置信策略提出的

蓝色部分即为在Adafactor算法上添加置信策略后的改进,根据上面所说应该不难理解。其中和前面的一样,采用存储对矩阵进行分解成n×1和一个1×m的向量,是对的近似还原,减少内存使用的手法是和Adafactor如出一辙的。CAME比Adafactor更快到达最佳点,如下图所示:

在这里,学习率设置为,,其余参数设置与Adafactor中默认值相同。

五、实验部分

在这一部分,作者将CAME在三种重要大型语言模型(BERT、GPT-2和 T5)的训练任务上与现有优化器进行比较

1、相关设置(比较好理解,为直接翻译内容)

1)数据集:在 BookCorpus 和英语维基百科上分别用 800M 和 2.5B单词进行实验。此外,重点关注 GLUE 基准、SQuAD v1.1 数据集和 SQuAD v2.0 数据集来演示使用CAME 优化器预训练的 BERT 模型的性能。 2)模型:作者在三种流行的大型语言模型上评估了提出的CAME 的效率:BERT、GPT-2 和 T5。进一步测试CAME对于BERT-Large上大批量训练的性能。 3)比较方法:主要基线包括两个广泛使用的优化器:经典优化器 Adam 和内存高效优化器Adafactor。对于大批量训练,在设置基线时还额外考虑 LAMB 优化器。 4)实现细节:在Pytorch 中实现优化算法。算法中参数 分别设置为0.9 和0.999,在{0.9,0.99,0.999,0.9999,0.99999}中搜索最优 。使用 8 个 Tesla V-100 GPU,并在梯度累积和模型并行性的所有实验中将设置为。此外,对于 BERT-Large (32K)、GPT-2、T5 训练和应用学习,将η设为,运用速率预热调度,以避免由于大学习率而导致的发散,即从较小的学习率η 开始,逐渐增加到大的学习率η。为了确保与可靠的基线进行比较,使用网格搜索来调整Adafactor、Adam 和 LAMB 的超参数。通过应用 Mixup将批量大小扩展到 32,768,进一步提高了大批量训练的性能。

2、BERT训练

1)重点在BERT-Large模型上上训练,该模型共有340M参数,具体而言,在 8 Tesla V-100 GPUs上使用NVIDIDA代码预训练序列长度为128的BERT-Large模型。训练结果见下图:

由图可知,CAME(66.5%)的验证精度比Adafactor(63.1%)提高了3.4%,且比Adam具有更低的内存成本。 2)为了进一步评估CAME在大批量训练中的性能,作者在维基百科数据集上将BERT-Large训练批量大小扩展到32768,训练结果如下图:

由图可知,CAME预训练的准确率为68%,远高于Adafactor(61.9%),同时,CAME仅需Adafactor所需训练迭代次数的一半就可达到相同准确度。随着批量大小从8k增长到32k,CAME相较于LAMB,虽说训练性能略逊一些,但江少了大量的内存消耗。 3)比较各优化器的内存使用,见下表和图:

由表知,Adam和LAMB优化器消耗内存最多,CAME比SM3减少了内存的使用,虽说略高于Adafactor(因为使用置信度引导策略),但性能具有显著的提升。

图来源于使用GPT-3的方法将BERT模型扩展到40亿权重的BERT-4B模型上训练的内存占用图,由图可知,与Adam相比,CAME可节省47%的内存占用。

3、下游任务

下表展示了CAME预训练BERT模型的性能:

将最初发布的BERT-Base结果作为基线,由表可知,两种批量大小都可以以更少的内存成本实现与基线相当的性能,且在8k批量和32k的大批量训练中,没有出现性能下降问题,甚至在平均性能上还高于基线。足以说明CAME可用于大批量训练任务

4、GPT-2训练

在GPT-2上执行基于CAME的训练任务,特别采用具有345M参数的GPT-medium,使用基于Wikipedia的代码,以英语维基百科作为训练数据集,且只关注预训练的标准批量大小(128),话不多说,直接上图:

左图中可见,CAME具有和Adam相似的收敛速度和精度,这是对Adafactor的巨大改进。同时右图可见,CAME的验证困惑度(Perplexity感觉翻译成困惑度怪怪的hhh)呈现出与Adam相同的收敛性能,比Adafactor更快。

5、T5训练

作者选择具有220M参数的T5-Base模型,将Wikipedia的2.5B个单词作为训练数据集,同样只关注T5标准训练批量大小(128),上图!

结论和之前大同小异,不在复述。值得注意的是,CAME在验证损失和验证困惑度始终获得了与Adam相当的收敛性能(而且内存使用还少,不得不说在性能和内存使用上确实可以)。

六、结论

简而言之就是,作者提出了一种称为CAME的优化器,使用基于置信度的更新,具有和目前主流如Adam和LAMB相当的性能,同时大大减少了内存使用,且在大批量训练这个目前鲜有人踏足的领域是有效的,后续工作将继续在该方面努努力,作出更好的优化器。

七、局限性

1、与Adafactor相比,略微增加了计算成本。

2、与LAMB相比,CAME在BERT-Large模型大批量训练中有轻微的性能下降

3、在计算机视觉、强化学习等更多领域还有待测试

八、总结

hhhh不知道总结啥,不过这么一个高性能还省内存的优化器说不定在后续工作中会经常用到呢,期待一波吧。希望各位对于该篇笔记中有误或者理解不到位的地方随时制作,感激不尽。

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: