从RNN到Transformer:深度学习架构革命
Transformer架构详解:从基础到深度学习
本文是对Transformer模型论文《Attention is All You Need》的深度解读与教学总结
第一部分:机器学习基础
1.1 决策树模型简介
在学习深度学习之前,我们需要理解机器学习的基本概念。决策树是一个经典的机器学习算法,用于分类和回归任务。
核心概念:
- 训练数据:表格形式,每一行代表一个样本
- 特征(Features):表格中的每一列,用数值表示不同属性
- 标签列(Label):最后一列,代表我们要预测的目标
例子:奶茶价格预测
- 输入特征:天气、温度、是否健身等
- 输出标签:奶茶价格
1.2 基尼指数与节点纯度
在构建决策树时,我们需要评估每个分割点的质量。基尼指数用来衡量节点的纯度。
- 基尼系数越低 → 节点纯度越高 → 数据分类效果越好
- 基尼系数越高 → 节点纯度越低 → 需要进一步分割
1.3 特征选择策略
在众多可能的分割点中,我们需要选择最优的特征来分割数据。
选择标准:
- 计算不同特征的基尼系数
- 选择能最有效降低加权基尼系数的特征
- 考虑特征的样本数量,样本更多的特征权重更高
第二部分:序列模型的演进
2.1 循环神经网络(RNN)
RNN的工作原理:
RNN按顺序处理序列数据,每一步都计算隐藏状态(Hidden State, H_t)。
Ht=f(Ht−1,Xt)H_t = f(H_{t-1}, X_t)Ht=f(Ht−1,Xt)
其中:
- Ht−1H_{t-1}Ht−1:前一时刻的隐藏状态
- XtX_tXt:当前时刻的输入
- HtH_tHt:当前时刻的隐藏状态
RNN的特点:
- ✓ 能显式建模序列信息
- ✓ 参数共享
- ✗ 顺序计算,无法并行化
- ✗ 长序列易出现梯度消失/爆炸问题
计算复杂度: O(N×D2)O(N \times D^2)O(N×D2)
- N:序列长度
- D:隐藏维度
2.2 卷积神经网络(CNN)
CNN在序列上的应用:
使用卷积核处理序列数据,每个输出由大小为K的窗口决定。
优势:
- ✓ 可以并行计算
- ✓ 计算效率高
- ✗ 感受野受限于卷积核大小
- ✗ 长距离信息需要多层传播
计算复杂度: O(K×N×D2)O(K \times N \times D^2)O(K×N×D2)
- K:卷积核大小(通常为3-5)
2.3 注意力机制(Attention)
注意力机制的革命性意义:
注意力机制允许模型直接建立序列中任意两个位置之间的关系,无论它们相距多远。
第三部分:Transformer架构详解
3.1 Transformer的核心设计
基本结构:编码器-解码器架构
输入 → 编码器(N层) → 编码器输出 ↓解码器(N层) ← 解码器输入↓输出层↓最终输出
3.2 缩放点积注意力(Scaled Dot-Product Attention)
计算过程:
- 计算相似度:
Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dkQKT)V
其中:
- Q(Query):查询向量
- K(Key):键向量
- V(Value):值向量
- dkd_kdk:键的维度
- 为什么要除以 dk\sqrt{d_k}dk?
当dkd_kdk较大时:
- 点积值会变得很大或很小
- Softmax的梯度会变小(梯度消失)
- 权重分布会过于尖锐,集中在最大值
- 除以dk\sqrt{d_k}dk可以稳定梯度流
- 实际计算(矩阵形式):
Q_matrix = [query_1, query_2, ..., query_n]
K_matrix = [key_1, key_2, ..., key_n]
V_matrix = [value_1, value_2, ..., value_n]scores = Q_matrix × K_matrix^T / √d_k
weights = softmax(scores)
output = weights × V_matrix
3.3 多头注意力(Multi-Head Attention)
概念:
不是用单个注意力函数,而是用多个注意力头并行计算,然后合并结果。
MultiHead(Q,K,V)=Concat(head1,...,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^OMultiHead(Q,K,V)=Concat(head1,...,headh)WO
优势:
- 不同的注意力头可以关注不同的特征
- 提高模型的表现力
3.4 编码器结构
单个编码器层包含两个子层:
-
多头自注意力层
- 查询、键、值都来自同一输入
- 允许每个位置关注所有位置
-
前馈神经网络(FFN)
FFN(x) = max(0, xW_1 + b_1)W_2 + b_2
- 隐藏维度通常是输入维度的4倍
- 例如:512维 → 2048维 → 512维
编码器的完整流程:
输入 → 位置编码 → [自注意力 + 残差连接 + LayerNorm] → [FFN + 残差连接 + LayerNorm] → 输出
3.5 解码器结构
解码器与编码器的主要区别:
-
掩蔽自注意力(Masked Self-Attention)
- 在解码器中,当前位置不能看到未来的位置
- 通过掩蔽矩阵实现:将未来位置的注意力权重设为0
-
编码器-解码器交叉注意力
- 查询来自解码器上一层
- 键和值来自编码器输出
- 允许解码器关注编码器的所有位置
-
自回归生成
- 一次生成一个标记
- 已生成的标记作为下一步的输入
3.6 位置编码(Positional Encoding)
问题: 标准注意力对位置顺序不敏感
解决方案: 使用三角函数位置编码
PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos, 2i) = \sin(pos / 10000^{2i/d_{model}})PE(pos,2i)=sin(pos/100002i/dmodel)
PE(pos,2i+1)=cos(pos/100002i/dmodel)PE(pos, 2i+1) = \cos(pos / 10000^{2i/d_{model}})PE(pos,2i+1)=cos(pos/100002i/dmodel)
特点:
- 使用正弦和余弦函数
- 每个维度有不同的频率
- 允许模型学习相对位置关系
- 可以处理比训练集更长的序列
3.7 层归一化(Layer Normalization)
与批量归一化的区别:
批量归一化:对一个批次的相同特征进行归一化
BN: 将特征维度标准化为均值0、方差1
层归一化:对每个样本的所有特征进行归一化
LayerNorm: 将序列中的每个向量标准化
在Transformer中的应用:
- 在每个子层的残差连接之后
- 提高训练稳定性和收敛速度
第四部分:计算复杂度分析
4.1 三种架构的复杂度对比
架构 | 时间复杂度 | 空间复杂度 | 并行度 |
---|---|---|---|
RNN | O(N×D2)O(N \times D^2)O(N×D2) | O(N×D)O(N \times D)O(N×D) | 低(顺序) |
CNN | O(K×N×D2)O(K \times N \times D^2)O(K×N×D2) | O(N×D)O(N \times D)O(N×D) | 高 |
Attention | O(N2×D)O(N^2 \times D)O(N2×D) | O(N2)O(N^2)O(N2) | 高 |
4.2 实际场景分析
对于现代模型(如BERT):
- 模型宽度D ≈ 512
- 序列长度N ≈ 几百到几千
此时:
- N2≈D2N^2 \approx D^2N2≈D2
- Attention和其他架构的复杂度相近
- Attention的并行优势更加明显
4.3 性能优化
长序列处理的改进:
- 局部注意力:每个查询只关注最近的K个位置
- 优点:减少计算量到O(K×N)O(K \times N)O(K×N)
- 缺点:可能丢失长距离依赖
第五部分:Transformer的广泛应用
5.1 BERT和GPT的继承
Transformer架构的简洁性使其易于应用到各种任务:
BERT(双向编码器):
- 使用编码器进行文本理解
- 适合分类、标记、问答任务
GPT(生成预训练):
- 使用仅解码器架构
- 适合文本生成任务
5.2 多模态扩展
Transformer已成功应用于:
- 文本处理: NLP所有主流任务
- 图像处理: Vision Transformer(ViT)
- 语音处理: 音频特征建模
- 视频处理: 时空信息融合
5.3 架构的通用性
关键参数(可调):
- 层数(Depth)
- 隐藏维度(Hidden Dimension)
- 注意力头数(Number of Heads)
- FFN隐藏维度倍数
通过调整这些参数,同一架构可适配不同任务和数据量。
第六部分:论文评价
6.1 写作风格
优点:
- 高效简洁,信息密度大
- 逻辑清晰,循序渐进
建议:
- 加入更多动机说明
- 讲述为什么做这个设计
- 增加设计理念的阐述
- 这样可以让读者有更深的理解
6.2 模型的创新意义
革命性影响:
- 在几乎所有NLP任务上取得SOTA
- 简化了任务特定的模型设计
- 启发了后续多个研究方向
类比: 如同CNN在计算机视觉的地位
6.3 后续研究方向
论文激发了众多研究:
- 架构创新: 尝试MLP、其他简单架构
- 多模态融合: 统一处理不同数据类型
- 效率优化: 减少计算量和内存占用
- 长序列处理: 改进对超长输入的支持
第七部分:关键收获
7.1 核心洞察
-
自注意力的强大
- 不需要显式的顺序归纳偏置
- 可以捕捉长距离依赖
-
通用架构的力量
- 同一模型可适配多种任务
- 大规模预训练是关键
-
并行计算的重要性
- RNN的顺序性成为主要瓶颈
- Attention的可并行性支持大模型训练
- 原论文:《Attention is All You Need》(Vaswani et al., 2017)
- 官方代码:TensorFlow Transformer库
- 学习资源:PyTorch官方教程