Skip to content

Transformer 架构

本页速览 Transformer 用自注意力取代循环结构,成为大模型时代的事实标准。本文拆解 Encoder/Decoder 整体架构、多头自注意力、位置编码、Pre-Norm/Post-Norm,给出 warmup 等训练技巧,梳理 BERT vs GPT 家族与 ViT/跨模态扩展,并介绍 FlashAttention、KV cache 等工程优化。

Transformer 架构

一句话定义:Transformer 是一种完全基于注意力机制、抛弃循环与卷积的序列架构——它让任意两个位置直接交互(路径长度为 1)、训练可完全并行,因而成为当今大模型时代的事实标准(先在注意力机制里理解"注意力是什么",再看本页会顺畅很多)。

一、为什么是"Attention Is All You Need"

2017 年 Vaswani 等人在论文 Attention Is All You Need 中提出 Transformer 时,动机很朴素:此前的序列主力是RNN 与序列建模讲过的 RNN/LSTM,它们串行——$h_t$ 依赖 $h_{t-1}$,GPU 的并行算力发挥不出来,且长程依赖受梯度路径限制。Transformer 的回应是"一步到位":把整句话一次性送入自注意力,两两位置直接交互,且每层计算彼此独立、可并行。加上它简洁统一的数学形式,很快从机器翻译席卷到语言建模、视觉、语音、多模态——整套范式详见大语言模型(LLM)。

二、整体架构

Transformer 由 Encoder(编码器)Decoder(解码器) 两个部分堆叠而成,两者均由 N 个相同的层组成(原论文 N=6),每层结构几乎一样:

  • Encoder 层:多头自注意力 →(残差+LayerNorm)→ 前馈网络 FFN →(残差+LayerNorm);
  • Decoder 层:掩码自注意力(masked self-attention,只能看自己及之前的 token)→(残差+LayerNorm)→ 交叉注意力(cross-attention,查询来自解码器、键值来自编码器输出)→(残差+LayerNorm)→ FFN →(残差+LayerNorm)。

关键组件拆解:

  1. 自注意力(Self-Attention):把输入通过三个可学习矩阵投影出查询 Q、键 K、值 V,计算 $$ \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V $$ 除以 $\sqrt{d_k}$ 是为了让点积的方差不随维度膨胀,softmax 前的 logits 保持在合理量级;
  2. 多头(Multi-Head):把 d_model 维切分成 h 个头(原论文 h=8),每个头独立做注意力再拼接——不同头学会关注不同关系(语法位置、指代、语义相似等),相当于"多个视角并行开会";
  3. 前馈网络 FFN:每个位置共享的两层 MLP(内层扩 4 倍宽,如 512→2048→512),做逐位置的非线性变换,是参数的主要聚集地;
  4. 残差 + LayerNorm:残差把层退化风险压住(思想同 CNN 与计算机视觉的 ResNet),LayerNorm 对每个 token 的特征做归一化,让深层训练稳定——LayerNorm 与 BatchNorm 的区别与选型见初始化与归一化

三、多头自注意力的直觉

为什么要多头?单个注意力是"一种加权的求和",信息单一;多头允许模型同时在多个子空间检索不同模式。直觉类比:开会时一个人看全局、分头小组各盯一个议题(指代、时序、话题),最后汇总结论。实践中发现不同头会分化出"关注相邻词的头""关注句法主语的头"等角色。注意力权重本身常被用来做可解释性分析,不过要警惕它不等于因果归因(相关讨论见可解释性与公平性)。

四、位置编码

自注意力本身是排列不变的:"我爱你"和"你爱我"在注意力眼里完全相同——它没有"顺序"概念。因此必须注入位置信息,主流方式:

  • 正弦位置编码(原论文):用不同频率的正弦/余弦波叠加,让模型能从编码推断相对距离,且无需训练、可外推到更长序列;
  • 可学习位置嵌入(学习式):把位置当作词表的一部分训练一个位置向量表,BERT 用此法;
  • RoPE(旋转位置编码,2021):把位置信息编码进 Q/K 的旋转矩阵,被 LLaMA、GPT 系大模型广泛采用,因其对相对位置有更好的外推能力。

位置编码是"Transformer 需要结构先验"的补丁——纯粹的结构先验反而被转嫁给了训练数据,这正是与 CNN 归纳偏置的微妙分野(见DL 设计原则)。

五、Pre-Norm vs Post-Norm

残差与 LayerNorm 的组合有两种排法,训练行为差别很大:

排法顺序特点
Post-Norm子层 → 残差 → LayerNorm原始论文;梯度传播路径长,深模型训练不稳,需小心初始化与 warmup
Pre-NormLayerNorm → 子层 → 残差残差恒等通路更"干净",深模型更稳,收敛更快;但容量略损失,常用 scale 补偿

