跳转到主要内容

如果你喜欢这篇文章,想了解机器学习算法是如何工作的,它们是如何产生的,以及它们将走向何方,我推荐以下内容:

Transformers 是一种越来越受欢迎的神经网络架构。OpenAI最近在其语言模型中使用了Transformers ,DeepMind最近也在AlphaStar中使用了它,AlphaStar是他们击败顶级职业星际玩家的程序。

Transformers 是为了解决序列转换神经机器翻译的问题而开发的。这意味着任何将输入序列转换为输出序列的任务。这包括语音识别、文本到语音的转换等。。

Sequence transduction. The input is represented in green, the model is represented in blue, and the output is represented in purple. GIF from 3

对于进行序列转导的模型来说,有某种记忆是必要的。例如,假设我们正在将以下句子翻译成另一种语言(法语):

Transformers”是一个日本[[硬核朋克]乐队。这支乐队成立于1968年,当时正值日本音乐史的鼎盛时期

在这个例子中,第二句中的“乐队”一词指的是第一句中介绍的乐队“变形金刚”。当你在第二句中读到这个乐队时,你知道它指的是“变形金刚”乐队。这可能对翻译很重要。有很多例子,有些句子中的单词指的是前一句中的单词。

对于翻译这样的句子,模型需要找出这些依赖关系和连接。递归神经网络(RNNs)和卷积神经网络(CNNs)因其特性而被用于处理这一问题。让我们回顾一下这两种体系结构及其缺点。

循环神经网络

递归神经网络中有循环,允许信息持久存在。


The input is represented as x_t

在上图中,我们看到神经网络的一部分A处理一些输入x_t和输出h_t。循环允许信息从一个步骤传递到下一个步骤。

这些循环可以用不同的方式来思考。递归神经网络可以被认为是同一网络A的多个副本,每个网络都将消息传递给后续网络。考虑一下如果我们展开循环会发生什么:


一个展开的递归神经网络

这种链式性质表明,递归神经网络显然与序列和列表有关。这样,如果我们想翻译一些文本,我们可以将每个输入设置为该文本中的单词。递归神经网络将前一个单词的信息传递给下一个可以使用和处理该信息的网络。

 

下图显示了序列到序列模型通常如何使用递归神经网络工作。每个单词都被单独处理,通过将隐藏状态传递给解码阶段来生成结果句子,然后解码阶段生成输出。

GIF from 3

长期依赖性问题

考虑一个语言模型,它试图根据前一个单词来预测下一个单词。如果我们试图预测“天空中的云”这句话的下一个单词,我们不需要进一步的上下文。很明显,下一个词将是天空。

在这种情况下,相关信息和所需地点之间的差异很小,RNN可以学会使用过去的信息,并找出这句话的下一个单词是什么。

Image from 6

但在某些情况下,我们需要更多的背景。例如,假设您正在尝试预测文本的最后一个单词:“我在法国长大……我说得很流利……”。最近的信息表明,下一个单词可能是一种语言,但如果我们想缩小哪种语言的范围,我们需要法国的上下文,那就在文本的后面。

Image from 6

当相关信息和所需信息之间的差距变得非常大时,RNN就会变得非常无效。这是因为信息在每一步都会传递,而且链越长,信息在链上丢失的可能性就越大。

理论上,RNN可以学习这种长期依赖关系。在实践中,他们似乎没有学会它们。LSTM是一种特殊类型的RNN,试图解决这类问题。

长短期记忆:Long-Short Term Memory (LSTM)

在安排一天的日历时,我们会优先安排约会。如果有什么重要的事情,我们可以取消一些会议,并安排重要的事情。

RNN不会这么做。每当它添加新信息时,就会通过应用一个函数来完全转换现有信息。整个信息都被修改了,没有考虑什么是重要的,什么不是。

LSTM通过乘法和加法对信息进行小的修改。使用LSTM,信息通过一种称为细胞状态的机制流动。通过这种方式,LSTM可以选择性地记住或忘记重要和不那么重要的事情。

在内部,LSTM看起来如下:

来自6的图像

每个单元格将x_t(在句子到句子翻译的情况下为单词)、前一单元格状态和前一单元格的输出作为输入。它操纵这些输入,并基于它们生成新的细胞状态和输出。我不会详细介绍每个单元的力学原理。如果你想了解每个细胞是如何工作的,我推荐Christopher的博客文章:

对于细胞状态,在翻译时,句子中对翻译单词很重要的信息可能会从一个单词传递到另一个单词。

LSTM的问题

RNN通常也会遇到同样的问题,即当句子太长时,LSTM仍然做得不太好。其原因是,与正在处理的当前单词相距较远的单词保持上下文的概率随着与该单词的距离呈指数级下降。

这意味着,当句子很长时,模型往往会忘记序列中远处位置的内容。RNN和LSTM的另一个问题是,很难并行处理句子,因为你必须逐字处理。不仅如此,还没有长期和短期依赖关系的模型。总之,LSTM和RNN存在3个问题:

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

注意

为了解决其中的一些问题,研究人员创造了一种关注特定单词的技术。

翻译一个句子时,我会特别注意我正在翻译的单词。当我转录一段录音时,我会仔细地听我主动写下的片段。如果你让我描述一下我坐的房间,我会一边描述一边环顾四周。

神经网络可以使用注意力来实现同样的行为,将注意力集中在它们所提供的信息的子集的一部分上。例如,一个RNN可以参与另一个RN网络的输出。在每一个时间步长,它都关注另一个RNN中的不同位置。

为了解决这些问题,注意力是一种用于神经网络的技术。对于RNN,不是只在隐藏状态下编码整个句子,而是每个单词都有一个相应的隐藏状态,并一直传递到解码阶段。然后,在RNN的每个步骤中使用隐藏状态进行解码。下面的gif图显示了这种情况是如何发生的。


The green step is called the encoding stage and the purple step is the decoding stage. GIF from 3

其背后的想法是,一个句子中的每个单词都可能包含相关信息。因此,为了使解码准确,它需要考虑输入的每个单词,使用注意力。

为了引起对RNNs在序列转导中的注意,我们将编码和解码分为两个主要步骤。一个步骤用绿色表示,另一个用紫色表示。绿色步骤称为编码阶段,紫色步骤称为解码阶段。


GIF from 3

绿色步骤负责根据输入创建隐藏状态。我们没有像使用注意力之前那样只将一个隐藏状态传递给解码器,而是将句子中每个“单词”产生的所有隐藏状态传递到解码阶段。每个隐藏状态都被用于解码阶段,以找出网络应该注意的地方。

例如,当将句子“Je suisétudant”翻译成英语时,要求解码步骤在翻译时考虑不同的单词。


This gif shows how the weight that is given to each hidden state when translating the sentence “Je suis étudiant” to English. The darker the color is, the more weight is associated to each word. GIF from 3

例如,当你把“1992年欧洲经济区协议”这句话从法语翻译成英语时,以及它对每一个输入的关注程度。

 


Translating the sentence “L’accord sur la zone économique européenne a été signé en août 1992.” to English. Image from 3

但是,我们讨论的一些问题仍然没有通过使用注意力的RNN来解决。例如,并行处理输入(单词)是不可能的。对于大量的文本语料库,这增加了翻译文本所花费的时间。

卷积神经网络

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

  • 并行化的琐碎(每层)
  • 利用本地依赖关系
  • 位置之间的距离是对数的

用于序列转导的一些最流行的神经网络,Wavenet和Bytente,是卷积神经网络。


Wavenet, model is a Convolutional Neural Network (CNN). Image from 10

卷积神经网络之所以可以并行工作,是因为输入的每个单词都可以同时处理,而不一定取决于要翻译的前一个单词。不仅如此,CNN的输出词和任何输入之间的“距离”都是log(N)的顺序——也就是从输出到输入生成的树的高度的大小(你可以在上面的GIF上看到它。这比RNN的输出和输入之间的距离要好得多,后者的顺序是N。

问题是卷积神经网络不一定有助于解决翻译句子时的依赖性问题。这就是为什么变形金刚诞生的原因,它们是两个备受关注的细胞神经网络的结合。

Transformers

为了解决并行化问题,Transformers试图通过使用编码器和解码器以及注意力模型来解决这个问题。注意力提高了模型从一个序列转换到另一个序列的速度。

 

让我们来看看Transformer是如何工作的。Transformer是一种利用注意力来提高速度的模型。更具体地说,它使用自我关注。


The Transformer. Image from 4

在内部,Transformer具有与上述先前模型类似的体系结构。但是Transformer由六个编码器和六个解码器组成。


来自4的图像

每个编码器彼此非常相似。所有编码器都具有相同的架构。解码器具有相同的特性,即它们彼此也非常相似。每个编码器由两层组成:自注意和前馈神经网络。


来自4的图像

编码器的输入首先流经自关注层。它有助于编码器在对特定单词进行编码时查看输入句子中的其他单词。解码器具有这两个层,但在它们之间是一个注意力层,帮助解码器专注于输入句子的相关部分。


来自4的图像

自我关注

注:此部分来自Jay Allamar的博客文章

让我们开始看看各种向量/张量,以及它们如何在这些组件之间流动,将训练模型的输入转化为输出。与一般NLP应用程序的情况一样,我们首先使用嵌入算法将每个输入单词转换为向量。


图片取自4

每个单词被嵌入到大小为512的向量中。我们将用这些简单的方框来表示这些向量。

嵌入只发生在最底层的编码器中。所有编码器共同的抽象是它们接收每个大小为512的矢量的列表。

在底部编码器中,这将是单词嵌入,但在其他编码器中,它将是直接在下面的编码器的输出。在我们的输入序列中嵌入单词后,每个单词都会流经编码器的两层中的每一层。


来自4的图像

在这里,我们开始看到Transformer的一个关键特性,即每个位置的单词在编码器中流经其自己的路径。在自我关注层中,这些路径之间存在依赖关系。然而,前馈层不具有这些依赖性,因此各种路径可以在流过前馈层时并行执行。

接下来,我们将把这个例子切换到一个较短的句子,我们将看看编码器的每个子层中发生了什么。

 

自我关注

让我们先来看看如何使用向量计算自我关注,然后再看看它是如何实际实现的——使用矩阵。


Figuring out relation of words within a sentence and giving the right attention to it. Image from 8

计算自我注意的第一步是根据编码器的每个输入向量创建三个向量(在这种情况下,是每个单词的嵌入)。因此,我们为每个单词创建一个Query向量、一个Key向量和一个Value向量。这些向量是通过将嵌入乘以我们在训练过程中训练的三个矩阵来创建的。

请注意,这些新矢量的尺寸小于嵌入矢量的尺寸。它们的维度是64,而嵌入和编码器输入/输出向量的维度是512。它们不必更小,这是一种架构选择,可以使多头注意力的计算(大部分)保持不变。

图片取自4

将x1乘以WQ权重矩阵得到q1,即与该单词相关联的“查询”向量。我们最终为输入句子中的每个单词创建一个“查询”、一个“键”和一个“值”投影。

什么是“查询”、“键”和“值”矢量?

它们是对计算和思考注意力很有用的抽象概念。一旦你开始阅读下面是如何计算注意力的,你就会知道这些向量所扮演的角色。

计算自我注意力的第二步是计算分数。假设我们正在计算本例中第一个单词“思考”的自我注意力。我们需要根据输入句子中的每个单词来打分。分数决定了当我们在某个位置编码一个单词时,对输入句子的其他部分的关注程度。

分数是通过查询向量与我们评分的单词的关键向量的点积来计算的。因此,如果我们处理位置#1的单词的自我关注,第一个分数将是q1和k1的点积。第二个分数将是q1和k2的点积。


来自4的图像

第三步和第四步是将分数除以8(论文中使用的关键向量的维数的平方根-64。这导致具有更稳定的梯度。这里可能有其他可能的值,但这是默认值),然后通过softmax操作传递结果。Softmax将分数标准化,使其全部为正,加起来为1。


来自4的图像

这个softmax分数决定了每个单词在这个位置上的表达量。显然,这个位置的单词将具有最高的softmax分数,但有时关注与当前单词相关的另一个单词是有用的。

第五步是将每个值向量乘以softmax分数(准备将它们相加)。这里的直觉是保持我们想要关注的单词的值不变,并淹没不相关的单词(例如,将它们乘以0.001等微小数字)。

第六步是对加权值向量进行求和。这就在这个位置产生了自注意层的输出(对于第一个单词)。


来自4的图像

自我关注计算到此结束。得到的矢量是我们可以发送到前馈神经网络的矢量。然而,在实际实现中,为了更快地处理,这种计算是以矩阵形式进行的。现在我们来看一下,我们已经看到了单词水平上计算的直觉。

多头注意力

变形金刚基本上就是这样工作的。还有一些其他细节可以使它们更好地工作。例如,变形金刚使用了多头注意力的概念,而不是只在一个维度上相互关注。

其背后的想法是,每当你翻译一个单词时,你可能会根据所问问题的类型对每个单词给予不同的关注。下面的图片显示了这意味着什么。例如,每当你翻译“我踢了球”这句话中的“踢”时,你可能会问“谁踢的”。根据答案的不同,将单词翻译成另一种语言可能会发生变化。或者问其他问题,比如“做了什么?”等等…


来自8的图像

位置编码

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

概述

我概述了变压器是如何工作的,以及为什么这是用于序列转导的技术。如果你想深入了解该模型的工作原理及其所有细微差别,我推荐以下帖子、文章和视频,作为总结该技术的基础

  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
本文地址

知识星球

微信公众号

视频号