1 什么是注意力机制?

当我们观察某件事物/景色的时候,往往会先简单看下周围环境,然后将重点放在某一重要部分。深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,也是从众多信息中选择出对当前任务目标更关键的信息。下图形象化展示了人类在看到一副图像时是如何高效分配有限的注意力资源的,其中红色区域表明视觉系统更关注的目标,很明显对于下图所示的场景,人们会把注意力更多投入到人的脸部,文本的标题以及文章首句等位置。

2 从encoder和decode说起

encoder-decode框架在自然语言处理任务中常常出现,可以把它看作将语句1生成语句2的通用模型。常见结构如下:

我们给定 x = x 1 , x 2 , x 3 , . . . , x n x = {x_1, x_2, x_3, ..., x_n} x=x1​,x2​,x3​,...,xn​,期望通过encoder-decoder模型生成 y = y 1 , y 2 , . . . , y m y = {y_1, y_2, ..., y_m} y=y1​,y2​,...,ym​,Encoder顾名思义就是对输入语句进行编码,将输入语句通过非线性变换转化为中间语义 C = F ( x 1 , x 2 , . . . , x n ) = F ( x ) C = F(x_1, x_2, ..., x_n) = F(x) C=F(x1​,x2​,...,xn​)=F(x)表示,对于解码器Decoder来说,其任务是根据输入语句的中间语义表示 C C C和之前已经生成的历史信息 y 1 , y 2 , . . . , y i − 1 y_1, y_2, ..., y_{i-1} y1​,y2​,...,yi−1​来生成 i i i时刻要生成的单词 y i y_i yi​。每个 y i y_i yi​都依次按照上述流程产生,这就是encoder-decoder讲语句1转成语句2的过程。

3 Attention

3.1 attention思想

上面展示的encoder-decoder框架是没有体现出注意力机制的。

y 1 = f ( C ) y_1 = f(C) y1​=f(C)

y 2 = f ( C , y 1 ) y_2 = f(C, y_1) y2​=f(C,y1​)

y 3 = f ( C , y 1 , y 2 ) y_3 = f(C, y_1, y_2) y3​=f(C,y1​,y2​)

其中 f f f是decoder的非线性变换函数。从这里可以看出,在生成目标句子的单词时,不论生成哪个单词,它们使用的输入语句的语义编码 C C C都是一样的。而语义编码 C C C由输入语句的每个单词经过encoder编码产生,也就是说不论是生成哪个单词, y 1 , y 2 , . . . y_1,y_2, ... y1​,y2​,...,其实输入语句中任意单词对生成某个目标单词 y i y_i yi​来说影响力都是相同的,这是为何说这个模型没有体现出注意力的缘由。

输出语句中的每个单词都应该学会其对应的源语句中单词的注意力分配概率信息。这意味着在生成每个单词 y i y_i yi​的时候,原先都是相同的中间语义表示 C C C会被替换成根据当前生成单词而不断变化的 C i C_i Ci​。理解Attention模型的关键就是这里,即由固定的中间语义表示 C C C换成了根据当前输出单词来调整成加入注意力模型的变化的 C i C_i Ci​。增加了注意力模型的encoder-decoder框架理解起来如下图所示。

即生成目标语句的过程成了下面的形式:

y 1 = f 1 ( C 1 ) y_1 = f_1(C_1) y1​=f1​(C1​)

y 2 = f 2 ( C 2 , y 1 ) y_2 = f_2(C_2, y_1) y2​=f2​(C2​,y1​)

y 3 = f 3 ( C 3 , y 1 , y 2 ) y_3 = f_3(C_3, y_1, y_2) y3​=f3​(C3​,y1​,y2​)

上述内容就是经典的Attention模型的基本思想,那么怎么理解Attention模型的物理含义呢?一般在自然语言处理应用里会把Attention模型看作是输出Target句子中某个单词和输入Source句子每个单词的对齐模型,这是非常有道理的。目标语句生成的每个单词对应输入语句单词的概率分布可以理解为输入语句单词和这个目标生成单词的对齐概率,这在机器翻译语境下是非常直观的:传统的统计机器翻译一般在做的过程中会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的作用。

3.2 attention

attention 计算分3个步骤:

第一步: query 和 key 进行相似度计算,得到权值.计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值

第二步:将权值进行归一化,得到直接可用的权重

第三步:将权重和 value 进行加权求和

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ⋅ V ) Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}}·V) Attention(Q,K,V)=softmax(dk​ ​QKT​⋅V)

3.3 self attention

它指的不是输入语句和输出语句之间的Attention机制,而是输入语句内部元素之间或者输出语句内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制,Q=K=V。通过自己与自己的attention来自动捕获token和token之间的关联。下面有一个可视化的例子

