zoukankan      html  css  js  c++  java
  • 《ICLR 2020趋势分析:NLP中更好&更快的Transformer》

    ICLR 2020趋势分析:NLP中更好&更快的Transformer

    作者:Gabriele Sarti
    编译:ronghuaiyang
    原文链接:
    ICLR 2020趋势分析:NLP中更好&更快的Transformer​mp.weixin.qq.com图标

    介绍了ICLR2020中对Transformer的改进,从自注意力变体,训练目标,模型结构这三个方面对Transformer进行了提升。

     

     

    Transformer结构首次提出是在“Attention is All you Need”中,是一种有效的替代序列语言建模(LSTMs) 的方法,自提出以来,已在自然语言处理领域无处不在,推动了最下游的最先进的语言学习任务的发展。

    今年的国际学习表示会议ICLR对原版的Transformer及其更近期的变体BERT和Transformer-XL进行了许多很好的改进。这些改进的建议是针对Transformer的一些众所周知的弱点,即:

    • 优化自注意力计算。
    • 在模型架构中注入语言学驱动中的归纳偏差。
    • 使模型的参数更高效。

    这篇文章想要总结并提供这些贡献的一个概述,着重描述了自然语言处理开发中更好更快的模型的发展趋势。

    自注意力变体

    缩放点积自注意力是标准的Transformer层的主要组件之一,支持依赖关系的建模,而不管它们在输入中的距离。self-attention把输入激活向量A映射到querys Q和keys K以及values V上,维度为d~k~,返回一个加权版本的V:

     

    在多头自注意力的变体中,注意力函数并行的应用在queries,keys和values的投影上,并学习投影矩阵W,得到的输出拼接起来再映射一次,得到最后的值:

     

     

    本节将介绍自注意力的一些变体,这些变体使其在语言应用的上下文中更高效。

    Long-Short Range Attention

    论文:Lite Transformer with Long-Short Range Attention by Wu, Liu et al.

    传统的self-attention被认为是有冗余的,经验表明,句子中的本地关系被过于关注了。这可以通过标准卷积更加有效的进行建模。同样的结论在On the Relationship between Self-Attention and Convolutional Layers也有,同时,这个精简可以在某些情况下帮助提升模型的能力,但它不适用于较轻量级的应用。

    **Long-Short Range Attention (LSRA)**通过将输入沿通道维度分成两部分,并将这两个部分分别提供给两个模块,从而提高了计算效率:全局提取器使用标准的自注意力,局部提取器使用轻量级的深度卷积。作者给出了一个2×简化的模型的总体计算量,使它适合移动端的配置。

    使用子树掩码的树结构的注意力

    论文:Tree-Structured Attention with Hierarchical Accumulation by Nguyen et al.

    标准Transformer的一个缺点是没有考虑到语言的层次结构的归纳偏差。这在一定程度上是由于操作树状结构的困难造成的,这种结构通常是通过循环或递归机制来建模的,同时又保持了自注意力的并行的时间复杂度。

    提出的解决方案利用输入文本的集合解析来构建隐藏状态树,使用层次累积来构建非终结符的值,作为树中较低表示的聚合。最终的输出表示是通过执行分支级表示的加权聚合来构建的。

     

    一个有趣的附加功能是使用子树掩码来过滤多余的噪声,方法是将每个节点查询的注意力限制在它的子树后代上。这种归纳偏差的成本是计算和内存成本的增加,可以使用参数共享来减轻这种内存成本的增加。

    哈希注意力

    论文:Reformer: The Efficient Transformer by Kitaev et al.

     

     

    在自注意力方程中,因子QKT表示一个bottleneck,对长度为L的输入序列在计算复杂度和内存复杂度上为O(L^2^)。这有效地阻碍了长序列建模的可能性。

    Reformer建议将每个query参与的候选池限制为通过局部敏感哈希找到的一小组邻居。由于LSH bucketing采用随机投影,类似的bin有时可能会落在不同的领域上,建议使用多轮并行哈希的方法来缓解这个问题。使用LSH注把计算成本降低为O(Llog⁡L),这样允许模型操作更长的时间序列。

    多跳注意力

    论文:Transformer-XH: Multi-Evidence Reasoning with eXtra Hop Attention by Zhao et al.

     

     

    虽然Transformers被优化为在单个序列或成对序列上运行,但它们很难泛化到多个文本片段中的情况,例如在具有挑战性的多跳问题回答中。

    Transformer-XH引入了一种新的注意力变体多跳注意力,它可以应用于通过边连接起来的文本序列图(例如超链接)。这种新的注意机制在每个序列的开头使用特殊的“[CLS]”token作为一个注意力hub,它处理图中所有其他相互连接的序列。然后将得到的表示与标准自注意力通过线性投影得到的表示相结合。由此产生的模型显示,对于需要对图进行推理的任务,新注意力机制引入了额外的计算,但结果却有了显著的改进。

    训练目标

    Transformer模型的预训练通常是通过多个非监督目标、利用大量非注释文本的方法来实现的。用于此目的的最常见任务是自回归语言建模,也称为标准语言建模(LM),以及掩码输入自编码,通常称为掩码语言建模(MLM)。

    标准Transformer的实现及其GPT变体采用自回归方法,利用序列x=(x~1~…,x~L~)中的单向上下文(向前或向后)来估计下一个token的概率:

     

     

    相反,类似于BERT的方法使用双向上下文来恢复一小部分被特殊的[MASK] token人为替换的输入。这种变体被证明对下游的自然语言理解任务特别有效。

    除了单词级建模外,由于许多重要的语言应用程序需要理解两个序列之间的关系,因此通常会在训练过程中增加一个句子级分类任务,如next sentence prediction (NSP)。

    虽然这些任务似乎会产生有意义的token和句子级的表示,但本节介绍的许多方法都提出了更好的替代方法,使学习更有效,并以输入的结构和内容为基础。

    识别替换任务

    论文:ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators by Clark et al.

    在类似于bert的模型中使用的掩码策略是非常低效的,只使用了大约15%的输入文本来完成MLM任务。然而,掩码数据的百分比很难增加,因为有太多的掩码token可能会降低整体上下文的信息。

    ELECTRA提出了一个简单而有效的方法来应对这种低效率。训练一个小的掩码语言模型,然后作为一个生成器,用它的预测填充输入中的掩码的token,就像在普通的MLM中一样。然后,主模型的新任务将是一项“识别性”的任务:模型必须检测出哪些token被生成器替换,而不是预测掩码的token。这允许利用整个输入序列进行训练。正如作者所提到的,在相同的预算下,这种方法始终优于MLM的预训练。

    词和句子结构任务

    论文:StructBERT: Incorporating Language Structures into Pre-training for Deep Language Understanding by Wang et al.

    如前所述,Transformers不会清楚的说明输入中存在的结构。当树型结构的注意力在模型架构中注入了严重的层次偏差时,StructBERT采用了两种较轻但有效的方法,使产生的表示更了解语言的潜在顺序性。

    第一个是字结构目标,其中输入中的三元组是随机打乱的,需要重建它们的原始位置。这和普通的MLM并行完成。句子结构目标是一个ERNIE 2.0中介绍的句子重排序的较轻的变体,和ALBERT中介绍的一样:给出两个句子(S1, S2)作为输入,我们要求模型区分S2在前面还是后面,还是无关的。这个新任务扩展了标准的NSP,它被认为太容易学习有意义的句子关系。这导致了对自然语言理解的标准基准的重大改进。

    类型限制的实体替换

    论文:Pretrained Encyclopedia: Weakly Supervised Knowledge-Pretrained Language Model by Xiong et al.

     

     

    虽然预训练的Transformer模型隐式地捕获了真实世界的知识,但是它们的标准训练目标并没有明确地考虑到在真实世界设置上进行健壮推理所需的以实体为中心的信息。

    类型约束的实体替换是一种弱监督的方法,其中文本中的随机实体替换为来自Wikidata的具有相同实体类型的其他实体。然后,该模型使用一个与ELECTRA相似的判别目标来确定哪些实体被替换了。这是与MLM一起在多任务设置中完成的,作者给出了在需要更深入的实体理解的场景上的显著改进,如开放域QA和实体类型化。

    嵌入

    原始的Transformer依赖于两组embeddings来表示输入序列:

    • 学习word embeddings用于词汇表中的每个token,作为模型的token向量表示。
    • 固定的位置嵌入(PE),用于注入关于序列中token位置的信息。对于位置pos和维度i,它们对应于正弦周期函数,经验表明,这些函数的性能与学习到的嵌入相同,并被选择用于对更长的序列进行外推:

    对于能够对多个输入段进行操作的类似于BERT的模型,使用第三组学到的段嵌入来区分属于不同句子的token。

    所有这些嵌入都具有相同的维度,并汇总在一起以获得输入表示。本节介绍的方法旨在为嵌入注入更多的结构,或者优化它们的维度以获得更好的效率。

    位置感知的复杂词向量

    论文:Encoding word order in complex embeddings by Wang et al.

     

     

    虽然PE在输入中捕捉不同的位置,但它们没有明确考虑这些位置之间的关系,即有序关系,如邻接或优先级。这个问题已经在Transformer-XL中得到了解决,它利用单词之间的相对距离,而不是原始位置索引。

    一个建议的改进是将词嵌入推广到在位置上定义的连续函数,将解决方案扩展到复值域,以从更丰富的表示中获益。复值嵌入引入了振幅、频率和初始相位的新参数,这些参数决定了嵌入的各种特性,如位置灵敏度。实验结果表明,具有参数共享模式的复杂嵌入方法在不增加可训练参数的情况下,性能优于已有的嵌入方法。

    层次嵌入

    论文:Tree-Structured Attention with Hierarchical Accumulation by Nguyen et al.

    在对树结构注意力的概述中,我们了解了如何使用层次累积来形成基于非终端节点的后代的表示。但是,这一程序的缺点是没有考虑到后代的层次结构。

    使用层次嵌入注入这种结构偏差,将垂直和水平嵌入矩阵连接起来,分别表示分支内的层次顺序和子树中兄弟节点之间的关系。这些嵌入在注意力头之间共享,因此只占总参数的0.1%。

    分解的嵌入参数

    论文:ALBERT: A Lite BERT for Self-supervised Learning of Language Representations by Lan et al.

    在最近的基于BERT和Transformer-XL的模型中,输入嵌入大小E与隐含层大小H相连,即E≡H。这是非常不切实际的,因为要增加用于学习上下文相关表示的隐藏表示的表达性,还应该增加嵌入矩阵M=V×E的大小,其中V是词汇表的大小。即使对于相对较小的隐层维度,这也会导致数十亿个参数在训练期间很少更新。

    ALBERT 提出E和V之间插入一个投影使得这两个维度独立,当H≫E的时候,这是一个特别有效的减少参数的方法。因此,E=128和H=768的ALBERT base在许多下游任务上的性能与相同配置的BERT base相当,使用的参数减少了21M(表3中的89M与BERT的110M)。

    模型结构

    最初的Transformer架构由编码器和解码器组成,每个编码器和解码器都由一系列相同的层组成,这些层将输入嵌入转换为具有相同维度的输出(因此得名Transformer)。

    Transformer编码器的每一层由两个子层、一个多头自注意力和一个前馈网络组成,被残差连接包围,然后进行层归一化。解码器包括第三层,该层在编码器输出上执行多头自注意力,并修改原始自注意力层,以防止注意到未来的上下文,如上述自回归语言建模目标所要求的那样。

    Transformer的双向变体去掉了解码器结构,只关注于编码器,以生成各种任务(包括MLM)所需的上下文嵌入。

    Transformer-XL特别介绍了Transformer网络的内存概念,其中在以前的段中获得的隐藏状态被重视和重用,以更好地建模长期依赖,防止上下文分段。

    以下方法试图在当前结构的基础上进行构建,以改进远程建模、减少参数数量或优化模型执行的计算。

    压缩记忆

    论文:Compressive Transformers for Long-Range Sequence Modelling by Rae et al.

     

    在Transformer-XL的循环记忆方法中,旧的记忆被丢弃,以先入先出的方式存储新的记忆。这种方法只考虑最近的情况,没有考虑可能被丢弃的信息的相关性。

    压缩Transformers通过添加一个新的压缩记忆来构建记忆的概念,该记忆存储旧记忆的粗糙表示,而不是丢弃它们。作者尝试了多种压缩函数的替代方法,最后选择了注意力重构损失,它丢弃了网络没有参与的信息。压缩记忆的使用显示出对不常见单词建模的巨大改进,有经验证据表明,网络学习通过压缩机制来保存重要信息。

    可逆层

    论文:Reformer: The Efficient Transformer by Kitaev et al.

     

     

    可逆性背后的主要思想是,仅使用下面的层和模型参数的激活,就可以恢复网络任何层中的激活。当应用于Transformer模型时,这个特性特别有趣,因为它们通常由一大堆堆叠的层组成,并且它们的内存复杂性随层数线性增长。

    Reformer在Transformer结构中引入可逆性,将注意力层和前馈子层结合成一个单一的可逆层。这样允许只存储最顶层的激活,并通过在反向传播过程中用可逆层来恢复所有其他层,使得模型深度与内存无关。通过在前馈和可逆层中分块独立计算,进一步提高了内存复杂度。

    交叉层参数共享

    论文:ALBERT: A Lite BERT for Self-supervised Learning of Language Representations by Lan et al.

    一个简单但非常有效的方法来大大减少深层Transformer模型中的参数数量,那就是跨多个层共享参数,正如在ICLR 2019会议上发表的Universal Transformer论文中所示。

    ALBERT作者对自注意子层和前馈子层的跨层参数共享进行了实验,发现共享权矩阵有助于将模型的总参数数降低7倍(对于嵌入大小E=128),而对最终性能的影响很小。通过使用参数共享,实现了跨层的平滑过渡,有效地稳定了网络参数。

    自适应深度预测

    论文:Depth-Adaptive Transformer by Elbayad et al.

     

    当前模型为每个输入执行固定数量的计算,而不考虑每个序列的底层复杂性。这个问题已经在Universal Transformer中得到了强调,它提出了一个具有自适应计算时间(ACT)的相同层的重复应用,但是由此导致的每层权重的增加大大降低了整体网络速度。

    深度自适应Transformer解决了这个问题,使用标准的Transformer对序列进行编码,使用可变数量的Transformer进行解码。为此,在解码器的每个重复的层上附加一个分类器,然后使用计算机视觉领域首次引入的anytime prediction方法对整个设置进行对齐和混合训练(见图)。作者探索了不同的机制,自适应地同时控制在序列层级和每个token的基础上的计算量,并得出结论,自适应的减少超过75%的解码器层可以对机器翻译任务的准确性没有任何损失。

    总结

    ICLR2020引入的许多方法提供了广泛适用的解决方案,以解决最初Transformer架构的特定问题,从自注意力计算到模型结构本身。这些方法中有许多似乎对Transformer的未来开发很有希望,而且最重要的是,一旦这些方法中的许多被包含到一个架构中,它们很可能会带来互补的改进。我对ICLR 2021的希望是看到更多的增量工作,将已经存在的策略组合在一起,突出它们之间最有效的组合。

    —END—

    英文原文:

    发布于昨天 09:14
  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/cx2016/p/12978096.html
Copyright © 2011-2022 走看看