问小白 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. 用aij 衡量 Encoder中第j阶段的hj 和解码时第i阶段的相关性;
  2. 最终Decoder中第i阶段的输入的上下文信息ci 就来自于所有hj 对aij 的加权和。

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

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

  1. 因此, Encoder中的h1、 h2、 h3、 h4 就可以分别看做是“我”、 “爱”、“中”、“国”所代表的信息;
  2. 在翻译成英语时, 第一个上下文c1 应该和“我”这个字最相关, 因此对应的a11 就比较大, 而相应的a12 、 a13 、 a14 就比较小;
  3. c2应该和“爱”最相关, 因此对应的a22 就比较大;
  4. 最后的c3 和h3 、 h4 最相关, 因此a33 、 a34 的值就比较大。

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

  • 这里的c1 , c2 , c3 就是attention值;

二、注意力机制一般形式

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

用X = [ x1 , ⋯ , xN ] ∈ RD×N表示N组输入信息,其中D维向量xn ∈ RD , n ∈ [ 1 , N ] 表示一组输入信息.为了节省计算资源,不需要将所有信息都输入神经网络,只需要从X中选择一些和任务相关的信息.注意力机制的计算可以分为两步:

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

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

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

αn = p(z=n|X,q) = softmax(s(xn, q)) = exp(s(xn, q)) / ∑j=1Nexp(s(xj, q)),

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

注意力打分函数s ( x , q ) :计算输入向量和查询向量之间的相关性,常用如下模型
∙ 加性模型: s(x,q) = vTtanh(Wx+Uq).
∙ 点积模型: s(x,q) = xTq.
∙ 缩放点积模型: s(x,q) = xTq / √D.
∙ 双线性模型: s(x,q) = xTWq.

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

Note:

  1. 在前面的例子中,h1 , h2 , h3 , h4 就是输入向量X;
  2. h'1 , h'2 , h'3 就是查询向量q;
  3. aij 就是注意力分布,这里我们给出了注意力分布怎么计算的.

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

att(X,q) = ∑n=1Nαnxn = Ez~p(z|X,q)[xz].

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

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

att((K,V),q) = ∑n=1Nαnvn = ∑n=1Nexp(s(kn, q)) / ∑jexp(s(kj, q)) vn,

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

三、自注意力模型

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

🔥Note:

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

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

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

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

(1)时间复杂度

(2)空间复杂度

参考资料

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