Transformers是怎样工作的?

Transformers是一种越来越流行的神经网络架构。 OpenAI最近在他们的语言模型中使用了Transformers,DeepMind最近也在AlphaStar中使用了Transformers-他们的程序击败了顶级的专业Starcraft玩家。
开发Transformers用来解决序列转导(sequence transduction)或神经机器翻译的问题。意味着任何将输入序列转换为输出序列的任务,这包括语音识别,文本到语音转换等。
Transformers是怎样工作的?_第1张图片
Transformers是怎样工作的?_第2张图片
为了使模型执行序列转换,那么这个模型必须具有某种存储功能。例如,假设我们将以下句子翻译成另一种语言(法语):
“The Transformers” are a Japanese [[hardcore punk]] band. The band was formed in 1968, during the height of Japanese music history”
在此示例中,第二句中的单词“ the band”是指第一句中引入的乐队“ The Transformers”。当您在第二句话中了解该乐队时,您知道它是指“ The Transformers”乐队。这对于翻译可能很重要。有许多示例,其中某些句子中的单词是指先前句子中的单词。
为了翻译这样的句子,模型需要弄清楚这种依赖关系和联系。递归神经网络(RNN)和卷积神经网络(CNN)由于其特性已被用于处理此问题。让我们看一下这两种架构及其缺点。

Recurrent Neural Networks

循环神经网络中有回路,可以使信息持久存在。
Transformers是怎样工作的?_第3张图片
在上图中,我们看到了神经网络A的一部分,处理了一些输入x_t和输出h_t。循环允许信息从一个步骤传递到下一个步骤。
可以用不同的方式来考虑循环。循环神经网络可以看作是同一网络A的多个副本,每个网络都将消息传递给后继者。考虑一下如果展开循环会发生什么:
Transformers是怎样工作的?_第4张图片
这种类似链的性质表明,递归神经网络显然与序列和列表相关。这样,如果我们要翻译一些文本,可以将每个输入设置为该文本中的单词。循环神经网络将前一个单词的信息传递给下一个可以使用和处理该信息的网络。
下图显示了序列到序列模型通常如何使用递归神经网络工作。每个单词分别进行处理,并通过将隐藏状态传递给解码阶段来生成结果句子,然后由解码阶段生成输出。
Transformers是怎样工作的?_第5张图片
Transformers是怎样工作的?_第6张图片
Transformers是怎样工作的?_第7张图片
Transformers是怎样工作的?_第8张图片
Transformers是怎样工作的?_第9张图片
Transformers是怎样工作的?_第10张图片
Transformers是怎样工作的?_第11张图片

长期依赖问题(The problem of long-term dependencies)

考虑一种语言模型,该模型试图根据先前的单词预测下一个单词。如果我们要预测句子“the clouds in the sky”的下一个单词,则不需要进一步的上下文说明。很明显,下一个单词将是“sky“。
在这种情况下,相关信息与所需位置之间的差异很小,RNN可以学习使用过去的信息并找出该句子的下一个单词是什么。
Transformers是怎样工作的?_第12张图片
但是在某些情况下,我们需要更多的上下文。例如,假设您正在尝试预测文本的最后一句话:“I grew up in France… I speak fluent …”。最近的信息表明,下一个词可能是一种语言,但是如果我们想缩小哪种语言的范围,我们需要France的背景信息,这在文本中会比较靠后。
Transformers是怎样工作的?_第13张图片
当相关信息与所需信息之间的差距变得很大时,RNN变得非常无效。这是由于以下事实:信息在每个步骤中传递,并且链条越长,信息沿着链条丢失的可能性就越大。
从理论上讲,RNN可以学习这种长期依赖性。在实践中,他们似乎并不学习它们。 LSTM是RNN的一种特殊类型,它试图解决这种问题。

Long-Short Term Memory (LSTM)

在安排一天的日历时,我们会优先安排预约。如果有什么重要的事情,我们可以取消一些会议并保留重要的事情。
RNN不会这样做。每当添加新信息时,它都会通过应用功能完全转换现有信息。整个信息被修改,没有考虑什么很重要,什么不重要。
LSTM通过乘法和加法对信息进行了小的修改。使用LSTM,信息流经称为单元状态的机制。通过这种方式,LSTM可以有选择地记住或忘记重要的事情,而不是那么重要的事情。
在内部,LSTM如下所示:
Transformers是怎样工作的?_第14张图片
每个单元格都将x_t(句子到句子的翻译中的单词),前一个单元格状态和前一个单元格的输出作为输入。它操纵这些输入,并基于它们生成新的单元状态和输出。我不会详细介绍每个单元的机制。如果您想了解每个单元的工作原理,我建议Christopher的博客文章
在单元状态下,翻译时在句子中对翻译一个单词很重要的信息可以从一个单词传递到另一个单词。

LSTMs的问题

