自注意力机制
自注意力是Transformer的核心创新,它允许序列中的每个位置与所有其他位置建立直接联系,捕捉任意距离的依赖关系。
01注意力机制概述
注意力机制模拟人类视觉注意力,让模型能够动态关注输入中最相关的部分。
注意力机制的起源
注意力机制最早在2014年用于图像描述生成和机器翻译(Bahdanau等人), 解决了Seq2Seq模型的"信息瓶颈"问题。
传统Seq2Seq的问题
编码器必须将整个源序列的信息压缩到一个固定长度的向量中, 导致长序列信息丢失。注意力机制允许解码器在生成每个词时, 直接关注源序列的相关部分。
自注意力的定义
自注意力(Self-Attention)也称为内部注意力(Intra-Attention), 是同一序列不同位置之间的注意力机制。
自注意力的核心思想
对于序列中的每个位置,计算它与序列中所有位置的相似度, 然后根据相似度对所有位置的信息进行加权求和,得到该位置的输出表示。
02Query-Key-Value
Query-Key-Value是注意力计算的核心抽象,将输入分离为查询、键和值三个向量。
QKV原理
对于每个输入token,我们生成三个向量:Query(查询)、Key(键)和Value(值)。
三个向量的含义
- Query(查询):当前位置想要查找的信息
- Key(键):每个位置的"索引",用于匹配Query
- Value(值):每个位置的实际信息,用于加权求和
计算方式
输入嵌入 X 通过三个线性变换得到:
Q = XWQ, K = XWK, V = XWV
注意力计算公式
Scaled Dot-Product Attention是Transformer使用的注意力机制:
公式
Attention(Q, K, V) = softmax(QKT / √dk)V
计算步骤
- QKT:计算Query和Key的点积,得到注意力分数
- 除以 √dk:缩放,防止梯度消失/爆炸
- softmax:归一化,得到注意力权重
- 乘以V:加权求和,得到输出
为什么用点积?
- 计算效率高,可以利用矩阵乘法高度并行
- 点积值越大,相似度越高,符合直觉
- 深度学习中经过验证的有效机制
03缩放因子
缩放因子 √dk 是Transformer稳定训练的关键因素之一。
点积过大的问题
当维度 dk 较大时,点积的值会变得很大, 导致softmax函数进入饱和区域。
问题分析
假设Q和K的各个分量是均值为0、方差为1的独立随机变量:
那么 QKT 的每个元素的均值为0,方差为 dk
当 dk 很大时,方差很大,点积的值会很大
softmax的饱和问题
当输入值很大时,softmax的梯度趋近于0,导致训练困难。 例如 softmax([10, 5, 2]) ≈ [0.99, 0.01, 0],梯度几乎为0。
缩放解决方案
除以 √dk 可以将点积的方差缩放到1,避免softmax饱和。
缩放因子的作用
- 使softmax的输入方差稳定在1左右
- 保证梯度在训练初期不会消失
- 使得注意力权重分布更加平滑
为什么是 √dk?
如果 Q 和 K 的分量是独立的随机变量,方差为1, 那么 QKT 的方差是 dk, 标准差是 √dk。 除以 √dk 后,方差变为1。
其他注意力变体
- Additive Attention:使用前馈网络计算注意力,非点积
- Location-based Attention:只基于位置,不使用QK
- Multiplicative Attention:一般的缩放点积注意力