炼数成金 门户 商业智能 自然语言处理 查看内容

如何在NLP中有效利用Deep Transformer?

2020-1-17 15:09| 发布者: 炼数成金_小数| 查看: 22250| 评论: 0|原作者: 王子扬|来自: AI科技评论

摘要: 使用神经网络的方法解决自然语言处理的相关任务时,制约模型性能因素主要包括模型的表现力和用于进行模型训练的数据。然而在大数据时代背景下,对于很多自然语言处理的任务,我们已经能够获取到大量的高质量数据,结 ...
2017年,谷歌在“Attention is all you need”一文中首次提出了完全基于self-attention(自注意力)机制的transformer模型,用于处理序列模型的相关问题,如机器翻译等。传统的神经机器翻译模型大都是采用RNN或者CNN作为encoder-decoder模型的基础,而Transformer模型则摒弃了固有的模式,采用完全并行化的结构,在提升了模型的性能的同时提高了训练的速度,目前已经被推广到多项自然语言处理的相关任务当中。

使用神经网络的方法解决自然语言处理的相关任务时,制约模型性能因素主要包括模型的表现力和用于进行模型训练的数据。然而在大数据时代背景下,对于很多自然语言处理的任务,我们已经能够获取到大量的高质量数据,结构简单的模型无法充分发挥海量数据的优势,不足以从数据中提取出潜在的信息和文本之间的规律,从而导致增大数据量并没有明显的性能提升,反而增加了训练的负担。因此往往需要增大模型容量来增强模型的表现力,主要的手段包括增加模型的宽度和深度。

人们广泛认知通过增加模型的隐层表示维度(宽度)即使用Transformer-Big能够有效地提高翻译的性能,但是近年来,深层网络越来越引起人们的注意,相比于增加宽度,增加模型深度具有对硬件要求低,模型收敛快等优点,本文将选取近年来有关于深层Transformer模型结构的工作进行介绍。

1、Deep Transformer在机器翻译中的应用(1)
论文标题:Learning Deep Transformer Models for Machine Translation

本文由东北大学小牛翻译团队发表于2019年ACL会议。本文的主要贡献包括:1)首次提出了transformer中的层正则化位置对于训练一个深层网络至关重要;2)提出了一种动态层信息融合的方式,提高了信息传递的效率,解决了深层网络信息传递效率差的问题,大大提高了深层网络的性能。
Pre-norm和Post-norm

文中指出transformer模型中层正则化的正确使用是学习深层编码器的关键。通过重新定位层正则化的位置将其置于每个子层的输入之前,便能够有效解决深层网络当中容易出现的梯度爆炸或者梯度消失现象,这对训练深层网络的影响在之前并未被研究过。

图1 post-norm和pre-norm
如图1(a)所示是传统的post-norm方式,即将层正则化位置放置在每一个子层的残差连接之后即通过对层输出进行归一化处理来防止参数漂移,增加模型训练的鲁棒性。具体的计算方式可以用如下流程表示:层输入->层计算->dropout->残差累加->层正则化。而将层正则化的位置提前,计算方式为如下流程:层输入->层正则化->层计算->dropout->残差累加。

如下图1(b)所示,通过pre-norm的方式网络在反向更新时,底层网络参数可以直接获得顶层梯度的信息,而不经过其他的变换,而传统的post-norm方式在进行梯度传递时底层的网络需要经过每一个正则化项,容易产生梯度爆炸和梯度消失的现象。

Dynamic Linear Combination of Layers

在WMT16-en2de,NIST OpenMT’12-ch2en和WMT18-zh2en等任务上,应用了DLCL的深层Transformer模型(30/25层编码层)相比于Transformer-Big/Base提升了0.4~2.4个BLEU值,同时相比于Transformer取得了3倍的训练加速和1.6倍的模型压缩。

2、Deep Transformer在语音识别中的应用
论文标题:Very Deep Self-Attention Networks for End-to-End Speech Recognition

这篇工作将深层的transformer 结构用于了语音识别任务,语音识别任务与机器翻译相似,采用的均是端到端的模型结构。文中分析表明,具有强大学习能力的深层Transformer网络能够超越以往端到端模型的性能。此外,为编码器和解码器结合随机残差连接训练了具有48层编码层的深层网络模型。

文中在训练深层网络时为了解决梯度消失和梯度爆炸的问题,使深层网络能够稳定训练,采用了与之前相同的pre-norm方法,同时作者认为残差网络时transformer能够多层训练,但是随着层数的加深,残差连接同样存在冗余,所以作者设计了类似drop的方式,在训练的过程中随机跳过某些子层,在图像领域中,曾有类似的方法如Stochastic Depth,随着NLP领域中深层网络的不断发展,这也是该方法首次被应用于NLP任务中,并作出了针对性的调整。

掩码M为1或0,产生于类似于dropout的伯努利分布,当M=1时子层运算被激活,而当M=0时则跳过子层的运算。随机的残差连接是模型在训练阶段创造出更多的子网络结构,而在推理阶段,则使用整个网络,产生了类似模型集成的效果。

