Transformer 架构
一、背景:为什么需要 Transformer?
| 技术 | 核心思路 | 主要缺陷 |
|---|---|---|
| N-gram | 统计前面几个词,预测下一个词 | 无语义理解能力 |
| 词向量 (Word Embedding) | 将词映射为高维数字,语义相近的词距离近 | 本身不做预测 |
| 前馈神经网络 (FFN) | 用神经网络学习语言规律 | 只能处理固定长度,远距离信息丢失 |
| RNN | 引入隐藏状态传递记忆 | 长期记忆能力差,远距离信息易丢失 |
| LSTM | 增加长期记忆通道和门控机制 | 必须串行计算,效率低;远距离信息仍需逐层传递 |
核心痛点:两个距离很远的 Token(如"虎皮鹦鹉"和"那只")交换信息,必须经过中间所有 Token 一步步传话,效率低且信息易衰减。
二、核心创新:自注意力机制 (Self-Attention)
1. 基本思想
让句子中的 每个 Token 都能直接查看其他所有 Token,判断谁与自己最相关,然后按重要性"混合"信息。
- 例:处理"它"时,模型发现"虎皮鹦鹉"与"它"关系最强(权重 70%),"轩辕"关系最弱(10%)。
- 结果:"它"的新向量不再只是"它"本身的语义,而是融合了"虎皮鹦鹉"的上下文信息。
2. Q、K、V 三件套
这是理解注意力的关键:
| 向量 | 含义 | 类比 |
|---|---|---|
| Q (Query) | 我想找什么? | 搜索关键词 |
| K (Key) | 我这里有什么可供匹配? | 文档标签 |
| V (Value) | 我真正携带什么信息? | 文档内容 |
计算流程:
- 每个 Token 通过三个不同的线性变换,从自身词向量生成 Q、K、V。
- 用当前 Token 的 Q 与所有 Token(包括自己)的 K 做点积,得到匹配分数。
- 分数经 Softmax 转为权重(总和为 1)。
- 用权重对所有 Token 的 V 做加权求和,得到当前 Token 融合上下文后的新向量。
论文中还会除以
$\sqrt{d}$(维度平方根),防止点积结果过大导致 Softmax 过于极端。
三、多头注意力 (Multi-Head Attention)
问题:一句话中同时存在多种关系 (指代关系、修饰关系、动作关系等),一套 QKV 难以兼顾。
解决:并行使用多组独立的 QKV(即多个"头"),每组从不同角度捕捉关系。
- 原始 Transformer 使用 8 个头。
- 最后将各头的结果拼接,形成更丰富的表示。
优势:
- 所有 Token 的 QKV 可并行计算,适合 GPU 大规模加速。
- 彻底解决了 RNN/LSTM 必须串行计算的问题。
四、位置编码 (Positional Encoding)
问题:并行计算时,Token 的先后顺序信息丢失了。"轩辕养了鹦鹉"和"鹦鹉养了轩辕"会变成一样的输入。
解决:在每个 Token 的原始词向量上,额外加入表示位置信息的编码。
- 原始 Transformer 使用正弦/余弦函数生成位置编码。
- 词向量告诉模型"这个词是什么意思",位置编码告诉模型"这个词在什么位置"。
五、前馈神经网络 (FFN)
问题:Attention 只负责"收集信息"(如把"黑色""1万多块"的线索收集到"苹果"这里),但不做深度推理。
解 决:在每个 Attention 层后接 FFN,它不看其他 Token,只专注分析当前 Token 已有的特征组合。
- 例:苹果 + 高价 + 黑色 → FFN 推理出"这不像水果,像电子产品",从而压低"水果属性",增强"科技属性"。
分工:
- Attention:负责交流(从其他 Token 收集信息)。
- FFN:负责思考(分析特征组合,做研判)。
六、残差连接 (Residual Connection) 与归一化
问题:网络堆叠很深时,梯度在反向传播中逐层衰减,导致前面层几乎收不到训练信号(梯度消失)。
解决:将层的输入 x 直接加到输出上:y = f(x) + x
- 训练目标从"学完整的映射"变成"学还需要补多少"(残差)。
- 反向传播时多了一条"高速公路"(导数为 1),极大缓解梯度消失。
- 通常还会搭配 Layer Normalization(归一化) 使训练更稳定。
这让 Transformer 能稳定堆叠到几十层甚至上百层。
七、Encoder-Decoder 架构
原始 Transformer 为机器翻译设计,分为两部分:
1. 编码器 (Encoder)
- 任务:理解原文。
- 输入经词向量 + 位置编码后,通过多层自注意力 + FFN。
- 每个 Token 可以查看整句话的所有 Token(包括后面的)。
- 输出:一组融合了全文上下文信息的向量。
2. 解码器 (Decoder)
- 任务:生成译文,一个 Token 一个 Token 地输出。
- Masked Self-Attention(掩码自注意力):生成当前 Token 时,只能看自己和已经生成的 Token,后面的 Token 被 Mask 遮住(分数设为极小值),防止偷看答案。
- Cross-Attention(交叉注意力):用解码器的 Q 去查询编码器输出的 K 和 V,确保生成时能"回头看"原文。
- 最后经 FFN 处理,通过输出层对词表打分,Softmax 后取概率最高的词。
八、整体回顾:Transformer 的演化逻辑
Transformer 中的每个组件都不是凭空出现的,而是为了解决前一个结构暴露的问题:
| 问题 | 解决方案 |
|---|---|
| 远距离 Token 无法直接通信 | 自注意力机制 |
| 一套 QKV 无法捕捉多种关系 | 多头注意力 |
| 并行计算丢失顺序信息 | 位置编码 |
| 只收集信息不做深度分析 | 前馈神经网络 (FFN) |
| 网络太深导致梯度消失 | 残差连接 + 归一化 |
| 生成时偷看未来 Token | 掩码自注意力 (Mask) |
| 解码器需要参考原文 | 交叉注意力 (Cross-Attention) |