1. 自注意力机制
自注意力机制(Self-Attention Mechanism)允许模型在处理序列中的一个元素时,动态地、有侧重地关注所有其他元素(包括其自身),进而计算出该元素的一个新的、深度融合了上下文信息的向量表示。
在自注意力机制出现之前,主流的序列处理模型(如 RNN、LSTM)存在两大核心局限:
- 长距离依赖捕捉难:由于信息需要按顺序逐步传递,距离过长时,关键信息容易丢失。
- 无法并行计算:顺序处理的特性限制了其在现代硬件(如 GPU)上的训练速度。
自注意力机制的解决方案:
- 轻松捕捉长距离依赖:它能直接计算序列中任意两个位置的关联,路径长度为常数 O(1),不受距离影响。
- 实现高度并行计算:所有位置的注意力可以同时计算,极大提升了计算效率,使得训练更大、更深的模型成为可能。
2. 核心机制:Query, Key, Value (QKV)
自注意力机制的核心,是将每个输入词元的向量表示,通过学习到的权重矩阵 (W_q
, W_k
, W_v
),转换为三个扮演不同角色的向量:查询 (Query)、键 (Key) 和值 (Value)。
三者的关系理解:
- Query (Q) - 我为了理解自己,需要问别人的问题
- Key (K) - 我能响应什么样的提问
- Value (V) - 如果你关注我,这是我能贡献的实际信息
交互流程:
- 匹配: 用当前词的 Query 与所有词的 Key 进行点积计算,得到相关性得分。得分越高,表示 Q 和 K 越匹配。
- 加权: 将得分通过 Softmax 函数转化为权重,代表“注意力”的分配。
- 融合: 用得到的权重对所有词的 Value 进行加权求和,生成当前词的最终输出向量。这个新向量深度融合了上下文信息,因为它包含了它最关注的词的语义。
把 token 转换成 QKV
假设输入序列经过嵌入和位置编码后得到向量矩阵 X=[x_1,x_2,...,x_n]
。模型会学习三组权重矩阵:W_q
, W_k
, W_v
。对序列中的每个向量 x_i
: