来自对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,所以两者的线就很粗。

注意力机制attention图解相关推荐

  1. 注意力机制(Attention)最新综述论文及相关源码

    来源:专知 注意力机制(Attention)起源于模仿人类的思维方式,后被广泛应用于机器翻译.情感分类.自动摘要.自动问答等.依存分析等机器学习应用中.专知编辑整理了Arxiv上一篇关于注意力机制在N ...

  2. 注意力机制Attention Mechanism及论文

    注意力机制Attention Mechanism Q,K,V 注意力分数 seq2seq中注意力机制的应用 注意力机制源于对人类视觉的研究.在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息 ...

  3. 图像处理注意力机制Attention汇总(附代码)

    原文链接: 图像处理注意力机制Attention汇总(附代码,SE.SK.ECA.CBAM.DA.CA等) 1. 介绍 注意力机制(Attention Mechanism)是机器学习中的一种数据处理方 ...

  4. 注意力机制Attention详解

    注意力机制Attention详解 一.前言 2018年谷歌提出的NLP语言模型Bert一提出,便在NLP领域引起热议,之所以Bert模型能够火出圈,是由于Bert模型在NLP的多项任务中取得了之前所有 ...

  5. 翻译: 详细图解Transformer多头自注意力机制 Attention Is All You Need

    1. 前言 The Transformer--一个使用注意力来提高这些模型的训练速度的模型.Transformer 在特定任务中的表现优于谷歌神经机器翻译模型.然而,最大的好处来自于 The Tran ...

  6. 神经网络注意力机制--Attention in Neural Networks

    Attention in Neural Networks and How to Use It http://akosiorek.github.io/ml/2017/10/14/visual-atten ...

  7. 序列到序列网络seq2seq与注意力机制attention浅析

    序列到序列网络 序列到序列网络(Sequence to Sequence network),也叫做seq2seq网络, 又或者是编码器解码器网络(Encoder Decoder network), 是 ...

  8. VALSE学习(四):注意力机制-Attention Network

    VALSE2019 会议论文 一.精细化图像理解与多媒体内容创作 Trilinear Attention Sampling Network 近年来,精细化图像识别任务通常采用具有"注意力&q ...

  9. 论文阅读: 图像分类中的注意力机制(attention)

    本文简要总结一下attention机制在图像分类任务中的应用.attention作为一种机制,有其认知神经或者生物学原理: 注意力的认知神经机制是什么? 如何从生物学的角度来定义注意力? 在计算机视觉 ...

  10. 计算机视觉中的注意力机制--attention mechanism

    转载:https://zhuanlan.zhihu.com/p/56501461 张戎 引言 在机器翻译(Machine Translation)或者自然语言处理(Natural Language P ...

最新文章

  1. 多迪将企业的Python工程师定位成哪几类?
  2. 2011寒假-操作系统学习笔记
  3. iOS开发入门知识归纳
  4. 人工智能——图像分析第二期练习
  5. 完美解决IE8有两个进程的问题
  6. 一款社区论坛小程序源码
  7. 苹果下半年推出M2芯片MacBook Air 配色更多更轻薄
  8. coco2d-js 多屏适配相关API
  9. 拒绝假货!LVMH与普拉达、卡地亚联手推出区块链平台AURA
  10. Confluence 6 目录中的数据库
  11. 【转】ZooKeeper详细介绍和使用第一节
  12. windows10:检测windows defender是不是已经连接到了云安全中心
  13. adobe黑体std能商用_请问Adobe 黑体 Std R能免费商用吗?
  14. php 抽签,javascript随机抽签程序
  15. Python 实现 pdf转图片 和 图片转pdf
  16. 组合预测模型:bagging
  17. RK3399平台开发系列讲解(USB网卡)5.48、USBNET的CDC link on/off 消息
  18. 如何从Gitlab上拉取代码
  19. Errors occurred during the build. Errors running builder 'JavaScript Validator'
  20. 最硬核的独立蒙特卡洛抽样法

热门文章

  1. html js实现搜索框提示功能,js实现智能提示搜索框
  2. 十进制转化为十六进制的三种方法 (可适用于十进制转化为各种进制)
  3. Burpsuite1.7.03网站渗透神器最新破解版
  4. python多行注释报错_解决python多行注释引发缩进错误的问题
  5. 自动化领域(控制领域)主要期刊汇总整理(SCI和EI)
  6. Object 转int
  7. OpenPose:实时多人2D姿态估计
  8. 弘辽科技:新品直通车怎么选词?怎样测试人群标签?
  9. java.exe 0xc000012d_应用程序无法正常启动0xc000012d,此情况要怎么解决,望大神交一交...
  10. 前端数据可视化插件(一)图表