从RNN到Transformer:深度学习架构革命

Transformer架构详解:从基础到深度学习

本文是对Transformer模型论文《Attention is All You Need》的深度解读与教学总结

第一部分:机器学习基础

1.1 决策树模型简介

在学习深度学习之前,我们需要理解机器学习的基本概念。决策树是一个经典的机器学习算法,用于分类和回归任务。

核心概念:

  • 训练数据:表格形式,每一行代表一个样本
  • 特征(Features):表格中的每一列,用数值表示不同属性
  • 标签列(Label):最后一列,代表我们要预测的目标

例子:奶茶价格预测

  • 输入特征:天气、温度、是否健身等
  • 输出标签:奶茶价格

1.2 基尼指数与节点纯度

在构建决策树时,我们需要评估每个分割点的质量。基尼指数用来衡量节点的纯度。

  • 基尼系数越低 → 节点纯度越高 → 数据分类效果越好
  • 基尼系数越高 → 节点纯度越低 → 需要进一步分割

1.3 特征选择策略

在众多可能的分割点中,我们需要选择最优的特征来分割数据。

选择标准:

  1. 计算不同特征的基尼系数
  2. 选择能最有效降低加权基尼系数的特征
  3. 考虑特征的样本数量,样本更多的特征权重更高

第二部分:序列模型的演进

2.1 循环神经网络(RNN)

RNN的工作原理:

RNN按顺序处理序列数据,每一步都计算隐藏状态(Hidden State, H_t)。

H t = f ( H t − 1 , X t ) H_t = f(H_{t-1}, X_t) Ht=f(Ht−1,Xt)

其中:

  • H t − 1 H_{t-1} Ht−1:前一时刻的隐藏状态
  • X t X_t Xt:当前时刻的输入
  • H t H_t Ht:当前时刻的隐藏状态

RNN的特点:

  • ✓ 能显式建模序列信息
  • ✓ 参数共享
  • ✗ 顺序计算,无法并行化
  • ✗ 长序列易出现梯度消失/爆炸问题

计算复杂度: O ( N × D 2 ) O(N \times D^2) O(N×D2)

  • N:序列长度
  • D:隐藏维度

2.2 卷积神经网络(CNN)

CNN在序列上的应用:

使用卷积核处理序列数据,每个输出由大小为K的窗口决定。

优势:

  • ✓ 可以并行计算
  • ✓ 计算效率高
  • ✗ 感受野受限于卷积核大小
  • ✗ 长距离信息需要多层传播

计算复杂度: O ( K × N × D 2 ) 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)

计算过程:

  1. 计算相似度:
    Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V

其中:

  • Q(Query):查询向量
  • K(Key):键向量
  • V(Value):值向量
  • d k d_k dk:键的维度
  1. 为什么要除以 d k \sqrt{d_k} dk ?

当 d k d_k dk较大时:

  • 点积值会变得很大或很小
  • Softmax的梯度会变小(梯度消失)
  • 权重分布会过于尖锐,集中在最大值
  • 除以 d k \sqrt{d_k} dk 可以稳定梯度流
  1. 实际计算(矩阵形式):

    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 ( head 1 , . . . , head h ) W O \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O MultiHead(Q,K,V)=Concat(head1,...,headh)WO

优势:

  • 不同的注意力头可以关注不同的特征
  • 提高模型的表现力

3.4 编码器结构

单个编码器层包含两个子层:

  1. 多头自注意力层

    • 查询、键、值都来自同一输入
    • 允许每个位置关注所有位置
  2. 前馈神经网络(FFN)

    复制代码
    FFN(x) = max(0, xW_1 + b_1)W_2 + b_2
    • 隐藏维度通常是输入维度的4倍
    • 例如:512维 → 2048维 → 512维

编码器的完整流程:

复制代码
输入 → 位置编码 → [自注意力 + 残差连接 + LayerNorm] → [FFN + 残差连接 + LayerNorm] → 输出

3.5 解码器结构

解码器与编码器的主要区别:

  1. 掩蔽自注意力(Masked Self-Attention)

    • 在解码器中,当前位置不能看到未来的位置
    • 通过掩蔽矩阵实现:将未来位置的注意力权重设为0
  2. 编码器-解码器交叉注意力

    • 查询来自解码器上一层
    • 键和值来自编码器输出
    • 允许解码器关注编码器的所有位置
  3. 自回归生成

    • 一次生成一个标记
    • 已生成的标记作为下一步的输入

3.6 位置编码(Positional Encoding)

问题: 标准注意力对位置顺序不敏感

解决方案: 使用三角函数位置编码

P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d m o d e l ) PE(pos, 2i) = \sin(pos / 10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel)
P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d m o d e l ) 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 × D 2 ) O(N \times D^2) O(N×D2) O ( N × D ) O(N \times D) O(N×D) 低(顺序)
CNN O ( K × N × D 2 ) O(K \times N \times D^2) O(K×N×D2) O ( N × D ) O(N \times D) O(N×D)
Attention O ( N 2 × D ) O(N^2 \times D) O(N2×D) O ( N 2 ) O(N^2) O(N2)

4.2 实际场景分析

对于现代模型(如BERT):

  • 模型宽度D ≈ 512
  • 序列长度N ≈ 几百到几千

此时:

  • N 2 ≈ D 2 N^2 \approx D^2 N2≈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 核心洞察

  1. 自注意力的强大

    • 不需要显式的顺序归纳偏置
    • 可以捕捉长距离依赖
  2. 通用架构的力量

    • 同一模型可适配多种任务
    • 大规模预训练是关键
  3. 并行计算的重要性

    • RNN的顺序性成为主要瓶颈
    • Attention的可并行性支持大模型训练
  • 原论文:《Attention is All You Need》(Vaswani et al., 2017)
  • 官方代码:TensorFlow Transformer库
  • 学习资源:PyTorch官方教程
相关推荐
zenRRan4 小时前
用中等难度prompt做高效post training
人工智能·深度学习·机器学习·计算机视觉·prompt
Cathy Bryant8 小时前
大模型推理(九):采样温度
笔记·神经网络·机器学习·数学建模·transformer
java1234_小锋8 小时前
TensorFlow2 Python深度学习 - 循环神经网络(SimpleRNN)示例
python·深度学习·tensorflow·tensorflow2
java1234_小锋8 小时前
TensorFlow2 Python深度学习 - 通俗理解池化层,卷积层以及全连接层
python·深度学习·tensorflow·tensorflow2
Psycho_MrZhang9 小时前
自定义层和读写文件
pytorch·python·深度学习
哥布林学者10 小时前
吴恩达深度学习课程一:神经网络和深度学习 第三周:浅层神经网络(三)
深度学习·ai
MIXLLRED10 小时前
YOLO学习——训练进阶和预测评价指标
深度学习·学习·yolo
Scc_hy11 小时前
强化学习_Paper_2000_Eligibility Traces for Off-Policy Policy Evaluation
人工智能·深度学习·算法·强化学习·rl
来酱何人11 小时前
低资源NLP数据处理:少样本/零样本场景下数据增强与迁移学习结合方案
人工智能·深度学习·分类·nlp·bert