注意力机制学习笔记

注意力机制

参考书目&文章:https://zh.d2l.ai/ + https://zhuanlan.zhihu.com/p/454482273
本篇用于快速回忆相关概念。如有错误,欢迎批评指正。


注意力提示

生物学中的注意力提示

  1. 非自主性提示&自主性提示
    • 非自主性:基于环境中物体的突出性和易见性。
    • 自主性:受主观认知和意识的控制。

查询,键和值

  参数化的全连接层->类似于人的感官输入->这是一种只使用非自主性提示的情况。

  • 在注意力机制中,前述“自主性提示”称为“查询(query)”。
  • 给定查询,注意力机制通过注意力汇聚(attention pooling),将选择引导至感官输入(sensory inputs, 例如中间特征;“感官输入”也被称之为“值 value”)。
  • 通过设计注意力汇聚的方式,使给定的查询(自主性提示)与键(非自主性提示)进行匹配,引导得出最匹配的值(感官输入)。

在这里插入图片描述

注意力汇聚:Nadaraya-Watson 核回归

非参数注意力汇聚(attention pooling)

f ( x ) = ∑ i = 1 n α ( x , x i ) y i f(x) = \sum_{i=1}^{n} \alpha(x, x_{i}) y_{i} f(x)=i=1nα(x,xi)yi

α ( x , x i ) = K ( x − x i ) ∑ j = 1 n K ( x − x j ) \alpha(x, x_{i}) = \frac{ K( x - x_{i}) }{ \sum_{j=1}^{n} K(x - x_{j}) } α(x,xi)=j=1nK(xxj)K(xxi)

  • 上述两个公式合并后,所描述的估计器即为Nadaraya-Watson核回归。
  • 其中,x是查询, ( x i , y i ) (x_{i}, y_{i}) (xi,yi)是键值对, K是定义的核函数。
  • 注意力汇聚是 y i y_{i} yi的加权平均。
  • 对于任何查询,模型在所有键值对注意力权重都是一个有效的概率分布: 它们是非负的,并且总和为1。
  • 若一个键 x i x_{i} xi越接近给定的查询 x x x,那么分配给这个键对应值 y i y_{i} yi的注意力权重就会越大, 也就“获得了更多的注意力”。
  • Nadaraya-Watson核回归是一个非参数模型1

带参数注意力汇聚

  • 非参数的Nadaraya-Watson核回归具有一致性的优点: 如果有足够的数据,此模型会收敛到最优结果。
  • 我们还可以轻松地将可学习的参数集成到注意力汇聚中,下图以带参数w的高斯核为例:
    在这里插入图片描述

注意力评分函数

  • 高斯核指数部分可以视为注意力评分函数,简称评分函数(scoring function)。
    在这里插入图片描述

掩蔽softmax操作

  • 某些情况下,并非所有的值都应该被纳入到注意力汇聚中。 例如,为了高效处理小批量数据集,某些文本序列被填充了没有意义的特殊词元。 为了仅将有意义的词元作为值来获取注意力汇聚,可以指定一个有效序列长度(即词元的个数),以便在计算softmax时过滤掉超出指定范围的位置。
  • 其中任何超出有效长度的位置都被掩蔽并置为0。被掩蔽的元素使用一个非常大的负值替换,从而其softmax输出为0。

加性注意力

a ( q , k ) = w v T t a n h ( W q q + W k k ) ∈ R a (\mathbf{q}, \mathbf{k}) = \mathbf{w}_{v}^{T} tanh (\mathbf{W}_q \mathbf{q} + \mathbf{W}_k \mathbf{k}) \in \mathbb{R} a(q,k)=wvTtanh(Wqq+Wkk)R

  • 当查询和键是不同长度的矢量时,可用加性注意力作为评分函数,如上式:查询 q ∈ R q \mathbf{q} \in \mathbb{R}^{q} qRq,键 k ∈ R k \mathbf{k} \in \mathbb{R}^{k} kRk
  • W q ∈ R h × q , W k ∈ R h × k , w v ∈ R h \mathbf{W}_q \in \mathbb{R}^{h \times q}, \mathbf{W}_k \in \mathbb{R}^{h \times k}, \mathbf{w}_{v} \in \mathbb{R}^{h} WqRh×q,WkRh×k,wvRh

