Transformers 研究指南

共 5216字,需浏览 11分钟

 ·

2021-04-29 11:28

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自:人工智能与算法学习


Transformers是神经机器翻译中使用的一种神经网络,它主要涉及将输入序列转换为输出序列的任务。这些任务包括语音识别和文本转换语音,接下来举几个详细的例子说明。

这类任务需要「记忆」,下一个句子必须与前一个句的上下文相关联(这是相当关键的),以免丢失重要的信息。

直到最近,还主要在使用递归神经网络(RNNs)和卷积神经网络(CNNs)解决这样的问题。但问题是,当句子太长的时候,RNN或CNN无法跟踪上下文和内容。通过将attention应用到正在使用的单词上可以解决这种局限性。这篇指南将重点介绍Transformers是如何在深度学习的帮助下解决这个问题的。


Attention Is All You Need(2017)


这篇论文的作者提出了一种仅基于注意力机制的网络体系结构,也就是Transformer。这个模型在WMT 2014年的英德文翻译任务中实现了28.4 BLEU(双语评价学习)。Transformer的传导模型使用自注意力机制来计算其输入和输出的表示,无需使用卷积或序列对齐的RNN。

地址:https://arxiv.org/abs/1706.03762

大多数神经序列传导模型都有编码-解码模型。Transformer采用了同样的模式,并结合了自注意力机制,编码器和解码器均使用完全连接的层。编码器由6个相同的层组成,每个层有2个子层。第一个子层是一个多头自注意力机制,第二个子层是位置完全连接的前馈网络。在这两个子层的每个子层周围都存在残差连接。然后是一个规范层。

解码器还具有6个相同的层(各自带有两个子层)。解码器包括第三子层,第三子层对编码器堆栈的输出进行多头注意。每个子层都被剩余连接包围,然后再进行层的规范化处理。为了防止子层出现位置混淆,需要对解码器堆栈中的自注意层进行了修改。

注意力函数包括将查询和一组键值对映射到输出。查询、键、值和输出都是向量。这些值的加权和构成输出。分配给每个值的权重是通过查询与相应键的兼容性函数来计算的。

这个模型在WMT 2014年的英德文翻译的数据集上进行训练,WMT 2014包含有大约450万个序列对。以下是从英语转换到德语和从英语转换到法语的newstest2014的结果。


BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (2019)



Transformer的双向编码器表示(BERT)是由来自 Google AI Language的研究人员引入的一种语言表示模型。BERT在所有层中联合调整左右上下文,对未标注文本中的深度双向表示进行预训练。

经过预训练的BERT模型可以通过一个附加的层进行微调,以创建诸如问答和语言推理等任务的模型。BERT在自然语言处理任务上取得了最先进的成果。取得的成果包括:一个80.5%的GLUE (通用语言理解评价)评分和86.7%的MultiNLI精确度。

为了对深层双向表示进行预训练,BERT使用了masked language models。BERT有两个主要的步骤,预训练和微调。

在预训练阶段,这个模型通过不同的预训练任务对未标记数据进行训练。在微调过程中,使用预训练的参数初始化模型。然后,使用来自下游任务的标记数据对参数进行微调。每个下游任务都由相同的预训练参数初始化,但是具有单独的微调模型。

下图显示了一个问答任务的例子。BERT体系结构在不同的任务之间是统一的,预训练的和最终的下游架构之间的差异是最小的。

BERT的体系结构实际上是一个多层双向Transformer编码器。它使用了WordPiece嵌入和30,000个标记词汇表。特殊的分类标记[(CLS)]构成每个序列的第一个标记。句子对打包在一起形成单一表示。句子通过特殊标记[(SEP)]进行区分,并通过在每个标记中添加学习的嵌入来表示它们是属于句子A还是B。 

这个模型的预训练是在BooksCorpus(800亿字)和English Wikipedia(25亿字)上进行训练的。这是GLUE测试的结果:


Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context (ACL 2019)



Transformer -XL(意为超长)允许学习超过固定长度的依赖关系,而不会破坏时间的一致性。它结合了段级递归机制和位置编码方案。Transformer- XL的依赖关系比RNN长80%,比vanilla Transformer长450%。它在TensorFlow和PyTorch上均可使用。

这篇论文的作者将递归引入到他们的深层自注意力网络中。他们并没有从零开始计算每个新段的隐藏状态,而是重用了从先前分段中获得的隐藏状态。重复使用的隐藏状态充当递归段的内存。

这在分段之间建立了循环连接。对长期依赖关系进行建模就有可能实现,因为信息是通过循环连接传递的。作者还介绍了一种更有效的相对位置编码公式,它将注意力集中到比训练过程中观察到的注意力长度更长的位置。

如上文所示,在训练过程中,在前一段中计算的隐藏状态序列是固定的,并经过缓存,以便在模型处理新段时为外部上下文重用。梯度保持在段内。

