BERT GPT T5 模型

介绍 BERT、GPT、T5 等主流模型的结构与推理方法

transformer variant

BERT

  • BERT(Bidirectional Encoder Representations from Transformers)是由 Google 于 2018 年提出的预训练语言表示模型

  • 相较于 Transformer 模型,BERT 模型完全移除 Decoder,仅保留 Encoder,因此其不做自回归建模,输出为上下文相关的双向表示

  • 输入表示的变化

    • Token Embedding

      • BERT 使用 WordPiece 分词,将句子拆成子词 Etoken∈RdE_{token}\in \mathbb {R}^d
      • 其中 dd 通常是 768(BERT-base)或 1024(BERT-large)
    • 区分不同句子

      • 首先,在被分割的句子之间插入 [SEP] token,用以明确区分各句子
      • 其次,为每个 token 的表示添加可学习的 Segment Embedding,以指示其所属的句子类别(句子 A 或句子 B)
      • 对于单句任务,所有 token 的 Segment Embedding 均设为 0
      • 区分句子 A 与句子 B 主要用于 NSP(Next Sentence Prediction)或句对建模任务
    • 添加分类 token

      • 在每个输入序列的开头插入专用的分类 token [CLS]
      • 该 token 在最后一个 Encoder 层的输出向量用于汇聚整个序列的语义表示
      • 主要应用于句子级任务,例如自然语言推断(NLI)和情感分类等
  • Encoder 结构

    • BERT-base:12 层 Transformer Encoder,隐藏维度 768,12 个注意力头
    • BERT-large:24 层 Transformer Encoder,隐藏维度 1024,16 个注意力头
  • 输出

    • CLS 向量(第一个 token 的隐藏向量 H[CLS]H_{[CLS]}):用于分类任务或句子级任务
    • 每个 token 的向量 HiH_i:用于序列标注、问答等 token 级任务
  • BERT 共提出两种预训练任务

    • Masked Language Model(MLM)
    • Next Sentence Prediction(NSP)
  • Masked Language Model (MLM)

    • MLM 是 BERT 能够突破单向语言模型限制的关键机制

    • 在预训练阶段,BERT 会以 15% 的概率随机选择训练序列中的 token,将其替换为 [MASK],并要求模型预测这些位置原始的 token

    • 由于 [MASK] 在下游任务中并不存在,这会造成预训练与微调阶段的不匹配:模型在预训练中对 [MASK] 过于敏感,而对实际 token 不够敏感

    • 为缓解这一问题,BERT 对被选中的 token 进行如下替换策略:

      • 80% 的概率替换为 [MASK],例如:my dog is hairy → my dog is [MASK]
      • 10% 的概率替换为随机 token,例如:my dog is hairy → my dog is apple
      • 10% 的概率保持原 token 不变,例如:my dog is hairy → my dog is hairy
    • 模型通过这些位置对应的表示 TiT_i​ 预测原 token,将输出通过全连接层映射到词表维度,并使用 softmax 计算每个 token 的概率,最后采用交叉熵计算损失

      LMLM=−∑i∈Mlog⁡P(xi∣x\M)\mathcal {L}_{\text{MLM}} = - \sum_{i \in \mathcal {M}} \log P (x_i \mid x_{\backslash \mathcal {M}})
    • 该策略确保 BERT 对所有 token 都敏感,从而能够学习到每个 token 的表征信息

  • Next Sentence Prediction (NSP)

    • 某些下游任务(如问答或自然语言推断)需要理解句子间的关系,而 MLM 更侧重于 token 层次的表征,无法直接捕捉句子级语义

    • 为此,BERT 在预训练中引入 NSP 任务:预测两个句子是否相邻

    • 具体做法:对每个训练样例,随机选取句子 A 和句子 B

      • 50% 的概率句子 B 为句子 A 的下一句(标注为 IsNext)
      • 50% 的概率 B 为语料库中的随机句子(标注为 NotNext)
    • 将训练样例输入 BERT 后,使用 [CLS] 对应的表示进行二分类预测,损失定义如下:

      LNSP=−[ylog⁡Pnext+(1−y)log⁡(1−Pnext)]\mathcal {L}_{\text{NSP}} = - [y \log P_{\text{next}} + (1-y)\log (1-P_{\text{next}})]
    • 预训练阶段的总体损失为 MLM 损失和 NSP 损失的加权和

      L=LMLM+LNSP\mathcal {L} = \mathcal {L}_{\text{MLM}} + \mathcal {L}_{\text{NSP}}
    • 这两个任务的数据均可从无标签文本构建(自监督),相比计算机视觉中的 ImageNet 标注数据集,构建更为简单

    • 后续研究(如 RoBERTa)发现 NSP 效果不明显,因此可以去掉

  • BERT 是一个通用编码器,可以在各种任务上微调。微调时,通常只需在输出层加一层任务特定的全连接网络

    任务类型输入输出处理方式
    分类(情感分析)[CLS] sentence [SEP][CLS]向量通过全连接 + softmax 分类
    序列标注(NER)[CLS] token1 ... tokenn [SEP]每个 token 向量每个 token 输出 softmax 分类
    问答(SQuAD)[CLS] question [SEP] context [SEP]token 向量用 start/end 分类器选择答案 span
  • BERT 参数量

    模型层数隐藏维度 d注意力头数参数量
    BERT-base1276812110M
    BERT-large24102416340M

BERT 变种

RoBERTa

  • RoBERTa(RobustlyoptimizedBERTpretrainingapproach)是对 BERT 的一种改进方法

  • RoBERTa 本质上是在证明:BERT 的问题不在结构,而在训练范式

  • RoBERTa = 不改模型结构的前提下,把 BERT 的预训练 “彻底做对”

  • BERT 存在几个非理论而是工程性的限制

    问题原因改动
    训练数据偏小当时算力与数据有限提高数据的数量级
    训练步数太少预训练不足增加训练步数
    MLM masking 固定每个样本只 mask 一次动态 Masking
    NSP 目标可疑是否真的有用?删除 NSP 任务
  • 去掉 NSP(Next Sentence Prediction)

    • RoBERTa 通过系统实验发现,NSP 对下游任务无明显帮助,甚至可能干扰 MLM 学习
    • NSP 强迫模型学习 “句子级分类信号”,而很多任务需要的是 token-level 表示,且 NSP 的负样本构造非常粗糙(随机拼接)
  • 动态 Masking

    • BERT 中:每个样本只 mask 一次,mask 位置在整个训练中固定,而这意味着模型可能记住 mask 模式,而不是语言规律
    • RoBERTa 中:每个 epoch,同一句话随机生成新的 mask pattern,相比 BERT,覆盖更多 token,学到更鲁棒的上下文关系
  • 更大的训练数据(数量级差异)

    • BERT 训练数据约 16GB,而 RoBERTa 训练数据约 160 GB
    • RoBERTa 的训练数据包括 BookCorpus、Wikipedia、CC-News、OpenWebText、Stories 等
  • 更长训练、更大 batch:BERT-base 大约训练 100k 步,RoBERTa 大约训练 500k+ 步

  • 更大的 batch

    • RoBERTa 使用的 batch size = 8k–32k sequences,借助 LARS / Adam + warmup
    • 更大的 batch ≠ 更快收敛,而是更稳定的 MLM 梯度估计
  • 输入拼接策略改进

    • BERT 的句子对模型输入人为限制句子边界,强制 segment embedding
    • RoBERTa 直接把文本当成连续 token 流,不强制 sentence boundary,而 segment embedding 也可有可无
    • 这样模型更自然地学习长程依赖,减少人为 inductive bias

ALBERT

DeBERTa

T5

  • T5 是 Google Research 在 2019 年提出的模型,全称 Text-to-Text Transfer Transformer

  • 核心思想

    • 统一 NLP 任务
      • 传统 NLP 模型通常针对分类、生成、翻译等任务分别设计不同结构
      • T5 将所有 NLP 任务统一成 Text-to-Text 的形式:输入是文本,输出也是文本
      • 例如:
        • 翻译:translate English to German: That is good → Das ist gut
        • 文本分类:sst2 sentence: I love it → positive
        • 摘要:summarize: <文章> → <摘要>
    • 基于 Transformer Encoder-Decoder
      • 与 BERT(只用 Encoder)和 GPT(只用 Decoder)不同,T5 使用 完整的 Encoder-Decoder 架构,即标准 Transformer
    • 大规模预训练 + 统一微调
      • T5 在大规模语料(C4 数据集)上进行预训练,然后在 GLUE、SQuAD、翻译、摘要等任务上统一微调
  • 输入表示的变化

    • 分词
      • 使用 SentencePiece 子词分词器,输出 token 序列
      • 使用 可变长度序列,最大长度通常为 512 或 1024
    • 文本前缀(Task Prefix):
      • 为了统一任务类型,每个输入前面会加一个 文本前缀:
      • summarize: ...
      • translate English to German: ...
      • 这个前缀让模型知道任务类型
    • 位置编码采用绝对位置编码或可学习的位置嵌入
  • T5 提出了 “填空式语言建模” (Span Corruption / Masked Span Prediction)

    • Span Corruption:随机选择连续 token span(非单个 token),用一个特殊 token <extra_id_n> 替换:

      • 输入:The quick brown <extra_id_0> jumps over the lazy <extra_id_1>

      • 输出:fox <extra_id_0> dog <extra_id_1>

      • 这种设计让模型学会生成被遮挡的文本片段,增强生成能力

    • 目标损失,可以看作 seq2seq 的交叉熵损失:

      LT5=−∑i=1mlog⁡P(yi∣y<i,x)\mathcal {L}_{\text{T5}} = - \sum_{i=1}^{m} \log P (y_i \mid y_{<i}, x)
  • 下游任务微调 —— 由于所有任务都是 text-to-text 的,因此其微调方式统一,微调时,只需训练 decoder 输出的线性 + softmax

    任务类型输入文本输出文本处理方式
    文本分类sst2 sentence: I love itpositive将分类 label 作为文本输出
    问答question: ... context: ...<答案>输出答案 span
    摘要summarize: ...<摘要>输出摘要文本
    翻译translate English to German: ...<德语句子>输出目标语言文本
  • T5 模型的参数规模

    模型层数 Encoder/Decoderd注意力头参数量
    T5-Small6 / 6512860M
    T5-Base12 / 1276812220M
    T5-Large24 / 24102416770M
    T5-3B24 / 241024323B
    T5-11B24 / 24102412811B

