Transformer 是一种基于注意力机制的深度学习模型,广泛应用于自然语言处理、时间序列预测等领域。
其核心在于自注意力机制,能够高效捕捉序列中的全局依赖关系,取代传统的 RNN 和 CNN。
注意力机制:通过计算输入序列中各元素之间的关联,动态分配权重。
注意力机制:通过计算输入序列中各元素之间的关联,动态分配权重,捕捉重要信息。
自注意力:每个元素与序列中所有元素(包括自身)进行关联计算,生成新的表示。
多头注意力:并行运行多个自注意力,增强模型对不同关系的建模能力。
$(Q)$ :Query(查询向量)矩阵,表示当前序列中,每个位置想要“查什么信息”。来自输入通过 $(W^Q)$ 线性变换得到。
$(K)$ :Key(键向量)矩阵,表示每个位置“提供什么特征”。来自输入通过 $(W^K)$ 线性变换得到。
$(V)$ :Value(值向量)矩阵,表示每个位置“真正要被取出的内容”。来自输入通过 $(W^V)$ 线性变换得到。
$(QK^T)$ :Query 与 Key 的点积,得到注意力“相关性得分矩阵”(越大越相关)。
$(d_k)$ :Key 向量的维度(例如 64)。用于缩放,防止点积过大导致梯度问题。
$(\sqrt{d_k})$ :缩放因子,使注意力得分保持在合理范围,利于 softmax 稳定训练。
$(\frac{QK^T}{\sqrt{d_k}})$:缩放后的注意力得分矩阵(未归一化)。
$(\text{softmax}(\cdot))$ :对每一行进行 softmax,得到“注意力权重”(总和为 1)。
$(\text{softmax}(\cdot)V)$ :注意力权重对 Value 的加权求和,就是最终注意力输出。
--------------------------------------------------------------------------------
$(h)$ :多头数量,例如 8 或 12。每一头都独立做一次 Attention。
$(\text{head}_i)$ :第 $(i)$ 个注意力头的输出,计算方式: $(\text{Attention}(QW_i^Q, KW_i^K, VW_i^V))$。
$(W_i^Q)$ :第 $(i)$ 个头的 Query 投影矩阵,将输入映射到该头的特征空间。
$(W_i^K)$ :第 $(i)$ 个头的 Key 投影矩阵。
$(W_i^V)$ :第 $(i)$ 个头的 Value 投影矩阵。
$(\text{Concat}(\text{head}_1,\ldots,\text{head}_h))$:将所有头的输出按维度拼接(不是相加,是拼接)。
$(W^O)$ :输出线性变换矩阵,将拼接后的结果映射回原模型维度。
--------------------------------------------------------------------------------
| 参数名 | 描述 | 值范围 | 默认值 | 建议值 |
|---|---|---|---|---|
| d_k | Key 维度 | - | - | - |
| learning_rate | 学习率 | - | - | - |
| num_heads | 注意力头数 | - | - | - |
| window_size | 序列窗口长度 | - | - | - |
1. 输入序列 → 变成 embedding(向量表示)。
2. 加上位置编码(告诉模型顺序信息)。
3. 输入到多层编码器/解码器:每层包含多头自注意力 + 前馈网络 + 残差 + 层归一化。
4. 得到隐藏状态。
5. 输出层用 softmax 转换为概率,得到下一个 token 的预测分布。
· 并行计算:不同于 RNN,Transformer 可以同时处理整个序列。
· 长依赖建模:自注意力能直接连接远距离元素。
· 可扩展性强:容易加深/加宽,支持大模型训练。
· 通用性强:适用于文本、图像、语音、时间序列。
假设输入序列为 [123, 456, 789],Transformer 模型预测下一个三位数:
1. 将每个三位数转为 embedding。
2. 通过多头自注意力捕捉序列模式。
3. 输出预测下一个三位数(如 234)。
以下是伪代码: