【无标题】

01.什么是Transformer?

神经网络模型训练其实目标就是在最小化一个经验损失,和线性回归类似,两者的区别在于深度学习一般会得到一个复杂的非线性函数,F神经网络,多层神经网络是复合函数就是将两个简单函数组装起来。

例子:语言模型。

给定上下文以后,想让模型去预测它下一个词是什么。

图片

我们发现,当神经网络特别复杂的时候,它可以预测的很准。

GPT-3语言模型:逐个词预测,预测的结果质量很高。

图片

最近的研究有很多人试图将语言模型的预测拓展到其他领域。

目前阶段的很多研究都是基于Transformer的,那什么是Transformer?

Transformer是一种神经网络,最开始是为自然语言设计的。对比Transformer和RNN,这两个模型都是为序列数据设计的,输入和输出都不是一个字而是一串字,RNN在计算时会对输入指定一个顺序,逐个词进行处理。Transformer不假设顺序,用矩阵表示关系,一次性并行处理所有输入,根据矩阵计算出。

图片

对于具体例子而言:

图片

更具体来讲,Transformer完全依赖于注意力机制处理序列,有两种子函数:Self-Attention和Feedforward。Self-Attention专门用来处理上下文,Feedforward用两层的MLP,对每个词分别处理,不知道上下文。其中,Self-Attention子函数:把输入数据看成一个3*K的矩阵乘以它自己的转置K*3得到一个3*3的矩阵,最终计算出新的3*K:

图片

Transformer通过残差连接方法将模块接在一起,具体来说对于一个子函数f(x)(可能是Self-Attention,也可能是Feedforward),将其包装成LN(f(x)+x)。

02.如果Warm up是答案的话,那么我们探讨的是一个什么问题?

 

在Transformer之前,CNN被认为是最常用的神经网络,它的训练是基于SGD和Learning Rate Decay的。如果我们同样去训练RNN模型的话,它也是可以完成训练的。但是如果我们把SGD和Learning Rate Decay用于Transformer的训练,发现是训练不了的,训练结果非常差。针对这个训练结果差的问题,我们必须要用带有Warmup的Learning Rate Decay和Adaptive optimizer进行训练才可行。

图片

为什么需要Warmup?什么是LR Decay?

Learning Rate是步长,设置合适的大小非常重要,如果设置过大会发散,太小会导致速度很慢。在神经网络中设置太小的话会陷入局部最优解。常规操作是最开始设置一个较大的Learning Rate值(可以探测比较大的区域),然后一点点线性减小,如下图:

图片

Warm up会把Learning Rate从小变大然后再线性减小,如下图:

图片

在Transformer的训练中Warm up非常重要,如果我们使用Warmup,并用Adam作为优化器,训练可以正常收敛;如果不使用Warm up训练效果会很差。如下图:

图片

将模型梯度可视化,可发现Transformer用和不用Warm up其梯度分布差别很大。X轴是梯度范数,Y轴是更新次数:

图片

我们发现,用Warmup的话梯度分布从始至终都是一致的,不用的话梯度在最开始和使用的效果一样,但十次更新内很快梯度被扭曲成另外一种不同的样子。也就是说在最开始的时候有一些非常不好的事情发生,那么是什么事情发生了?Optimizer在做什么?

计算一个移动均值,在开始的时候一点点增加数据采样个数。在第一次更新时只有一个采样,此时方差很大。所以,考虑会不会是在刚开始的时候采样太少方差太大导致出现问题。

为了验证这个思路,进行控制实验:

图片

上图中蓝色的线是不使用Warmup,也不使用额外采样的情况。橙色的线是不用Warm up,利用2000个额外采样计算2000个梯度,从而降低移动均值方差,这个效果和使用Warm up效果一样,成功完成模型的训练。

然后,我们来分析方差的重要性:

图片

V在分母,且小于1,v的方差较大,\frac{\eta }{\sqrt{v_{t}}}的方差会更大,所以很重要。

为了处理这个方差,我们提出一个方法来控制方差。加一项ct,使其整体方差是稳定的。

图片

方差验证:

图片

上图证明加了这一项以后方差可以保持稳定。也就是说,不使用Warmup,加了这一项同样可以使训练成功完成。

图片

结论:Warmup不是由于模型导致的,而是由于optimizer导致的,因为初始的方差太大。如果这个推理成立,它可能也会影响到其他的模型。同理,通过控制方差,看是否对CNN也有相同影响:

图片

我们发现,在控制了learning rate的方差以后,optimizer对Learning rate的接受度也就变的更高。

 03.理解训练Transformer的难点

 

为什么Transformer训练起来更复杂?

我们无法用SDG去训练模型,另外五年前我们可以训练超过1000层的CNN,但现在我们不能训练24层的Transformer。

图片

