参考资料:神经网络与深度学习
内容概览(Nano Banana Pro):

注意力
聚焦式注意力:自上而下的有意识的注意力,有预定目的、依赖任务的,主动有意识地聚焦于某一对象的注意力
基于显著性的注意力:由外界刺激驱动的的注意,不需主动干预,与任务无关
鸡尾酒会效应:
'''
当一个人在吵闹的鸡尾酒会上和朋友聊天时,尽管周围噪音干扰很多,他还是可以听到朋友的谈话内容,而忽略其他人的声音(聚焦式注意力)。
同时,如果未注意到的背景声中有重要的词(比如他的名字),他会马上注意到(显著性注意力)
'''
ANN中的注意力机制
当用神经网络来处理大量的输入信息时,也可以借鉴人脑的注意力机制,只选择一些关键的信息输入进行处理,来提高神经网络的效率 (如max pooling, gating)
用 X = [ x 1 , ⋯ , x N ] X=\left[\boldsymbol{x}_1, \cdots, \boldsymbol{x}_N\right] X=[x1,⋯,xN] 表示 N N N 组输入信息,其中每个向量 x i , i ∈ [ 1 , N ] \boldsymbol{x}_i, i \in[1, N] xi,i∈[1,N] 都表示一组输入信息。为了节省计算资源,不需要将所有信息都输入到神经网络,只需要从 X X X 中选择一些和任务相关的信息。
注意力机制的计算可以分为两步:一是在所有输入信息上计算注意力分布,二是根据注意力分布来计算输入信息的加权平均。
-
注意力分布:为了从 N N N 个输入向量 [ x 1 , ⋯ , x N ] \left[\boldsymbol{x}_1, \cdots, \boldsymbol{x}_N\right] [x1,⋯,xN] 中选择出和某个特定任务相关的信息,通过引入一个和任务相关的表示 q \boldsymbol{q} q,称为查询向量(Query Vector, q \boldsymbol{q} q),并通过一个打分函数 s ( x i , q ) s(\boldsymbol{x}_i,\boldsymbol{q}) s(xi,q)来计算每个输入向量 x i \boldsymbol{x}_i xi和查询向量 q \boldsymbol{q} q之间的相关性
给定查询向量 q \boldsymbol{q} q,用注意力变量 z ∈ [ 1 , N ] z \in[1, N] z∈[1,N] 来表示被选择信息的索引位置,即 z = i z=i z=i 表示选择了第 i i i 个输入向量。则可以得到,在给定 q \boldsymbol{q} q 和 X = [ x 1 , ⋯ , x N ] X=\left[\boldsymbol{x}_1, \cdots, \boldsymbol{x}_N\right] X=[x1,⋯,xN] 下,选择第 i i i 个输入向量 x i \boldsymbol{x}_i xi的概率 α i \alpha_i αi:
α i = p ( z = i ∣ X , q ) = softmax ( s ( x i , q ) ) = exp ( s ( x i , q ) ) ∑ j = 1 N exp ( s ( x j , q ) ) , \begin{aligned} \alpha_i & =p(z=i \mid X, \boldsymbol{q}) \\ & {\color{cyan}=\operatorname{softmax}\left(s\left(\boldsymbol{x}_i, \boldsymbol{q}\right)\right)} \\ & {\color{cyan}=\frac{\exp \left(s\left(\boldsymbol{x}_i, \boldsymbol{q}\right)\right)}{\sum_{j=1}^N \exp \left(s\left(\boldsymbol{x}_j, \boldsymbol{q}\right)\right)} }, \end{aligned} αi=p(z=i∣X,q)=softmax(s(xi,q))=∑j=1Nexp(s(xj,q))exp(s(xi,q)),
其中, α i = p ( z = i ∣ X , q ) \alpha_i=p(z=i \mid X, \boldsymbol{q}) αi=p(z=i∣X,q) 为注意力分布(Attention Distribution),描述了第 i i i个输入向量受关注的程度。
注意力打分函数 s ( x i , q ) s\left(\boldsymbol{x}_i, \boldsymbol{q}\right) s(xi,q) 可以使用以下几种方式来计算:–加性模型
s ( x i , q ) = v T tanh ( W x i + U q ) , s\left(\boldsymbol{x}_i, \boldsymbol{q}\right)=\boldsymbol{v}^{\mathrm{T}} \tanh \left(W \boldsymbol{x}_i+U \boldsymbol{q}\right), s(xi,q)=vTtanh(Wxi+Uq),
–点积模型
s ( x i , q ) = x i T q , s\left(\boldsymbol{x}_i, \boldsymbol{q}\right)=\boldsymbol{x}_i^{\mathrm{T}} \boldsymbol{q}, s(xi,q)=xiTq,
–缩放点积模型
s ( x i , q ) = x i T q d , s\left(\boldsymbol{x}_i, \boldsymbol{q}\right)=\frac{\boldsymbol{x}_i^{\mathrm{T}} \boldsymbol{q}}{\sqrt{d}}, s(xi,q)=dxiTq,
–双线性模型
s ( x i , q ) = x i T W q , s\left(\boldsymbol{x}_i, \boldsymbol{q}\right)=\boldsymbol{x}_i^{\mathrm{T}} W \boldsymbol{q}, s(xi,q)=xiTWq, -
根据注意力分布计算输入信息的加权平均:
软性注意力机制: att ( X , q ) = ∑ i = 1 N α i x i = E z ∼ p ( z ∣ X , q ) [ x z ] . \begin{aligned} \text{软性注意力机制:}\operatorname{att}(X, \boldsymbol{q}) & =\sum_{i=1}^N \alpha_i \boldsymbol{x}_i=\mathbb{E}_{z \sim p(z \mid X, \boldsymbol{q})}\left[\boldsymbol{x}_z\right] . \end{aligned} 软性注意力机制:att(X,q)=i=1∑Nαixi=Ez∼p(z∣X,q)[xz].

