注意力机制分类、原理、应用
目录
- 1.简介
- 2.注意力机制的诞生
- 3.不同类别的计算原理
- 3.1.普通模式注意力
- 3.1.1.软性注意力
- 3.1.2.硬性注意力
- 3.2.键值对模式:键值对注意力
- 3.3.多头注意力(Multi-Head Attention)
- 3.4.结构化注意力
- 4.应用
- 4.1.指针网络
- 4.2.自注意力模型
- 参考
1.简介
注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。上述机制通常被称为注意力机制
综上,注意力机制主要有两个方面:决定需要关注输入的哪部分;分配有限的信息处理资源给重要的部分。
在深度学习中,注意力可以借助重要性权重向量来实现:在预测或推断一个元素时,如图片中的像素点或句中的一个词,我们使用注意力向量来判断,它与其他元素有多强的关联性,然后对加权后的向量求和以逼近最后的目标值(target)。
2.注意力机制的诞生
注意力机制最早于2014年在计算机视觉中提出。但是本文的讨论以机器翻译任务上的seq2seq模型为例。
Seq2Seq模型: 将一个输入序列(source)转化为另一个序列(target),两个序列都可以是不定长的。
场景:
- 多语言机器翻译(文本或语音)
- 问答对话对话生成系统
- 将句子解析为语法树
结构:循环神经网络结构
- 编码器:处理序列输入并压缩信息到一个固定长度的上下文向量中。上下文向量被当做是输入序列的语义概要。
- 解码器:由上下文向量初始化,并每次产生一个转码输出。
源输入和目标输出的语义对齐问题由上下文向量学习和控制。上下文向量处理三方面的信息:
- 编码器的隐藏状态
- 解码器的隐藏状态
- 源输入和目标输出的对齐
缺点: 固定长度上下文向量无法记忆长句子。
解决方法: 提出注意力机制(Bahdanau 2015)。注意力机制考虑了上下文向量和所有序列输入的信息,构建了“连接”。每一个输出元素下的连接的权重都是自动学习的。上下文向量已经考虑了整体输入序列信息,不需要担心遗忘的问题。
3.不同类别的计算原理
计算步骤:
- 在所有输入信息上计算注意力分布
- 根据注意力分布来计算输入信息的加权平均
3.1.普通模式注意力
定义:
- 和任务有关的查询向量 q \bm q q
- 注意力变量 z ∈ [ 1 , N ] z\in [1,N] z∈[1,N]表示被选择信息的索引位置。即 z = i z=i z=i表示选择了第 i i i个输入信息
- 在给定 q \bm q q和 X X X下,选择第 i i i个输入信息的概率 α i \alpha_i αi称为注意力分布(Attention Distribution)
- s ( x i , q ) s(x_i, \bm q) s(xi,q)为注意力打分函数
计算注意力分布:
α i = p ( z = i ∣ X , q ) = s o f t m a x ( s ( x i , q ) ) = e x p ( s ( x i , q ) ) ∑ j = 1 N e x p ( x j , q ) \alpha_i=p(z=i|X,\bm q)\\=softmax(s(x_i,\bm q))\\=\frac{exp(s(x_i,\bm q))}{ \sum_{j=1}^{N}exp(x_j,\bm q)} αi=p(z=i∣X,q)=softmax(s(xi,q))=∑j=1Nexp(xj,q)exp(s(xi,q))
注意力打分函数:
- 加性模型 s ( x i , q ) = v T t a n h ( W x i + U q ) s(x_i,\bm q)=v^Ttanh(Wx_i+U\bm q) s(xi,q)=vTtanh(Wxi+Uq)
- 点积模型 s ( x i , q ) = x i T q s(x_i,\bm q)=x_i^T\bm q s(xi,q)=xiTq
- 缩放点积模型 s ( x i , q ) = x i T q d s(x_i,\bm q)=\frac{x_i^T\bm q}{\sqrt d} s(xi,q)=d xiTq
- 双线性模型 s ( x i , q ) = x i T W q s(x_i,\bm q)=x_i^TW\bm q s(xi,q)=xiTWq
其中, W , U , v W,U,v W,U,v为可学习的网络参数, d d d为输入信息的维度。
理论上,加性模型和点积模型的复杂度差不多,但是点积模型在实现上可以更好地利用矩阵乘积,从而计算效率更高。但当输入信息的维度 d d d比较高,点积模型的值通常有比较大方差,从而导致softmax函数的梯度会比较小。因此,缩放点积模型可以较好地解决这个问题。双线性模型可以看做是一种泛化的点积模型。假设 W = U T V W = U^TV W=UTV,双线性模型可以写为 s ( x i , q ) = x i T U T V q = ( U x ) T ( V q ) s(x_i,\bm q) = x^T_i U^TV\bm q = (Ux)^T(V\bm q) s(xi,q)=xiTUTVq=(Ux)T(Vq),即分别对 x x x和 q q q进行线性变换后计算点积。相比点积模型,双线性模型在计算相似度时引入了非对称性。
加权平均:
注意力分布 α i \alpha_i αi可以解释为在给定任务相关的查询 q \bm q q时,第 i i i个信息受关注的程度。
3.1.1.软性注意力
我们采用一种“软性”的信息选择机制对输入信息进行汇总,其选择的信息是所有输入信息在注意力分布下的期望。
a t t ( X , q ) = ∑ i = 1 N α i x i = E z ∼ p ( z ∣ X , q ) [ X ] att(X,\bm q)=\displaystyle\sum_{i=1}^N\alpha_ix_i=E_{z\sim p(z|X,\bm q)}[X] att(X,q)=i=1∑Nαixi=Ez∼p(z∣X,q)[X]
注意: 上面这个公式,被称为软性注意力机制(Soft Attention Mechanism)。
3.1.2.硬性注意力
只关注到某一个位置上的信息。
实现方式1: 选取最高概率的输入信息
a t t ( X , q ) = x j , j = a r g m a x i = 1 N α i att(X,\bm q)=x_j,j=argmax_{i=1}^{N}\alpha_i att(X,q)=xj,j=argmaxi=1Nαi
实现方式2: 在注意力分布式上随机采样
缺点: 基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布之间的函数关系不可导,无法使用在反向传播算法进行训练。为了使用反向传播算法,一般使用软性注意力来代替硬性注意力。
3.2.键值对模式:键值对注意力
用键值对(key-value pair)格式来表示输入信息,其
中“键”用来计算注意力分布 α i \alpha_i αi,“值”用来计算聚合信息。
- N N N个输入信息: ( K , V ) = [ ( k 1 , v 1 ) , ⋅ ⋅ ⋅ , ( k N , v N ) ] (K, V) = [(k_1, v_1), · · · , (k_N, v_N)] (K,V)=[(k1,v1),⋅⋅⋅,(kN,vN)]
- 给定任务相关的查询向量 q \bm q q
- s ( k i , q ) s(k_i,q) s(ki,q)为打分函数
注意力函数为:
a t t ( ( K , V ) , q ) = ∑ i = 1 N α i v i = ∑ i = 1 N e x p ( s ( k i , q ) ) ∑ j e x p ( s ( k j , q ) ) v i att((K,V),\bm q)=\displaystyle\sum_{i=1}^{N}\alpha_iv_i\\=\displaystyle\sum_{i=1}^{N}\frac{exp(s(k_i,q))}{\sum_jexp(s(k_j,q))}v_i att((K,V),q)=i=1∑Nαivi=i=1∑N∑jexp(s(kj,q))exp(s(ki,q))vi
注意: 当 K = V K=V K=V时,键值对模式就等价于普通的注意力机制。
3.3.多头注意力(Multi-Head Attention)
利用多个查询 Q = [ q 1 , ⋅ ⋅ ⋅ , q M ] Q = [\bm q_1, · · · , \bm q_M] Q=[q1,⋅⋅⋅,qM],来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分。
a t t ( ( K , V ) , Q ) = a t t ( ( K , V ) , q 1 ) ⊕ … ⊕ a t t ( ( K , V ) , q M ) att((K,V),Q)=att((K,V),\bm q_1)\oplus…\oplus att((K,V),\bm q_M) att((K,V),Q)=att((K,V),q1)⊕…⊕att((K,V),qM)
其中, ⊕ \oplus ⊕表示向量拼接。
3.4.结构化注意力
要从输入信息中选取出和任务相关的信息,主动注意力是在所有输入信息上的多项分布,是一种扁平(flat)结构。
如果输入信息本身具有层次(hierarchical)结构,比如文本可以分为词、句子、段落、篇章等不同粒度的层次,我们可以使用层次化的注意力来进行更好的信息选择[Yang et al., 2016]。
此外,还可以假设注意力上下文相关的二项分布,用一种图模型来构建更复杂的结构化注意力分布[Kim et al., 2017]。
4.应用
注意力机制一般可以用作一个神经网络中的组件。
4.1.指针网络
注意力机制主要是用来做信息筛选,从输入信息中选取相关的信息。
注意力机制可以分为两步:一是计算注意力分布 α α α,二是根据 α α α来计算输入信息的加权平均。
我们可以只利用注意力机制中的第一步,将注意力分布作为一个软性的指针(pointer) 来指出相关信息的位置。
指针网络(Pointer Network)[Vinyals et al., 2015] 是一种序列到序列模型。
输入是长度为 n n n的向量序列 X = x 1 , ⋅ ⋅ ⋅ , x n X = x_1, · · · , x_n X=x1,⋅⋅⋅,xn
输出是输入序列的下标/索引序列 c 1 : m = c 1 , c 2 , ⋅ ⋅ ⋅ , c m c_{1:m} = c_1, c_2, · · · , c_m c1:m=c1,c2,⋅⋅⋅,cm,其中 c i ∈ [ 1 , n ] , ∀ i c_i ∈ [1, n], ∀i ci∈[1,n],∀i。
比如下图中,输入为20, 5, 10,输出为1, 3, 2。
条件概率 p ( c 1 : m ∣ x i : n ) = ∏ i = 1 m p ( c i ∣ c 1 : i − 1 , x 1 : n ) ≈ ∏ i = 1 m p ( c i ∣ x c 1 , . . . . , x c i − 1 , x 1 : n ) p(c_{1:m}|x_{i:n})=\displaystyle\prod_{i=1}^mp(c_i|c_{1:i-1},x_{1:n})\approx\displaystyle\prod_{i=1}^mp(c_i|x_{c_1},....,x_{c_{i-1}},x_{1:n}) p(c1:m∣xi:n)=i=1∏mp(ci∣c1:i−1,x1:n)≈i=1∏mp(ci∣xc1,....,xci−1,x1:n)
其中,条件概率 p ( c i ∣ x c 1 , . . . . , x c i − 1 , x 1 : n ) p(c_i|x_{c_1},....,x_{c_{i-1}},x_{1:n}) p(ci∣xc1,....,xci−1,x1:n)可以通过注意力分布来计算。
假设用一个循环神经网络对 x c 1 , . . . . , x c i − 1 , x 1 : n x_{c_1},....,x_{c_{i-1}},x_{1:n} xc1,....,xci−1,x1:n进行编码得到向量 h i h_i hi,则
p ( c i ∣ c 1 : i − 1 , x 1 : n ) = s o f t m a x ( s i , j ) p(c_i|c_{1:i-1},x_{1:n})=softmax(s_{i,j}) p(ci∣c1:i−1,x1:n)=softmax(si,j)
s i , j = v T t a n h ( W x j + U h i ) , ∀ j ∈ [ 1 , n ] s_{i,j}=v^Ttanh(Wx_j+Uh_i),\forall j\in[1,n] si,j=vTtanh(Wxj+Uhi),∀j∈[1,n]
其中, v , W , U v,W,U v,W,U为可学习的参数, s i , j s_{i,j} si,j为在解码过程的第 i i i步时,每个输入向量的未归一化的注意力分布。
其实我有点没看懂……
4.2.自注意力模型
当使用神经网络来处理一个变长的向量序列时,通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列。它们是一种局部的编码方式,只建模了输入信息的局部依赖关系。
虽然循环网络理论上可以建立长距离依赖关系,但是由于信息传递的容量以及梯度消失问题,实际上也只能建立短距离依赖关系。
建立输入序列之间的长距离依赖关系:
- 增加网络的层数,通过一个深层网络来获取远距离的信息交互
- 使用全连接网络。全连接网络是一种非常直接的建模远距离依赖的模型,但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。这时我们就可以利用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(Self-Attention Model)。
计算原理:
输入序列 X = [ x 1 , . . . , x N ] ∈ R d 1 × N X=[x_1,...,x_N]\in R^{d_1×N} X=[x1,...,xN]∈Rd1×N
输出序列 H = [ h 1 , . . . , h N ] ∈ R d 2 × N H=[h_1,...,h_N]\in R^{d_2×N} H=[h1,...,hN]∈Rd2×N
- 首先,通过线性变换得到三组向量序列:
Q = W Q X ∈ R d 3 × N Q=W_QX\in R^{d_3×N} Q=WQX∈Rd3×N, Q Q Q为查询向量序列
K = W K X ∈ R d 3 × N K=W_KX\in R^{d_3×N} K=WKX∈Rd3×N, K K K为键向量序列
V = W V X ∈ R d 3 × N V=W_VX\in R^{d_3×N} V=WVX∈Rd3×N, V V V为值向量序列
其中, W Q , W K , W V W_Q,W_K,W_V WQ,WK,WV分别为可学习的参数矩阵。 - 计算输出向量:
h i = a t t ( ( K , V ) , q i ) = ∑ j = 1 N α i j v j = ∑ j = 1 N s o f t m a x ( s ( k j , q i ) ) v j h_i=att((K,V),\bm q_i)=\displaystyle\sum_{j=1}^N\alpha_{ij}v_j\\=\displaystyle\sum_{j=1}^Nsoftmax(s(k_j,\bm q_i))v_j hi=att((K,V),qi)=j=1∑Nαijvj=j=1∑Nsoftmax(s(kj,qi))vj
其中 i , j ∈ [ 1 , N ] i, j ∈ [1,N] i,j∈[1,N]为输出和输入向量序列的位置,连接权重 α i j α_{ij} αij由注意力机制动态生成。
如果使用缩放点积来作为注意力打分函数,输出向量序列可以写为 H = V s o f t m a x ( K T Q d 3 ) H=Vsoftmax(\frac{K^TQ}{\sqrt{d_3}}) H=Vsoftmax(d3 KTQ)
评价:
自注意力模型可以作为神经网络中的一层来使用,有效地建模长距离依赖问题。既可以用来替换卷积层和循环层[Vaswani et al., 2017],也可以和它们一起交替使用[Shen et al., 2018](比如 X X X可以是卷积层或循环层的输出)。
自注意力模型计算的权重 α i j α_{ij} αij只依赖 q i q_i qi和 k j k_j kj的相关性,而忽略了输入信息的位置信息。因此在单独使用时,自注意力模型一般需要加入位置编码信息来进行修正[Vaswani et al., 2017]。
参考
https://www.jianshu.com/p/c9490f9e59ba
https://blog.csdn.net/joshuaxx316/article/details/70665388
https://www.jianshu.com/p/9b922fb83d77
https://blog.csdn.net/tg229dvt5i93mxaq5a6u/article/details/78422216
注意力机制分类、原理、应用相关推荐
- 源码剖析transformer、self-attention(自注意力机制)原理!
首先给大家引入一个github博客,这份代码是我在看了4份transformer的源码后选出来的,这位作者的写法非常易懂,代码质量比较高.https://github.com/Separius/BER ...
- 注意力机制(Attention)原理详解
文章结构 1. 为什么需要Attention 2. Attention的基本原理 3.自注意力机制(Self-Attention) 4.总结 1. 为什么需要Attention 在了解Attentio ...
- 注意力机制工作原理详解
1.什么是注意力机制 注意力机制的有多种多样的实现形式,监管实现方式多样,但是每一种注意力机制的实现的核心都是类似的,就是注意力. 注意力机制的核心就是让网络关注它更需要关注的地方,注意力机制一般以权 ...
- 注意力机制的原理与应用
1.Attention机制的研究进展 Attention机制最早是应用于图像领域,九几年就提出来的思想.在2014年,Google Mind团队发表的<Recurrent Models of ...
- 注意力机制的原理及实现(pytorch)
本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 空间注意力机制(attention Unet) class Attentio ...
- 注意力机制 SE-Net 原理与 TensorFlow2.0 实现
文章目录
- 不用看数学公式!图解谷歌神经机器翻译核心部分:注意力机制
乾明 编译整理 量子位 出品 | 公众号 QbitAI 注意力(Attention)机制,是神经机器翻译模型中非常重要的一环,直接影响了翻译的准确度与否. 可以这么说,没有注意力机制,机器翻译的水平只 ...
- 注意力机制(Attention)
注意力机制分类 包括软注意力机制(Soft Attention)和硬注意力机制(Hard Attention). 硬注意力机制指随机选择某个信息作为需要注意的目标,是一个随机过程,不方便用梯度反向传播 ...
- 【回归预测】基于TPA-LSTM(时间注意力注意力机制长短期记忆神经网络)实现数据多输入单输出回归预测附matlab代码
1 内容介绍 随着当今时代科技不断地飞速发展,科技信息也在急剧增加,收集并挖掘分析这些来源多样化的科技信息,有助于推动科技的发展.而预测作为一种重要的数据研究方法,在各个行业各个领域都有着广泛的应用. ...
最新文章
- Jquery 将表单序列化为Json对象
- 数学推导+纯Python实现机器学习算法12:贝叶斯网络
- OUTER在mysql_MySQL不支持OUTER APPLY
- Silverlight游戏设计(Game Design):(四)从零开始搭建游戏主体框架
- 【杂谈】有三AI季划的最核心价值在哪,听听这些同学怎么说!
- excel分段排序_EXCEL基础篇第六章(日期和时间的使用方法)
- ACL 2020 | MobileBERT:一种与任务无关的模型压缩方法
- c语言作业做出金山打字功能,goldmountain.c
- Spring Boot解决跨域问题
- HashMap 详解
- php 上传apk包到cdn_网站cdn加速,cdn防御系统
- [CTSC2008]网络管理Network
- 如何确定线程池核心数的最佳值?
- c语言冒泡排序知识点,c语言冒泡排序
- The Perfect Match: 3D Point Cloud Matching with Smoothed Densities
- 计算机高手如何操作键盘,从小白到高手 游戏键盘驱动全面解析
- bluefish中文乱码问题
- 【Flutter小记10】apk 提交各大应用市场,出现armeabi与arm64 版本标识/版本号不一致无法上传审核的解决方案
- php imap 安装_PHP安装IMAP扩展
- mysql minus 语句用法_mysql如何用minus运算符?
热门文章
- vue-cli 4.0安装及项目搭建
- A-Level Biology真题练习一
- 使用scrapy爬取平凡的世界
- sounds speech_Speech Sounds 讲义
- 康希诺生物成功登陆科创板;腾讯2020年第二季度收入同比增长29% | 美通企业日报...
- sleep()和wait()方法有什么区别
- Java十六进制码的字符_【重点】java中 转16进制字符串 hex
- Sublime Text激活
- 东芝高管:SSD硬盘永远无法取代机械硬盘!你怎么看?
- 上班族也能赚大钱 改变你职场生涯的5个秘密