神经网络Transformer架构中的多头注意力
第一步:注意力机制的基本概念
注意力机制的核心思想是让模型在处理信息时,能够动态地关注输入中不同部分的重要性。例如,在翻译“她喜欢人工智能”为英文时,模型应更关注“她”对应到“She”,而“人工智能”对应到“AI”。具体实现中,每个输入元素(如单词)会被赋予一个权重,权重高的元素对当前输出的影响更大。权重的计算通常通过查询(Query)、键(Key)和值(Value)完成:Query表示当前需要关注的位置,Key表示所有输入元素的标识,Value是实际携带的信息。权重由Query和Key的相似度(如点积)决定,再对Value加权求和。
第二步:缩放点积注意力
在Transformer中,注意力权重的计算进一步优化为“缩放点积注意力”。首先,Query和Key进行点积运算,得到相似度分数;接着,将分数除以Key向量维度的平方根(缩放因子),防止点积结果过大导致梯度不稳定;然后,通过Softmax函数将分数转化为概率分布;最后,用权重对Value加权求和。公式表示为:
\[ \text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]
其中,\(d_k\) 是Key的维度。这一步实现了对输入信息的聚焦提取。
第三步:多头注意力的设计与动机
单一注意力机制可能无法同时捕捉输入中不同类型的关系。例如,一个句子中可能同时存在语法结构、语义关联和指代关系。多头注意力通过并行运行多个独立的注意力头来解决这一问题:
- 将Query、Key和Value通过不同的线性投影映射到多个子空间(头),每个头的维度降低为原维度除以头数。
- 在每个头中独立执行缩放点积注意力,得到不同的子空间表示。
- 将所有头的输出拼接起来,再通过一次线性变换融合信息。
这种设计使模型能够同时关注不同位置的多种依赖模式,提升表示能力。
第四步:多头注意力的计算过程
假设头数为 \(h\),输入维度为 \(d_{\text{model}}\),具体步骤为:
- 对每个头 \(i\)(\(i=1, \dots, h\)),使用独立的权重矩阵 \(W_i^Q, W_i^K, W_i^V\) 将输入映射到 \(d_k, d_k, d_v\) 维空间(通常 \(d_k = d_v = d_{\text{model}} / h\))。
- 计算每个头的输出:
\[ \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) \]
- 拼接所有头的输出:
\[ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O \]
其中 \(W^O\) 是输出变换矩阵。最终结果保留了多个注意力头捕获的多样化信息。
第五步:多头注意力的应用与优势
在Transformer中,多头注意力被用于编码器-解码器结构:
- 编码器:每个位置通过自注意力(Query、Key、Value均来自同一输入)捕捉上下文依赖。
- 解码器:在自注意力后增加交叉注意力(Query来自解码器,Key和Value来自编码器),实现对输入序列的定向关注。
优势包括:
- 并行计算效率高,适合GPU加速。
- 通过多头分工,模型能同时学习局部和全局特征,例如在机器翻译中兼顾词序和语义角色。
- 可解释性增强,可通过可视化注意力权重分析模型聚焦的区域。