缩放点积注意力

  • 使用点积可以得到计算效率更高的评分函数。点积操作要求查询和键具有相同的长度d。
  • 假设查询和键的所有元素都是独立的随机变量, 并且都满足零均值和单位方差, 那么两个向量的点积的均值为0,方差为d。
    在这里插入图片描述
  • 为确保无论向量长度如何, 点积的方差在不考虑向量长度的情况下仍然是1, 故将点积除以 d \sqrt{d} d
  • 基于n个查询和m个键-值对计算注意力,查询和键的长度为d,值的长度为v,则最终缩放点积注意力为: s o f t m a x ( Q K T d ) V ∈ R n × v softmax(\frac{\mathbf{QK}^{T}}{\sqrt{d}})\mathbf{V} \in \mathbb{R}^{n \times v} softmax(d QKT)VRn×v

多头注意力

  • 当给定相同的查询、键和值的集合时,希望模型基于相同的注意力机制学习到不同的行为, 再将他们作为知识组合起来, 捕获序列内各种范围的依赖关系(如,短距依赖和长距依赖关系)。

在这里插入图片描述

自注意力和位置编码

比较卷积神经网络、循环神经网络和自注意力

在这里插入图片描述

  • 顺序操作会妨碍并行计算,而任意的序列位置组合之间的路径越短,则能更轻松地学习序列中的远距离依赖关系。
  • 如上图示卷积神经网络,序列长度为n,卷积核大小为k,则最大路径长度为 O ( n / k ) O(n/k) O(n/k) x 1 x_1 x1 x 5 x_5 x5处于卷积核大小为3的双层卷积神经网络的感受野内。
  • 自注意力中,查询、键和值都是 n × d n \times d n×d矩阵。 考虑缩放的点积注意力,其中 n × d n \times d n×d矩阵乘以 d × n d \times n d×n矩阵(这时进行了 n 2 d n^2 d n2d次乘法)。 之后输出的 n × n n \times n n×n矩阵乘以 n × d n \times d n×d矩阵(这时又进行了 n 2 d n^2 d n2d次乘法)。 因此,自注意力具有 O ( n 2 d ) O(n^2 d) O(n2d)计算复杂性。 每个词元都通过自注意力直接连接到任何其他词元,故有个 O ( 1 ) O(1) O(1)顺序操作可以并行计算, 最大路径长度也是 O ( 1 ) O(1) O(1)
  • 卷积神经网络和自注意力都拥有并行计算的优势, 且自注意力的最大路径长度最短。 但其计算复杂度是关于序列长度的二次方,所以在很长的序列中计算会非常慢。

