Transformer笔记
Transformer 模型笔记
Transformer 是一种基于自注意力机制的深度学习模型,广泛应用于自然语言处理任务,如机器翻译、文本生成等。
模型结构
Transformer 的整体架构由 Encoder 和 Decoder 两部分组成,每部分都包含若干个堆叠的子模块:
Encoder
- 输入:嵌入后的序列 $X \in \mathbb{R}^{n \times d}$
- 输出:编码后的序列表示 $Z \in \mathbb{R}^{n \times d}$
- 主要模块:
- 多头自注意力(Multi-Head Self-Attention)
- 前馈网络(Feed-Forward Network, FFN)
Decoder
- 输入:目标序列 $Y$ 和编码序列 $Z$
- 输出:解码序列 $Y’$
- 主要模块:
- 多头自注意力(目标序列)
- 编码-解码注意力
- 前馈网络(FFN)
核心组件
1. 自注意力机制(Self-Attention)
自注意力机制通过计算序列中每个位置与其他位置的相关性,提取全局依赖关系。
公式:
$
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V
$
- $Q, K, V$:分别是查询向量、键向量和值向量
- $d_k$:键向量的维度,用于缩放避免梯度消失
多头注意力:
$
\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)W^O
$
每个头计算一个注意力机制:
$
\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)
$
2. 前馈网络(FFN)
FFN 是一个简单的两层全连接网络,作用于每个序列位置。
公式:
$
\text{FFN}(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2
$
3. 位置编码(Positional Encoding)
Transformer 通过位置编码加入序列的位置信息。
公式:
$
PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{\frac{2i}{d}}}\right), \quad
PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{\frac{2i}{d}}}\right)
$
- $pos$:序列中的位置
- $i$:嵌入向量的维度索引
损失函数
Transformer 的损失函数通常是 交叉熵损失(Cross-Entropy Loss),适用于序列到序列任务。
公式:
$\begin{aligned}
\mathcal{L} = -\frac{1}{N} \sum_{i=1}^N \sum_{t=1}^T y_t \log \hat{y}_t
\end{aligned}$
- $y_t$:真实目标序列
- $\hat{y}_t$:模型预测序列
优化技巧
学习率调度:
使用 warmup 策略:
$
\text{lr} = d_\text{model}^{-0.5} \cdot \min(\text{step_num}^{-0.5}, \text{step_num} \cdot \text{warmup_steps}^{-1.5})
$正则化:
- Dropout:防止过拟合
- Label Smoothing:缓解过拟合问题
优点和缺点
优点:
- 并行计算能力强(无需递归)。
- 全局上下文建模能力强(通过注意力机制)。
- 对长序列具有良好的处理能力。
缺点:
- 对长序列的计算复杂度高,$O(n^2)$。
- 缺乏位置感知能力,需要通过位置编码补充。
应用
- 自然语言处理任务(机器翻译、文本摘要、语言模型等)
- 计算机视觉(Vision Transformer)
- 时间序列分析