问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

深入理解注意力机制【Self-Attention,自注意力模型】

创作时间:
作者:
@小白创作中心

深入理解注意力机制【Self-Attention,自注意力模型】

引用
CSDN
1.
https://blog.csdn.net/v20000727/article/details/140447207

注意力机制是自然语言处理领域的重要技术,特别是在大语言模型中扮演着关键角色。本文将深入探讨注意力机制的基本原理、一般形式以及自注意力模型,通过具体例子和图示帮助读者更好地理解这些概念。

在自然语言处理领域,注意力机制(Attention Mechanism)已经成为提升模型性能的重要工具。传统的Encoder-Decoder结构在处理长序列时,常常因为统一语义特征向量的长度限制而导致性能瓶颈。然而,注意力机制通过引入动态上下文向量,成功解决了这一问题,使得模型能够在每个时间步选择与当前输出最相关的信息。

本篇博客将详细介绍注意力机制的基本原理、一般形式以及自注意力模型,并通过具体例子和图示来更好地理解这些关键概念。

一、语言模型实例

在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征c再解码:

因此, c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个c可能存不下那么多信息,就会造成翻译精度的下降。

Attention机制通过在每个时间输入不同的c来解决这个问题,下图是带有Attention机制的Decoder:

每一个c会自动去选取与当前所要输出的y最合适的上下文信息。具体来说:

  1. 用a i j a_{i j}aij 衡量 Encoder中第j阶段的h j h_jhj 和解码时第i阶段的相关性;
  2. 最终Decoder中第i阶段的输入的上下文信息c i c_{i}ci 就来自于所有h j h_{j}hj 对a i j a_{i j}aij 的加权和。

以机器翻译为例(将中文翻译成英文):

输入的序列是“我爱中国”:

  1. 因此, Encoder中的h 1 、 h 2 、 h 3 、 h 4 h_1、h_2、h_3、h_4h1 、h2 、h3 、h4 就可以分别看做是“我”、 “爱”、“中”、“国”所代表的信息;
  2. 在翻译成英语时, 第一个上下文c 1 c_1c1 应该和“我”这个字最相关, 因此对应的a 11 a_{11}a11 就比较大, 而相应的a 12 、 a 13 、 a 14 a_{12} 、 a_{13} 、 a_{14}a12 、a13 、a14 就比较小;
  3. c2应该和“爱”最相关, 因此对应的a 22 a_{22}a22 就比较大;
  4. 最后的c 3 c_3c3 和h 3 、 h 4 h_3、h_4h3 、h4 最相关, 因此a 33 、 a 34 a_{33} 、 a_{34}a33 、a34 的值就比较大。

这些权重a i j a_{i j}aij 是怎么来的?事实上,a i j a_{i j}aij 同样是从模型中学出的, 它实际和Decoder的第i阶段的隐状态、Encoder第j个阶段的隐状态有关,在下面一小节我们会介绍a i j a_{ij}aij 如何计算.

  • 这里的c 1 , c 2 , c 3 c_1,c_2,c_3c1 ,c2 ,c3 就是attention值;

二、注意力机制一般形式

刚刚我们是基于Encoder-Decoder模型来介绍attention机制的,下面我们更一般的来介绍注意力机制.

用X = [ x 1 , ⋯   , x N ] ∈ R D × N X=[x_1,\cdots,x_N]\in\mathbb{R}^{D\times N}X=[x1 ,⋯,xN ]∈RD×N表示N NN组输入信息,其中D DD维向量x n ∈ \boldsymbol{x}_n\inxn ∈R D , n ∈ [ 1 , N ] \mathbb{R}^D,n\in[1,N]RD,n∈[1,N]表示一组输入信息.为了节省计算资源,不需要将所有信息都输入神经网络,只需要从X \boldsymbol XX中选择一些和任务相关的信息.注意力机制的计算可以分为两步:

  1. 一是在所有输入信息上计算注意力分布
  2. 二是根据注意力分布来计算输入信息的加权平均.

