// learning_article

Transformer架构详解:从注意力机制到BERT

深入理解Transformer架构的核心原理和应用

技术文章模型架构 22分钟2025-03-0518,900 阅读
Transformer注意力机制BERTNLP

引言

Transformer架构自2017年提出以来,彻底改变了自然语言处理领域。从BERT到GPT,从机器翻译到文本生成,Transformer已成为现代NLP的基石。本文将深入解析Transformer的核心机制。

一、注意力机制基础

1.1 为什么需要注意力机制

传统RNN处理序列的局限性:

  • 长期依赖问题: 距离较远的信息难以传递
  • 顺序计算: 无法并行化,训练效率低
  • 信息瓶颈: 所有信息压缩到固定长度向量

1.2 注意力机制的直觉

类比人类阅读理解:

  • 阅读时会重点关注某些关键词
  • 理解一个词时会参考上下文
  • 不同词的重要性不同

1.3 注意力计算

三个核心概念:

  • Query(Q): 查询向量,当前要处理的信息
  • Key(K): 键向量,用于匹配的信息
  • Value(V): 值向量,实际要提取的信息

计算步骤:

  • 1. 计算Q和K的相似度得到注意力分数
  • 2. 对分数进行Softmax归一化得到注意力权重
  • 3. 用权重加权求和V得到输出

二、Self-Attention(自注意力)

2.1 核心思想

Self-Attention让序列中的每个位置都能关注到其他所有位置,捕捉全局依赖关系。

2.2 计算流程

步骤1: 生成Q、K、V

  • 输入向量通过三个权重矩阵Wq、Wk、Wv线性变换
  • 得到Query、Key、Value向量

步骤2: 计算注意力分数

  • Score = Q · K^T / √d_k
  • 除以√d_k进行缩放,避免梯度过小

步骤3: Softmax归一化

  • 将分数转换为概率分布
  • 确保权重和为1

步骤4: 加权求和

  • 用注意力权重对Value加权
  • 得到该位置的输出表示

2.3 优势

  • 并行计算: 所有位置可同时计算
  • 全局视野: 直接建模任意距离的依赖
  • 可解释性: 注意力权重可视化

三、Multi-Head Attention(多头注意力)

3.1 为什么需要多头

类似CNN的多通道:

  • 不同的头关注不同的特征子空间
  • 捕捉多种类型的依赖关系
  • 增强模型表达能力

3.2 实现方式

  • 将Q、K、V分成h个头
  • 每个头独立做Self-Attention
  • 拼接所有头的输出
  • 通过线性层融合

3.3 典型配置

  • BERT-base: 12个头,每个头维度64
  • BERT-large: 16个头,每个头维度64
  • GPT-3: 96个头

四、Transformer架构

4.1 整体结构

Encoder(编码器):

  • 输入嵌入 + 位置编码
  • N个Encoder层堆叠
  • 每层包含:
    • Multi-Head Self-Attention
    • Feed-Forward Network
    • 残差连接 + Layer Normalization

Decoder(解码器):

  • 输出嵌入 + 位置编码
  • N个Decoder层堆叠
  • 每层包含:
    • Masked Multi-Head Self-Attention
    • Cross-Attention(关注Encoder输出)
    • Feed-Forward Network
    • 残差连接 + Layer Normalization

4.2 位置编码

由于Self-Attention本身不包含位置信息,需要添加位置编码:

  • 正弦位置编码: 原始论文使用,固定的周期函数
  • 可学习位置编码: BERT使用,通过训练学习

4.3 残差连接和Layer Norm

残差连接(Residual Connection):

  • 输出 = LayerNorm(输入 + Sublayer(输入))
  • 缓解梯度消失,方便训练深层网络

Layer Normalization:

  • 对每个样本的所有特征归一化
  • 稳定训练过程

五、BERT:预训练语言模型

5.1 BERT的创新

  • 双向建模: 同时考虑左右上下文
  • 预训练+微调: 迁移学习范式
  • Masked Language Model: 掩码语言模型任务

5.2 预训练任务

Task 1: Masked Language Model(MLM)

  • 随机遮盖15%的词
  • 让模型预测被遮盖的词
  • 学习双向语言表示

Task 2: Next Sentence Prediction(NSP)

  • 判断两个句子是否连续
  • 学习句子级别的语义

5.3 微调策略

针对下游任务,只需添加简单的输出层:

  • 分类任务: 使用[CLS]标记的输出
  • 序列标注: 使用每个Token的输出
  • 问答任务: 预测答案的起始和结束位置

5.4 BERT变体

  • RoBERTa: 改进训练策略,移除NSP
  • ALBERT: 参数共享,减少模型大小
  • DistilBERT: 知识蒸馏,压缩模型
  • ELECTRA: 改进预训练任务,提高效率

六、Transformer的局限性与改进

6.1 计算复杂度

问题:

  • Self-Attention复杂度为O(n²)
  • 序列长度翻倍,计算量增加4倍

改进方案:

  • Sparse Attention: 只关注部分位置
  • Linformer: 降低K和V的维度
  • Performer: 使用核方法近似

6.2 长序列处理

  • Transformer-XL: 引入循环机制
  • Longformer: 滑动窗口+全局注意力
  • BigBird: 稀疏注意力模式

七、实践建议

7.1 使用预训练模型

  • 优先使用Hugging Face的Transformers库
  • 选择适合任务的预训练模型
  • 注意中文模型需要使用中文预训练版本

7.2 微调技巧

  • 使用较小的学习率(1e-5到5e-5)
  • 对不同层使用不同学习率(Layer-wise Learning Rate Decay)
  • 使用Warmup策略
  • 注意过拟合,适当使用Dropout

7.3 效率优化

  • 使用混合精度训练(FP16)
  • 梯度累积应对显存限制
  • 模型并行和数据并行
  • 考虑模型蒸馏或剪枝

总结

Transformer通过Self-Attention机制,实现了高效的序列建模。BERT等预训练模型进一步展示了其强大的表示学习能力。理解Transformer是掌握现代NLP技术的关键。