Attention机制的引入
通用近似定理:在人工神经网络的数学理论中, 通用近似定理(或称万能近似定理)指出人工神经网路近似任意函数的能力[1]。 通常此定理所指的神经网路为前馈神经网路,并且被近似的目标函数通常为输入输出都在欧几里得空间的连续函数。但亦有研究将此定理扩展至其他类型的神经网路,如卷积神经网路[2][3]、放射状基底函数网路[4]、或其他特殊神经网路[5]。
此定理意味着神经网路可以用来近似任意的复杂函数,并且可以达到任意近似精准度。但它并没有告诉我们如何选择神经网络参数(权重、神经元数量、神经层层数等等)来达到我们想近似的目标函数。
- 由于计算机能力的限制,神经网络模型没有办法变得更加复杂来处理更多的信息;
- bp机制的梯度消失问题;
引入类似于人脑的Attention机制可以提高处理神经网络处理信息的能力。
什么是Attention机制
当我们在看一个场景的时候,我们看到的一定是某个场景的某一个地方,当我们的视觉在移动时,注意力随着目光的移动也在移动。也就是说,当人在注意到某个场景时,该场景内每一空间上的注意力分布是不一致的。因此,可以借鉴人脑的注意力机制,只选择一些关键的信息输入进行处理,来提高神经网络的效率。按照认知神经学中的注意力,可以总体上分为两类:
- 聚焦式(focus)注意力:自上而下的有意识的注意力,主动注意——是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;
- 显著性(saliency-based)注意力:自下而上的有意识的注意力,被动注意——基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关;可以将max-pooling和门控(gating)机制来近似地看作是自下而上的基于显著性的注意力机制。
在人工神经网络中,注意力机制一般就特指聚焦式注意力。
Attention机制的流程
Attention机制的实质其实就是一个寻址(addressing)的过程,如上图所示:给定一个和任务相关的查询Query向量 q,通过计算与Key的注意力分布并附加在Value上,从而计算Attention Value,这个过程实际上是Attention机制缓解神经网络模型复杂度的体现:不需要将所有的N个输入信息都输入到神经网络进行计算,只需要从X中选择一些和任务相关的信息输入给神经网络。
主要分为三步:
- 信息输入;
- 注意力分布计算;
- 根据注意力分布来计算输入信息的加权平均;
信号输入
信号输入用 [ x 1 、 x 2 、 x 3 、 . . . 、 x n ] [x_1、x_2、x_3、...、x_n] [x1、x2、x3、...、xn]来表示输入的信息。
注意力分布 α \alpha α 计算
令
α
i
=
s
o
f
t
m
a
x
(
s
(
k
e
y
i
,
q
)
)
=
s
o
f
t
m
a
x
(
s
(
X
i
,
q
)
)
\alpha_i = softmax(s(key_i,q))=softmax(s(X_i,q))
αi=softmax(s(keyi,q))=softmax(s(Xi,q)),则可以给出注意力分布
α
\alpha
α:
α
i
=
softmax
(
s
(
k
e
y
i
,
q
)
)
=
softmax
(
s
(
X
i
,
q
)
)
=
exp
(
s
(
x
i
,
q
)
)
∑
j
=
1
N
exp
(
s
(
x
j
,
q
)
)
\alpha_{i}=\operatorname{softmax}\left(s\left(k e y_{i}, q\right)\right)=\operatorname{softmax}\left(s\left(X_{i}, q\right)\right)=\frac{\exp \left(s\left(\mathbf{x}_{i}, \mathbf{q}\right)\right)}{\sum_{j=1}^{N} \exp \left(s\left(\mathbf{x}_{j}, \mathbf{q}\right)\right)}
αi=softmax(s(keyi,q))=softmax(s(Xi,q))=∑j=1Nexp(s(xj,q))exp(s(xi,q))
我们将
α
i
\alpha_i
αi称之为注意力分布(概率分布),
s
(
X
i
,
q
)
s(X_i,q)
s(Xi,q) 为注意力打分机制,有几种打分机制:
其中W、U和v是可学习的网络参数,d是输入信息的维度。
信息加权平均
注意力分布
α
i
\alpha_i
αi表示在上下文查询
q
q
q时,第
i
i
i个信息受关注的程度,采用一种“软性”的信息选择机制对输入信息
X
X
X进行编码为:
att
(
q
,
X
)
=
∑
i
=
1
N
α
i
X
i
\operatorname{att}(q, X)=\sum_{i=1}^{N} \alpha_{i} X_{i}
att(q,X)=i=1∑NαiXi
这种编码方式为软性注意力机制(soft Attention),软性注意力机制有两种:普通模式(Key=Value=X)和键值对模式(Key!=Value)。
普通模式
即简单的加权平均
图源: 深度学习之注意力机制(Attention Mechanism)和Seq2Seq 键值对注意力模式
更一般的,可以用键值对(key-value pair)来表示输入信息,那么 N N N个输入信息就可以表示为 ( K , V ) = [ ( k 1 , v 1 ) , ( k 2 , v 2 ) , . . . , ( k N , v N ) ] (K, V)= [(k_1,v_1),(k_2,v_2),...,(k_N,v_N)] (K,V)=[(k1,v1),(k2,v2),...,(kN,vN)],其中“键”用来计算注意分布 σ i σ_i σi,“值”用来计算聚合信息。
可以将注意力机制当作一种软寻址,输入的信息 X X X可以看作存储器中存储的内容,元素的内容由 K e y Key Key(键)和 V a l u e Value Value(值)组成,当前有 K e y = Q u a r y Key=Quary Key=Quary的查询,目标是从信息中取出对应的 V a l u e Value Value值,即 A t t a t i o n Attation Attation值。
而在软寻址中,并非需要硬性满足 K e y = Q u e r y Key=Query Key=Query的条件来取出存储信息,而是通过计算 Q u e r y Query Query与存储器内元素的地址 K e y Key Key的相似度来决定,从对应的元素 V a l u e Value Value中取出多少内容。每个地址 K e y Key Key对应的 V a l u e Value Value值都会被抽取内容出来,然后求和,这就相当于由 Q u e r y Query Query与 K e y Key Key的相似性来计算每个 V a l u e Value Value值的权重,然后对 V a l u e Value Value值进行加权求和。加权求和得到最终的 V a l u e Value Value值,也就是 A t t e n t i o n Attention Attention值。
- **根据 Q u a r y Quary Quary和 K e y Key Key**计算二者的相似度,得到注意力得分 s i s_i si
s i = F ( Q , k i ) s_{i}=F\left(Q, k_{i}\right) si=F(Q,ki)
- 用 s o f t m a x softmax softmax函数对注意力得分进行数值转换。一方面可以进行归一化,得到所有权重系数之和为1的概率分布,另一方面可以用 s o f t m a x softmax softmax函数的特性突出重要元素的权重;
α i = softmax ( s i ) = exp ( s i ) ∑ j = 1 N exp ( s j ) \alpha_{i}=\operatorname{softmax}\left(s_{i}\right)=\frac{\exp \left(s_{i}\right)}{\sum_{j=1}^{N} \exp \left(s_{j}\right)} αi=softmax(si)=∑j=1Nexp(sj)exp(si)
- 根据权重系数对Value进行加权求和
A t t e n t i o n ( ( K , V ) , Q ) = ∑ i = 1 N α i v i Attention ((K, V), Q)=\sum_{i=1}^{N} \alpha_{i} v_{i} Attention((K,V),Q)=i=1∑Nαivi
![]()
上述过程可化简为:
att ( ( K , V ) , q ) = ∑ i = 1 N α i v i = ∑ i = 1 N exp ( s ( k i , q ) ) ∑ j exp ( s ( k j , q ) ) v i \begin{aligned} \operatorname{att}((K, V), \mathbf{q}) &=\sum_{i=1}^{N} \alpha_{i} \mathbf{v}_{i} \\ &=\sum_{i=1}^{N} \frac{\exp \left(s\left(\mathbf{k}_{i}, \mathbf{q}\right)\right)}{\sum_{j} \exp \left(s\left(\mathbf{k}_{j}, \mathbf{q}\right)\right)} \mathbf{v}_{i} \end{aligned} att((K,V),q)=i=1∑Nαivi=i=1∑N∑jexp(s(kj,q))exp(s(ki,q))vi
Attention机制的分类
-
硬性注意力
之前提到的注意力是软性注意力,其选择的信息是所有输入信息在注意力分布下的期望。还有一种注意力是只关注到某一个位置上的信息,叫做硬性注意力(hard attention)。硬性注意力有两种实现方式:(1)一种是选取最高概率的输入信息;(2)另一种硬性注意力可以通过在注意力分布式上随机采样的方式实现。硬性注意力模型的缺点:
硬性注意力的一个缺点是基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用在反向传播算法进行训练。为了使用反向传播算法,一般使用软性注意力来代替硬性注意力。硬性注意力需要通过强化学习来进行训练。——《神经网络与深度学习》
-
键值对注意力
见上文
-
多头注意力
多头注意力(multi-head attention)是利用多个查询 Q = [ q 1 , ⋅ ⋅ ⋅ , q M ] Q = [q_1, · · · , q_M] Q=[q1,⋅⋅⋅,qM],来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分,然后再进行拼接:
att ( ( K , V ) , Q ) = att ( ( K , V ) , q 1 ) ⊕ ⋯ ⊕ att ( ( K , V ) , q M ) \operatorname{att}((K, V), Q)=\operatorname{att}\left((K, V), \mathbf{q}_{1}\right) \oplus \cdots \oplus \operatorname{att}\left((K, V), \mathbf{q}_{M}\right) att((K,V),Q)=att((K,V),q1)⊕⋯⊕att((K,V),qM)
自注意力模型
在软注意力Encoder-Decoder模型中,更具体地来说,在英-中机器翻译模型中,输入序列和输出序列的内容甚至长度都是不一样的,注意力机制是发生在编码器和解码器之间,也可以说是发生在输入句子和生成句子之间。而自注意力模型中的自注意力机制则发生在输入序列内部,或者输出序列内部,可以抽取到同一个句子内间隔较远的单词之间的联系,比如句法特征(短语结构)。
如果是单纯的RNN网络,对于输入序列是按步骤顺序计算隐状态和输出的,那么对于距离比较远又相互依赖的特征,捕获二者之间联系的可能性比较小,而在序列内部引入自注意力机制后,可以将句子中任意两个单词通过一个计算直接联系起来,就更容易捕获相互依赖的特征。
公式定义
自注意力模型是在同一层网络的输入和输出(不是模型最终的输出)之间,利用注意力机制“动态”地生成不同连接的权重,来得到该层网络输出的模型。
全连接层虽然也能做到建立序列内部长距离的依赖关系,但是由于全连接网络的连接ei边数固定不变,所以无法处理变长序列。自注意力模型可以动态的生成不同的链接权重,生成多少个权重,权重的大小是多少都是可变的,当输入更长的序列时,只需要生成更多的连接边即可。
假设一个神经层的输入序列为
X
=
[
x
1
,
x
2
,
.
.
.
,
x
N
]
X=[x_1,x_2,...,x_N]
X=[x1,x2,...,xN],输出序列为同等长度的
H
=
[
h
1
,
h
2
,
.
.
.
,
h
N
]
H=[h_1, h_2, ..., h_N]
H=[h1,h2,...,hN],首先通过线性变换得到三组向量序列:
Q
=
W
Q
X
∈
R
d
3
×
N
Q=W_{Q} X \in \mathbb{R}^{d_{3} \times N}
Q=WQX∈Rd3×N
K
=
W
K
X
∈
R
d
3
×
N
K=W_{K} X \in \mathbb{R}^{d_{3} \times N}
K=WKX∈Rd3×N
V
=
W
V
X
∈
R
d
2
×
N
V=W_{V} X \in \mathbb{R}^{d_{2} \times N}
V=WVX∈Rd2×N
其中
Q
,
K
,
V
Q, K, V
Q,K,V 分别为查询向量序列,键向量序列和值向量序列,
W
Q
,
W
K
,
W
V
W_Q, W_K, W_V
WQ,WK,WV分别是可以学习的参数矩阵。
于是输出向量
h
i
h_i
hi这样计算:
h
i
=
att
(
(
K
,
V
)
,
q
i
)
=
∑
j
=
1
N
α
i
j
v
j
=
∑
j
=
1
N
softmax
(
s
(
k
j
,
q
i
)
)
v
j
\begin{aligned} \mathbf{h}_{i} &=\operatorname{att}\left((K, V), \mathbf{q}_{i}\right) \\ &=\sum_{j=1}^{N} \alpha_{i j} \mathbf{v}_{j} \\ &=\sum_{j=1}^{N} \operatorname{softmax}\left(s\left(\mathbf{k}_{j}, \mathbf{q}_{i}\right)\right) \mathbf{v}_{j} \end{aligned}
hi=att((K,V),qi)=j=1∑Nαijvj=j=1∑Nsoftmax(s(kj,qi))vj
其中$ i, j ∈ [1, N]$为输出和输入向量序列的位置,连接权重
α
i
j
α_{ij}
αij由注意力机制动态生成。