为了从N NN个输入向量[ x 1 , ⋅ ⋅ ⋅ , x N ] [\boldsymbol x_1,\cdotp\cdotp\cdotp,\boldsymbol x_N][x1 ,⋅⋅⋅,xN ]中选择出和某个特定任务相关的信息,我们需要引入一个和任务相关的表示,称为查询向量(Query Vector), 并通过一个打分函数来衡量每个输入向量和查询向量之间的相关性.

给定一个和任务相关的查询向量q \boldsymbol qq,我们用注意力变量z ∈ [ 1 , N ] z\in[1,N]z∈[1,N]来表示被选择信息的索引位置,即z = n z=nz=n表示选择了第n nn个输入向量.为了方便计算,我们采用一种“软性”的信息选择机制.首先计算在给定q qq和X XX下,选择第n nn个输入向量的概率α n \alpha_nαn ,

α n = p ( z = n ∣ X , q ) = softmax ⁡ ( s ( x n , q ) ) = exp ⁡ ( s ( x n , q ) ) ∑ j = 1 N exp ⁡ ( s ( x j , q ) ) , \begin{aligned}\alpha_{n}&=p(z=n|X,\boldsymbol{q})\&=\operatorname{softmax}\left(s(\boldsymbol{x}_n,\boldsymbol{q})\right)\&=\frac{\exp\left(s(\boldsymbol{x}n,\boldsymbol{q})\right)}{\sum{j=1}^N\exp\left(s(\boldsymbol{x}_j,\boldsymbol{q})\right)},\end{aligned}αn =p(z=n∣X,q)=softmax(s(xn ,q))=∑j=1N exp(s(xj ,q))exp(s(xn ,q)) ,

其中α n \alpha_nαn 称为注意力分布( Attention Distribution),s ( x , q ) s(\boldsymbol x,\boldsymbol{q})s(x,q)为注意力打分函数.

注意力打分函数s ( x , q ) \mathbf{s}(\mathbf{x},\mathbf{q})s(x,q):计算输入向量和查询向量之间的相关性,常用如下模型
∙ 加性模型: s ( x , q ) = v T t a n h ( W x + U q ) . ∙ 点积模型: s ( x , q ) = x T q . ∙ 缩放点积模型: s ( x , q ) = x T q D . ∙ 双线性模型: s ( x , q ) = x T W q . \begin{aligned}&\bullet\text{ 加性模型: }\mathbf{s}(\mathbf{x},\mathbf{q})=\mathbf{v}^{T}\mathrm{tanh}(\mathbf{W}\mathbf{x}+\mathbf{U}\mathbf{q}).\&\bullet\text{ 点积模型: }\mathbf{s}(\mathbf{x},\mathbf{q})=\mathbf{x}^{T}\mathbf{q}.\&\bullet\text{ 缩放点积模型: }\mathbf{s}(\mathbf{x},\mathbf{q})=\frac{\mathbf{x}^{T}\mathbf{q}}{\sqrt{D}}.\&\bullet\text{ 双线性模型: }\mathbf{s}(\mathbf{x},\mathbf{q})=\mathbf{x}^{T}\mathbf{W}\mathbf{q}.\end{aligned} ∙ 加性模型: s(x,q)=vTtanh(Wx+Uq).∙ 点积模型: s(x,q)=xTq.∙ 缩放点积模型: s(x,q)=D xTq .∙ 双线性模型: s(x,q)=xTWq.

这里W , U , v \mathbf{W},\mathbf{U},\mathbf{v}W,U,v为可学习的参数,D DD为输入向量的维度.

Note:

  1. 在前面的例子中,h 1 , h 2 , h 3 , h 4 h_1,h_2,h_3,h_4h1 ,h2 ,h3 ,h4 就是输入向量X XX;
  2. h 1 ′ , h 2 ′ , h 3 ′ h'_1,h'_2,h'_3h1′ ,h2′ ,h3′ 就是查询向量q qq;
  3. a i j a_{ij}aij 就是注意力分布,这里我们给出了注意力分布怎么计算的.

