注意力机制attention图解

来自对https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/的笔记
注意力机制核心观点就是让RNN每一步都监视一个更大的信息集合并从中挑选信息。例如:如果你使用RNN去为一个图像生成注释,它会从图像中挑选一部分去预测输出的单词。接下来在讲解attention之前,我们会先聊聊Seq2Seq。

序列到序列模型是一种模型,它采用一系列项目(单词、字母、图像特征等)并输出另一个项目序列。在神经机器翻译中,序列是一系列单词,一个接一个地处理。同样,输出是一系列单词。编码器处理输入序列中的每个项目,它将捕获的信息编译成一个向量(称为上下文)。处理完整个输入序列后,编码器将上下文发送 到解码器,解码器开始逐项生成输出序列。
注意力机制attention图解_第1张图片
注意力机制attention图解_第2张图片

注意力机制attention图解_第3张图片
编码器和解码器 往往都是循环神经网络。
注意力机制attention图解_第4张图片
RNN 在每个时间步都有两个输入:一个输入(在编码器的情况下,输入句子中的一个词)和一个隐藏状态。然而,这个词需要用一个向量来表示。要将单词转换为向量,我们求助于称为“单词嵌入”算法的一类方法。这些将单词转换为向量空间,捕获单词的大量含义/语义信息(例如king - man + woman = queen)。嵌入思想是具有相同含义的词具有相似的表示,常用的方法是Word2Vec 统计方法。
注意力机制attention图解_第5张图片
我们需要在处理输入词之前将它们转换为向量。该转换是使用词嵌入算法完成的。我们可以使用预训练的嵌入或在我们的数据集上训练我们自己的嵌入。嵌入大小为 200 或 300 的向量是典型的,为简单起见,我们显示大小为 4 的向量。
编码器或解码器的每个脉冲 都是 RNN 处理其输入并为该时间步生成输出。由于编码器和解码器 都是 RNN,每一步 RNN 都会进行一些处理,它会 根据其输入和之前看到的输入更新其隐藏状态。
注意力机制attention图解_第6张图片
让我们看看编码器 的隐藏状态,最后一个隐藏状态实际上是 我们传递给解码器的上下文。解码器也保持一个隐藏状态 ,它从一个时间步传递到下一个时间步。我们只是没有在此图中将其可视化,因为我们现在关注模型的主要部分。可以认为h(3)中包含了前面三步的信息。
注意力机制attention图解_第7张图片
现在让我们看看另一种可视化序列到序列模型的方法,称为“展开”视图,我们不显示一个解码器,而是为每个时间步显示它的副本。这样我们就可以查看每个时间步的输入和输出。
注意力机制attention图解_第8张图片
注意力机制attention图解_第9张图片
注意力机制attention图解_第10张图片
事实证明,上下文向量是这些类型模型的瓶颈,这使得模型处理长句子变得具有挑战性,内存受限。Bahdanau et al., 2014和Luong et al., 2015提出了一个解决方案。这些论文引入并改进了一种称为“注意力”的技术,极大地提高了机器翻译系统的质量。Attention 允许模型根据需要关注输入序列的相关部分
注意力机制attention图解_第11张图片
在时间步 7,注意力机制使解码器 能够在生成英文翻译之前将注意力集中在单词“étudiant”(法语中的“student”)上。这种从输入序列的相关部分放大信号的能力使得注意力模型比没有注意力的模型产生更好的结果。RNN是一视同仁,而attention是区别对待,重点关注。
注意力模型在两个主要方面不同于经典的序列到序列模型:首先,编码器将更多数据传递给解码器。编码器没有传递编码阶段的最后一个隐藏状态,而是将所有隐藏状态 传递给解码器
注意力机制attention图解_第12张图片
其次,注意力解码器 在产生其输出之前会执行额外的步骤。为了关注与此解码时间步相关的输入部分,解码器执行以下操作:
查看它接收到的一组编码器隐藏状态 ——每个编码器隐藏状态与输入句子中的某个词最相关
给每个隐藏状态 打分(暂时先不管打分是怎么做的);
将每个隐藏状态 乘以其 softmaxed 分数,从而放大高分数的隐藏状态 ,并淹没低分数的隐藏状态;
注意力机制attention图解_第13张图片
注意力机制attention图解_第14张图片
注意力机制attention图解_第15张图片整体过程动图见视频:https://jalammar.github.io/images/attention_tensor_dance.mp4
这是查看在每个解码步骤中我们关注输入语句的哪一部分的另一种方法:
注意力机制attention图解_第16张图片
该模型不仅仅是将输出的第一个单词与输入的第一个单词对齐。它实际上从训练阶段学习了如何对齐该语言对中的单词(在我们的示例中为法语和英语)。关于这种机制的精确程度的一个例子来自上面列出的注意力论文:
注意力机制attention图解_第17张图片

原理解释:
https://blog.csdn.net/cristiano20/article/details/105734183
https://wenku.baidu.com/view/abed51850329bd64783e0912a216147917117e37.html
先看一个普通seq2seq的翻译句子的实例:
Seq2Seq有一个编码器和一个解码器,编码器一般是LSTM或者其他模型用于提取特征,它的最后一个输出就是从这句话得出的最后的特征,而其他的隐层输出都被丢弃。
注意力机制attention图解_第18张图片
在这里插入图片描述
注意力机制attention图解_第19张图片
然后输入是两个字符,起始符和m,下一个字母是a,我们将a做one-hot编码作为y标签,将它与我们输出的概率分布做一个CrossEntropy来作为损失函数,一直进行这个循环,应该就很好理解了。
注意力机制attention图解_第20张图片
最后一轮将整句德语作为输入,将停止符做标签y,再进行CrossEntropy,拿所有的英语和德语来训练我们的编码器和解码器,这就是我们的训练过程了。
注意力机制attention图解_第21张图片
在这里插入图片描述
注意力机制attention图解_第22张图片
在这里插入图片描述
注意力机制attention图解_第23张图片

在这里插入图片描述
注意力机制attention图解_第24张图片
在这里插入图片描述
注意力机制attention图解_第25张图片
注意力机制attention图解_第26张图片
注意力机制
我们知道Seq2Seq模型有一个缺点就是句子太长的话encoder会遗忘,那么decoder接受到的句子特征也就不完全,我们看一下下面这个图,纵轴BLUE是机器翻译的指标,横轴是句子的单词量,我们可以看出用了attention之后模型的性能大大提升。
注意力机制attention图解_第27张图片
用了注意力机制,Decoder每次更新状态的时候都会再看一遍encoder所有状态,还会告诉decoder要更关注哪部分,这也是attention名字的由来。但是缺点就是计算量很大。
在这里插入图片描述
注意力机制attention图解_第28张图片
第一种方法:
在这里插入图片描述
注意力机制attention图解_第29张图片
第二种方法:
在这里插入图片描述
上面笔误:L其实是m
注意力机制attention图解_第30张图片
在这里插入图片描述
注意力机制attention图解_第31张图片
在这里插入图片描述
注意力机制attention图解_第32张图片
在这里插入图片描述
注意力机制attention图解_第33张图片
在这里插入图片描述
注意力机制attention图解_第34张图片
在这里插入图片描述
注意力机制attention图解_第35张图片
在这里插入图片描述
注意力机制attention图解_第36张图片
比如下面,法语中的zone就是英语的Area,所以两者的线就很粗。
注意力机制attention图解_第37张图片

你可能感兴趣的:(深度学习,研究生机器学习,attention,注意力机制)