1000层transformer横空出世!

2023-12-23 00:20

本文主要是介绍1000层transformer横空出世!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自新智元公众号

编辑:David 拉燕

【导读】近日,微软研究院的研究人员搞出了一个1000层的Transformer,在多语种机器翻译任务上刷新多项SOTA

近年来,追求大规模的Transformer模型成为了一种潮流。

从一开始的百万级的模型参数,到十亿级,再到万亿级,参数规模极大增加。大规模的模型可以在大量任务中可以有更棒的表现,在小样本和零样本学习的情况下也展现出了出色的能力。

尽管参数的数量越来越大,参数的深度却一直在被Transformer训练的不稳定性所局限。2019年,科学家Nguyen和Salazar发现,基于post-norm连接的pre-norm残差连接可以提升Transformer的稳定性。

底层Pre-LN的梯度会比顶层的要大,这就导致和Post-LN相比,在性能上会有些许衰退。

为了解决这个问题,研究人员尝试提升了深度Transformer的优化。这是通过更好的初始化或是架构实现的。这些办法使Transformer在数百层的情况下也能保持稳定。

但是还是没有一种办法可以使Transformer的层数到达1000.

4f8e6fa0b46f186d4739f3fc2434cb15.png

论文链接: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进行层级规范化之前,升级了残差连接。

另外,研究人员在初始化的过程中把参数降级了。特别要指出,他们把前馈网络的占比提高了,一同被提高的还有注意力层的价值投影和输出投影。

且残差连接和初始化的规模和整体结构是相关的。

bebe026d397f6590568082c2c7c60a62.png

超深的Transformer:DEEPNET

研究人员引入了超深Transformer——DEEPNET. 通过缓解极大增长的模型在升级中遇到的问题,DEEPNET可以是优化的过程更加稳定。

首先,研究人员给出了DEEPNET模型升级的预测量级。之后又给出了理论分析,发现只要使用DEEPNORM,DEEPNET升级的过程就可以被限制在一个常数。

DEEPNET基于Transformer架构。和之前的vanilla Transformer相比,在每个子层上,都使用了研究人员最新研究的DEEPNORM,而不是Post-LN。

DEEONORM的表达式可以写成:

e75a96664793805ffd8dddfda018416f.png

其中,α是常数,Gl(xl , θl)是第I层Transformer的子层的方程,同时θl是系数。DEEPNET还能残差内部的权重放大了β。

α和β都是常数,且只和结构有关。

此外,注意力是Transformer一个很重要的部分。

在不失一般性的情况下,研究人员研究了1-head的情况。其中Q、K、V分别指query、key和value。而WQ、WK、WV都是输入的映射矩阵。WO则是输出的映射矩阵。因此,注意力方程式可以写作:

0d702ed6329d31d64a6cd32b11c982b7.png

下图展示了在早期的训练阶段,vanilla Post-LN和DEEPNET模型升级时的情况。研究人员将64-128-2微小Transformer进行了可视化,它们的深度从6L6L到100L100L不等。

从该图中我们可以看出,DEEPNET比Post-LN有更稳定的更新。

5c9bec80bb1c03ffc11a7ae2d385c5b2.png

性能:1000层网络,显著提升NMT表现

神经机器翻译

我们在流行的机器翻译基准上验证了DEEPNET的有效性,包括 IWSLT-14德语-英语(De-En)数据集和WMT-17英语-德语(En-De)数据集。

我们将DEEPNET与多个最先进的深层Transformer模型进行了比较,包括DLCL、NormFormer、ReZero、R-Fixup,T-Fixup,DS-init等。

我们用上述其他模型的开源代码重现了基线标准性能,并设置了相同的超参数。使用BLEU作为所有实验的评估指标,评估结果如下:

3d9ce87c91831eed5eec2078eacae80e.png

上表所示为基线和DEEPNET的结果和DEEPNET在WMT-17 英语-德语翻译数据集上的结果