经验法则:小模型(≤12 层)Post-Norm 精度略高;深模型(GPT 系动辄数十层)一律 Pre-Norm。GPT-2、BERT、LLaMA 系列均为 Pre-Norm 变体。这个细节体现了"训练稳定性 vs 表征容量"的工程取舍。

六、训练技巧

  • 学习率 warmup:前若干步(数千步)线性升温再按 $\text{step}^{-0.5}$ 衰减。Transformer 深、注意力分布敏感,一开始学习率过大容易发散或进入坏局部最优;
  • 标签平滑:softmax 目标从 one-hot 改为带小噪声的均匀分布,抑制"过度自信"、改善泛化(在过拟合与正则化中有详解);
  • Dropout:多头注意力输出、FFN、嵌入层都加 Dropout,是大模型的标配正则;
  • 初始化缩放:深层的残差分支权重用小量(如 0.02)初始化,是深 GPT 可训的关键细节;
  • 梯度裁剪 + 混合精度:防爆炸、省显存提速,后者见训练配方与调参

工程要点

Transformer 训练 90% 的崩溃都能在"注意力 logits 爆炸→softmax 饱和"与"LR 过大"里找到根因。先检查损失曲线形态,再查数值范围,方法见调试与诊断

七、BERT(Encoder)vs GPT(Decoder)家族

Transformer 家族按"用哪一半"分化成两大阵营,对应两种预训练目标:

BERT(2018,Google)GPT(2018+,OpenAI)
结构Encoder-only(双向注意力)Decoder-only(因果注意力)
预训练任务掩码语言建模 MLM + 下一句预测自回归"预测下一个 token"
擅长理解:分类、抽取、相似度生成:续写、对话、推理
后代RoBERTa、DeBERTa、T5(编解码)GPT-2/3/4、LLaMA、Qwen、DeepSeek
现状理解任务仍有效,但风光渐被大生成模型盖过大一统:"能生成 = 能理解"成为主流信念

生成式大一统背后的逻辑是:任何任务都可以被重写为"给定上文生成下文"(分类→"这段评论是正面还是负面?")。这个范式选择深刻影响了后来的大语言模型(LLM)路线。

八、扩展:ViT 与跨模态

Transformer 的通用性在于它"不挑输入格式"——只要把输入变成 token 序列:

  • ViT(2020):把图像切成 16×16 的 patch 展平为 token,配合位置编码直接吃 Transformer,在大规模预训练下反超 CNN,见CNN 与计算机视觉
  • 跨模态 Transformer:文本、图像、音频、视频都能 token 化后送入同一套注意力,视觉编码器+投影+LLM 的 VLM 架构(LLaVA、Qwen-VL)与统一多模态模型(Gemini)皆源于此,详见多模态模型
  • 语音:Whisper 用 Transformer 做语音到文本的映射,见语音与音频

九、复杂度优化:FlashAttention、稀疏注意力、KV cache

Transformer 的 O(n²) 注意力在长序列面前是瓶颈,工程上有一整套对策:

  • FlashAttention(2022):把注意力计算分块、在 SRAM 中完成,避免把 O(n²) 的中间矩阵写回显存,速度 2~4 倍、显存线性化,成为大模型训练推理的标准算子;
  • 稀疏/线性注意力:Longformer、BigBird 用局部窗口+全局 token 近似全连接;Linformer、Performer 把注意力近似成低秩/核函数形式,复杂度降到 O(n)。收益与精度损失要权衡;
  • KV cache:推理生成时把历史 token 的 K、V 缓存复用,避免每步重算——但显存随序列线性增长,于是有 PagedAttention、投机解码等配套优化,详见大语言模型(LLM)的推理一节。

关键认知

Transformer 的演进史就是"结构定型(2017)→ 规模放大(2018-2022)→ 效率革命(2022-)"的过程。它的核心数学至今没变,变的是归一化排法、位置编码、注意力近似与工程实现

十、权衡与取舍

  • 二次复杂度 vs 线性近似:长文档、长视频用稀疏/线性注意力省算力,但全局依赖可能受损;通用任务仍是标准注意力+FlashAttention 最稳;
  • Pre-Norm vs Post-Norm:稳定性与容量;深模型选 Pre-Norm,追求小模型极限精度可试 Post-Norm;
  • 双向 vs 因果:理解任务双向有信息优势,生成任务必须因果,且双向 BERT 难以直接做生成——"理解为主"用 Encoder,"生成/通用"用 Decoder;
  • 成本:训练一个 13B 模型需要数百张 GPU 卡月级别的算力,规模不等于一切,参见DL 设计原则MLOps 与模型部署

延伸阅读

参考资料