附加输入使网络能够包含历史信息。这样就可以对长期依赖性进行建模,并避免了上下文碎片化。由于递归应用于语料库中的每两个连续的段,因此会在隐藏状态下创建段级递归。这会导致上下文的利用率超出了这两个部分。

该模型的性能如下所示。

XLNet: Generalized Autoregressive Pretraining for Language Understanding (2019)



XLNet是一种通用的自回归预训练方法,它通过最大化因式分解顺序的所有排列预期可能性来实现双向上下文的学习。它不使用固定的正向或反向分解顺序。

相反,它最大化了一个序列的所有可能的因子分解顺序排列的预期可能性。由于这些排列,每个位置的上下文都可以由左、右两个标记组成。因为每个位置都在学习利用所有位置的上下文信息,因此可以获取双向上下文。

文中所提议方法的内容流与标准的自注意力机制保持一致。查询流的注意力机制并没有关于上下文的访问信息。

这篇论文从Transformer XL相对位置编码方案和分段递归机制两个方面实现了两种理念。在预训练阶段,作者随机抽取两个片段,并将两个片段的串联作为一个序列来进行置换语言建模。唯一被重用的内存是属于同一上下文的内存。模型的输入类似于BERT的输入。

下面展示在模型上得到的相关结果。

最新的深度学习是来源于你可以完全信任的资源。报名参加由该领域的专家策划的每周一次的深度学习课程(https://www.deeplearningweekly.com/newsletter?utm_campaign=dlweekly-newsletter-expertise1&utm_source=heartbeat)。


Entity-aware ELMo: Learning Contextual Entity Representation for Entity Disambiguation (2019)



这篇论文学习了一种基于实体感知的语言模型嵌入扩展,称为Entity- Elmo(E-Elmo)。嵌入语言模型(Elmo)是由Peters 等人提出的。这个语言模型将单词作为整个句子的一个函数来生成上下文敏感的词语表示。E-Elmo训练语言模型来预测被提及的是基础实体,而不是提到的某些单词。

既然E-ELMo 实际上是ELMo的扩展,那么让我们先简要地介绍一下ELMo。给定一个序列,ELMo在一个2层 bi-RNN的基础上生成单词表示。输入是字符卷积。ELMo首先为每个方向计算一个与上下文无关的表示。这是通过在位置k对每个标记应用基于字符的CNN来完成的,然后通过一个2层的LSTM传递标记表示。E-ELMo在Wikipedia数据集的子集上进行训练。E-ELMo的训练是通过AdaGrad进行的,学习率为0.1,持续10个周期.

 下面是这个模型产生的结果。


Universal Language Model Fine-tuning for Text Classification (ULMFiT) (2018)



这篇论文介绍了通用语言模型微调(ULMFiT),这是一种可以适用于任何NLP任务的迁移学习方法。ULMFiT在大型通用领域语料库上预先训练语言模型,并对目标任务进行微调。这种方法适用于各种任务。它使用单一的体系结构和训练过程,而且不需要自定义特征工程或预处理。

ULMFiT不需要其他的域内文档或标签。ULMFiT涉及的步骤包括:通用域LM预训练,目标任务LM微调和目标任务分类器微调。

这个语言模型是在Wikitext-103上进行预训练的,它由28,595篇预处理的Wikipedia文章和1.03亿个单词组成。然后,LM将根据目标任务的数据进行微调。建议使用判别式微调和倾斜三角形学习率对模型进行微调。通过使用两个附加的线性模块扩展预训练的语言模型,可以对目标任务分类器进行微调。每个模块都使用批处理规范化和一个dropout。中间层采用ReLU激活,输出概率分布采用Softmax激活函数。

下面是这个模型的测试错误率结果。


Universal Transformers (ICLR 2019)



这篇论文的作者提出的通用Transformers (UT),是一种并行性自注意力递归序列模型,可以将其转换为Transformer模型的泛化。UT将诸如Transformer之类的前馈序列模型的可并行性和全局接受域与RNNS的递归归纳相结合。

UT在每个重复步骤中都使用自注意力机制,对并行序列中的所有符号进行迭代地优化改进。接下来是由一个深度可分离的卷积或位置完全连接层组成的转换。作者还添加了一种暂停机制,允许模型动态地为每个符号选择所需的细化步骤数量。

 通用Transformers是一种编解码结构。编码器和解码器的工作原理是将递归神经网络应用于输入和输出序列的每个位置的表示。递归神经网络不会在序列中重复出现。相反,它在每个位置的向量表示的连续修正中反复出现。

每个位置的表示在两个子步骤中并行地进行修正。这是在每一个重复的时间步骤中完成的。第一个子步骤涉及使用自注意力机制在序列中的所有位置传递信息。这将为每个位置生成一个向量表示,这个表示是由前一个时间步骤中的其他表示所提供的。由于递归翻译函数可以多次应用,所以UT的深度是可变的。这是UT与其他序列模型(如深层RNN或Transformer)之间的主要区别。

下面是这个模型的表现:

原文链接:https://heartbeat.fritz.ai/research-guide-for-transformers-3ff751493222


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 33
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报