4 优点

参数少。模型复杂度跟 CNN、RNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小。

速度快。Attention 解决了 RNN 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。

效果好。在 Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。

参考

  • https://zhuanlan.zhihu.com/p/91839581
  • http://www.sniper97.cn/index.php/note/deep-learning/note-deep-learning/3850/
  • https://www.zhihu.com/question/68482809/answer/264632289

欢迎关注微信公众号(算法工程师面试那些事儿),本公众号聚焦于算法工程师面试,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~

attention与self attention的区别相关推荐

  1. attention机制、self-attention、channel attention、spatial attention、multi-head attention、transformer

    文章目录 attention sequence attention attention 与 self-attention channel attention 与 spatial attention m ...

  2. 【Attention,Self-Attention Self Attention Self_Attention】通俗易懂

    Attention is, to some extent, motivated by how we pay visual attention to different regions of an im ...

  3. soft attention and self attention

    注意力模型最近几年在深度学习各个领域被广泛使用,无论是图像处理.语音识别还是自然语言处理的各种不同类型的任务中,都很容易遇到注意力模型的身影.所以,了解注意力机制的工作原理对于关注深度学习技术发展的技 ...

  4. pytorch实现attention_Longformer: 局部Attention和全局attention的混搭

    最近要开始使用Transformer去做一些事情了,特地把与此相关的知识点记录下来,构建相关的.完整的知识结构体系, 以下是要写的文章,本文是这个系列的第十一篇: Transformer:Attent ...

  5. 为节约而生:从标准Attention到稀疏Attention

    作者丨苏剑林 单位丨追一科技 研究方向丨NLP,神经网络 个人主页丨kexue.fm 如今 NLP 领域,Attention 大行其道,当然也不止 NLP,在 CV 领域 Attention 也占有一 ...

  6. Self Attention和Multi-Head Attention的原理和实现

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-47.html 引言 使用深度学习做NLP的方法,一般是将单词转 ...

  7. Attention 与Hierarchical Attention Networks 原理

    Attention 与Hierarchical Attention Networks 1. Attention 注意力机制 1.1 什么是Attention? 1.2 加入Attention的动机 1 ...

  8. 注意力机制的分类 | Soft Attention和Hard Attention

    在前面两节的内容中我们已经介绍了注意力机制的实现原理,在这节内容中我们讲一讲有关于注意力机制的几个变种: Soft Attention和Hard Attention 我们常用的Attention即为S ...

  9. attention retain_remain_remain 和retain的区别。详细些。

    remain 和retain的区别.详细些. 一.词义辨析不一样 1.remain v. [正式]留下,逗留 [辨析]指某人或某物仍留在原处. [例证]I remained in Chicago un ...

最新文章

  1. VS2017中运行第一个C#控制台应用并输出HelloWorld
  2. boost::polygon模块实现多边形段相关的测试程序
  3. Git版本管理工具的使用
  4. jdbctype 对应java_MyBatis配置Mapping,JavaType和JDBCType的对应关系
  5. Spring 入门学习二之IOC
  6. luogu3830 [SHOI2012]随机树
  7. lisp用entmake生产圆柱体_铝型材挤压生产金属流动与模具分析
  8. purrr | 使用map族函数进行向量化运算
  9. 用Android Studio 出现的问题
  10. 在微软 Team 中查看 GIF 文件就能触发账户劫持漏洞?
  11. Wireshark和TcpDump抓包分析心得
  12. 线段树详解(转)这个博客很棒~
  13. 《Orange'S:一个操作系统的实现》与上一版之比较
  14. csdn怎么查看自己写的文章
  15. pp助手苹果版本_最全的苹果越狱源,收藏备用
  16. ionic 中使用 slidebox 利用angular ng-repeat 渲染后不显示问题
  17. Linux /usr/src/kernels 目录为空的解决方法
  18. weiphp短信接口教程
  19. python逆序输出_python倒序输出
  20. Wade复出,但热火被指定强队认证机构山猫击败

热门文章

  1. ins是什么与Instagram有什么区别
  2. form表单的onsubmit() return问题
  3. python如何截取视频中的某一段
  4. PXE的原理与配置方式
  5. iOS-Core-Animation-Advanced-Techniques(六)
  6. JAVA JDK8的介绍下载和安装(附网盘地址)
  7. 【转载】采样频率、采样点数、频率分辨率
  8. matlab pwm整流仿真
  9. 基于React、Typescript和Solidity的NFT完整教程
  10. calendar -- 日历相关│Python标准库