一、背景
最早图像领域,后面应用到NLP领域
人类视觉注意力机制,扫描全局图像,获得重点关注区域,投入更多经历,抑制其它无用信息,提高视觉信息处理的效率与准确性。
在深度神经网络的结构设计中,attention所要分配的资源基本上就是权重了。
视觉注意力分为几种,核心思想是基于原有的数据找到其之间的关联性,然后突出其某些重要特征,有通道注意力,像素注意力,多阶注意力等,也有把NLP中的自注意力引入。
二、注意力定义
2.1 序列编码
第一个思路是RNN层递归
RNN结构本身比较简单,也很适合序列建模,但RNN的明显缺点之一就是无法并行,因此速度较慢,这是递归的天然缺陷。另外我个人觉得RNN无法很好地学习到全局的结构信息,因为它本质是一个马尔科夫决策过程。
第二个思路是CNN层,其实CNN的方案也是很自然的,窗口式遍历。CNN方便并行,而且容易捕捉到一些全局的结构信息。
第三个即为self-attention,它的意思是直接将xt与原来的每个词进行比较,最后算出yt。一步到位获取了全局信息
2.2 定义
它的基础是Scaled-Dot Attention,定义如下:
其中Q∈ℝn×dk,K∈ℝm×dk,V∈ℝm×dv,softmax则是在m的那一维进行归一化。而自注意力,则是对于同一个X∈ℝn×d,通过不同的投影矩阵Wq,Wk,Wv∈ℝd×d′得到Q=XWq,K=XWk,V=XWv,然后再做Attention,即
至于Multi-Head Attention,则不过是Attention运算在不同的参数下重复多次然后将多个输出拼接起来,属于比较朴素的增强。
本质上来看,自注意力就是通过一个n×n的矩阵A和d×d′的矩阵Wv,将原本是n×d的矩阵X,变成了n×d′的矩阵AXWv。其中矩阵A是动态生成的,即