LSTM通常会发生与RNN相同的问题,即句子过长时LSTM仍然不能很好地完成。这样做的原因是,与当前单词相距较远的单词要保持上下文信息的概率与该单词的距离增长而呈指数下降。(句子越长,单词相距离越远,保留单词的上下文信息越困难)
这意味着当句子很长时,模型通常会忘记序列中遥远位置的内容。 RNN和LSTM的另一个问题是,由于必须逐字处理,因此很难并行处理句子。不仅如此,目前还能够解决长期和短期依赖的模型。总而言之,LSTM和RNN存在三个问题:

  • 顺序计算不能并行化
  • 没有对长距离和短距离依赖性的显式建模
  • 位置之间的“距离”是线性的

Attention

为了解决其中一些问题,研究人员创建了一种用于注意特定单词的技术。
翻译句子时,我特别注意我目前正在翻译的单词。录制音频时,我会仔细聆听自己正在积极记录的片段。而且,如果您要我描述我所在的房间,那么我会审视一下所描述的对象。
神经网络可以通过将注意力集中在给出整体模块中的部分信息上,来实现相同的行为。例如,一个RNN可以参考另一个RNN的输出。在每个时间步上,它都专注于另一个RNN中的不同位置。
为了解决这些问题,注意力是在神经网络中使用的一种技术。对于RNN,每个单词都具有相应的隐藏状态,该状态一直传递到解码阶段,而不仅仅是对整个句子进行编码。然后,在RNN的每个步骤使用隐藏状态进行解码。
Transformers是怎样工作的?_第15张图片
Transformers是怎样工作的?_第16张图片
Transformers是怎样工作的?_第17张图片
Transformers是怎样工作的?_第18张图片
Transformers是怎样工作的?_第19张图片
Transformers是怎样工作的?_第20张图片
Transformers是怎样工作的?_第21张图片
其背后的想法是,句子中每个单词可能都有相关的信息。因此,为了使解码精确,需要关注输入的每个单词。
为了将注意力引入RNN的序列转导,我们将编码和解码分为两个主要步骤。一步用绿色表示,另一步用紫色表示。绿色步骤称为编码阶段,紫色步骤称为解码阶段。
Transformers是怎样工作的?_第22张图片
绿色步骤负责从输入中创建隐藏状态。与将注意力转移到解码器上时一样,我们将句子的每个“单词”生成的所有隐藏状态都传递给解码阶段,而不是像以前那样只将一个隐藏状态传递给解码器。每个隐藏状态都用于解码阶段,以找出网络应注意的位置。
例如,当将句子“ Je suisétudiant”翻译成英语时,要求解码步骤在翻译时会看不同的单词。
Transformers是怎样工作的?_第23张图片
举例来说,当您翻译句子“L’accord sur la zone économique européenne a été signé en août 1992.”时。从法语到英语,以及对于每次输入要分配多少的注意力。
Transformers是怎样工作的?_第24张图片
但是,我们所讨论的一些问题仍然无法通过RNN的注意力来解决。例如,不可能并行处理输入(单词)。对于大量文本,会增加翻译文本的时间。

Convolutional Neural Networks

