一、Attention机制
1.1 背景与动机
传统RNN/LSTM的局限:
- 长序列处理能力受限(梯度消失/爆炸)
- 固定长度上下文向量导致信息损失
- 无法动态聚焦关键输入
Attention的提出:
- Bahdanau et al. (2015) 首次在神经机器翻译中引入Attention
- 核心思想:为每个输入词分配不同的重要性权重,动态生成上下文向量
1.2 Attention的工作原理
核心步骤:
- 分解输入:将输入序列(如句子)分解为单个词或数据单元。
- 计算重要性:通过Query与Key的相似度计算,为每个输入单元分配权重。
- 加权求和:根据权重对Value进行加权求和,生成上下文向量。
数学表达:
- 相似度计算:( \text{Score}(Q, K) = Q \cdot K )
- 权重分配:( \alpha = \text{Softmax}(\text{Score}) )
- 上下文向量:( \text{Context} = \sum (\alpha_i \cdot V_i) )
1.3 Attention的变体
全局Attention:
- 计算所有输入单元的权重,适合短序列任务。
- 复杂度:( O(n^2d) ),其中 ( n ) 为序列长度,( d ) 为向量维度。
局部Attention:
- 仅计算局部窗口内的权重,适合长序列任务。
- 复杂度:( O(nDd) ),其中 ( D ) 为窗口大小。
多头Attention:
- 并行计算多个Attention头,捕捉不同子空间的语义信息。
- 输出拼接:( \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O )
二、Transformer模型
2.1 架构概述
编码器-解码器结构:
- 编码器:将输入序列映射为隐藏表示。
- 解码器:基于编码器输出生成目标序列。
核心组件:
- 自注意力机制:捕捉序列内部的依赖关系。
- 前馈网络:对注意力输出进行非线性变换。
- 位置编码:为模型提供序列位置信息。
2.2 位置编码
- 目的:弥补Transformer缺乏序列顺序感知的缺陷。
- 实现方式:
- 正弦/余弦函数编码:
[
PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right), \quad PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)
] - 优点:无需训练参数,支持任意长度序列。
- 正弦/余弦函数编码:
2.3 Transformer的工作流程
- 输入处理:
- 词嵌入:将输入词映射为向量。
- 位置编码:为词向量添加位置信息。
- 编码器:
- 多头自注意力:计算输入序列的上下文表示。
- 前馈网络:对注意力输出进行非线性变换。
- 解码器:
- 掩码自注意力:防止未来信息泄露。
- 编码器-解码器注意力:融合编码器输出。
- 前馈网络:生成目标序列。