3、Deep Transformer在机器翻译中的应用(2)
论文标题:Improving Deep Transformer with Depth-Scaled Initialization and Merged Attention

在这篇文章中,作者同样认为对于自然语言处理任务发展中的总体趋势所示通过更深层的神经网络来提高模型的容量和性能。同时随着transformer模型层数的加深,也使得模型难以收敛,训练成本增加,甚至出现梯度爆炸或者梯度消失的问题。作者通过分析说明了由于禅茶连接和层正则化操作之间的相互作用导致了深层网络中出现的梯度消失或爆炸问题,不同于前面调整层正则化的位置解决该问题,作者从参数初始化的角度,提出了根据深度缩放进行初始化(DS-Init),在初始化阶段减少参数之间的方差,同时减少了残差连接输出的方差,有效缓解了梯度消失或爆炸的问题。

同时作者为了节约计算成本提出了一种基于自注意力和编码解码自注意力的注意力子层融合方法(MAtt)。

DS-Init
传统的Transformer模型中所有的参数,通过从一个标准正太分布中进行随机采样,公式如下:


Merged Attention Model
该方法是AAN(Average Attention Network)一种简化,去除了出了线性变换之外所有的矩阵运算:

4、Deep Transformer在语言模型中的应用
论文标题:Character-Level Language Modeling with Deeper Self-Attention

使用截断的反向传播方法训练的基于LSTM和RNN的各种变体的语言模型已经表现了强大的性能,这主要归功于其对于长期上下文的强大的记忆能力,但是在这篇文章中,作者使用了一个深度达到了64层的基于transformer的字符级语言模型,再次展现了深层模型强大的性能。

作者认为对于字符级这种长序列的语言建模,transformer模型由于能够在任意长度距离上快速的传递信息,而循环的结构则需要一步一步的传递,因此能够取得更好的效果。此外作者为了加快模型收敛,使能够稳定训练一个深层的模型,额外增加了三个辅助的损失函数辅助训练。

深层的TransformeR语言模型采用与编码层相同单端的结构,此外额外应用了attention mask机制,限制信息只能从左到右流入,如下图。


Auxiliary Losses
作者发现在训练一个超过十层的Transformer网络时,容易产生收敛速度慢,精度变低的问题,通过增加辅助的损失,可以更好的优化网络,显著加快模型训练和收敛的速度。作者设计了三种类型的辅助损失,分别应用于中间位置,中间层和不相邻层,辅助了训练的同时提升了模型的性能。

Multiple Positions loss
相比于只预测最后一个位置出现的词,额外增加了在最后一层,每个位置的预测任务,扩展了预测目标为L(序列长度),由于在transformer模型语言模型中在batch之间没有信息传递,这种方式强制在一个小的上下文内进行预测,虽然不确定是否在整个上下文的预测上有帮助,但是这种辅助损失加快了训练,并且取得了更好的效果,下图展示了这种损失的添加方式:


Intermediate Layer Losses
除了在最终层进行预测之外,作者还在模型的中间层增加了预测目标。与最后一层一样,在序列中添加了所有中间位置的预测(如下图)。如果总共有n层,那么第l层在完成l/2n的训练阶段后将停止预测,不在计算额外的辅助损失。即在完成一半的训练后,模型不在产生中间层损失。


Multiple Targets
在序列的每个位置,模型对未来的字符进行两次(或多次)预测。对于每个新目标,引入一个单独的分类器。额外目标的损失在加入相应的层损失之前,用0.5的乘数来加权。

在辅助损失的帮助下,成功训练了一个深度达到64层的基于transformer结构的语言模型,并且性能远远优于基于RNN的结构,并在两个text8和enwik8任务上达到了当时的较佳性能。

5、总结
本文列举了当前具有代表性的四篇基于transformer结构的深层网络工作,可以看到在transformer结构上单纯的通过堆叠网络结构会产生梯度消失/爆炸等造成训练不稳定的问题。

但是通过多种方式的调整,例如,调整层正则化的位置,改变初始化方式或是重新设计损失函数等方式,都能有效提高深层网络训练的稳定性。同时我们也可以观测到,随着网络层数的加深,给模型的容量和性能的提升也是巨大的。

相比于传统的同样采用增加模型容量来提升模型性能的transformer-big模型,增加模型的深度,带来的性能提升更大,同时具有对设备要求低,模型收敛快速的优点。

目前来说,深层网络在NLP任务上的发展还处于初期,相信未来在NLP领域会有更多关于深层网络的工作。

作者介绍:
王子扬,东北大学自然语言处理实验室研究生,研究方向为机器翻译。

声明:文章收集于网络,版权归原作者所有,为传播信息而发,如有侵权,请联系小编删除,谢谢!

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括:各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2020-2-17 23:36 , Processed in 0.161287 second(s), 25 queries .