卷积神经网络有助于解决这些问题。有了他们,我们可以

  • 简单并行化(每层)
  • 利用本地依赖
  • 位置之间的距离是对数的
    Transformers是怎样工作的?_第25张图片
    Transformers是怎样工作的?_第26张图片
    Transformers是怎样工作的?_第27张图片
    一些最流行的用于序列转导的神经网络,即Wavenet和Bytenet,是基于Convolutional Neural Networks.
    卷积神经网络可以并行工作的原因是,输入中的每个单词都可以同时处理,而不必依赖于之前要翻译的单词。不仅如此,CNN的输出字与任何输入之间的“距离”的顺序为log(N),即从输出到输入生成的树的高度大小(您可以看到它比上面的GIF好得多,比RNN的输出和输入的距离(N的数量级)好得多。
    问题在于,卷积神经网络不一定有助于解决翻译句子时的依存关系问题。这就是创建“Transformers”的原因,它们是两个CNN的结合。

Transformers

为了解决并行化问题,Transformers试图通过使用卷积神经网络和注意力模型来解决该问题。注意提高了模型可以从一个序列转换到另一个序列的速度。
让我们看一下Transformer的工作方式。Transformer是一种通过注意来提高速度的模型。更具体地说,它使用self-attention.
Transformers是怎样工作的?_第28张图片
在内部,Transformer具有与上述模型类似的体系结构。但Transformer由六个编码器和六个解码器组成。
Transformers是怎样工作的?_第29张图片
每个编码器彼此非常相似。所有编码器都具有相同的体系结构。解码器共享相同的属性,即它们彼此非常相似。每个编码器由两层组成:Self-attention和馈送神经网络(a feed Forward Neural Network.)
Transformers是怎样工作的?_第30张图片
编码器的输入首先流经自注意层。它帮助编码器在编码特定单词时查看输入句子中的其他单词。同时解码器也具有这两个层,但介于编码器和解码器之间是一个注意力层,它可以帮助解码器专注于输入句子的相关部分。
Transformers是怎样工作的?_第31张图片

Self-Attention

注意:该部分来自于Jay Allamar的博客
让我们开始查看各种矢量/张量,以及它们在这些组件之间如何流动,以将训练模型的输入转换为输出。与一般 NLP 应用程序的情况一样,我们首先使用嵌入算法将每个输入字转换为矢量。
Transformers是怎样工作的?_第32张图片

每个单词都嵌入到大小为 512 的矢量中。我们将用这些简单的框来表示这些向量
嵌入仅在最底部的编码器中发生。所有编码器都接收大小为 512的向量.
在底部编码器中,这将是单词嵌入,但在其他编码器中,它直接位于下面的编码器的输出。将单词嵌入输入序列后,每个单词都流经编码器的两层。
Transformers是怎样工作的?_第33张图片
在这里,我们开始看到Transformer的一个关键属性,即每个位置中的单词流经编码器中自己的路径。这些路径在自我注意层中存在依赖关系。但是,前馈层没有这些依赖关系,因此,在流经馈送层时,可以并行执行各种路径
接下来,我们将示例切换到较短的句子,并查看编码器的每个子层中发生的情况。

Self-Attention

让我们先看看如何使用向量计算self-attentio,然后继续看看它实际实现方式 - 此处我们使用矩阵。
Transformers是怎样工作的?_第34张图片
计算自我注意的第一步是从编码器的每个输入向量创建三个向量(本例中是每个单词的嵌入)。因此,对于每个单词,我们创建一个查询向量(Query vector)、一个键向量(Key vector)和一个值向量(Value vector)。这些向量通过将嵌入乘以我们在训练过程中训练的三个矩阵来创建。
请注意,这些新向量的尺寸小于嵌入矢量。其维数为64,而嵌入和编码器输入/输出向量的维数为512。它们不必更小,这是使多头注意力(大部分)计算的的常用系数。
Transformers是怎样工作的?_第35张图片
将 x1 乘以 WQ 权重矩阵将生成 q1,即与该单词关联的"查询"矢量。我们最终创建输入句子中每个单词的"查询"、“键"和"值"投影
什么是"查询”,"键"和"值"向量?
它们是抽象概念,可用于计算和衡量注意力。一旦你继续阅读下面的注意力计算方式,你就会知道几乎所有你需要知道的关于每个向量扮演的角色。
计算自我注意的第二步是计算分数。例如,我们计算的是本示例中第一个词"Thinking"的self-attention。我们需要对输入句子的每个单词都用这个词来评分。当我们在某个位置对单词进行编码时,分数决定了对输入句子其他部分的关注程度。分数的计算方法是将查询矢量(query vector )点乘我们评分的各单词的键向量( key vector)。因此,如果我们正在处理位置#1单词的自我注意时,第一个分数将是 q1 和 k1 的点乘。第二个分数是 q1 和 k2 的点乘。
Transformers是怎样工作的?_第36张图片
第三步和第四步是将分数除以 8(论文中使用的key向量维度的平方根 = 64)。此处可能还有其他可能的值,但这是默认值),然后通过 softmax 操作传递结果。Softmax 归一化分数,因此它们都是正数,加起来为 1。
Transformers是怎样工作的?_第37张图片
此softmax分数确定每个单词在此位置的表示数。显然,这个位置的单词将具有最高的分数,但有时它很有用,因为需要处理与当前单词相关的另一个单词。
第五步是将每个值矢量(key vector)乘以分数。这里的直觉是保持我们想要关注的单词的值完好无损,并“淹没”不相关的单词(例如,将它们乘以 0.001 等小数)。
第六步是汇总加权值向量。这将在此位置生成self-attention层的输出(对于第一个单词)。
Transformers是怎样工作的?_第38张图片
自我注意计算到此结束。我们可以将生成的向量喂入前馈神经网络。但是,在实际实现中,此计算以矩阵形式进行,以便更快地进行处理。

Multihead attention

Transformers基本上都是这样的。还有其他一些细节,使他们更好地工作。例如,Transformers不是只在一个维度上互相关注,而是使用多头关注的概念
它背后的想法是,每当你翻译一个单词,你可以根据你问的问题类型对每个单词有不同的关注。下图显示了这意味着什么。例如,每当你翻译"kicked"在句子"I kicked the ball",你可能会问"Who kicked“。根据答案的不同,单词的翻译可能会更改。或者问其他问题, 如 "Did what?
Transformers是怎样工作的?_第39张图片
Transformers是怎样工作的?_第40张图片

Positional Encoding

Transformer上的另一个重要步骤是在每个单词编码时添加位置编码。编码每个单词的位置是相关的,因为每个单词的位置与翻译相关。

Overview

我概述了Transformers是如何工作的,以及为什么可以用于序列转导。如果你想深入了解模型的工作原理及其所有细微差别,我推荐以下帖子、文章和视频:

  1. The Unreasonable Effectiveness of Recurrent Neural Networks
  2. Understanding LSTM Networks
  3. Visualizing A Neural Machine Translation Model
  4. The Illustrated Transformer
  5. The Transformer — Attention is all you need
  6. The Annotated Transformer
  7. Attention is all you need attentional neural network models
  8. Self-Attention For Generative Models
  9. OpenAI GPT-2: Understanding Language Generation through Visualization
  10. WaveNet: A Generative Model for Raw Audio

你可能感兴趣的:(Transformers是怎样工作的?)