得到注意力分布后,对输入向量加权平均可以得到attention值:

att ⁡ ( X , q ) = ∑ n = 1 N α n x n , = E z ∼ p ( z ∣ X , q ) [ x z ] . \begin{aligned}\operatorname{att}(X,\boldsymbol{q})&=\sum_{n=1}^N\alpha_nx_n,\&=\mathbb{E}_{z\sim p(z|X,\boldsymbol{q})}[x_z].\end{aligned}att(X,q) =n=1∑N αn xn ,=Ez∼p(z∣X,q) [xz ].

下图(a)清晰的描述了attention的计算过程.

更一般地,我们可以用键值对( key-value pair)格式来表示输入信息,其中“键”用来计算注意力分布α n \alpha_nαn ,"值"用来计算聚合信息.用( K , V ) = [ ( k 1 , υ 1 ) , ⋯   , ( k N , υ N ) ] \left(\boldsymbol{K},\boldsymbol{V}\right)=\left\left(\boldsymbol{k}_1,\boldsymbol{\upsilon}_1\right),\cdots,\left(\boldsymbol{k}_N,\boldsymbol{\upsilon}_N\right)\right=[(k1 ,υ1 ),⋯,(kN ,υN )]表示N NN组输入信息,给定任务相关的查询向量q qq时,注意力函数为

att ⁡ ( ( K , V ) , q ) = ∑ n = 1 N α n v n , = ∑ n = 1 N exp ⁡ ( s ( k n , q ) ) ∑ j exp ⁡ ( s ( k j , q ) ) v n , \begin{aligned}\operatorname{att}\Big((\boldsymbol{K},\boldsymbol{V}),\boldsymbol{q}\Big)&=\sum_{n=1}^N\alpha_n\boldsymbol{v}n,\&=\sum{n=1}^N\frac{\exp\left(s(\boldsymbol{k}_n,\boldsymbol{q})\right)}{\sum_j\exp\left(s(\boldsymbol{k}_j,\boldsymbol{q})\right)}\boldsymbol{v}_n,\end{aligned}att((K,V),q) =n=1∑N αn vn ,=n=1∑N ∑j exp(s(kj ,q))exp(s(kn ,q)) vn ,

其中s ( k n , q ) s(\boldsymbol{k}_n,\boldsymbol{q})s(kn ,q)为打分函数.图8.1给出键值对注意力机制的示例.当K = V K=VK=V时,键值对模式就等价于普通的注意力机制.

三、自注意力模型

由键值对注意力模式我们可以进一步引出自注意力模型的概念,该模型通过注意力机制可以建立输入序列长距离依赖关系。注意力模型计算过程如下图所示:

🔥Note:

  1. X XX为输入矩阵;
  2. W Q 、 W K 、 W V W^Q、W^K、W^VWQ、WK、WV是可学习的参数矩阵;
  3. 最后得到的Z ZZ为attention值矩阵;
  4. 为什么叫自注意力模型呢?因为我们可以看到这里Q、K、V都是由X XX通过一个线性变换投影得到的,而矩阵W WW是可学习的,所以由X XX到Z ZZ的映射权重是可学习的,是动态调整的。

如下图所示,红色表示当前的词,蓝色阴影表示与红色词的相关程度,通过自注意力模型,我们可以自动学到每个词与前面词的相关关系。

四、Self-Attention模型的复杂度分析

总的来说,自注意力模型的时间和空间复杂度与输入序列长度N NN呈2次关系,可以不严格的表示为O ( N 2 ) O(N^2)O(N2).

(1)时间复杂度

(2)空间复杂度

参考资料

  1. 深度学习500问
  2. 邱锡鹏,神经网络与深度学习,机械工业出版社,https://nndl.github.io/, 2020.
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号