1 注意力的简介
注意力机制也称为:“神经网络的注意力”,或者更简单的:“注意力”。
人脑在工作时,其实是由一定的注意力的,比如我们在浏览器上搜索时,大部分的注意力都集中在搜索结果的左上角,这说明大脑在处理信号的时候是有一定权重划分的,而注意力机制的提出正是模仿了大脑的这种特性。
神经网络的注意力就是说,神经网络具有将注意力集中到一部分输入(或特征)的能力。
(1)为什么引入注意力机制呢?
- 计算能力的限制:目前计算能力依然是限制神经网络发展的瓶颈,当输入的信息过多时,模型也会变得更复杂,通过引入注意力,可以减少处理的信息量,从而减小需要的计算资源。
- 优化算法的限制:虽然局部连接、权重共享以及 pooling 等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长序列输入,信息“记忆”能力并不高。
(2)注意力机制的分类
注意力机制一般分为两种:
- 聚焦式(Focus)注意力:是一种自上而下的有意识的注意力,“主动注意” 是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;
- 显著性(Saliency-Based)注意力:是一种自下而上的无意识的注意力,“被动注意” 是基于显著性的注意力,是由外界刺激驱动的注意,不需要主动干预,也和任务无关;池化(Max Pooling) 和 门控(Gating) 可以近似地看作是自下而上的基于显著性的注意力机制。
2 注意力机制的流程
注意力机制一般可以分为三步:一是信息输入;二是计算注意力分布;三是根据计算的注意力分布来对输入信息进行处理。
令:
- x ∈ R d x\in R^d x∈Rd 为输入向量
- X = [ x 1 , x 2 , ⋯ , x N ] X=[x_1, x_2, \cdots, x_N] X=[x1,x2,⋯,xN] 为 N N N 个输入样本
- q ∈ R k q\in R^k q∈Rk 为查询向量或特征向量
- z ∈ [ 1 , N ] z\in[1,N] z∈[1,N] 为注意力变量,表示被选择信息的位置,比如 z = i z=i z=i 表示选择了第 i i i 个输入向量
3 不同形式的注意力
3.1 软性注意力(Soft Attention)
软性注意力(Soft Attention)是指在选择信息的时候,不是从 N N N 个信息中只选择1个,而是计算 N N N 个输入信息的加权平均,再输入到神经网络中计算。
(1)计算注意力分布 α i \alpha_i αi
在给定 q q q 和 X X X 下,选择第 i i i 个输入向量的概率 α i \alpha_i αi 为:
α 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 ( s ( x i , q ) ) \begin{aligned} \alpha_i &= p(z=i\| X,q)\\ & = softmax(s(x_i,q)) \\ & = \frac{exp(s(x_i,q))}{\sum_{j=1}^N exp(s(x_i,q))} \end{aligned} αi=p(z=i∥X,q)=softmax(s(xi,q))=∑j=1Nexp(s(xi,q))exp(s(xi,q))
其中:
- α i \alpha_i αi 称为是注意力分布
- s ( x i , q ) s(x_i,q) s(xi,q) 是注意力打分函数
常见的注意力打分函数 s ( x i , q ) s(x_i,q) s(xi,q) 包括:
- 加性模型: s ( x i , q ) = v T tanh ( W x i + U q ) s(x_i,q)=v^T \tanh (Wx_i+Uq) s(xi,q)=vTtanh(Wxi+Uq), W , U W,U W,U 为可学习的网络参数
- 点积模型: s ( x i , q ) = x i T q s(x_i,q)=x_i^Tq s(xi,q)=xiTq
- 缩放点模型: s ( x i , q ) = x i T q d s(x_i,q)=\frac{x_i^Tq}{\sqrt{d}} s(xi,q)=dxiTq, d d d 为输入向量的维度
- 双线性模型: s ( x i , q ) = x i T W q s(x_i,q)=x_i^TWq s(xi,q)=xiTWq, W W W 为可学习的网络参数
(2)加权平均
注意力分布 α i \alpha_i αi 可以解释为给定查询 q q q 时,第 i i i 个输入向量关注的程度,软性注意力选择机制是对它们进行汇总:
a t t ( X , q ) = ∑ i = 1 N α i x i = E z ∼ p ( z ∣ X , p ) [ x ] \begin{aligned} att(X,q) &= \sum_{i=1}^N \alpha_ix_i \\ & = E_{z\sim p(z|X,p)}[x] \end{aligned} att(X,q)=i=1∑Nαixi=Ez∼p(z∣X,p)[x]
3.2 硬性注意力(Hard Attention)
硬性注意力(Hard Attention)是指只选择输入序列某一个位置上的信息
硬性注意力有两种实现方式:
(1)选取最高概率的输入信息
a t t ( X , q ) = x j , w h e r e j = a r g max i = 1 N α i att(X,q) = x_j, \ where \ \ j =arg \max_{i=1}^N \alpha_i att(X,q)=xj, where j=argi=1maxNαi
(2)另一种硬性注意力是通过在注意力分布式上随机采样的方式实现
硬性注意力的缺点:
硬性注意力基于最大采样或者随机采样的方式选择信息,导致最终的损失函数与注意力分布之间的函数关系不可导,因此无法在反向传播时进行训练。
3.3 键值对注意力
比如我们使用键值对 key-value pair 的格式来表示输入信息,其中键用来计算注意力分布 α i \alpha_i αi,值用来计算聚合信息,比如 Self Attention。
用 ( K , V ) = [ ( k 1 , v 1 ) , ⋯ , ( k N , v N ) ] (K,V)=[(k_1,v_1),\cdots,(k_N,v_N)] (K,V)=[(k1,v1),⋯,(kN,vN)] 来表示 N N N 组输入信息,给定任务相关的查询向量 q q q 时,注意力函数为:
a t t ( X , q ) = ∑ i = 1 N α i x i = ∑ i = 1 N e x p ( s ( k i , q ) ) ∑ j e x p ( s ( k i , q ) ) v i \begin{aligned} att(X,q) &= \sum_{i=1}^N \alpha_ix_i \\ & = \sum_{i=1}^N \frac{exp(s(k_i,q))}{\sum_j exp(s(k_i,q))}v_i \end{aligned} att(X,q)=i=1∑Nαixi=i=1∑N∑jexp(s(ki,q))exp(s(ki,q))vi
显然,当 K = V K=V K=V 时,键值对就等价于普通的注意力机制
3.4 多头注意力(Multi-Head Attention)
多头注意力是利用多个查询 Q = [ q 1 , q 2 , ⋯ , q M ] Q=[q_1,q_2,\cdots,q_M] Q=[q1,q2,⋯,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),q_1) \bigoplus \cdots \bigoplus att((K,V),q_M) att((K,V),Q)=att((K,V),q1)⨁⋯⨁att((K,V),qM)
其中, ⨁ \bigoplus ⨁ 表示向量的拼接。
【参考】
- https://zhuanlan.zhihu.com/p/53682800
- http://akosiorek.github.io/ml/2017/10/14/visual-attention.html