首页 文章详情

1000层Transformer问世!刷新NMT多项SOTA!

机器学习实验室 | 91 2022-03-07 20:47 0 0 0
UniSMS (合一短信)

转自:新智元

近日,微软研究院的研究人员搞出了一个1000层的Transformer,在多语种机器翻译任务上刷新多项SOTA
 
从一开始的百万级的模型参数,到十亿级,再到万亿级,参数规模极大增加。大规模的模型可以在大量任务中可以有更棒的表现,在小样本和零样本学习的情况下也展现出了出色的能力。
 
尽管参数的数量越来越大,参数的深度却一直在被Transformer训练的不稳定性所局限。2019年,科学家Nguyen和Salazar发现,基于post-norm连接的pre-norm残差连接可以提升Transformer的稳定性。
 
底层Pre-LN的梯度会比顶层的要大,这就导致和Post-LN相比,在性能上会有些许衰退。
 
为了解决这个问题,研究人员尝试提升了深度Transformer的优化。这是通过更好的初始化或是架构实现的。这些办法使Transformer在数百层的情况下也能保持稳定。
 
但是还是没有一种办法可以使Transformer的层数到达1000.
 

论文链接:https://arxiv.org/abs/2203.00555

 
最近,来自微软研究院的一篇论文,成功实现了Transformer层数量级上的突破,达到了1000层。
 
研究人员的目标就是不断提升Transformer训练的稳定性,继续提升模型的深度。他们研究了优化不稳定的原因所在,发现正是模型参数规模爆炸式的增加导致了这种不稳定性。
 
基于上述结论,研究人员在残差连接处使用了一种新的规范化函数——DEEPNORM。理论上,这种新的函数可以把模型的更新限制在一个常数以内。
 
这种办法看似简单,实则有效,只需要改变几行代码而已。
 
有了新函数,Transformers的稳定性就得到了大幅提升。研究人员也可以把模型的深度扩大到1000层。
 
此外,DEEPNORM还成功将Post-LN和Pre-LN的优良性能进行结合。新方法是Transformers的上位替代,对于深度的模型和大规模的模型都是如此。
 
值得一提的是,和目前最先进的有12B参数的48层模型相比,3.2B参数的200层模型实现了5 BLEU的提升。这部分提升主要体现在大规模多语言机器翻译基准上。
 
在基于Transformer的PostLN上使用新发现的办法不是件难事。和Post-LN相比,DEEPNORM进行层级规范化之前,升级了残差连接。
 
另外,研究人员在初始化的过程中把参数降级了。特别要指出,他们把前馈网络的占比提高了,一同被提高的还有注意力层的价值投影和输出投影。
 
且残差连接和初始化的规模和整体结构是相关的。
 
 

超深的Transformer:DEEPNET


研究人员引入了超深Transformer——DEEPNET. 通过缓解极大增长的模型在升级中遇到的问题,DEEPNET可以是优化的过程更加稳定。
 
首先,研究人员给出了DEEPNET模型升级的预测量级。之后又给出了理论分析,发现只要使用DEEPNORM,DEEPNET升级的过程就可以被限制在一个常数。
 
DEEPNET基于Transformer架构。和之前的vanilla Transformer相比,在每个子层上,都使用了研究人员最新研究的DEEPNORM,而不是Post-LN。
 
DEEONORM的表达式可以写成:
 
 
其中,α是常数,Gl(xl , θl)是第I层Transformer的子层的方程,同时θl是系数。DEEPNET还能残差内部的权重放大了β。
 
α和β都是常数,且只和结构有关。
 
此外,注意力是Transformer一个很重要的部分。
 
在不失一般性的情况下,研究人员研究了1-head的情况。其中Q、K、V分别指query、key和value。而WQ、WK、WV都是输入的映射矩阵。WO则是输出的映射矩阵。因此,注意力方程式可以写作:
 
 
下图展示了在早期的训练阶段,vanilla Post-LN和DEEPNET模型升级时的情况。研究人员将64-128-2微小Transformer进行了可视化,它们的深度从6L6L到100L100L不等。
 
从该图中我们可以看出,DEEPNET比Post-LN有更稳定的更新。

往期精彩:

《机器学习 公式推导与代码实现》随书PPT示例

 时隔一年!深度学习语义分割理论与代码实践指南.pdf第二版来了!

 新书首发 | 《机器学习 公式推导与代码实现》正式出版!

《机器学习公式推导与代码实现》将会配套PPT和视频讲解!

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter