Seq2Seq(Encoder-Decoder)、Attention的详细介绍

上一篇博客循环神经网络及其变体的学习与博客总结中,提到了Seq2Seq 和 Attention 这些知识点,但讲得不够详细,这篇博客将对这两个知识点进行详细的介绍和代码总结。之后还有self-attention,这个目前我还没有用到,之后用到了再来补充。


目录

Seq2Seq介绍与挑战

Encoder-Decoder 结构

Encoder-Decoder 模型的四种结构

直接编码-解码模型(Direct Encoder-Decoder Implementation)

带输出回馈的编码-解码模式(Recursive Encoder-Decoder Implementation)

带编码向量的解码模型

带注意力的解码模式

Attention 的5种应用场景

文本翻译

图像描述

注意力集中

语音识别中的注意力

文本摘要中的注意力

Attention的好处

Attention求解方式

问题:

编码:

对齐(Alignment):

加权:

上下文向量(context vector):

解码:

硬注意和软注意(Hard and Soft Attention)


Seq2Seq介绍与挑战

序列问题和其他的机器学习问题最显著的一个区别就是序列中的值相互之间是有一个顺序的。

序列预测通常包括:

给定一个序列,输出下一个值:(序列预测)

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第1张图片

序列预测问题包括:

天气预报。给出一系列关于天气随时间变化的观测结果,预测明天的预期天气。
股票市场预测。给定一个证券随时间的移动序列,预测下一个证券的价格。
产品推荐。给定一个客户的过去购买序列,预测客户下一个可能的购买。

给定一个序列,预测一个序列:(序列预测)

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第2张图片

尽管[深层神经网络]具有灵活性和威力,但它们只能应用于输入和目标可以用固定维数的向量进行合理编码的问题。这是一个很大的限制,因为许多重要的问题最好用长度未知的序列来表达。例如,语音识别和机器翻译是序列问题。同样,问题回答也可以被看作将表示问题的单词序列映射到表示答案的单词序列。

— Sequence to Sequence Learning with Neural Networks, 2014

它是序列预测的一种微妙但具有挑战性的扩展,预测可能具有或可能不具有与输入序列相同的长度或具有相同时间的新序列,而不是预测序列中的单个下一个值
这种类型的问题最近在自动文本翻译(例如,将英语翻译成法语)领域已经见证了大量的研究,缩写seq2seq可以指代这类问题。

seq2seq学习的核心是使用循环神经网络将可变长度的输入序列映射到可变长度的输出序列。虽然seq2seq方法相对较新,但它不仅在其原始应用——机器翻译方面取得了最新成果。

— Multi-task Sequence to Sequence Learning, 2016.

如果输入和输出序列是时间序列,则该问题可称为多步时间序列预测。
多步时间序列预测。给定观察的时间序列,预测未来时间步长范围的观察序列。
文本摘要。给定文本文档,预测描述源文档突出部分的更短的文本序列。
程序执行。给定文本描述程序或数学方程,预测描述正确输出的字符序列。

给定一个序列,输出输入序列的类标签:(序列分类)

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第3张图片

序列分类问题包括:
DNA序列分类。给定ACGT值的DNA序列,预测该序列是编码区还是非编码区。
异常检测。给定观察序列,预测序列是否异常。
情感分析。给定一连串的文本,如评论或推特,预测文本的情绪是积极的还是消极的。

给定一个序列,输出一个序列,该输出序列具有和给定的序列相同的特征:(序列生成)

如:

序列生成问题包括:
文本生成。给定一个文本语料库,例如莎士比亚的作品,生成读起来像莎士比亚的新的句子或段落。
笔迹预测。给定手写示例的语料库,为语料库中具有手写特性的新短语生成手写。
音乐一代。给定一个音乐实例的语料库,生成具有语料库属性的新音乐片段。

序列生成还可以指给定单个观察作为输入的序列的生成。
一个例子是图像的自动文本描述。

如图像字幕生成。给定图像作为输入,生成一系列描述图像的单词。

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第4张图片

能够使用适当格式的英语句子自动描述图像的内容是一个非常具有挑战性的任务,但是它可以产生巨大的影响,例如通过帮助视力受损的人更好地理解网络上的图像内容。[…]实际上,描述不仅必须捕获图像中包含的对象,还必须表达这些对象如何相互关联,以及它们的属性和它们所参与的活动。此外,上述语义知识必须用像英语这样的自然语言来表达,这意味着除了视觉理解之外,还需要语言模型。

