注意力评分函数
2021-12-5
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
Nadaraya-Watson 核回归中, 我们使用高斯核来对查询和键之间的关系建模。 可以将高斯核指数部分视为注意力评分函数, 简称评分函数, 然后把这个函数的输出结果输入到softmax函数中进行运算。 通过上述步骤,将得到与键对应的值的概率分布(即注意力权重)。 最后,注意力汇聚的输出就是基于这些注意力权重的值的加权和。
从宏观来看,可以使用上述算法来实现图中的注意力机制框架,表示注意力评分函数。 由于注意力权重是概率分布, 因此加权和其本质上是加权平均值。
notion image
用数学语言描述,假设有一个查询 个“键-值”对 , 其中 。 注意力汇聚函数就被表示成值的加权和:
其中查询 和键 的注意力权重(标量) 是通过注意力评分函数将两个向量映射成标量, 再经过softmax运算得到的:
选择不同的注意力评分函数会导致不同的注意力汇聚操作,这里介绍两个流行的评分函数。
 

掩蔽softmax操作

softmax操作用于输出一个概率分布作为注意力权重,在某些情况下,并非所有的值都应该被纳入到注意力汇聚中。 例如,为了高效处理小批量数据集, 某些文本序列被填充了没有意义的特殊词元, 为了仅将有意义的词元作为值来获取注意力汇聚, 可以指定一个有效序列长度(即词元的个数), 以便在计算softmax时过滤掉超出指定范围的位置。 通过这种方式,可以在下面的masked_softmax函数中实现这样的掩蔽softmax操作, 其中任何超出有效长度的位置都被掩蔽并置为0。
考虑由两个矩阵表示的样本, 这两个样本的有效长度分别为。 经过掩蔽softmax操作,超出有效长度的值都被掩蔽为0
同样也可以使用二维张量,为矩阵样本中的每一行指定有效长度
 
 

加性注意力

一般来说,当查询和键是不同长度的矢量时, 可以使用加性注意力作为评分函数。 给定查询和键 , 加性注意力(additive attention)的评分函数为
其中可学习的参数是 。 将查询和键连结起来后输入到一个多层感知机(MLP)中, 感知机包含一个隐藏层,其隐藏单元数是一个超参数 。 通过使用 作为激活函数,并且禁用偏置项。
下面实现加性注意力
用一个小例子来演示上面的AdditiveAttention, 其中查询、键和值的形状为(批量大小,步数或词元序列长度,特征大小), 实际输出为 。 注意力汇聚输出的形状为(批量大小,查询的步数,值的维度)
尽管加性注意力包含了可学习的参数,但由于本例子中每个键都是相同的, 所以注意力权重是均匀的,由指定的有效长度决定
notion image
 

缩放点积注意力

使用点积可以得到计算效率更高的评分函数, 但是点积操作要求查询和键具有相同的长度 。 假设查询和键的所有元素都是独立的随机变量, 并且都满足零均值和单位方差, 那么两个向量的点积的均值为 ,方差为 。 为确保无论向量长度如何, 点积的方差在不考虑向量长度的情况下仍然是 , 将点积除以 , 则缩放点积注意力(scaled dot-product attention)评分函数为:
在实践中,通常从小批量的角度来考虑提高效率, 例如基于 个查询和 个键-值对计算注意力, 其中查询和键的长度为 ,值的长度为 。 查询 、 键 和值 的缩放点积注意力是:
在下面的缩放点积注意力的实现中,使用了暂退法进行模型正则化
使用与先前加性注意力例子中相同的键、值和有效长度。 对于点积操作,令查询的特征维度与键的特征维度大小相同。
与加性注意力演示相同,由于键包含的是相同的元素, 而这些元素无法通过任何查询进行区分,因此获得了均匀的注意力权重。
notion image
 
  • PyTorch
  • 注意力汇聚:Nadaraya-Watson 核回归Bahdanau 注意力
    目录