与Post-LN的模型相比,DEEPNET更加稳定,可以成功扩展到100L-100L,在测试集上达到28.9的BLEU。相比之下,当深度达到50L-50L时,带有Post-LN的基线导致了不稳定的优化。此外,当模型较浅时,DEEPNET取得了与这些基线相当的性能。

不同深度上的快速收敛

0e1ed2fb28d30f3be479376c508c4697.png

我们将模型的深度从10L-10L到100L-100L,间隔为10层。除了ReZero3,所有实验都是在混合精度训练下进行的。上图所示为IWSLT-14数据集上的结果。

我们对模型进行了8000步的训练,因为我们发现大多数收敛发生在优化的开始阶段。总的来说,DEEPNET从浅到深都很稳定,收敛很快,只用了8000步就达到了30多个BLEU,大多数基线达不到这一水平。另外,随着模型深度的增加,其性能不断提高。

c75a088c88730c3d5067decfeb823d3e.png

更高的学习率、批规模和隐藏维度

我们进一步将DEEPNET分别扩展到更高的学习率、批规模和隐藏维度上。

在每个实验中只改变一个超参数,其他超参数固定。上图所示为WMT-17验证集上的损失曲线。

结果表明,在这一设置下,DEEPNET可以毫无困难地训练。在1024个隐藏大小的情况下,由于过拟合,DEEPNET的损失在10K步之后增加。此外,DEEPNET可以从更大的设置中获益,获得更快的收敛速度和更低的验证损失。

大规模多语言神经机器翻译

我们在大规模多语言机器翻译上进行了实验,这是大模型的一个很好的测试平台。

首先使用OPUS-100语料库来评估模型。OPUS100是一个以英语为中心的多语言语料库,涵盖了100种语言,它是从OPUS集合中随机抽取的。我们将DEEPNET的规模扩大到1000层。该模型有一个500层的编码器,一个500层的解码器,512个隐藏大小,8个注意力头,以及2048维的前馈层。

1e2f724c4ffd3084cffad6a1c650c3dc.png

如上图所示,实验结果表明,增加网络深度可以显著提高神经机器翻译的翻译质量:48层的基线比12层的模型平均实现了3.2分BLEU分数增长。

DEEPNET可以成功地将深度扩大到1000层,比基线提高了4.4 BLEU。而且DEEPNET只训练了4个epoch,如果有更多的计算预算,其性能还可以进一步提高。

更多的数据量,更多的语言

为了探索DEEPNET在多语言神经机器翻译上的局限,我们还使用CCMatrix扩大训练数据的规模。我们扩大了CCAligned、OPUS和Tatoeba4的数据,以覆盖Flores101评估集的所有语言。最终的数据包括102种语言,1932个方向,以及120亿个句子对。

利用这些数据,我们用100层编码器、100层解码器、1024个隐藏维度、16个头和4096个中间维度的前馈层来训练DEEPNET,结果如下:

537c4b581f0f66b69fba81427b7145a2.png

综上,DEEPNET提高了Transformer的稳定性,并成功地将其扩展到1000层。它在理论上证明了以模型更新的恒定上界来稳定优化。实验结果验证了我们的方法在各种基准中的有效性。

目前的实验专注于机器翻译作为一个测试平台。在未来,我们将扩展DEEPNET,支持更多不同的任务,如语言模型预训练、蛋白质结构预测,以及BEiT视觉预训练等。

参考链接:

https://arxiv.org/abs/2203.00555

推荐阅读:

我的2022届互联网校招分享

我的2021总结

浅谈算法岗和开发岗的区别

互联网校招研发薪资汇总

对于时间序列,你所能做的一切.

什么是时空序列问题?这类问题主要应用了哪些模型?主要应用在哪些领域?

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

28f31a09f79a1367a9dc972faea75484.png

发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)

发送【1222】获取一份不错的leetcode刷题笔记

发送【AI四大名著】获取四本经典AI电子书

