AI-10 注意力机制
10.1. 注意力提示
考虑一个相对简单的状况, 即只使用非自主性提示。 要想将选择偏向于感官输入, 则可以简单地使用参数化的全连接层, 甚至是非参数化的最大汇聚层或平均汇聚层。
在注意力机制的背景下,自主性提示被称为查询(query)。 给定任何查询,注意力机制通过注意力汇聚(attention pooling) 将选择引导至感官输入(sensory inputs,例如中间特征表示)。
练习:
1在机器翻译中通过解码序列词元时,其自主性提示可能是什么?非自主性提示和感官输入又是什么?
query是自主性提示,key是非自主性提示,感官输入是value。
10.2. 注意力汇聚:Nadaraya-Watson 核回归
查询(自主提示)和键(非自主提示)之间的交互形成了注意力汇聚; 注意力汇聚有选择地聚合了值(感官输入)以生成最终的输出。 本节将介绍注意力汇聚的更多细节, 以便从宏观上了解注意力机制在实践中的运作方式。
练习:
1增加训练数据的样本数量,能否得到更好的非参数的Nadaraya-Watson核回归模型?
增加数据量不能得到更好的回归模型。
n=50
n=500
n=5000
2在带参数的注意力汇聚的实验中学习得到的参数w的价值是什么?为什么在可视化注意力权重时,它会使加权区域更加尖锐?
w的值大概12左右,注意力大的区域和注意力小的区域产生明显差距。
3如何将超参数添加到非参数的Nadaraya-Watson核回归中以实现更好地预测结果?
布吉岛
4为本节的核回归设计一个新的带参数的注意力汇聚模型。训练这个新模型并可视化其注意力权重。
10.3. 注意力评分函数
上一小节使用了高斯核来对查询和键之间的关系建模。 (10.2.6)中的 高斯核指数部分可以视为注意力评分函数(attention scoring function), 简称评分函数(scoring function), 然后把这个函数的输出结果输入到softmax函数中进行运算。 通过上述步骤,将得到与键对应的值的概率分布(即注意力权重)。
两种常见的注意力评分函数:
掩蔽softmax操作:在某些情况下,并非所有的值都应该被纳入到注意力汇聚中。
加性注意力:一般来说,当查询和键是不同长度的矢量时,可以使用加性注意力作为评分函数。
缩放点积注意力:使用点积可以得到计算效率更高的评分函数, 但是点积操作要求查询和键具有相同的长度d。为确保无论向量长度如何, 点积的方差在不考虑向量长度的情况下仍然是1, 我们再将点积除以d^(1/2),
练习:
1修改小例子中的键,并且可视化注意力权重。可加性注意力和缩放的“点-积”注意力是否仍然产生相同的结果?为什么?
加性注意力
缩点注意力
“点-积”注意力产生的注意力群众更集中于某一个元素,而加性注意力的权重更加均匀。
2只使用矩阵乘法,能否为具有不同矢量长度的查询和键设计新的评分函数?
可以,映射
3当查询和键具有相同的矢量长度时,矢量求和作为评分函数是否比“点-积”更好?为什么
点积得到的结果更好,因为他是个二维张量,解空间更大。
10.4. Bahdanau 注意力
Bahdanau等人提出了一个没有严格单向对齐限制的 可微注意力模型 (Bahdanau et al., 2014).在预测词元时,如果不是所有输入词元都相关,模型将仅对齐(或参与)输入序列中与当前预测相关的部分。这是通过将上下文变量视为注意力集中的输出来实现的。
在预测词元时,如果不是所有输入词元都是相关的,那么具有Bahdanau注意力的循环神经网络编码器-解码器会有选择地统计输入序列的不同部分。这是通过将上下文变量视为加性注意力池化的输出来实现的。
练习:
1在实验中用LSTM替换GRU。
LSTM
GRU
2修改实验以将加性注意力打分函数替换为缩放点积注意力,它如何影响训练效率?
运算加快了
10.5. 多头注意力
为此,与其只使用单独一个注意力汇聚, 我们可以用独立学习得到的h组不同的 线性投影(linear projections)来变换查询、键和值。然后,这h组变换后的查询、键和值将并行地送到注意力汇聚中。 最后,将这h个注意力汇聚的输出拼接在一起, 并且通过另一个可以学习的线性投影进行变换, 以产生最终输出。 这种设计被称为多头注意力(multihead attention)
练习:
1分别可视化这个实验中的多个头的注意力权重。
2假设有一个完成训练的基于多头注意力的模型,现在希望修剪最不重要的注意力头以提高预测速度。如何设计实验来衡量注意力头的重要性呢?
可以使用类似于Dropout的技术,随机地将某些注意力头从模型中删除,然后比较删除前后模型的性能差异。
优点:简单易行 缺点:可能会导致模型过拟合
10.6. 自注意力和位置编码
有了注意力机制之后,我们将词元序列输入注意力池化中, 以便同一组词元同时充当查询、键和值。 具体来说,每个查询都会关注所有的键-值对并生成一个注意力输出。 由于查询、键和值来自同一组输入,因此被称为 自注意力(self-attention)。
比较卷积神经网络、循环神经网络和自注意力:发现卷积神经网络和自注意力都拥有并行计算的优势, 而且自注意力的最大路径长度最短。 但是因为其计算复杂度是关于序列长度的二次方,所以在很长的序列中计算会非常慢。
在处理词元序列时,循环神经网络是逐个的重复地处理词元的, 而自注意力则因为并行计算而放弃了顺序操作。 为了使用序列的顺序信息,通过在输入表示中添加 位置编码(positional encoding)来注入绝对的或相对的位置信息。
练习:
1假设设计一个深度架构,通过堆叠基于位置编码的自注意力层来表示序列。可能会存在什么问题?
模型参数较多,而且可能存在过长的依赖关系。
2请设计一种可学习的位置编码方法。
额
10.7. Transformer
心心念念的transformer,Transformer模型完全基于注意力机制,没有任何卷积层或循环神经网络层。
Transformer是编码器-解码器架构的一个实例,其整体架构如图所示。
Transformer的编码器是由多个相同的层叠加而成的,每个层都有两个子层(子层表示为sublayer)。第一个子层是多头自注意力(multi-head self-attention)汇聚;第二个子层是基于位置的前馈网络(positionwise feed-forward network)。
Transformer解码器也是由多个相同的层叠加而成的,并且层中使用了残差连接和层规范化。
练习:
1在实验中训练更深的Transformer将如何影响训练速度和翻译效果?
两层
八层
2在Transformer中使用加性注意力取代缩放点积注意力是不是个好办法?为什么?
使用加性注意力取代缩放点积注意力取决于具体情况。如果需要处理更长的序列,则可以考虑使用加性注意力,但需要权衡计算成本和模型性能。如果需要较快的计算则点积注意力更合适。
3对于语言模型,应该使用Transformer的编码器还是解码器,或者两者都用?如何设计?
Transformer模型通常使用编码器,因为编码器可以将输入序列映射到一个语义空间中,从而提取输入序列的语义信息。在语言模型中,通常使用Transformer编码器。
4如果输入序列很长,Transformer会面临什么挑战?为什么?
可能会带来较多的运算负担,因为它需要记住所有输入的位置注意力权重。
5如何提高Transformer的计算速度和内存使用效率?提示:可以参考论文 (Tay et al., 2020)。
参数共享等方式
6如果不使用卷积神经网络,如何设计基于Transformer模型的图像分类任务?提示:可以参考Vision Transformer (Dosovitskiy et al., 2021)。
卷积这种操作缺乏对图像本身的全局理解,无法建模特征之间的依赖关系,从而不能充分地利用上下文信息。此外,卷积的权重是固定的,并不能动态地适应输入的变化。因此,研究人员尝试将自然语言处理领域中的Transformer模型迁移到计算机视觉任务。Vision Transformer(简称:VIT):一种完全基于自注意力机制的图像分类方法,将自然语言处理领域中的Transformer模型迁移到计算机视觉任务。相比CNN,Transformer的自注意力机制不受局部相互作用的限制,既能挖掘长距离的依赖关系又能并行计算。