Attention
1.1认知神经学中的注意力
注意力一般分为两种:一种是自上而下的有意识的注意力,称为聚焦式
(Focus)注意力。聚焦式注意力是指有预定目的、依赖任务的、主动有意识地
聚焦于某一对象的注意力。
另一种是自下而上的无意识的注意力,称为基于显著性(Saliency-Based)的注意力。
基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关。
一个和注意力有关的例子是鸡尾酒会效应。当一个人在吵闹的鸡尾酒会上
和朋友聊天时,尽管周围噪音干扰很多,他还是可以听到朋友的谈话内容,而
忽略其他人的声音(聚焦式注意力)。同时,如果未注意到的背景声中有重要的
词(比如他的名字),他会马上注意到(显著性注意力)。
1.2 神经网络中的Attention
当用神经网络来处理大量的输入信息时,也可以借鉴人脑的注意力机制,只
选择一些关键的信息输入进行处理,来提高神经网络的效率。
在目前的神经网 注意力机制也可称为注意力络模型中,我们可以将最大汇聚
、门控(Gating)机制来近似 模型。看作是自下而上的基于显著性的注意力机制。
除此之外,自上而下的会聚式注意力也是一种有效的信息选择方式。
以阅读理解任务为例,给定一篇很长的文章,然后就此文章的内容进行提问。
提出的问题只和段落中的一两个句子相关,其余部分都是无关的。
为了减小神经网络的计算负担,只需要把相关的片段挑选出来让后续的神经网络来处理,
而不需要把所有文章内容都输入给神经网络。
用
X
=
[
x
1
,
⋅
⋅
⋅
,
x
N
]
X = [x_1, · · · , x_N ]
X=[x1,⋅⋅⋅,xN]表示N 个输入信息,为了节省计算资源,不需要将所
有的N 个输入信息都输入到神经网络进行计算,只需要从X 中选择一些和任务
相关的信息输入给神经网络。
注意力机制的计算可以分为两步:
一是在所有输入信息上计算注意力分布,
二是根据注意力分布来计算输入信息的加权平均。
注意力分布
给定一个和任务相关的查询向量 q,我们用注意力变量 z ∈ [ 1 , N ] z \in [1, N] z∈[1,N]
查询向量 q 可以是动态生成 来表示被选择信息的索引位置
,即z = i表示选择了第i个输入信息。为了方便计算,
采用一种“软性”的信息选择机制,首先计算在给定q 和X 下,选
择第i个输入信息的概率
α
i
α_i
αi,
α
i
=
p
(
z
=
i
∣
X
,
q
)
=
s
o
f
t
m
a
x
(
s
(
x
i
,
q
)
)
α_i = p(z = i|X,q)\\ =softmax(s(x_i,q))
αi=p(z=i∣X,q)=softmax(s(xi,q))
其中
α
i
α_i
αi 称为注意力分布(Attention Distribution),
s
(
x
i
,
q
)
s(x_i , q)
s(xi,q)为注意力打分函数,
可以使用以下几种方式来计算:
其中W, U, v为可学习的网络参数,d为输入信息的维度。
理论上,加性模型和点积模型的复杂度差不多,
但是点积模型在实现上可以更好地利用矩阵乘积,
从而计算效率更高。
但当输入信息的维度d比较高,点积模型的值通常有比较大方差,
从而导致softmax函数的梯度会比较小。
因此,缩放点积模型可以较好地 解决这个问题。
双线性模型可以看做是一种泛化的点积模型。
加权平均
注意力分布
α
i
α_i
αi 可以解释为在给定任务相关的查询q时,第i个信息受
关注的程度。采用一种“软性”的信息选择机制对输入信息进行汇总,
a
t
t
(
X
,
q
)
=
∑
i
=
1
N
α
i
X
i
att(X,q) = \sum_{i= 1}^Nα_iX_i
att(X,q)=i=1∑NαiXi
此称为软性注意力机制(Soft Attention Mechanism)。
下图给出软性注意力机制的示例。
1.3Attention变体
硬性注意力
上文提到的注意力是软性注意力,其选择的信息是所有输入信息在注
意力分布下的期望。
此外,还有一种注意力是只关注到某一个位置上的信息,叫
做硬性注意力(Hard Attention)。
硬性注意力有两种实现方式:
(1)一种是选取最高概率的输入信息,即
a
t
t
(
X
,
q
)
=
x
j
,
j
=
a
r
g
m
a
x
i
=
1
N
α
i
att(X,q) = x_j,\quad j = argmax_{i=1}^N \alpha_i
att(X,q)=xj,j=argmaxi=1Nαi
(2)另一种硬性注意力可以通过在注意力分布式上随机采样的方式实现。
键值对注意力
更一般地,我们可以用键值对(key-value pair)格式来表示输入信息,其
中“键”用来计算注意力分布
α
i
α_i
αi,“值”用来计算聚合信息。
用
(
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)]表示N 个输入信息,给定任务相关的
查询向量q 时,注意力函数为
a
t
t
(
(
K
,
V
)
,
q
)
=
∑
i
=
1
N
α
i
v
i
att((K,V),q) = \sum_{i=1}^N \alpha_iv_i
att((K,V),q)=i=1∑Nαivi
当K = V 时,键值对模式就等价于普通的注意力机制。
Attention的应用
注意力机制主要是用来做信息筛选,从输入信息中选取相关的信息。
注意力机制可以分为两步:
一是计算注意力分布 α,
二是根据 α 来计算输入信息的加权平均。
2.1指针网络
指针网络(Pointer Network)[Vinyals et al., 2015]是一种序列到序列模型,
输入是长度为n的向量序列 X = x 1 , ⋅ ⋅ ⋅ , x n X = x_1, · · · , x_n X=x1,⋅⋅⋅,xn,
输出是下标序列 c 1 : m = c 1 , c 2 , ⋅ ⋅ ⋅ , c m , c i ∈ [ 1 , n ] , ∀ i c_{1:m} = c_1, c_2, · · · , c_m,c_i ∈ [1, n], ∀i c1:m=c1,c2,⋅⋅⋅,cm,ci∈[1,n],∀i。
2.2自注意力模型
如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:
一种方法是增加网络的层数,通过一个深层网络来获取远距离的信息交互
另一种方法是使用全连接网络。
全连接网络是一种非常直接的建模远距离依赖的模型,
但是无法处理变长的输入序列。
不同的输入长度,其连接权重的大小也是不同的。
这时我们就可以利用注意力机制来“动态”地生成不同连接的权重,
这就是自注意力模型(Self-Attention Model)
假设输入序列为 X = [ x 1 , ⋅ ⋅ ⋅ , x n ] ∈ R d 1 × n X = [x_1, · · · , x_n] \in R^{d_1 \times n} X=[x1,⋅⋅⋅,xn]∈Rd1×n
输出序列为 H = [ h 1 , ⋅ ⋅ ⋅ , h N ] ∈ R d 2 × N H = [h_1, · · · , h_N ] \in R^{d_2 \times N} H=[h1,⋅⋅⋅,hN]∈Rd2×N
首先我们可以通过线性变换得到三组向量序列:
Q = W Q X ∈ R d 3 × N K = W K X ∈ R d 3 × N V = W V X ∈ R d 2 × N Q = W_QX \in R^{d_3 \times N}\\ K = W_KX \in R^{d_3 \times N}\\ V = W_VX \in R^{d_2 \times N} Q=WQX∈Rd3×NK=WKX∈Rd3×NV=WVX∈Rd2×N
其中Q, K, 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),q_i) \\ = \sum_{j =1} ^ N \alpha_{ij}v_j\\ = \sum_{j =1 }^Nsoftmax(s(k_j,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 \in [1, N]
i,j∈[1,N]为输出和输入向量序列的位置,连接权重
α
i
j
α_{ij }
αij由注意力机制动
态生成。
下图给出全连接模型和自注意力模型的对比,其中实线表示为可学习的权
重,虚线表示动态生成的权重。
由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列
参考 :https://nndl.github.io/