Flan-T5

GPT

  • GPT(Generative Pre-trained Transformer)由 OpenAI 提出

  • 核心思想

    • 在 GPT 出现之前
      • RNN / LSTM 难以并行且长依赖建模能力有限
      • BERT 是 encoder-only 的,适合理解型任务(classification、span extraction),不天然适合自由生成
    • 而 GPT 的目标非常明确:用一个统一的、自回归的语言模型,解决所有 NLP 任务
    • GPT = Transformer Decoder × N 层 + 自回归语言模型目标,只用 Decoder、不做双向注意力、每一步只预测下一个 token
  • 输入表示的变化

    • 分词使用 BPE /byte-level BPE 分词器
    • GPT-1 / GPT-2:可学习绝对位置编码
  • Decode-only

    • GPT 堆叠了 LL 层 Transformer Decoder Block
    • 每一层包括:Input → Masked Multi-Head Self-Attention → Add & LayerNorm → Feed Forward Network → Add & LayerNorm
    • 与 Transformer Decoder 相比,去掉了 Encoder–Decoder Attention
    • 前馈神经网络使用的激活函数
      • GPT-1 / GPT-2:GELU
      • GPT-3 之后:SwiGLU / GeGLU(变体)
  • 残差连接与归一化的不同之处

    • Tranformer 模型使用 Post-LN:

      y=LN(x+SubLayer(x))y = \text{LN}(x + \text{SubLayer}(x))
    • 考虑梯度反向传播的公式:

      ∂L∂x=∂L∂y⋅∂LN∂(x+f(x))⋅(1+f′(x))\frac {\partial \mathcal {L}}{\partial x} = \frac {\partial \mathcal {L}}{\partial y} \cdot \frac {\partial \text{LN}}{\partial (x + f (x))} \cdot (1 + f'(x))
    • LayerNorm 是非线性、带缩放的,残差路径必须穿过 LN,即 “恒等路径被破坏”

    • 当层数变深,梯度在 LN 中被不断缩放、旋转,非常容易梯度消失 / 爆炸,表现出 “深层退化”

    • GPT 模型使用 Pre-LN:

      x′=x+SubLayer(LayerNorm(x))x^\prime = x + \text{SubLayer}(\text{LayerNorm}(x))
    • 反向传播变为:

      ∂L∂x=∂L∂y⋅(1+∂f(LN(x))∂x)\frac {\partial \mathcal {L}}{\partial x} = \frac {\partial \mathcal {L}}{\partial y} \cdot \left (1 + \frac {\partial f (\text{LN}(x))}{\partial x}\right)
    • 由此,残差路径是真正的恒等映射,梯度可以完全绕过注意力和 FFN,直接从顶层流回底层

    • Pre-LN 不是让 “训练更快”,而是让深层 Transformer 在数学上 “可训练”

  • 训练目标

    • 原始 Transformer 的目标是条件概率

      max⁡log⁡P(y∣x)max⁡θlog⁡Pθ(y∣x)=∑t=1∣y∣log⁡P(yt∣y<t,x)\max \log P (y\vert x)\\ \max_\theta \log P_\theta (y \mid x) = \sum_{t=1}^{|y|} \log P (y_t \mid y_{<t}, x)
      • decoder 的确是逐 token 生成的,但它是在条件 xx 已知的情况下
    • 而 GPT 的目标则是最大化:

      log⁡P(x)=∑i=1nlog⁡P(xi∣x<i)\log P (x) = \sum_{i=1}^{n} \log P (x_i \mid x_{<i})
    • 其与 Transformer 的根本区别在于概率建模对象不同

      • Transformer 是 P(yt∣y<t,x)P (y_t \mid y_{<t}, \color {red}{x}),上下文是 y<ty_{<t} + xx,条件信息来自 Encoder 的输出
      • GPT 是 P(xt∣x<t)P (x_t \mid x_{<t}),上下文是 x<tx_{<t}​,无条件信息,上下文本身就是所有信息
      • GPT 并没有显式建模 P(y∣x)P (y\vert x),但只要它学好了 P(完整文本)P (完整文本)​,所有 “任务条件分布” 都隐含在里面
      • P(x)P (x) 理论上覆盖了 P(y∣x)P (y|x),不是因为 “更强”,而是因为条件分布只是联合分布的一个切片
    • 等价于最小化交叉熵损失:

      L=−∑i=1nlog⁡P(xi∣x<i)\mathcal {L} = -\sum_{i=1}^{n} \log P (x_i \mid x_{<i})
    • 训练阶段:所有 token 并行计算,使用 teacher forcing

    • 推理阶段:必须逐 token 生成

  • GPT 模型中的 KV Cache:

    • 假设已经生成了:x₁ x₂ x₃ ... xₜ

    • 如果没有 cache,下一步重新生成 xt+1x_{t+1} 时,要重新算所有 token 的 Q,K,V,对应每层的复杂度为 O(t2)O (t^2),整个生成过程的复杂度为 O(T3)O (T^3)

    • 而 KV Cache 的核心思想是历史 token 的 K 和 V 不会再变,因为 decoder-only 和 causal mask 的存在,历史 token 不依赖未来

    • 所以可以缓存 K1:t,;V1:tK_{1:t},; V_{1:t},下一步只需要计算 Qt+1,;Kt+1,;Vt+1Q_{t+1},; K_{t+1},; V_{t+1}

    • 这样,注意力变成:Attention(Qt+1,[K1:t;Kt+1],[V1:t;Vt+1])\text{Attention}(Q_{t+1}, [K_{1:t}; K_{t+1}], [V_{1:t}; V_{t+1}]),复杂度降低为 O(T2)O (T^2)

    • 为什么 Transformer 结构无法用 KV Cache?因为在 Encoder–decoder 架构中,虽然 encoder 输出固定可以缓存,但 decoder 每一层的 cross-attention 都要重新算;而 GPT 模型只有 self-attention,缓存一次可以用到结束

  • 泛化能力的来源

    • GPT 不像 BERT / T5 那样显式区分任务,而是把任务描述 + 示例,直接拼成文本,而这就是 In-context Learning、Few-shot Learning、Prompt-based Learning
    • GPT 的重要贡献包括扩展规模(Scaling Law)、简单但通用的目标函数、数据多样性丰富
    • 当模型足够大、数据足够广、上下文足够长时,GPT 的条件分布就近似了 “世界模型”
  • Decoder-only 架构更适合扩展规模

    • Scaling Law 的本质:当模型规模、数据量、计算量一起增长时,损失函数呈幂律下降
    • 第一个优势:目标函数极其 “干净”。相比两套网络且具有交叉注意力的 Encoder-Decoder 结构,Decoder-only 架构优化路径更平滑
    • 第二个优势:参数 “每一分都在干同一件事”。在 encoder–decoder 里,encoder 负责理解,decoder 负责生成,cross-attn 负责对齐,而 GPT 模型的每一层、每一个参数,都在学同一个分布 P(x)P (x),这对 scaling 至关重要:参数越多 → 对同一目标的逼近能力越强
    • 第三个优势:数据效率极高。GPT 的训练数据不需要标注,不需要对齐,不需要任务定义 —— 互联网上的所有文本,都是合法训练样本
    • 第四个优势:推理结构与训练结构一致(结构一致性 = scaling 稳定性)。GPT 模型在训练时预测下一个 token,推理时预测下一个 token,而 Encoder–decoder 模型在训练时使用 teacher forcing,推理时则使用 exposure bias
  • 推理阶段的解码策略

    • GPT 只是给出概率,生成策略决定最终文本
    • 可选贪心解码策略、Beam Search、Sampling(top-p、top-k)
    • GPT 的 “创造性” 主要来自 采样策略,不是模型结构
  • 模型规模

    模型层数Hidden参数
    GPT-112768117M
    GPT-24816001.5B
    GPT-39612288175B
    GPT-4未公开未公开超 1T(推测)
  • 各个模型之间的对比

    模型架构方向性核心优势
    BERTEncoder-only双向表示学习
    T5Encoder–Decoderseq2seq任务统一
    GPTDecoder-only单向生成 & Prompt
这篇文档有帮助吗?

On this page

页面信息