注意力机制变体
硬性注意力
只关注某一个输入向量,如
att
(
X
,
q
)
=
x
j
,
j
=
arg
max
N
i
=
1
α
i
\operatorname{att}(X, \boldsymbol{q})=\boldsymbol{x}_j , \quad j=\underset{i=1}{\arg \stackrel{N}{\max }} \alpha_i
att(X,q)=xj,j=i=1argmaxNαi
其主要缺点是基于最大采样或随机采样的方式来选择信息,使得最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用反向传播算法进行训练
键值对注意力
用键值对(key-value pair,
k
\boldsymbol{k}
k,
v
\boldsymbol{v}
v)格式来表示输入信息,其中 "键
k
\boldsymbol{k}
k"用来计算注意力分布
α
i
\alpha_i
αi ,"值
v
\boldsymbol{v}
v"用来计算聚合信息。
用
(
K
,
V
)
=
[
(
k
1
,
v
1
)
,
⋯
,
(
k
N
,
v
N
)
]
(K, V)=\left[\left(\boldsymbol{k}_1, \boldsymbol{v}_1\right), \cdots,\left(\boldsymbol{k}_N, \boldsymbol{v}_N\right)\right]
(K,V)=[(k1,v1),⋯,(kN,vN)] 表示
N
N
N 组输入信息(类比于
X
=
[
x
1
,
⋯
,
x
N
]
X=\left[\boldsymbol{x}_1, \cdots, \boldsymbol{x}_N\right]
X=[x1,⋯,xN]),给定任务相关的查询向量
q
\boldsymbol{q}
q 时,注意力函数为
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), \boldsymbol{q}) & =\sum_{i=1}^N \alpha_i \boldsymbol{v}_i \\ & =\sum_{i=1}^N \frac{\exp \left(s\left(\boldsymbol{k}_i, \boldsymbol{q}\right)\right)}{\sum_j \exp \left(s\left(\boldsymbol{k}_j, \boldsymbol{q}\right)\right)} \boldsymbol{v}_i \end{aligned}
att((K,V),q)=i=1∑Nαivi=i=1∑N∑jexp(s(kj,q))exp(s(ki,q))vi
其中
s
(
k
i
,
q
)
s\left(\boldsymbol{k}_i, \boldsymbol{q}\right)
s(ki,q) 为打分函数,键值对注意力将前述的输入
X
X
X一般化为K&V;当
K
=
V
K=V
K=V时,其退化为普通注意力机制。