这篇关于1000层transformer横空出世!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526039

相关文章

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

Transformer从零详细解读

Transformer从零详细解读 一、从全局角度概况Transformer ​ 我们把TRM想象为一个黑盒,我们的任务是一个翻译任务,那么我们的输入是中文的“我爱你”,输入经过TRM得到的结果为英文的“I LOVE YOU” ​ 接下来我们对TRM进行细化,我们将TRM分为两个部分,分别为Encoders(编码器)和Decoders(解码器) ​ 在此基础上我们再进一步细化TRM的

LLM模型:代码讲解Transformer运行原理

视频讲解、获取源码:LLM模型:代码讲解Transformer运行原理(1)_哔哩哔哩_bilibili 1 训练保存模型文件 2 模型推理 3 推理代码 import torchimport tiktokenfrom wutenglan_model import WutenglanModelimport pyttsx3# 设置设备为CUDA(如果可用),否则使用CPU#

逐行讲解Transformer的代码实现和原理讲解:计算交叉熵损失

LLM模型:Transformer代码实现和原理讲解:前馈神经网络_哔哩哔哩_bilibili 1 计算交叉熵目的 计算 loss = F.cross_entropy(input=linear_predictions_reshaped, target=targets_reshaped) 的目的是为了评估模型预测结果与实际标签之间的差距,并提供一个量化指标,用于指导模型的训练过程。具体来说,交叉

深度学习每周学习总结N9:transformer复现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 目录 多头注意力机制前馈传播位置编码编码层解码层Transformer模型构建使用示例 本文为TR3学习打卡,为了保证记录顺序我这里写为N9 总结: 之前有学习过文本预处理的环节,对文本处理的主要方式有以下三种: 1:词袋模型(one-hot编码) 2:TF-I

【oracle sql错误】ORA-01795: 列表中的最大表达式数为 1000

select SOURCE_ID,FILTER_TEXT from TEXT_CENTER where SOURCE_ID in() in后面的括号里的数目超过1000条。 问题描述: SQL进行IN查询时,IN中的数据量不能超过1000条。 解决办法: 拆分:id in (1,2,3,4,5,,,,999) or id in(1000,1001,1002,1003,1004,,,,,,

RNN发展(RNN/LSTM/GRU/GNMT/transformer/RWKV)

RNN到GRU参考: https://blog.csdn.net/weixin_36378508/article/details/115101779 tRANSFORMERS参考: seq2seq到attention到transformer理解 GNMT 2016年9月 谷歌,基于神经网络的翻译系统(GNMT),并宣称GNMT在多个主要语言对的翻译中将翻译误差降低了55%-85%以上, G

ModuleNotFoundError: No module named ‘diffusers.models.dual_transformer_2d‘解决方法

Python应用运行报错,部分错误信息如下: Traceback (most recent call last): File “\pipelines_ootd\unet_vton_2d_blocks.py”, line 29, in from diffusers.models.dual_transformer_2d import DualTransformer2DModel ModuleNotF

用最简单的话来解释大模型中的Transformer架构

开篇 我个人的观点是要想系统而又透彻地理解 Transformer,至少要遵循下面这样一个思路(步骤): 理解NLP基础 在探讨Transformers之前,了解自然语言处理(NLP)的一些基本知识至关重要。NLP使计算机能够理解和生成自然语言,文本的表征是其核心任务之一。传统的语言模型往往依赖于递归神经网络(RNN)处理序列数据,但RNN在长序列中表现较差。为了解决这一问题,必须引入先

【大规模语言模型:从理论到实践】Transformer中PositionalEncoder详解

书籍链接:大规模语言模型:从理论到实践 第15页位置表示层代码详解 1. 构造函数 __init__() def __init__(self, d_model, max_seq_len=80):super().__init__()self.d_model = d_model # 嵌入的维度(embedding dimension) d_model: 表示输入词向量的维度。max_se