两种区别区别在于把Layer Norm放在不同的地方。Pre-LN虽然更容易训练,但它的性能更差。Post-LN在一半的情况下成功,一般的情况下失败。Pre-LN在所有15种组合中都成功了。一般情况下,如果Post-LN能成功的话,它一般都有更好的表现。在另外两个数据集上发现了相同的趋势:

图片

Post-LN和Pre-LN的Transformer的区别在哪里?为什么Post-LN的 Transformer更难训练?

什么是梯度消失?

模型中有一些参数,它的梯度大小一直比别的参数的梯度小或大。在这种情况下,如果给所有的参数都用同样的Learning rate步长,会出现一些问题。所以,梯度消失一直是模型训练的难点。

下图是在5层的神经网络中将参数的梯度分布描述出来,x轴是 梯度大小,y轴是参数个数。发现第一层大部分参数的梯度是比较小的,第五层很多参数的梯度大一些。

图片

最近的一些研究也谈论了这个问题,比如2019年的这个文献(“Adaptive input representations for neural language modelling”)它发现了这个新的变种训练起来更简单一点,而2017年原始的版本(“Attention is all you need”)训练是不稳定的。

图片

2020年的文章进一步发现Pre-LN不存在梯度消失,Post-LN存在梯度消失。其中的差异就是梯度消失,这表明梯度消失是Transformer训练不稳定的根本原因。

那么梯度消失到底是不是罪魁祸首?刚开始我们也这么认为,通过深入分析发现其实不是的。梯度消失在Transformer的训练中可能并不是一个很严重的问题。

具体通过验证实验进行分析,设置新的变种,将梯度消失在最初的Transformer中解决了。

图片

我们提出的方法解决了梯度消失问题,但它的训练仍然不稳定,还是无法训练。

具体来讲,发现原来的版本有多于一半的部件是不会梯度消失的,因此我们设计了一个混合的Transformer,将不消失的部分保留下来,将消失的部分替换为新的Pre-LN的不消失。

图片

复合的版本有一部分是Post-LN,一部分是Pre-LN,它不会梯度消失,但是它的训练依然很困难。

结果证明,即使我们修复好了梯度消失问题,模型原来不能训练现在也不能训练。

总结:梯度消失可能不是Transformer训练困难的拦路虎,拦路虎是其他东西,那么是什么呢?本文认为拦路虎是模型对于参数稳定性。

数值分析中的Condition number是用来刻画如果将一个函数的输入稍微改变一下,那么它的输出变化会有多大?从直觉上来讲,如果我们更新这个模型的参数以后,如果有一个非常小的模型参数更新,它的输出变化会非常剧烈,那么模型会很难训练。分析Transformer训练困难的原因是不是它的输出变化太过剧烈?

给模型参数加了一个微小扰动后,看它的输出有多么剧烈?

F是Transformer,x是输入,w是Transformer的参数,给w增加一个值\delta以后看它的输出变化的期望是多少?

图片

我们发现最初的Transformer的变化和它的层数是一个线性变化的关系,新的Transformer它的变化和层数是对数的关系,这两个版本输出的变化差距很大:

图片

在理论之外进行验证:

先将模型参数初始化为w之后,给w加扰动变为w*,随机扰动加了之后,原来版本输出的变化和它的层数确实是线性关系。最右边的图是现实环境的,将随机扰动替换为梯度的更新。

图片

证明两种模型的输出变化是存在差异的,还需要验证这个差异是我们要找的最关键的不同。

图片

模型的输出变化是Transformer训练的主要问题吗?是。

怎么约束模型的输出变化?

对模型输出的变化做一个估计:

图片

图片

认为f(x)的平均值为0,它的方差和二范数的平方只差一个常数,是一个线性关系。

可以通过约束模型的beta来约束模型的输出变化。

图片

Wi的两阶段初始化:

(1)初始化wi为1,将 x的方差和  f(x)  的方差测量;

(2)在初始化的时候初始化wi保证

图片

图片

我们发现依赖初始化我们可以成功约束模型的输出。同时,我们也发现,在把模型的输出变了以后,虽然模型的结构依然是Post-LN和最初的模型等价,但它的训练变得稳定了。

规范化输出变化的影响:

Post-LN结构在15种里面有7种会训练不成功,而Admin(Post-LN)的所有15种超参数的组合中它都成功训练了,同时它也得到更好的结果。

调节Post-LN的输出变化:使用新的初始化方法后的Post-LN都成功收敛了,都达到了一个更好的结果。在另外两个数据集上进行验证,证明不需要做额外的超参数调整,使用我们的初始化方法在更深层次的模型中训练结果会收敛且性能更好:

图片

图片

类似的,画出这些模型的Learning rate:

图片

发现,使用我们的Transformer模型,原来方法模型的收敛性更好。

我们的方法提高了训练的稳定性以及模型的性能:

图片

简单总结:虽然梯度消失是Transformer模型训练最大的拦路虎,但是我们发现其实梯度消失并不是最重要的一个问题。与此同时我们发现了一个很重要的问题,那就是模型对于参数更新的不稳定性,同时我们提供了一个约束这个不稳定性的方法。

为什么Admin+Post-LN的性能比Pre-LN好?

从结构上看Post-LN和Pre-LN的区别:结合当前模型的输出方式不同。

图片

主要区别:都是对子层加权的平均,只是使用的权值不同。第i+1层的输入/第i层的输出表示成前面所有层的加权平均。在这种情况下,不同模型体现在对beta设置不同值。

图片

两种不同的模型结构:

图片

Post-LN的beta值大于Pre-LN的beta值,两个例子:

(1)6层的分析:

图片

(2)18层的分析:将Admin加入Post-LN与Pre-LN对比,发现我们的方法让beta的分布比较平均,成功的限制住了模型的不稳定性,深度也会更深。

图片

小结:Admin+Post-LN性能更好的原因是因为它有更好的自由度去决定对角线上beta的值有多大。

Bonus分析:

SDG对所有参数用的是相同步长,Adaptive optimizer的步长根据梯度大小的估计(平均移动)做一个rescale。

图片

问题:在transformer中,无论梯度消失或不消失,总有一部分参数的梯度很小。Adaptive optimizer保证更新比较均匀,无论梯度是否消失,都不会是重大问题。

图片

证明梯度消失对Transformer不是很重要,因为我们有adaptive optimizer。

 04.Effort-light transformer除了让训练变得更简单以外,还有没有其他的好处?

通过Effort-light的训练可以有更多的配置训练模型,之前我们发现传统的Transformer模型普遍比较浅,Effort-light transformer可以进行深层次训练。

总的来讲,给我们带来了新的机会:

(1)在不改变模型结构的情况下,用不同的策略对模型进行Rescale/Reconfigure;

(2)使用不同的模型结构。

之前扩容的方法就是增加宽度,而我们的方法将宽度保持不变,只是增加模型的深度:

图片

数据集验证:

图片

我们发现之前的方法是比较浅的,基本上都不超过10层,我们将其变成72层,如果直接训练的话会失败,但是加上Admin之后,我们是可以训练这个72层的模型的。

探索其他模型的设计:Transformer中比较重要的组件--多头的注意力模型。单头的注意力模型认为只能看一个地方,而多头注意力模型可以同时看多个地方。

图片

如果只是要看多个地方的话,不一定依赖于多头的注意力模型,也可以用单层的多头注意力模型。

图片

两个模型计算复杂度差不多,但深度不同。如果保持相同注意力的头,那么多头模型深度会浅一点,也会更好训练一点。单头的会更深一点,同时也会更难训练。用我们的初始化方法,也可以训练这样的单头模型。即使它的层数接近400层,我们也可以非常简单的训练它。

图片

单头模型的结果普遍比多头模型的结果好:

图片

速度对比:理论上计算复杂度相同,但现实中是不是这样呢?

推理速度用优化的C++实现,单头和多头的推理速度基本相同。但基于PyTorch进行模型训练时,发现深的单头模型更难被并行化,每次模型更新都需要更多的时间。同时,深的单头模型会收敛更快。

图片

上图我们会发现单头模型更快一点。

总结:多头模型的优势是训练的稳定性,同时我们的初始化方法为模型的设计带来了一些新的机会。

 05.总结

(1) Warmup主要是用来处理比较大的adaptive learning rate方差。

(2) 梯度消失并不是Transformer训练主要的拦路虎,而是模型输出的不稳定性。

(3) 通过设置一个新的初始化方法来对模型的输出进行控制,保证模型的输出是比较稳定的。

(4) 我们的方法不止让Transformer模型变得容易训练,同时Admin也为模型设计和配置带来了一些新的机会。

Transformer:

(1) 不要求输入是有顺序的;

(2) 更容易并行,计算速度更快;

06.文献结论

本文从理论和实证两方面对Transformer训练的难点进行了研究。

我们在第3节的研究表明梯度消失问题不是Transformer不稳定训练的根本原因。另外,不平衡的梯度分布问题主要是通过自适应优化器来解决的。

在第4节中,我们揭示了不稳定的根本原因是对残差分支的强依赖,它放大了参数变化引起的波动,使模型训练不稳定。根据我们的分析,我们提出了admin,一种自适应初始化方法来稳定Transformer训练。它在训练开始时控制依赖关系,并在训练稳定后保持捕捉这些依赖关系的灵活性。

大量的实验验证了我们的直觉,并表明,在不引入额外的超参数的情况下,admin实现了更稳定的训练、更快的收敛和更好的性能。

Warmup文献:On the variance of the adaptive learning rate and beyond

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值