多头注意力
在键值对注意力的基础上,多头注意力(Multi-Head Attention)是利用多个查询
Q
=
[
q
1
,
⋯
,
q
M
]
Q=\left[\boldsymbol{q}_1, \cdots, \boldsymbol{q}_M\right]
Q=[q1,⋯,qM] ,来平行地计算从输入信息中选取多组信息。每个注意力关注输入信息的不同部分,将得到的各个结果
a
i
\boldsymbol{a}_i
ai进行向量拼接
att
(
(
K
,
V
)
,
Q
)
=
att
(
(
K
,
V
)
,
q
1
)
⊕
⋯
⊕
att
(
(
K
,
V
)
,
q
M
)
,
\operatorname{att}((K, V), Q)=\operatorname{att}\left((K, V), \boldsymbol{q}_1\right) \oplus \cdots \oplus \operatorname{att}\left((K, V), \boldsymbol{q}_M\right),
att((K,V),Q)=att((K,V),q1)⊕⋯⊕att((K,V),qM),
注意力机制应用
当使用神经网络来处理一个变长的向量序列时,通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列;(但往往只能建模输入信息的局部依赖关系)。
为建立变长输入向量序列的长距离依赖关系,
自注意力模型
假设输入序列为
X
=
[
x
1
,
⋯
,
x
N
]
∈
R
D
x
×
N
\boldsymbol{X}=\left[\boldsymbol{x}_1, \cdots, \boldsymbol{x}_N\right] \in \mathbb{R}^{D_x \times N}
X=[x1,⋯,xN]∈RDx×N ,输出序列为
H
=
[
h
1
,
⋯
,
h
N
]
∈
R
D
v
×
N
\boldsymbol{H}=\left[\boldsymbol{h}_1, \cdots, \boldsymbol{h}_N\right] \in \mathbb{R}^{D_v \times N}
H=[h1,⋯,hN]∈RDv×N ,自注意力模型的具体计算过程如下:
(1)对于每个输入
x
i
\boldsymbol{x}_i
xi ,我们首先将其线性映射到三个不同的空间,得到查询向量
q
i
∈
R
D
k
\boldsymbol{q}_i \in \mathbb{R}^{D_k}
qi∈RDk 、键向量
k
i
∈
R
D
k
\boldsymbol{k}_i \in \mathbb{R}^{D_k}
ki∈RDk 和值向量
v
i
∈
R
D
v
\boldsymbol{v}_i \in \mathbb{R}^{D_v}
vi∈RDv 。
对于整个输入序列 X \boldsymbol{X} X ,线性映射过程可以简写为
Q
=
W
q
X
∈
R
D
k
×
N
,
K
=
W
k
X
∈
R
D
k
×
N
,
V
=
W
v
X
∈
R
D
v
×
N
,
\begin{aligned} \boldsymbol{Q} & =\boldsymbol{W}_q \boldsymbol{X} \in \mathbb{R}^{D_k \times N}, \\ \boldsymbol{K} & =\boldsymbol{W}_k \boldsymbol{X} \in \mathbb{R}^{D_k \times N}, \\ \boldsymbol{V} & =\boldsymbol{W}_v \boldsymbol{X} \in \mathbb{R}^{D_v \times N}, \end{aligned}
QKV=WqX∈RDk×N,=WkX∈RDk×N,=WvX∈RDv×N,
其中
W
q
∈
R
D
k
×
D
x
,
W
k
∈
R
D
k
×
D
x
,
W
v
∈
R
D
v
×
D
x
\boldsymbol{W}_q \in \mathbb{R}^{D_k \times D_x}, \boldsymbol{W}_k \in \mathbb{R}^{D_k \times D_x}, \boldsymbol{W}_v \in \mathbb{R}^{D_v \times D_x}
Wq∈RDk×Dx,Wk∈RDk×Dx,Wv∈RDv×Dx 分别为线性映射的参数矩阵,
Q
=
[
q
1
,
⋯
,
q
N
]
,
K
=
[
k
1
,
⋯
,
k
N
]
,
V
=
[
v
1
,
⋯
,
v
N
]
\boldsymbol{Q}=\left[\boldsymbol{q}_1, \cdots, \boldsymbol{q}_N\right], \boldsymbol{K}=\left[\boldsymbol{k}_1, \cdots, \boldsymbol{k}_N\right], \boldsymbol{V}=\left[\boldsymbol{v}_1, \cdots, \boldsymbol{v}_N\right]
Q=[q1,⋯,qN],K=[k1,⋯,kN],V=[v1,⋯,vN] 分别是由查询向量、键向量和值向量构成的矩阵.
对于每一个查询向量
q
n
∈
Q
\boldsymbol{q}_n \in \boldsymbol{Q}
qn∈Q ,基于前述键值对注意力机制计算方式(
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
\operatorname{att}((K, V), \boldsymbol{q}) =\sum_{i=1}^N \alpha_i \boldsymbol{v}_i =\sum_{i=1}^N \frac{\exp \left(s\left(\boldsymbol{k}_i, \boldsymbol{q}\right)\right)}{\sum_j \exp \left(s\left(\boldsymbol{k}_j, \boldsymbol{q}\right)\right)} \boldsymbol{v}_i
att((K,V),q)=∑i=1Nαivi=∑i=1N∑jexp(s(kj,q))exp(s(ki,q))vi),可以得到输出向量
h
n
\boldsymbol{h}_n
hn:
h
n
=
att
(
(
K
,
V
)
,
q
n
)
=
∑
j
=
1
N
α
n
j
v
j
=
∑
j
=
1
N
softmax
(
s
(
k
j
,
q
n
)
)
v
j
,
\begin{aligned} &\boldsymbol{h}_n=\operatorname{att}\left((\boldsymbol{K}, \boldsymbol{V}), \boldsymbol{q}_n\right)\\ & =\sum_{j=1}^N \alpha_{n j} \boldsymbol{v}_j \\ & =\sum_{j=1}^N \operatorname{softmax}\left(s\left(\boldsymbol{k}_j, \boldsymbol{q}_n\right)\right) \boldsymbol{v}_j, \end{aligned}
hn=att((K,V),qn)=j=1∑Nαnjvj=j=1∑Nsoftmax(s(kj,qn))vj,
对于序列里每个位置
n
n
n ,都让它了解"整条序列里所有位置
j
j
j"的内容
x
j
x_j
xj ,算一个权重
α
n
j
\alpha_{n j}
αnj ,然后把这些
x
j
x_j
xj 的值向量加权求和,得到输出
h
n
h_n
hn 。
其中
n
,
j
∈
[
1
,
N
]
n, j \in[1, N]
n,j∈[1,N] 为输出和输入向量序列的位置,
α
n
j
\alpha_{n j}
αnj 表示第
n
n
n 个输出关注到第
j
j
j个输入的权重。
注意到,
k
j
∈
R
D
k
×
1
k_j \in \mathbb{R}^{D_k \times 1}
kj∈RDk×1,
q
n
∈
R
D
k
×
1
q_n \in \mathbb{R}^{D_k \times 1}
qn∈RDk×1,
v
j
∈
R
D
v
×
1
v_j \in \mathbb{R}^{D_v \times 1}
vj∈RDv×1,
h
n
∈
R
D
v
×
1
h_n \in \mathbb{R}^{D_v \times 1}
hn∈RDv×1,若使用点积(
k
j
T
q
n
∈
R
1
×
1
k_j^Tq_n \in \mathbb{R}^{1 \times 1}
kjTqn∈R1×1)
如果使用缩放点积(
s
(
k
i
,
q
)
=
k
i
T
q
d
s\left(\boldsymbol{k}_i, \boldsymbol{q}\right)=\frac{\boldsymbol{k}_i^{\mathrm{T}} \boldsymbol{q}}{\sqrt{d}}
s(ki,q)=dkiTq)来作为注意力打分函数,输出向量序列可以简写为
H
=
V
softmax
(
K
⊤
Q
D
k
)
∈
R
D
v
×
N
\boldsymbol{H}=\boldsymbol{V} \text { softmax }\left(\frac{\boldsymbol{K}^{\top} \boldsymbol{Q}}{\sqrt{D_k}}\right) \in \mathbb{R}^{D_v \times N}
H=V softmax (DkK⊤Q)∈RDv×N
其中,注意到
K
⊤
Q
D
k
∈
R
N
×
N
\frac{\boldsymbol{K}^{\top} \boldsymbol{Q}}{\sqrt{D_k}} \in \mathbb{R}^{N \times N}
DkK⊤Q∈RN×N,
softmax
(
⋅
)
\operatorname{softmax}(\cdot)
softmax(⋅) 为按列进行归一化的函数。
自注意力基于向量形式的推导整理
总体上: \color{cyan}{总体上:} 总体上:
- 选定输入序列的任一位置 n n n,其对应的查询向量为 q n = W q x n ∈ R D k q_n =W_q x_n\in \mathbb{R}^{D_k} qn=Wqxn∈RDk
- 随后,用得到的查询向量 q n q_n qn,去"query"所有位置的键向量 { k j = W k x j ∈ R D k } j \{k_j = W_k x_j \in \mathbb{R}^{D_k} \}_j {kj=Wkxj∈RDk}j,基于 缩放点积模型+softmax 得到对于每个值向量 { v j = W v x j ∈ R D v } j \{v_j = W_v x_j \in \mathbb{R}^{D_v} \}_j {vj=Wvxj∈RDv}j的权重 { α n j } j \{ \alpha_{nj} \}_j {αnj}j
- 最后,加权求和得到对应的位置n的输出向量 h n ∈ R D v h_n \in \mathbb{R}^{D_v} hn∈RDv
更具体而言: \color{cyan}{更具体而言:} 更具体而言:
- 打分函数采用缩放点积
s
(
x
i
,
q
)
=
x
i
T
q
d
s\left(\boldsymbol{x}_i, \boldsymbol{q}\right)=\frac{\boldsymbol{x}_i^{\mathrm{T}} \boldsymbol{q}}{\sqrt{d}}
s(xi,q)=dxiTq,得到
s ( k j , q n ) = k j ⊤ q n D k ∈ R s\left(k_j, q_n\right)=\frac{k_j^{\top} q_n}{\sqrt{D_k}} \in \mathbb{R} s(kj,qn)=Dkkj⊤qn∈R
对于所有位置j,得到分数向量
s ( n ) = 1 D k K ⊤ q n = [ s ( k 1 , q n ) ⋮ s ( k N , q n ) ] ∈ R N s^{(n)}=\frac{1}{\sqrt{D_k}} K^{\top} q_n=\left[\begin{array}{c} s\left(k_1, q_n\right) \\ \vdots \\ s\left(k_N, q_n\right) \end{array}\right] \in \mathbb{R}^N s(n)=Dk1K⊤qn= s(k1,qn)⋮s(kN,qn) ∈RN - 为得到权重向量,对
s
(
n
)
s^{(n)}
s(n) 做 softmax
α n = s o f t m a x ( s ( n ) ) = [ softmax ( s ( k 1 , q n ) ) ⋮ softmax ( s ( k N , q n ) ) ] = [ α n 1 ⋮ α n N ] ∈ R N \alpha_n = \mathrm{softmax}\big(s^{(n)}\big) = \left[\begin{array}{c} \text{softmax}(s\left(k_1, q_n\right)) \\ \vdots \\ \text{softmax}(s\left(k_N, q_n\right)) \end{array}\right] = \left[\begin{array}{c} \alpha_{n1} \\ \vdots \\ \alpha_{nN} \end{array}\right] \in \mathbb{R}^{N} αn=softmax(s(n))= softmax(s(k1,qn))⋮softmax(s(kN,qn)) = αn1⋮αnN ∈RN
其中第j个分量为 ( α n ) j = α n j (\alpha_n)_j = \alpha_{n j} (αn)j=αnj - 为得到输出向量
h
n
h_n
hn,由于
V
=
[
v
1
,
…
,
v
N
]
∈
R
D
v
×
N
V = [v_1,\dots,v_N] \in \mathbb{R}^{D_v \times N}
V=[v1,…,vN]∈RDv×N,有
h n = V α n = ∑ j = 1 N v j ( α n ) j = ∑ j = 1 N α n j v j ∈ R D v × 1 h_n = V \alpha_n =\sum_{j=1}^{N} v_j \, (\alpha_n)_j = \sum_{j=1}^{N} \alpha_{n j} v_j \in \mathbb{R}^{D_v \times 1} hn=Vαn=j=1∑Nvj(αn)j=j=1∑Nαnjvj∈RDv×1
自注意力基于矩阵形式的推导整理
考虑所有的查询向量 [ q 1 , … , q N ] [q_1,\dots,q_N] [q1,…,qN],以统一得到 H = [ h 1 , … , h N ] ∈ R D v × N H = [h_1,\dots,h_N] \in \mathbb{R}^{D_v \times N} H=[h1,…,hN]∈RDv×N:
- 打分矩阵:
S = 1 D k K ⊤ Q ∈ R N × N S = \frac{1}{\sqrt{D_k}} K^{\top} Q \in \mathbb{R}^{N \times N} S=Dk1K⊤Q∈RN×N
其中 S j n = k j ⊤ q n D k = s ( k j , q n ) = s j n S_{j n} = \frac{k_j^{\top} q_n}{\sqrt{D_k}} = s(k_j,q_n) = s_{j n} Sjn=Dkkj⊤qn=s(kj,qn)=sjn。第 n 列 S : , n S_{:,n} S:,n 是向量情形中的打分向量 s ( n ) s^{(n)} s(n) - 权重矩阵:
如前所述,对S按列做softmax,得到
A = s o f t m a x ( S ) ∈ R N × N A = \mathrm{softmax}(S) \in \mathbb{R}^{N \times N} A=softmax(S)∈RN×N
即对每一列 n, A j n = exp ( S j n ) ∑ ℓ = 1 N exp ( S ℓ n ) = α n j . A_{j n} = \frac{\exp(S_{j n})}{\sum_{\ell=1}^{N} \exp(S_{\ell n})} = \alpha_{n j}. Ajn=∑ℓ=1Nexp(Sℓn)exp(Sjn)=αnj. 因此,第 n 列 A : , n A_{:,n} A:,n 就是向量情形中的权重向量 α n \alpha_n αn。 - 输出矩阵:
基于值矩阵V和权重矩阵A,可以得到:
H = V A ∈ R D v × N H = V A \in \mathbb{R}^{D_v \times N} H=VA∈RDv×N
第 n 列满足 H : , n = V A : , n = V α n = h n H_{:,n} = V A_{:,n} = V \alpha_n= h_n H:,n=VA:,n=Vαn=hn。展开为
H : , n = ∑ j = 1 N v j A j n = ∑ j = 1 N α n j v j . H_{:,n} = \sum_{j=1}^{N} v_j A_{j n} = \sum_{j=1}^{N} \alpha_{n j} v_j. H:,n=j=1∑NvjAjn=j=1∑Nαnjvj. - 综合以上三步,自注意力的矩阵形式即为
H = V s o f t m a x ( K ⊤ Q D k ) ∈ R D v × N , H = V\,\mathrm{softmax}\!\left(\frac{K^{\top} Q}{\sqrt{D_k}}\right) \in \mathbb{R}^{D_v \times N}, H=Vsoftmax(DkK⊤Q)∈RDv×N,


被折叠的 条评论
为什么被折叠?



