上一节介绍了注意力机制的基本逻辑。本节作为过渡文章,归纳注意力分数这个概念。
作为一种懒惰学习 ( Lazy Learnging ) (\text{Lazy Learnging}) (Lazy Learnging)方法, Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归基于训练集 D = { ( x ( i ) , y ( i ) ) } i = 1 N \mathcal D = \{(x^{(i)},y^{(i)})\}_{i=1}^{N} D={(x(i),y(i))}i=1N,关于陌生样本 x x x的预测过程表示为:
f ( x ) = [ κ ( x , x ( 1 ) ) ∑ j = 1 N κ ( x , x ( j ) ) , κ ( x , x ( 2 ) ) ∑ j = 1 N κ ( x , x ( j ) ) , ⋯ , κ ( x , x ( N ) ) ∑ j = 1 N κ ( x , x ( j ) ) ] 1 × N ( y ( 1 ) y ( 2 ) ⋮ y ( N ) ) N × 1 = ∑ i = 1 N κ ( x , x ( i ) ) ∑ j = 1 N κ ( x , x ( j ) ) ⋅ y ( i ) \begin{aligned} f(x) & = \left[\frac{\kappa(x,x^{(1)})}{\sum_{j=1}^N \kappa(x,x^{(j)})},\frac{\kappa(x,x^{(2)})}{\sum_{j=1}^N \kappa(x,x^{(j)})},\cdots,\frac{\kappa(x,x^{(N)})}{\sum_{j=1}^N \kappa(x,x^{(j)})}\right]_{1 \times N} \begin{pmatrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(N)} \end{pmatrix}_{N \times 1} \\ & = \sum_{i=1}^N \frac{\kappa(x,x^{(i)})}{\sum_{j=1}^N \kappa(x,x^{(j)})} \cdot y^{(i)} \end{aligned} f(x)=[∑j=1Nκ(x,x(j))κ(x,x(1)),∑j=1Nκ(x,x(j))κ(x,x(2)),⋯,∑j=1Nκ(x,x(j))κ(x,x(N))]1×N y(1)y(2)⋮y(N) N×1=i=1∑N∑j=1Nκ(x,x(j))κ(x,x(i))⋅y(i)
在训练集 D \mathcal D D给定的条件下,已知一个未知样本 x x x,那么 ∑ j = 1 N κ ( x , x ( j ) ) \sum_{j=1}^N \kappa(x,x^{(j)}) ∑j=1Nκ(x,x(j))必然是一个确定的值。因而导致 y ( i ) y^{(i)} y(i)的系数 κ ( x , x ( i ) ) ∑ j = 1 N κ ( x , x ( j ) ) \begin{aligned}\frac{\kappa(x,x^{(i)})}{\sum_{j=1}^{N} \kappa(x,x^{(j)})}\end{aligned} ∑j=1Nκ(x,x(j))κ(x,x(i))必然仅与 x , x ( i ) x,x^{(i)} x,x(i)相关,而与其他训练样本无关。这里将其简写为如下形式:
f ( x ) = ∑ i = 1 N α ( x , x ( i ) ) ⋅ y ( i ) f(x) = \sum_{i=1}^N \alpha(x,x^{(i)}) \cdot y^{(i)} f(x)=i=1∑Nα(x,x(i))⋅y(i)
而 α ( x , x ( i ) ) \alpha(x,x^{(i)}) α(x,x(i))这个函数结果可被称作 x x x关于训练样本 x ( i ) x^{(i)} x(i)的注意力权重 ( Attention Weight ) (\text{Attention Weight}) (Attention Weight);假设 κ ( x , x ( i ) ) \kappa(x,x^{(i)}) κ(x,x(i))描述的是径向基核函数 ( Radial Basis Function,RBF ) (\text{Radial Basis Function,RBF}) (Radial Basis Function,RBF),可以将 f ( x ) f(x) f(x)表示成如下形式:
{ κ ( x , x ( i ) ) = exp { − 1 2 σ 2 ∣ ∣ x − x ( j ) ∣ ∣ 2 } f ( x ) = ∑ i = 1 N κ ( x , x ( i ) ) ∑ j = 1 N κ ( x , x ( j ) ) ⋅ y ( i ) = ∑ i = 1 N Softmax [ − 1 2 σ 2 ∣ ∣ x − x ( i ) ∣ ∣ 2 ] ⋅ y ( i ) \begin{cases} \begin{aligned} \kappa(x,x^{(i)}) & = \exp \left\{-\frac{1}{2\sigma^2} ||x - x^{(j)}||^2 \right\} \\ f(x) & = \sum_{i=1}^N \frac{\kappa(x,x^{(i)})}{\sum_{j=1}^N \kappa(x,x^{(j)})} \cdot y^{(i)} \\ & = \sum_{i=1}^N \text{Softmax} \left[ - \frac{1}{2\sigma^2} ||x - x^{(i)}||^2\right] \cdot y^{(i)} \end{aligned} \end{cases} ⎩ ⎨ ⎧κ(x,x(i))f(x)=exp{−2σ21∣∣x−x(j)∣∣2}=i=1∑N∑j=1Nκ(x,x(j))κ(x,x(i))⋅y(i)=i=1∑NSoftmax[−2σ21∣∣x−x(i)∣∣2]⋅y(i)
此时再去观察 α ( x , x ( i ) ) = Softmax [ 1 2 σ 2 ∣ ∣ x − x ( i ) ∣ ∣ 2 ] \begin{aligned} \alpha(x,x^{(i)}) = \text{Softmax} \left[\frac{1}{2\sigma^2} ||x - x^{(i)}||^2\right] \end{aligned} α(x,x(i))=Softmax[2σ21∣∣x−x(i)∣∣2],可以发现: Softmax \text{Softmax} Softmax函数仅仅是一个归一化操作——该函数自身并不包含注意力信息。而真正包含注意力信息的只有 − 1 2 σ 2 ∣ ∣ x − x ( i ) ∣ ∣ 2 \begin{aligned}-\frac{1}{2\sigma^2}||x - x^{(i)}||^2\end{aligned} −2σ21∣∣x−x(i)∣∣2。我们将这部分函数的结果称作注意力分数 ( Attention Score ) (\text{Attention Score}) (Attention Score)。
很明显,注意力分数是指没有被‘标准化’
( Normalization ) (\text{Normalization}) (Normalization)的;描述样本/向量间的‘纯粹的信息’。
回过头观察 Seq2seq \text{Seq2seq} Seq2seq: Seq2seq \text{Seq2seq} Seq2seq中的注意力机制是否也满足上述流程 ? ? ?
场景构建:
在 Seq2seq \text{Seq2seq} Seq2seq中,编码器中各时刻的序列信息 [ h L ; j , h R ; ( T + 1 − j ) ] ( j = 1 , 2 , ⋯ , T ) \left[h_{\mathcal L;j},h_{\mathcal R;(\mathcal T + 1 -j)}\right](j=1,2,\cdots,\mathcal T) [hL;j,hR;(T+1−j)](j=1,2,⋯,T)视作 Keys \text{Keys} Keys,而对应的 Values \text{Values} Values就是它们自身;
在解码器中某一时刻 t ( t ∈ { 1 , 2 , ⋯ , T ′ } ) t(t \in \{1,2,\cdots,\mathcal T'\}) t(t∈{1,2,⋯,T′})的序列信息 h D ( t ) h_{\mathcal D}^{(t)} hD(t)(也可以是上一时刻的 h D ( t − 1 ) h_{\mathcal D}^{(t-1)} hD(t−1),这里用 h D ( t ) h_{\mathcal D}^{(t)} hD(t)示例)视作 Query \text{Query} Query;
将
h D ( t ) h_{\mathcal D}^{(t)} hD(t)作为
Query \text{Query} Query的动机在于:我们主观想要了解
h D ( t ) h_{\mathcal D}^{(t)} hD(t)与各
[ h L ; j , h R ; ( T + 1 − j ) ] ( j = 1 , 2 , ⋯ , T ) \left[h_{\mathcal L;j},h_{\mathcal R;(\mathcal T + 1 -j)}\right](j=1,2,\cdots,\mathcal T) [hL;j,hR;(T+1−j)](j=1,2,⋯,T)之间的相关性信息。因而
h D ( t ) h_{\mathcal D}^{(t)} hD(t)是‘刻意信息’,而
[ h L ; j , h R ; ( T + 1 − j ) ] ( j = 1 , 2 , ⋯ , T ) \left[h_{\mathcal L;j},h_{\mathcal R;(\mathcal T + 1 -j)}\right](j=1,2,\cdots,\mathcal T) [hL;j,hR;(T+1−j)](j=1,2,⋯,T)是句子自身性质产生的‘无意信息’。
关于‘刻意信息’与‘无意信息’详见上一节
注意力机制基本介绍
执行过程:
详细执行过程见
深度学习笔记之 Seq2seq \text{Seq2seq} Seq2seq——注意力机制的执行过程
流程角度观察完全相同。只不过这里的 Keys,Values \text{Keys,Values} Keys,Values是相同信息。
将查询向量 Q \mathcal Q Q, M \mathcal M M个键值对 { ( K j , V j ) } j = 1 M \{(\mathcal K_j,\mathcal V_j)\}_{j=1}^{\mathcal M} {(Kj,Vj)}j=1M映射到高维空间中:
{ Q ∈ R q K j ∈ R k V j ∈ R v \begin{cases} \mathcal Q \in \mathbb R^q \\ \mathcal K_j \in \mathbb R^k \\ \mathcal V_j \in \mathbb R^v \end{cases} ⎩ ⎨ ⎧Q∈RqKj∈RkVj∈Rv
对应的注意力输出可表示为:
f [ Q , ( K 1 , V 1 ) , ( K 2 , V 2 ) , ⋯ , ( K M , V M ) ⏟ M 个 ] = ∑ j = 1 M α ( Q , K j ) V j f \left[\mathcal Q,\underbrace{(\mathcal K_1,\mathcal V_1),(\mathcal K_2,\mathcal V_2),\cdots,(\mathcal K_{\mathcal M},\mathcal V_{\mathcal M})}_{\mathcal M个}\right] = \sum_{j=1}^{\mathcal M} \alpha(\mathcal Q,\mathcal K_j) \mathcal V_j f Q,M个 (K1,V1),(K2,V2),⋯,(KM,VM) =j=1∑Mα(Q,Kj)Vj
其中 α ( Q , K j ) \alpha(\mathcal Q,\mathcal K_j) α(Q,Kj)表示注意力权重:
这仅是
Q \mathcal Q Q与编号为
j j j的
Keys \text{Keys} Keys的注意力权重,它的结果是一个标量;基于
Softmax \text{Softmax} Softmax函数范围内的标量
⇒ α ( Q , K j ) ∈ R \Rightarrow \alpha(\mathcal Q,\mathcal K_j) \in \mathbb R ⇒α(Q,Kj)∈R
α ( Q , K j ) = Softmax [ a ( Q , K j ) ] = exp [ a ( Q , K j ) ] ∑ i = 1 M exp [ a ( Q , K j ) ] \begin{aligned} \alpha(\mathcal Q,\mathcal K_j) & = \text{Softmax} \left[a(\mathcal Q,\mathcal K_j)\right] \\ & = \frac{\exp \left[a(\mathcal Q,\mathcal K_j)\right]}{\sum_{i=1}^{\mathcal M} \exp \left[a(\mathcal Q,\mathcal K_j)\right]} \end{aligned} α(Q,Kj)=Softmax[a(Q,Kj)]=∑i=1Mexp[a(Q,Kj)]exp[a(Q,Kj)]
同上,对应的 a ( Q , K j ) a(\mathcal Q,\mathcal K_j) a(Q,Kj)仅表示 Q \mathcal Q Q与编号为 j j j的 Keys \text{Keys} Keys的注意力分数。与注意力权重相同,它的结果同样是一个标量。 Softmax \text{Softmax} Softmax函数仅作为归一化作用,不改变数据格式:
a ( Q , K j ) ∈ R a(\mathcal Q,\mathcal K_j) \in \mathbb R a(Q,Kj)∈R
将注意力分数展开,可以得到如下形式:
a ( Q , K j ) = V j T ⋅ Tanh ( W K ; j ⋅ K j + W Q ⋅ Q ) a(\mathcal Q,\mathcal K_j) = \mathcal V_j^T \cdot \text{Tanh}(\mathcal W_{\mathcal K;j} \cdot \mathcal K_j + \mathcal W_\mathcal Q \cdot \mathcal Q) a(Q,Kj)=VjT⋅Tanh(WK;j⋅Kj+WQ⋅Q)
对应神经网络结构表示如下:
当然,这仅仅是一项—— K j \mathcal K_j Kj与 Q \mathcal Q Q的注意力分数。那么 M \mathcal M M个注意力分数并行计算,它的注意力分数表示为:
这里的
W K , W Q \mathcal W_{\mathcal K},\mathcal W_{\mathcal Q} WK,WQ做了分开表示:使用不同权重矩阵单独对
K , Q \mathcal K,\mathcal Q K,Q进行训练,并将各自神经元的输出分布对应元素相加;
更常见的像
Seq2seq \text{Seq2seq} Seq2seq中的表示方式:将
K , Q \mathcal K,\mathcal Q K,Q拼接起来(上图),使用一个权重矩阵
W \mathcal W W进行表示。这两种操作是等价的。
这种注意力机制的优势在于:即便 K j \mathcal K_j Kj与 Q \mathcal Q Q的大小(维数)不相同,并不影响注意力分数的计算。
如果查询向量 Q \mathcal Q Q与 K j ( j = 1 , 2 , ⋯ , M ) \mathcal K_j(j=1,2,\cdots,\mathcal M) Kj(j=1,2,⋯,M)的大小(维数)相同:
这里的
d d d表示
Q , K j \mathcal Q,\mathcal K_j Q,Kj的向量维数。
Q , K j ∈ R d \mathcal Q,\mathcal K_j \in \mathbb R^{d} Q,Kj∈Rd
那么可以使用缩放点积注意力机制 ( Scaled Dot-Product Attention ) (\text{Scaled Dot-Product Attention}) (Scaled Dot-Product Attention)对注意力分数进行如下计算:
a ( Q , K j ) = ⟨ Q , K j ⟩ d a(\mathcal Q,\mathcal K_j) = \frac{\left\langle\mathcal Q,\mathcal K_j \right\rangle}{\sqrt{d}} a(Q,Kj)=d⟨Q,Kj⟩
其中 ⟨ Q , K j ⟩ \left\langle\mathcal Q,\mathcal K_j \right\rangle ⟨Q,Kj⟩表示向量 Q , K j \mathcal Q,\mathcal K_j Q,Kj的内积。而除以 d \sqrt{d} d的操作的解释是:注意力分数结果对参数不是非常敏感。
关于这个解释, d d d是 Q , K j \mathcal Q,\mathcal K_j Q,Kj向量的维数,而向量内的信息除以 d \sqrt{d} d,只能想到它将注意力分数的解空间进行了一定程度的压缩/约束(正常情况下, d ≥ 1 \sqrt{d} \geq 1 d≥1,是不小的。谁闲着没事将一个很小的特征向量做这种注意力的复杂操作,不怕模型过拟合吗~)
\quad
如果有更好的解释方式,欢迎小伙伴评论区讨论。
在基于 Seq2seq \text{Seq2seq} Seq2seq注意力机制的动机中,我们介绍过内积求解注意力分数,它存在自身的优势:相比于加性注意力机制中神经网络产生的抽象特征,内积操作本身就有物理意义:描述向量 Q , K j \mathcal Q,\mathcal K_j Q,Kj之间的相似度。
即便
Q , K j \mathcal Q,\mathcal K_j Q,Kj大小不同,实际上依然不影响其执行内积操作。仅需要对其中一个向量乘以一个权重矩阵,使其拉成相同长度并执行内积,后续对该权重矩阵中的参数进行学习即可。这里并没有深挖关于该方向的信息,欢迎小伙伴交流讨论。
上述依然仅是单个向量 Q , K j \mathcal Q,\mathcal K_j Q,Kj的注意力分数,那么多个 Query,Keys \text{Query,Keys} Query,Keys可以得到一个矩阵:
场景构建:
查询向量也可以是多个。
上面提到:
K , V \mathcal K,\mathcal V K,V有可能相同,也有可能不同。这里描述的是‘不同’的情况。
对应的注意力分数表示如下:
其中注意力分数
a ( Q , K ) a(\mathcal Q,\mathcal K) a(Q,K)所描述的
N × M N \times \mathcal M N×M矩阵中,每一个元素均是
Q \mathcal Q Q中某向量于
K \mathcal K K中某向量的内积
( ( (相似性 ) ) )结果。
a ( Q , K ) = [ Q K T d ] N × M a(\mathcal Q,\mathcal K) = \left[\frac{\mathcal Q\mathcal K^T}{\sqrt{d}} \right]_{N \times \mathcal M} a(Q,K)=[dQKT]N×M
对应的注意力池化过程表示如下:
这里的
Softmax \text{Softmax} Softmax是对
a ( Q , K ) a(\mathcal Q,\mathcal K) a(Q,K)中各行
N × 1 N \times 1 N×1元素做归一化。
f = { Softmax [ a ( Q , K ) ] } N × M ⋅ V M × v f ∈ R N × v f = \left\{\text{Softmax}[a(\mathcal Q,\mathcal K)]\right\}_{N \times \mathcal M} \cdot \mathcal V_{\mathcal M \times v} \quad f \in \mathbb R^{N \times v} f={Softmax[a(Q,K)]}N×M⋅VM×vf∈RN×v
下一节将介绍自注意力机制 ( Self-Attention ) (\text{Self-Attention}) (Self-Attention)。
相关参考:
注意力分数【动手学深度学习v2】