注意力机制attention图解

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

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

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

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

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

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值