— Show and Tell: A Neural Image Caption Generator, 2015

以序列作为输入,并且需要序列预测作为输出。这种被称为序列到序列预测问题,或简称seq2seq。

使这些问题具有挑战性的一个建模问题是输入和输出序列的长度可能不同。假定存在多个输入时间步长和多个输出时间步长,这种形式的问题被称为多对多类型序列预测问题。


Encoder-Decoder 结构

Encoder-Decoder 模型是组织循环神经网络来处理输入和输出时间步数不同的序列到序列预测问题的一种方法。
该模型用于机器翻译问题,如法语句子到英语句子的翻译。

该模型包括两个子模型,如下,其中的RNN可以换做LSTM/GRU等变体:
编码器:一种RNN模型(可堆叠),编码器负责逐步通过输入的时间步长,并将整个序列编码成称为上下文向量(context vector)的固定长度向量。

编码模型比较简单,如下图所示,输入文本{X1-X6}经过循环迭代编码,在每个时刻得到当前时刻的一个隐层状态,最后序列结束后进行特征融合得到句子的表示。注意,一种比较常用的方式是将编码模型最后一个时刻的隐层状态做为整个序列的编码表示,还有将最后一个时刻的隐层状态做变换得到,但是实际应用中这种效果并不太好,因而我们的图例中直接采用了整个序列隐层编码进行求和平均的方式得到序列的编码向量。

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第5张图片

解码器:一种RNN模型(可堆叠),解码器负责从上下文向量读取信息解码,并逐步输出相应的时间步长。根据解码器输入的不同,我们把Encoder-Decoder 模型分为以下四种结构:

Encoder-Decoder 模型的四种结构

直接编码-解码模型(Direct Encoder-Decoder Implementation)

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第6张图片

上述方式是把context vector 作为解码器中每一步的输入。还有一种方式是将context vector作为解码器中的初始的Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第7张图片

带输出回馈的编码-解码模式(Recursive Encoder-Decoder Implementation)

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第8张图片

这种解码方式是将编码向量作为解码器第一个时刻的输入,此后每个时刻的输入为解码器前一个时刻的输出。

带编码向量的解码模型

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第9张图片

这种解码模式是将编码向量和上一时刻的输出都作为编码器的输入。

然而上述的模式存在一个共同的问题,该体系结构的一个限制是它将输入序列编码为固定长度的内部表示。这就对输入序列的长度施加了限制,并且导致对于非常长的输入序列的性能更差。

这种编码器 - 解码器方法的潜在问题是神经网络需要能够将源句子的所有必要信息压缩成固定长度的矢量。这可能使神经网络难以应对长句,特别是那些比训练语料库中的句子长的句子。

— Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015

带注意力的解码模式

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第10张图片

注意力是将编码器-解码器架构从固定长度的内部表示中解放出来。
这是通过保持来自输入序列每个步骤的编码器的中间输出,并训练模型以学习有选择地关注这些输入,并将它们与输出序列中的步骤关联来实现的。
换句话说,输出序列中的每个项都选择性地以输入序列中的项为条件。

每当该模型在翻译中生成单词时,它(软)搜索源句子中最相关信息集中的一组位置。然后,模型基于上下文向量(编码器生成的context vector)与这些源位置和所有先前生成的目标词来预测目标词。
...它将输入句子编码为一系列向量,并在解码翻译时自适应地选择这些向量的子集。这使得神经翻译模型不必将源语句的所有信息(无论其长度如何)压缩到固定长度的向量中。

— Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015

这增加了模型的计算负担,但是带来了更有针对性和性能更好的模型。
此外,该模型还能够显示当预测输出序列时如何关注输入序列。这有助于准确理解和诊断模型正在考虑什么,以及对特定输入-输出对重视程度如何。

所提出的方法提供了一种直观的方法来检查生成的翻译中的单词与源语句中的单词之间的(软)对齐。这是通过可视化注意力(attention)权重来完成的……每个绘图中的矩阵的每一行都指示与注释相关联的权重。由此可见,在生成目标词时,源语句中的哪些位置被认为更重要。

— Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015


Attention 的5种应用场景

文本翻译

给出一个法语句子的输入序列,翻译并输出一个英语句子。注意力用于注意输出序列中的每个单词对应的输入序列中的特定单词。
在生成每个目标单词时,我们通过让模型(软)搜索一组输入单词或由编码器计算的注意力来扩展基本的编解码器。这使得模型不必将整个源语句编码为固定长度的向量,并且还允许模型只关注与生成下一个目标单词相关的信息。

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第11张图片

— Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015

图像描述

与浏览方法不同,基于序列的注意力机制可应用于计算机视觉问题,以帮助了解在输出序列(例如字幕)时如何最好地使用卷积神经网络来关注图像。
给定图像的输入,输出图像的英文描述。注意力用于为输出序列中的每个单词对图像的不同部分进行聚焦。

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第12张图片

我们提出了一种基于注意力的方法,在三个基准数据集上给出最新的性能……我们还演示了如何利用学习注意力来给模型生成过程提供更多的可解释性,并且演示了学习对齐很好地符合人的直觉。

— Show, Attend and Tell: Neural Image Caption Generation with Visual Attention, 2016

注意力集中

给定一个前提情景和一个关于英语情景的假设,输出该前提是否矛盾、不相关或包含该假设。
例如:
前提:“婚宴拍照”
假设:“某人结婚了”
注意力用于将假设中的每个词与前提中的词联系起来,反之亦然。

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第13张图片

我们提出一个基于LSTM的神经模型,它一次读取两个句子以确定蕴涵,而不是将每个句子独立地映射到语义空间中。我们用神经逐字注意机制来扩展这个模型,以鼓励对单词和短语的蕴涵进行推理。...基于字的神经注意力超过这个强大的基准LSTM结果2.6个百分点,设置了一个最新的准确度...

— Reasoning about Entailment with Neural Attention, 2016

语音识别中的注意力

给定英语语音片段的输入序列,输出音素序列。
注意力用于将输出序列中的每个音素与输入序列中的特定音频帧相关联。

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第14张图片

...一种新的基于混合注意机制的端到端可训练语音识别体系结构,该混合注意机制结合内容和位置信息,以便选择输入序列中的下一个位置以进行解码。该模型的一个理想特性是,它能够识别比训练过的语音长得多的语音。

— Attention-Based Models for Speech Recognition, 2015.

文本摘要中的注意力

给定一篇英语文章的输入序列,输出一连串概括输入的英语单词。
注意力用于将输出摘要中的每个单词与输入文档中的特定单词相关联。

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第15张图片

基于神经机器翻译的最新发展,提出了一种基于神经注意的抽象摘要模型。我们将这个概率模型和生成算法相结合,生成精确的抽象摘要。

— A Neural Attention Model for Abstractive Sentence Summarization, 2015


Attention的好处

正如Bahdanau等人所描述的那样。在他们的论文“ Neural Machine Translation by Jointly Learning to Align and Translate”中涉及以下几个要素:

  • 更丰富的编码。编码器的输出被扩展,以提供输入序列中所有字的信息,而不仅仅是序列中最后一个字的最终输出。
  • 对齐模型。新的小神经网络模型用于使用来自前一时间步的解码器的参与输出来对准或关联扩展编码。
  • 加权编码。对齐的加权,可用作编码输入序列上的概率分布。
  • 加权的上下文矢量。应用于编码输入序列的加权然后可用于解码下一个字。

注意,在所有这些编码器 - 解码器模型中,模型的输出(下一个预测字)和解码器的输出(内部表示)之间存在差异。解码器不直接输出字; 通常,完全连接的层连接到解码器,该解码器输出单词词汇表上的概率分布,然后使用启发式的搜索进一步搜索。


Attention求解方式

通过一个小示例来具体讲解attention的应用过程。

问题

一个简单的序列预测问题,输入是x1, x2, x3,输出是预测一步y1。

在本例中,我们将忽略编码器和解码器中使用的RNN类型,而忽略双向输入层的使用。这些元素对于理解解码器中注意力的计算并不显著。

编码

在编码器 - 解码器模型中,输入将被编码为单个固定长度矢量。这是最后一个步骤的编码器模型的输出。

h1 = Encoder(x1, x2, x3)

注意模型需要在每个输入时间步长访问编码器的输出。本文将这些称为每个时间步的“ 注释 ”(annotations)。在这种情况下:

h1, h2, h3 = Encoder(x1, x2, x3)

对齐(Alignment)

解码器一次输出一个值,在最终输出当前输出时间步长的预测(y)之前,该值可能会经过许多层。
对齐模型评分(e)评价了每个编码输入得到的(h)与解码器的当前输出匹配的程度。
分数的计算需要解码器从前一输出时间步长输出的结果,例如s(t-1)。当对解码器的第一个输出进行评分时,这将是0。
使用函数a()执行评分。我们可以对第一输出时间步骤的每个注释(h)进行如下评分:

