澳门皇冠棋牌

Transformer:隐藏的机器翻译高手,效果赶超经典 LSTM

LSTM雷锋网 AI 科技评论按:循环神经网络是自然语言处理任务中的常用方法,但最近,仅依赖于注意机制的特定神经网络模型已证明其对常见自然语言处理任务的影响。这种模型比循环神经网络模型更好,称为变换器。与此同时,数据科学家Maxime Allard发表了相应的文章,介绍了转换器的原理和机理,并进行了解释,并使用相应的实验来帮助您更好地理解这种神经网络模型,雷锋网络AI技术评论将其编译为如下。

第1部分:序列到序列学习和注意机制

论文《Attention Is All You Need》(描述了转换器的结构和序列到序列的学习。序列到序列(Seq2Seq)是将给定的元素序列(例如句子中的单词序列)转换成另一序列的神经网络。

Seq2Seq模型非常适合翻译,它可以将一种语言的单词序列转换为另一种语言中的单词序列。通常,Seq2Seq模型基于长期和短期记忆(LSTM),并且LSTM模块可以通过序列相关数据分配序列含义,同时记住(或遗忘)它确定为重要(或不重要)的内容。因为句子依赖于序列,所以单词的顺序对于理解句子至关重要,因此LSTM是处理这些数据的最佳选择。

Seq2Seq模型由编码器和解码器组成。编码器获取输入序列并将其映射到更高维空间(n维向量)。抽象矢量被发送到解码器,解码器又将其转换为输出序列。输出序列可以是另一种语言,符号,输入的副本等。

我们只能用两种语言理解编码器和解码器作为人工翻译器。他们的第一语言是母语,但他们的母语是不同的,例如一个用德语,另一个用法语;他们的第二语言是他们分享的虚构语言。为了将德语翻译成法语,编码器将德语句子转换为它所拥有的另一种语言,我们称之为“虚构语言”。同时,由于解码器可以读取虚构语言,现在可以将语言翻译成法语。因此,这个模型(由编码器和解码器组成)可以一起工作,将德语翻译成法语。

首先,假设编码器或解码器对于虚构语言不是很流畅。为了很好地掌握它,我们将使用许多示例来训练它们(模型)。对于Seq2Seq模型的编码器和解码器,通常,基本配置具有一个LSTM模块。那么转换器何时工作?

我们需要一个技术细节来使转换器更容易理解,注意机制。注意机制通过查看输入序列然后在每个步骤确定序列的一部分的重要性。这可能看起来很抽象,但这是一个很好的理解:在阅读本文时,您将始终关注您阅读的单词,但与此同时,您的思维仍会保留一些重要的关键字以便联系Context。

因此,注意机制以与我们阅读类似的方式对给定序列起作用。对于上面提到的拟人编码器和解码器,我们可以想象编码器不仅用虚构的语言写出句子的翻译,而且还写出对句子的语义理解很重要的关键词,这些关键词和常规翻译是提供给解码器。通过这些关键词以及一些关键术语给出的句子上下文,解码器可以识别句子的重要部分,因此这些新关键词可以帮助解码器更容易翻译。

换句话说,对于LSTM(编码器)读取的每个输入,注意机制同时考虑几个其他输入并为这些输入分配不同的权重以确定哪些输入是重要的。然后解码器将编码的句子和注意机制的权重作为输入。

要了解有关此内容的更多信息,请参阅此文章(如果您想学习更多科学方法并阅读基于不同注意机制的序列到序列模型方法,您可以参考这篇《基于注意力的神经机器翻译的有效方法》论文(

第2部分:转换器

《Attention Is All You Need》引入了一种称为变换器的新架构,如标题所示,它使用了上面提到的注意机制。

与LSTM一样,变换器是一种在两个部分(编码器和解码器)的帮助下将一个序列转换为另一个序列的体系结构,但它与前面描述的“现有序列到序列模型”不同。因为它不包含任何循环网络,例如GRU,LSTM等。

到目前为止,循环神经网络是捕获序列及时依赖性的最佳方法之一。但是,提交论文的团队证明,只有注意机制和没有递归神经网络的架构可以优化翻译任务和其他任务的结果。其中,引入Bert的团队提出了自然语言任务的改进:《BERT:用于语言理解的深度双向变换器的预训练》(

那么转换器到底是什么?我们将从下面的图片开始。

图1:转换器模型架构,来自Vaswani等。《Attention Is All You Need》

编码器在左侧,解码器在右侧。编码器和解码器由可以多次堆叠在一起的模块组成,如图中的Nx部分所示。

我们看到该模块主要由多头注意和前馈层组成。因为字符串不能直接使用,所以我们首先将输入和输出(目标句子)嵌入到n维空间中。模型中有一个很小但非常重要的部分,它编码不同单词的位置。这是因为我们没有可以存储序列如何进入模型的循环网络,并且序列由其元素顺序决定,因此我们需要给出序列中每个单词/部分的相对位置。某种方式。这些位置被添加到每个单词的嵌入表示(n维向量)中。

让我们仔细看看模型中的这些多注意机制模块:

图2:左图显示了点积注意机制,右图显示了具有多个注意层的并行多头注意机制,来自Vaswani等。《Attention Is All You Need》

我们从注意机制左侧的描述开始,这不是很复杂,可以通过以下等式来描述:

其中Q是包含查询的矩阵(序列中单词的向量表示); K是所有键(键,序列中所有单词的向量表示); V是一个值(值,包含来自所有序列的单词)矢量表示)。在编码器和解码器的多头注意机构模块中,V和Q具有相同的字序列。但是对于反馈到编码器和解码器序列的关注机制模块,V和Q具有不同的字序列。

为了简化这个公式,我们可以将它表示为V和注意权重a的乘积,其中权重a由下式定义:

这意味着权重a由序列中的每个单词(由Q表示)如何受序列中所有其他单词(由K表示)的影响来定义。另外,SoftMax功能可以将权重a分配到0到1之间;然后我们将这些权重应用于V中引入的所有字序列(在编码器和解码器中,V与Q相同;但在编码器中,V和Q在解码器的输入模块之间是不同的)。

右侧的图像描述了如何将此注意机制转换为可以并行使用的多种机制。通过Q,K和V的线性投影重复注意机制多次,这允许系统从Q,K和V的不同表示中学习,这对模型是有益的。通过将Q,K和V乘以在训练期间学习的加权矩阵W来实现这些线性表示。

对于关注机构模块结构中的每个位置,矩阵Q,K和V是不同的,这取决于它们是在编码器,解码器中还是在编码器和解码器之间。这是因为注意机制涉及整个编码器输入序列或解码器输入序列的一部分,并且连接编码器和解码器的多头注意模块将确保编码器输入序列和解码器输入的给定位置。顺序是同时考虑它。

在编码器和解码器中的多头注意机制之后,我们连接了一个点前馈层。这个小的前馈网络对于序列的每个位置具有相同的参数,即来自给定序列的每个元素的单独的,相同的线性变换。

训练

如何训练这样的“野兽”模型? Seq2Seq模型的训练和推断与通常的分类问题略有不同,转换器也是如此。

我们知道,为了训练翻译任务的模型,我们需要用两种不同语言双向翻译句子。一旦我们有大量的句子对,我们就可以训练模型。假设我们想将法语翻译成德语,我们的代码输入是法语语句,解码器的输入将是德语。但是,这里解码器输入将向右移动一个位置。

其中一个原因是我们不希望这个模型简单地学习在训练期间复制解码器输入。相反,我们希望模型在给定编码器序列和特定解码器序列的情况下执行下一个字或字符。预测。

如果我们不移位解码器序列,则模型将学习简单地“复制”解码器输入,因为位置i处的目标字(字符)将是解码器输入中相应位置i的字(字符)。因此,通过将解码器输入移位一个位置,我们的模型需要通过解码器序列中已知位置1,i-1的字(字符)来预测位置i的目标字(字符)。这可以防止我们的模型学习复制和粘贴的任务。我们用解码器输入的第一个位置填充句子的开头,否则由于右移,它将为空。类似地,我们将句子结束标记附加到解码器输入序列以标记序列的结尾,并且该标记也将附加到目标输出句子。在下文中,我们将看到此方法如何用于推断结果。

我们对Seq2Seq模型和变压器也这样做。除了右移之外,转换器还将为第一个多头注意模块的输入添加一个掩码,以避免暴露潜在的“未来”序列元素。这对于转换器架构来说是独一无二的,因为没有可用于按顺序对输入序列建模的循环神经网络。没有掩码,当我们把所有东西放在一起时,看涨注意机制需要检测整个解码器中每个输入序列的位置。

将正确的移位输入馈送到解码器的过程也称为教师强制。有关详细信息,请参阅博客内容(

我们想要执行损失计算的目标序列是具有序列结束标记(德语句子)的解码器输入,而不是移位的句子。

推理

这些模型的推理和训练是不同的,也是非常有意义的,因为我们希望模型在最终实现没有相应德语句子的情况下翻译句子。这里的技巧是为输出序列的每个位置重新输入我们的模型,直到检测到句子的结尾。

具体步骤如下:

n

输入完整的编码器序列(方法)并将其作为解码器输入;然后我们在第一个位置添加一个空序列,它在开头只有一个句子。这将输出一个我们只需要第一个元素的序列。

此元素将填充到我们的解码器输入序列的第二个位置,该序列现在具有句子的开头标记和其中的第一个单词(字符)。

将编码器序列和新的解码器序列输入到模型中,获取输出的第二元素并将其置于解码器输入序列中。

重复此操作,直到预测到句子结尾,这标志着翻译的结束。

我们看到这种方法需要通过多次运行模型来翻译句子。

第3部分:时间序列预测变换器

我们已经看到了转换器的架构和文章《Attention Is All You Need》

它的作者知道该模型在语言任务中表现很好,现在我们在一个实例中测试转换器的效果。

我们使用德克萨斯州电力可靠性委员会(ERCOT)提供德克萨斯州每小时电力流量的时间序列预测,而不是翻译任务。每小时数据可在此处获取(如果您想深入研究架构,harvardnlp(提供了转换器及其实现的详细说明。

现在我们可以使用基于LSTM的序列到序列模型进行多步预测,让我们看一下转换器进行预测的能力。由于我们不使用单词序列而是使用值,我们首先需要对体系结构进行一些更改;另外,我们正在进行自动回归实验,而不是单词/字符分类。

数据

可用数据为我们提供了整个ERCOT控制区域的每小时负载。我使用2003年至2015年的数据作为训练集,2016年作为测试集。因为只有加载值和加载时间戳,所以我将时间戳扩展到其他功能。从时间戳开始,我提取了相应的工作日并对其进行了加热编码;另外,我使用了年份(2003年,2004年,2015年)和相应的小时(1,2,3,24)作为价值本身,每小时每小时提供11个特征值天。为了收敛目的,我还将ERCOT负载标准化为1000.

为了预测给定的序列,我们需要一个过去的序列。在我们的示例中,我使用前24小时的每小时数据来预测接下来的12小时数据,我们可以根据需要调整数据属性。例如,我们可以将其更改为每日数据而不是每小时数据。

从论文中更改模型

在第一步中,我们需要删除嵌入。由于我们的输入中已有11个值,因此嵌入通常将给定的整数映射到n维空间;因此,我们只使用线性变换将11维数据转换为n维空间,而不是使用嵌入,这是类似的。嵌入这个词。

然后我们需要从转换器输出中删除SoftMax层,因为我们的输出节点不是概率而是实际值;那我们就可以开始训练了。

我使用了教师强制进行训练,这意味着编码器由24个数据点组成的输入组成,解码器输入是12个数据点的集合。第一个是“序列开始”值,以下数据点是目标序列。在开头引入“序列开始”值后,我将解码器输入相对于目标序列移动了一个位置。

我使用了一个只有“-1”的11维向量作为“序列开始”值。当然这可以改变,根据实际使用情况使用其他值是有益的;但是对于这个例子,这样的设置非常有用,因为它允许我们在输入或输出序列的任何维度中都没有负值。

此示例的损失函数是均方误差。

结果

下面的两个数字显示了结果。我取每日每小时值的平均值,并将它们与正确的值进行比较。第一张图显示了前24小时的12小时预报;对于第二个图,我们预测第一个小时的24小时数据。我们看到该模型可以很好地捕获一些波动,训练集的均方根误差为859;对于验证集,12小时预测的均方根误差为4,106,1小时预测根平方误差为2,583。模型预测的平均绝对百分比误差对应于第一张图表的8.4%和第二张图表的5.1%。

图3:一年前24小时的12小时预测

图4:一年前24小时预报1小时

总结

结果表明我们可以使用转换器进行时间序列预测。但在评估过程中,结果表明我们想要预测的步骤越多,误差就越大。上面的第一张图(图3)是通过使用接下来12小时的24小时预测来实现的。如果我们只预测一小时,那么结果会好得多,正如我们在第二张图上看到的那样(图4)。

转换器的参数也有很多优化空间,例如解码器和编码器层的数量。上述实验不是一个完美的模型,它可以通过更好的调整和训练来改善结果。

使用GPU加速培训也非常有帮助。我没有在我的本地机器上运行它来进行这个实验。相反,我在Watson Studio Local Platform上使用GPU训练了模型。您还可以使用Watson的机器学习GPU来加速培训。

n n

n

雷锋网络AI技术评论

n n