位置编码

  1. 在处理词元序列时,自注意力因并行计算无法顺序操作而获得位置信息。 为克服这一问题,可在输入中添加位置编码(positional encoding)来注入绝对的或相对的位置信息。

  2. 对于位置编码,可能会有以下几种想法:

    • 想法一:直接整数1,2,3,…依序对tokens进行编码,这样做有以下几点不便之处:模型可能遇见比训练时所用的序列更长的序列,不利于模型的泛化;模型的位置表示无界,随着序列长度的增加,位置值会越来越大。
    • 想法二:将界限定为【0,1】,对该区间进行等间隔划分来一一匹配每个tokens,但当序列长度不同时,token间的相对距离是不一样的。
    • 想法三:二进制向量标记位置,比如输入序列每个词元的维度d=2,序列为a1, a2, a3, a4, 则对应编码可以为00, 01, 10,11。这样编码出的位置向量,处在一个离散的空间中,不同位置间的变化是不连续的。
  3. 我们需要这样一种位置表示方式,满足:
    (1)它能用来表示一个token在序列中的绝对位置;
    (2)在序列长度不同的情况下,不同序列中token的相对位置/距离也要保持一致;
    (3)可以用来表示模型在训练过程中从来没有看到过的句子长度。
    (4)位置向量的值是有界的,且位于连续空间中。模型在处理位置向量时更容易泛化,即更好处理长度和训练数据分布不一致的序列.
    (5)不同的位置向量是可以通过线性转换得到。

  4. 基于正弦函数和余弦函数的固定位置编码可以满足上述所有条件:

    • 对于一含有n个词元,每个词元有d个维度(n行d列)的输入 X ∈ R n × d \mathbf{X} \in \mathbb{R}^{n \times d} XRn×d,位置编码先构造其位置嵌入矩阵 P ∈ R n × d \mathbf{P} \in \mathbb{R}^{n \times d} PRn×d,再与序列结合构成 X + P \mathbf{X} + \mathbf{P} X+P作为一个整体输入模型。
    • 矩阵第i行的第2j列,第2j+1列上的元素表示为:
      { p i , 2 j = s i n ( i 1000 0 2 j / d ) p i , 2 j + 1 = c o s ( i 1000 0 2 j / d ) \begin{cases} p_{i,2j} = sin(\frac{i}{10000^{2j/d}}) \\ p_{i,2j+1} = cos(\frac{i}{10000^{2j/d}}) \end{cases} {pi,2j=sin(100002j/di)pi,2j+1=cos(100002j/di)
    • 从上述公式定义可以看出:
      • 三角函数频率 ω j = 1 1000 0 2 j / d \omega_{j} = \frac{1}{10000^{2j/d}} ωj=100002j/d1。取出某一个向量/词元,频率随维度增加而变小。这其实也类似于二进制编码,越往低位走(越往左边走),频率变化的越慢。
        在这里插入图片描述
绝对位置信息

在这里插入图片描述

  • 上图是长度为200、维度为150的序列转置后的位置矩阵PE(纵轴表示向量的维度d=150);下图是所在的位置向量中的第i个分量位置的sin/cos函数图像。两个图像的横轴都为词元位置p。
  • 这个图貌似并不匹配前述公式,看个意思就行。

在这里插入图片描述

  • 这个图没问题。
相对位置信息
  • 这种位置编码还可以使模型学习得到输入序列中相对位置信息:
    • 给定确定的位置偏移 δ \delta δ,根据线性投影原理,位置 i + δ i+\delta i+δ处的位置编码可以用位置 i i i处的位置编码来表示2
      在这里插入图片描述
位置编码小结:Q&A
  1. 为什么频率要设置为如此小的值?( ω j = 1 1000 0 2 j / d \omega_{j} = \frac{1}{10000^{2j/d}} ωj=100002j/d1随j增大逐渐减小):极小的频率,使得d列个sin,cos函数绘制在d维空间中的高维图形中存在重合部分,也即不同位置的编码可能出现完全相同的结果!

  举一个简单的例子,当只考虑sin函数,序列足够长,且序列中每个元素的维度d=3时,绘图如下所示:
在这里插入图片描述

  • 输入矩阵为400*3,其实t取点没取好,应该类似于t = linespace(1,400,400)更好些,不过问题不大。
  • 绘制出了每一列的函数图像,当序列足够长,长到满足高于最低频率sin函数的一个周期长度时,就有可能存在不同位置完全一致的情况,如图标记点所示。
  • 更一般的,我认为:只要保证各个维度上的正弦函数的周期的最小公倍数(也即公共周期)的长度小于序列长度,就不会有重合了。
  1. 为什么要同时引入sin和cos,而不是只用其中一种?:为了使其他的位置向量可以通过线性转换得到,见前述相对位置信息

  2. 位置编码的重要性质:

    • 两个位置编码的点积(dot product)仅取决于偏移量,也即两个位置编码的点积可以反应出两个位置编码间的距离。
      在这里插入图片描述

    • 性质二:位置编码的点积是无向的, P E t T ∗ P E t + Δ t = P E t T ∗ P E t − Δ t PE_{t}^{T} * PE_{t+\Delta t} = PE_{t}^{T} * PE_{t-\Delta t} PEtTPEt+Δt=PEtTPEtΔt。由于cos函数的对称性,基于性质1,这一点即可证明。

  3. 别人关于位置编码喂入attention层的补充:
    在这里插入图片描述

Transformer


  1. 参数模型通常假设总体服从某个分布,且该分布可由一些参数确定,如正态分布由均值和标准差确定,在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只知道其分布是存在的,所以就无法得到其分布的相关参数,只能通过非参数统计的方法进行推断。故,参数模型和非参数模型中的“参数”并不是模型中的参数,而是数据分布的参数。 ↩︎

  2. 一看到公式里的线性投影变换矩阵,想到了旋转矩阵,这里附上推导:https://zhuanlan.zhihu.com/p/433389563 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值