深度学习笔记之Transformer(二)关于注意力分数的总结

引言

上一节介绍了注意力机制的基本逻辑。本节作为过渡文章,归纳注意力分数这个概念。

回顾: Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归

作为一种懒惰学习 ( 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=1Nj=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=1Nα(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∣∣xx(j)2}=i=1Nj=1Nκ(x,x(j))κ(x,x(i))y(i)=i=1NSoftmax[2σ21∣∣xx(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∣∣xx(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∣∣xx(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中的注意力机制是否也满足上述流程 ? ? ?

场景构建

  • 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+1j)](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(t1),这里用 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+1j)](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+1j)](j=1,2,,T)是句子自身性质产生的‘无意信息’。

    关于‘刻意信息’与‘无意信息’详见上一节注意力机制基本介绍

执行过程
详细执行过程见深度学习笔记之 Seq2seq \text{Seq2seq} Seq2seq——注意力机制的执行过程

  • 通过构建神经网络的方式对 Query \text{Query} Query Keys \text{Keys} Keys进行计算,得到注意力分数 E t \mathcal E_t Et
    { H B i = { [ h L ; j , h R ; ( T + 1 − j ) ] j = 1 T } T × 1 T O ~ t = W Attn ⋅ [ Concat ( h D ( t ) , H B i ) ] + b Attn O t = Tanh ( O ~ t ) E t = V T O t \begin{cases} \mathcal H_{Bi} = \left\{ [h_{\mathcal L;j},h_{\mathcal R;(\mathcal T + 1 - j)}]_{j=1}^\mathcal T \right\}^T_{\mathcal T \times 1} \\ \quad \\ \widetilde{\mathcal O}_t = \mathcal W_{\text{Attn}} \cdot \left[\text{Concat} \left(h_{\mathcal D}^{(t)},\mathcal H_{Bi}\right)\right] + b_{\text{Attn}} \\ \mathcal O_t = \text{Tanh}(\widetilde{\mathcal O}_t) \\ \mathcal E_t = \mathcal V^T \mathcal O_t \end{cases} HBi={[hL;j,hR;(T+1j)]j=1T}T×1TO t=WAttn[Concat(hD(t),HBi)]+bAttnOt=Tanh(O t)Et=VTOt
  • 使用 Softmax \text{Softmax} Softmax函数对注意力分数 E t \mathcal E_t Et进行标准化,得到各时刻的注意力权重 ( Attention Weights ) (\text{Attention Weights}) (Attention Weights)
    S t = Softmax ( E t ) ⇒ S t = ( s t 1 , s s 2 , ⋯   , s t T ) T × 1 T \mathcal S_t = \text{Softmax}(\mathcal E_t) \Rightarrow \mathcal S_t = (s_{t1},s_{s2},\cdots,s_{t\mathcal T})_{\mathcal T \times 1}^T St=Softmax(Et)St=(st1,ss2,,stT)T×1T
  • 注意力权重与编码器各时刻序列信息(此时将其视作 Values \text{Values} Values)执行内积操作,得到该时刻的 Context \text{Context} Context向量 C t \mathcal C_t Ct
    C t = [ S t ] T H B i = ∑ j = 1 T s t j ⋅ [ h L ; j , h R ; ( T + 1 − j ) ] \begin{aligned} \mathcal C_t & = [\mathcal S_t]^T \mathcal H_{Bi} \\ & = \sum_{j=1}^{\mathcal T} s_{tj} \cdot [h_{\mathcal L;j},h_{\mathcal R;(\mathcal T + 1 - j)}] \end{aligned} Ct=[St]THBi=j=1Tstj[hL;j,hR;(T+1j)]

流程角度观察完全相同。只不过这里的 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} QRqKjRkVjRv
对应的注意力输出可表示为:
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=1Mα(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)=VjTTanh(WK;jKj+WQQ)
对应神经网络结构表示如下:
注意力分数——神经网络结构
当然,这仅仅是一项—— 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进行表示。这两种操作是等价的。
    a ( Q , K ) = V T ⋅ Tanh ( W K ⋅ K + W Q ⋅ Q ) a(\mathcal Q,\mathcal K) = \mathcal V^T \cdot \text{Tanh}(\mathcal W_{\mathcal K} \cdot \mathcal K + \mathcal W_{\mathcal Q} \cdot \mathcal Q) a(Q,K)=VTTanh(WKK+WQQ)

这种注意力机制的优势在于:即便 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,KjRd
那么可以使用缩放点积注意力机制 ( 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可以得到一个矩阵

场景构建

  • 查询向量 Q \mathcal Q Q内包含 N N N d d d维向量: Q ∈ R N × d \mathcal Q \in \mathbb R^{N \times d} QRN×d
    查询向量也可以是多个。
  • 键值对中的 Keys \text{Keys} Keys内依然包含 M \mathcal M M个向量信息: K ∈ R M × d \mathcal K \in \mathbb R^{\mathcal M \times d} KRM×d
  • 键值对中的 Values \text{Values} Values内包含与 Keys \text{Keys} Keys相同数量的向量信息: V ∈ R M × v \mathcal V \in \mathbb R^{\mathcal M \times v } VRM×v
    上面提到: K , V \mathcal K,\mathcal V K,V有可能相同,也有可能不同。这里描述的是‘不同’的情况。

对应的注意力分数表示如下:
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)=[d QKT]N×M
对应的注意力池化过程表示如下:
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×MVM×vfRN×v

下一节将介绍自注意力机制 ( Self-Attention ) (\text{Self-Attention}) (Self-Attention)

相关参考:
注意力分数【动手学深度学习v2】


http://www.niftyadmin.cn/n/433737.html

相关文章

IT专业新生必读:IT专业的魅力与未来趋势

当代社会,信息技术(IT)行业正蓬勃发展,成为世界经济中不可或缺的一部分。无论是智能手机、社交媒体、电子商务还是人工智能等领域,IT技术都扮演着重要的角色。对于高考毕业生来说,选择IT专业是一个非常明智…

关键字static,final的使用

关键字:static 概念 是java中的一个关键字 用于修饰成员(成员变量和成员方法) 类属性、类方法的设计思想 概念: 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实 质上的对象&#x…

TPU-MLIR的环境搭建和使用

1、开发环境配置 Linux开发环境 一台安装了Ubuntu16.04/18.04/20.04的x86主机&#xff0c;运行内存建议12GB以上下载SophonSDK开发包(v23.03.01) &#xff08;1&#xff09;解压缩SDK包 sudo apt-get install p7zip sudo apt-get install p7zip-full 7z x Release_<date&…

软件测试V、W和H模型的优缺点汇总,零基础必看哦

目录 V模型 W模型 H模型 总结&#xff1a; 软件测试有三种模型&#xff0c;分别是V模型&#xff0c;W模型和H模型。每种模型都有自己的优点和缺点。 V模型 V模型如下图所示&#xff1a; V模型的优点 V模型明确地标识出了在开发过程中一般应完成的测试级别&#xff0c;以及…

matlab句柄函数使用

概述 在MATLAB平台中&#xff0c;对函数的调用方法分为直接调用法和间接调用法。 直接调用函数&#xff0c;被调用的函数通常被称为子函数。但是子函数只能被与其M文件同名的主函数或在M文件中的其他函数所调用&#xff0c;一个文件中只能有一个主函数。 >> str hello…

C++算法:加权连通图的最小生成树(Kruskal)

文章目录 前言一、什么是最小生成树二、代码实现1、构建图2、生成树 总结原创文章&#xff0c;未经许可&#xff0c;严禁转载 前言 最小生成树算法就是在众多可行的方案中选择代价最小的方法。生活中我们经常会遇到类似可以抽象成最小生成树的例子&#xff1a;比如你要给家中布…

Spring @Autowired注入太坤肋了 我们自己写一个

1、 背景 众所周知该注解是Spring中用于依赖注入的注解&#xff0c;但是该注解只是简单根据类型的注入&#xff0c; 并且如果该类型存在多个实现类的情况下无法抉择具体哪一个实现类就会抛出错误&#xff0c;除非搭配Qualifier注解然后使用硬编码的方式去指定Bean的名字去抉择…

玩业余无线电时,突然听到有人呼救,该怎么办?

不管是在玩业余无线电还是在其他活动当中&#xff0c;突然遇到有人求救&#xff0c;都是一件非常重要的事情&#xff0c;因为救援行动的效率快慢和是否及时&#xff0c;都有可能影响到别人的生命安全。 下面是河南宝蓝小编给出的一些思考和建议&#xff0c;希望对大家会有一些帮…