e11 = a(0, h1)
e12 = a(0, h2)
e13 = a(0, h3)

对于这些分数,我们使用两个下标,例如,e11,其中第一个“1”表示输出时间步骤,第二个“1”表示输入时间步骤。
我们可以想象,如果我们有两个输出时间步的序列到序列问题,那么稍后我们可以对第二时间步的注释评分如下(假设我们已经计算过s1):
e21 = a(s1, h1)
e22 = a(s1, h2)
e23 = a(s1, h3)

本文将函数a()称为对齐模型,并将其实现为前馈神经网络。
这是一个传统的单层网络,其中每个输入(s(t-1)和h1、h2和h3)被加权,使用双曲正切(tanh)激活函数并且输出也被加权。

加权

接下来,使用softmax函数标准化对齐分数。
分数的标准化允许它们被当作概率对待,指示每个编码的输入时间步骤(注释)与当前输出时间步骤相关的可能性。
这些标准化的分数称为注释权重。
例如,给定计算的对齐分数(e),我们可以计算softmax注释权重(a)如下:
a11=exp(e11)/(exp(e11)+exp(e12)+exp(e13))
a12=exp(e12)/(exp(e11)+exp(e12)+exp(e13))
a13=exp(e13)/(exp(e11)+exp(e12)+exp(e13))

如果我们有两个输出时间步骤,则第二输出时间步骤的注释权重将计算如下:

a21 = exp(e21) / (exp(e21) + exp(e22) + exp(e23))
a22 = exp(e22) / (exp(e21) + exp(e22) + exp(e23))
a23 = exp(e23) / (exp(e21) + exp(e22) + exp(e23))

上下文向量(context vector)

接下来,将每个注释(h)与注释权重(a)相乘以产生新的具有注意力的上下文向量,从中可以解码当前时间步骤的输出。
为了简单起见,我们只有一个输出时间步骤,因此可以如下计算单个元素上下文向量(为了可读性,使用括号):

c1 = (a11 * h1) + (a12 * h2) + (a13 * h3)

上下文向量是注释和标准化对齐得分的加权和。
如果我们有两个输出时间步骤,上下文向量将包括两个元素[c1,c2],计算如下:

c1 = a11 * h1 + a12 * h2 + a13 * h3
c2 = a21 * h1 + a22 * h2 + a23 * h3

解码

然后,按照编码器-解码器模型执行解码,在本例中为当前时间步骤使用带注意力的上下文向量。
本文将解码器的输出称为隐藏状态。

s1 = Decoder(c1)

此隐藏状态可以在作为时间步长的预测(y1)最终输出模型之前,被喂到其他附加层。


硬注意和软注意(Hard and Soft Attention)


在2015年的论文“Show, Attend and Tell: Neural Image Caption Generation with Visual Attention”中,Kelvin Xu等人。应用卷积神经网络作为图像数据的特征抽取器来关注图像数据字幕照片的问题。
他们发展了两种注意机制,一种叫做“软注意”,类似于上面用加权上下文向量描述的注意力,另一种叫做“硬注意”,即对每个单词的上下文向量中的元素做出清晰的决定。
他们还提出双重注意,注意力集中在图像的特定部分。


参考的博客有:

http://jacoxu.com/encoder_decoder/  JacoXu大牛的博客,讲得非常生动有趣

Jason 大神的博客:

https://machinelearningmastery.com/encoder-decoder-long-short-term-memory-networks/  Encoder-Decoder Long Short-Term Memory Networks 

https://machinelearningmastery.com/?s=encoder+decoder&post_type=post&submit=Search  Encoder-Decoder一系列博客 

发现的一个很不错的开放的科学期刊,Distill,Distill is dedicated to clear explanations of machine learning. 对ML的一个清晰解释。

https://distill.pub/2016/augmented-rnns/  Attention and Augmented Recurrent Neural Networks

参考的论文的时间线是这样的:

Seq2Seq(Encoder-Decoder)、Attention的详细介绍_第16张图片

https://arxiv.org/pdf/1409.3215.pdf   Sequence to Sequence Learning with Neural Networks

https://arxiv.org/pdf/1406.1078.pdf  Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation

https://arxiv.org/pdf/1609.08144.pdf  Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation

https://arxiv.org/pdf/1508.04025v3.pdf  Effective Approaches to Attention-based Neural Machine Translation

 https://arxiv.org/pdf/1705.03122.pdf  Convolutional Sequence to Sequence Learning

你可能感兴趣的:(深度学习)