在 GPT 系列引领生成式 LLM 潮流的同时,Google 的 T5(Text-to-Text Transfer Transformer)和 FLAN(Fine-tuned Language Net)代表了一条不同的发展道路:将所有 NLP 任务统一为文本生成问题。
2019 年的 T5 论文是当时最大规模的迁移学习探索之一,系统性地比较了预训练目标、模型架构和数据策略。2021 年的 FLAN 则证明了一个关键洞察:通过指令微调,模型可以在未见过的任务上零样本泛化。这一发现直接启发了后来的 InstructGPT 和 ChatGPT。
本文要点
- T5 的 Text-to-Text 统一框架设计
- Encoder-Decoder 架构细节与 GPT 对比
- Span Corruption 预训练目标与 C4 数据集
- FLAN 指令微调的核心思想与实验
- FLAN-v2 与 FLAN-T5 的演进
- T5 家族的版本迭代(v1.1、v11、UL2)
- 对后世开源模型和研究范式的影响
一、T5:Text-to-Text 框架
1.1 核心思想
T5 将所有 NLP 任务统一为”文本到文本”的格式:
这种设计的核心优势在于:无论什么任务,模型的输入输出格式完全一致。这意味着同一个模型、同一套训练流程可以处理翻译、摘要、分类、问答等截然不同的 NLP 任务,不需要为每个任务设计特定的输出头(output head)或损失函数。
1.2 任务统一格式
| 原始任务 | T5 输入前缀与内容 | T5 输出 |
|---|---|---|
| 翻译 | translate English to French: Hello world | Bonjour monde |
| 情感分类 | sst2 sentence: This movie is great! | positive |
| 问答 | question: What is X? context: ... | answer |
| 摘要 | summarize: [长文本] | 摘要内容 |
| 共指消解 | coref: [文本] | 指代关系 |
T5 通过在输入前添加任务特定的前缀(prefix)来区分不同任务。这种做法后来被广泛采用,成为 instruction-following 模型的基本范式。
1.3 论文信息
论文:Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer作者:Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, ...机构:Google Research, Brain Team发表:2019 年 10 月(Journal of Machine Learning Research)引用:15000+ 次这篇论文的特别之处在于它不仅仅提出了一个模型,更是一次大规模的系统性消融实验——比较了不同架构、预训练目标、数据集和训练策略的效果。
二、T5 架构
2.1 Encoder-Decoder 结构详解
T5 使用经典的 Transformer Encoder-Decoder 架构,但在原始 Transformer 基础上做了几处重要简化:
T5 的架构关键细节:
| 组件 | 配置 | 说明 |
|---|---|---|
| 注意力机制 | Multi-Head Self-Attention | Encoder 全双向,Decoder 因果掩码 |
| 位置编码 | Relative Position Bias | 不使用正弦编码,改为可学习的相对偏置 |
| Layer Norm | Pre-Norm(在注意力/FFN 之前) | 比 Post-Norm 训练更稳定 |
| Feed-Forward | d_ff = 4 × d_model = 3072(Base) | 标准的两层 MLP 激活函数 |
| 激活函数 | geLU → T5 使用 ReLU | T5 论文发现 ReLU 与 gated 激活效果接近 |
| 残差连接 | 每个子层后添加 | 标准 Transformer 做法 |
为什么选择 Encoder-Decoder 而非 Decoder-only? T5 论文系统地比较了三种架构:Encoder-Decoder、Decoder-only(语言模型)、以及前缀 LM(Prefix LM)。实验结果显示,Encoder-Decoder 架构在整体性能上略占优势,特别是在需要双向理解输入的任务(如分类、问答)上。
2.2 模型规模配置
| 版本 | 参数量 | d_model | d_ff | Heads | Layers | Encoder 层 | Decoder 层 |
|---|---|---|---|---|---|---|---|
| T5-Small | 60M | 512 | 2048 | 8 | 6 | 6 | 6 |
| T5-Base | 220M | 768 | 3072 | 12 | 12 | 12 | 12 |
| T5-Large | 770M | 1024 | 4096 | 16 | 24 | 24 | 24 |
| T5-3B | 3B | 1024 | 16384 | 32 | 24 | 24 | 24 |
| T5-11B | 11B | 1024 | 65536 | 128 | 24 | 24 | 24 |
可以看到,从 T5-3B 到 T5-11B,
d_model保持不变但d_ff大幅扩展。这种设计使得 FFN 层占据了绝大部分参数。
2.3 对比 GPT 的差异
| 特性 | T5 (Encoder-Decoder) | GPT (Decoder-only) |
|---|---|---|
| 注意力类型 | Encoder 内全双向 + Cross-Attn | Decoder 内 Causal Mask |
| 训练任务 | Span Corruption(去噪) | 因果语言建模(预测下一个 token) |
| 双向理解 | 原生支持(Encoder 双向编码) | 需要特殊技巧或足够大的模型 |
| 生成效率 | 需要先完整编码再逐 token 生成 | 直接自回归生成,效率高 |
| 参数利用 | Encoder+Decoder 分担参数 | 全部参数用于生成 |
| 下游微调 | 适合分类+生成混合任务 | 适合纯生成任务 |
2.4 相对位置编码
T5 没有使用 Transformer 原论文中的正弦位置编码,而是采用了一种可学习的相对位置偏置(Relative Position Bias):
# 简化的相对位置偏置示意class RelativePositionBias(nn.Module): def __init__(self, num_buckets=32, max_distance=128, num_heads=12): self.relative_attention_bias = nn.Embedding(num_buckets, num_heads)
def forward(self, qlen, klen): # 计算相对位置: q_pos - k_pos # 将相对位置映射到 [0, num_buckets) 的桶中 # 对称桶设计:正负位置分别映射 relative_position = compute_relative_pos(qlen, klen) rp_bucket = position_to_bucket(relative_position) bias = self.relative_attention_bias(rp_bucket) # [qlen, klen, num_heads] return bias # 添加到注意力分数上这种设计的优势:位置信息直接参与到注意力计算中,而不是简单地加到 token embedding 上;同时桶化(bucketing)策略使得模型可以泛化到训练时未见过的序列长度。
三、T5 的训练
3.1 预训练数据:C4 数据集
T5 论文构建了一个名为 C4(Colossal Clean Crawled Corpus) 的大规模预训练数据集:
| 属性 | 数值 |
|---|---|
| 数据来源 | Common Crawl(2019 年 4 月快照) |
| 原始大小 | 约 20TB |
| 清洗后大小 | 约 750GB |
| 文档数量 | 约 3.65 亿篇 |
| Token 数量 | 约 1560 亿 |
C4 数据集的清洗步骤:
- 语言过滤:仅保留英语文档(使用 langdetect)
- 质量过滤:移除包含不良词汇的页面
- 去重:移除重复的句子和文档
- 长度过滤:移除过短的文档(少于 3 个句子)
- 屏蔽词过滤:移除包含 JavaScript 代码的页面
C4 数据集后来成为 NLP 预训练的标准数据集之一,被许多后续工作采用。但需要注意的是,它的英文单一语言限制也引发了关于多语言能力的讨论。
3.2 预训练任务:Span Corruption
T5 论文最核心的实验发现是:Span Corruption(跨度破坏)是最有效的预训练目标。
Span Corruption 的工作原理:
# Span Corruption 示例# 原文: "Thank you for inviting me to your party last week."
# 步骤1: 随机选择 span 进行破坏# 选中 "for inviting me" (3 个 tokens) 和 "party last" (2 个 tokens)
# 步骤2: 用 sentinel tokens 替换被选中的 span# 输入: "Thank you <X> to your <Y> week."# 目标: "<X> for inviting me <Y> party last"
# 实际 sentinel tokens 格式:# 输入: "Thank you <extra_id_0> to your <extra_id_1> week."# 输出: "<extra_id_0> for inviting me <extra_id_1> party last"Sentinel Tokens 是 T5 引入的特殊 token(<extra_id_0> 到 <extra_id_99>),用于标记被破坏的 span 的位置。这种设计有几个关键特点:
- Span 连续性:破坏的是连续的 token 序列,而非随机分散的单个 token(与 BERT 的 MLM 不同)
- 可变长度:每个 span 的长度由几何分布采样决定(平均 span 长度约 3 个 token)
- 自回归解码:模型需要按顺序逐个预测被破坏的 span
- 破坏比例:通常为 15% 的 token 被破坏
3.3 消融实验:为什么选择 Span Corruption?
T5 论文的最大贡献之一是系统性的消融实验。论文比较了多种预训练目标:
| 预训练目标 | 方法描述 | GLUE 平均分 |
|---|---|---|
| BERT-style MLM | 随机掩盖 15% 单个 token,预测原始 token | 83.2 |
| Replace Corrupted Spans | Span Corruption(T5 最终选择) | 83.7 |
| Masked Language Model | 与 BERT 相同 | 82.7 |
| MASS | 预测连续片段 | 82.5 |
| Deshuffling | 打乱顺序,恢复原始顺序 | 80.1 |
| Prefix Language Model | 前缀双向+后续自回归 | 83.1 |
| 纯语言模型(GPT-style) | 因果语言建模 | 82.3 |
关键发现:Replace Corrupted Spans(即 Span Corruption)在几乎所有下游任务上都表现最好,且不需要额外的特殊标记(如 BERT 的
[MASK]),因为 sentinel tokens 本身就是词汇表的一部分。
3.4 训练配置
| 参数 | T5-Base | T5-Large | T5-11B |
|---|---|---|---|
| 训练步数 | 500K | 500K | 500K |
| Batch Size | 128 | 128 | 2048 |
| 学习率 | 0.001 | 0.001 | 0.001 |
| 学习率调度 | 逆平方根衰减 | 逆平方根衰减 | 逆平方根衰减 |
| Dropout | 0.1 | 0.1 | 0.1 |
| 优化器 | AdaFactor | AdaFactor | AdaFactor |
| 训练硬件 | - | - | TPU v3 Pod |
T5 使用 AdaFactor 优化器而非 Adam,这是因为它在大规模训练中内存效率更高——AdaFactor 不需要为每个参数存储动量(momentum)的完整矩阵。
四、FLAN:指令微调
4.1 核心思想
FLAN(Fine-tuned Language Net)是 Google 在 2021 年提出的,它证明了一个革命性的观点:
大型语言模型可以通过在多种任务上进行指令微调,获得在完全未见过的任务上的零样本泛化能力。
4.2 指令模板设计
FLAN 的一个关键设计是为每个任务创建多种指令模板,以避免模型过拟合到特定格式:
# FLAN 指令模板示例(以翻译任务为例)templates = { "translation": [ "Translate this from {source_lang} to {target_lang}: {text}", "What is the {target_lang} translation of: {text}", "Convert the following text from {source_lang} into {target_lang}: {text}", "{text}
Translate the above text from {source_lang} to {target_lang}.", "Produce a {target_lang} translation of the following {source_lang} text: {text}", ], "summarization": [ "Summarize this: {text}", "Write a summary of: {text}", "Briefly describe what this is about: {text}", "What is a shorter version of this: {text}", "Generate a summary of the following article: {text}", ], "qa": [ "Answer this question based on the context: {question} Context: {context}", "Based on the context, answer the question. Context: {context} Question: {question}", "Read the following and answer the question below. {context} Question: {question}", ],}每个任务平均设计了 10 个不同的指令模板。这种多样性确保模型学到的是”理解指令”而非”记住格式”。
4.3 任务聚类与评估策略
FLAN 的评估策略非常巧妙——使用 Leave-One-Out Task Clustering:
将 62 个 NLP 任务分为若干聚类:├── 聚类 1:情感分析(SST-2, IMDb, Yelp, ...)├── 聚类 2:自然语言推理(MNLI, RTE, QNLI, ...)├── 聚类 3:问答(SQuAD, TriviaQA, ...)├── 聚类 4:翻译(WMT, ...)└── 聚类 5:摘要(CNN/DailyMail, ...)
评估时:- 选择一个聚类作为"未见任务"- 使用其他所有聚类的数据进行指令微调- 在未见聚类上测试零样本性能- 轮流对每个聚类进行以上操作这种设计验证了一个关键假设:模型确实能从多种任务的指令中学习到通用的”理解指令”能力,而不仅仅是记忆特定任务。
4.4 FLAN 的实验结果
| 设置 | 直接零样本 | FLAN 零样本 | 提升 |
|---|---|---|---|
| 未见任务类型(如推理任务) | 差 | 显著提升 | +10~25% |
| 新语言任务 | 差 | 好 | +8~15% |
| 组合任务(需要多步推理) | 差 | 好 | +5~20% |
| 训练任务(已见过的类型) | 中等 | 优秀 | +3~10% |
论文还发现了一个关键点:模型越大,FLAN 的效果越好。137B 参数的模型从指令微调中的收益远大于 8B 的模型,这说明指令理解能力是随着模型规模涌现的。
五、FLAN 的演进:FLAN-v2 与 FLAN-T5
5.1 FLAN-v2(2022)
FLAN-v2(Scaling Instruction-Finetuned Language Models)大幅扩展了原始 FLAN 的工作:
| 对比项 | FLAN (2021) | FLAN-v2 (2022) |
|---|---|---|
| 任务数量 | 62 | 1836 |
| 指令模板数 | ~620 | 15000+ |
| 基础模型 | LaMDA-137B | PaLM, T5, 等 |
| 训练数据量 | ~1.8M 样本 | 15M+ 样本 |
| 任务类型 | NLP 为主 | NLP + 对话 + 代码 + 推理 |
5.2 FLAN-T5
FLAN-T5 是将 FLAN 指令微调应用于 T5 模型的产物,也是最早的高质量开源指令微调模型之一:
FLAN-T5 的训练流程:
1. 使用 T5 预训练权重(C4 数据集上的 Span Corruption)2. 收集 1836 个任务的指令数据3. 混合所有任务进行指令微调4. 输出:FLAN-T5(在各尺寸上都显著优于原始 T5)FLAN-T5 的关键改进:
- 输入反转(Input Inversion):部分任务将输出作为输入,让模型学习逆向推理
- 思维链数据(CoT Data):加入 Chain-of-Thought 格式的推理数据
- 任务混合策略:通过过采样少数类别来平衡不同任务的数据量
5.3 FLAN 的贡献与数据构建
FLAN 的指令数据集构建方法:
| 来源 | 任务数 | 样本数 | 说明 |
|---|---|---|---|
| NLP 数据集 | 62 | 1.8M | 翻译、摘要、问答等 |
| 对话数据 | 5 | 0.5M | 多轮对话 |
| 代码数据 | 5 | 0.5M | 代码生成与理解 |
| 推理数据 | 8 | 0.3M | 数学、逻辑推理 |
FLAN 证明了:不需要为每个任务收集大量标注数据,只需要在多种任务的少量指令数据上微调,模型就能获得广泛的泛化能力。这一发现为后来的 Instruction Following 研究奠定了基础。
六、T5 家族
6.1 版本演进
| 版本 | 年份 | 参数 | 特点 |
|---|---|---|---|
| T5-Small | 2019 | 60M | 基准版本,适合快速实验 |
| T5-Base | 2019 | 220M | 通用版本,平衡性能与效率 |
| T5-Large | 2019 | 770M | 高精度,许多 NLP 任务的标准选择 |
| T5-3B | 2019 | 3B | 大规模版本 |
| T5-11B | 2019 | 11B | 最大规模,接近当时 SOTA |
| T5 v1.1 | 2021 | 同上 | 修复 GeoMedian 初始化,改用 gated-GELU |
| T5 v11 | 2021 | 同上 | 在改进的数据集上重新预训练 |
| FLAN-T5 | 2022 | 11B | 指令微调版本,性能大幅提升 |
| UL2 | 2022 | 20B | 混合去噪器,统一预训练范式 |
| Flan-UL2 | 2023 | 20B | UL2 + FLAN 指令微调 |
6.2 T5 v1.1 与 T5 v11
Google 在 2021 年发布了 T5 的改进版本:
T5 v1.1 的改进:
- 将 Feed-Forward 激活函数从 ReLU 改为 gated-GELU(即
gate(x) = x * sigmoid(W_g * x),输出维度减半) - 修改了权重初始化方式(使用 GeoMedian 初始化)
- 在 C4 数据集的改进版本 上重新预训练
- 仅在无监督预训练阶段训练(不包含有监督微调)
T5 v11:
- 在 C4 数据集的进一步清洗版本上预训练
- 去除了 Wikipedia 和 OpenWebText 的重复数据
- 训练更加充分
T5 v1.1 在社区中被广泛使用,特别是
t5-v1_1-base和t5-v1_1-large成为许多 NLP 项目的默认 backbone。
6.3 UL2 (2022)
UL2(Unifying Language Learning)提出了混合去噪器(Mixture of Denoisers),统一了不同的预训练范式:
# UL2 三种去噪目标objectives = { "R-Denoiser": { "描述": "常规去噪,短 span,高破坏比例", "破坏比例": "15%", "span长度": "3-5 tokens", "类似": "标准 BERT MLM", }, "S-Denoiser": { "描述": "顺序去噪,长 span", "破坏比例": "25%", "span长度": "6-∞ tokens", "类似": "T5 Span Corruption", }, "X-Denoiser": { "描述": "极端去噪,极大破坏", "破坏比例": "50%", "span长度": "3-∞ tokens", "类似": "极端破坏+重建", },}
# 训练时随机选择一种去噪模式mode = random.choice(["R", "S", "X"])loss = model(input_with_noise, denoise_mode=mode)UL2 的核心洞察:不同的预训练目标侧重不同能力(理解 vs. 生成),混合训练可以让模型同时获得两种能力。
七、对后世的影响
7.1 开源模型生态
T5/FLAN 启发了众多开源模型和项目:
- FLAN-T5:最早的高质量开源指令微调模型之一,被广泛应用于研究和生产
- T0 模型:Hugging Face 基于 T5 开发的多任务指令微调模型,进一步验证了 FLAN 的思路
- UL2:成为后续 Google 内部模型的基础架构
- mT5:T5 的多语言版本,支持 101 种语言
- ByT5:T5 的字符级版本,无需 tokenizer
7.2 T0 模型
T0(Sanh et al., 2021)是 Hugging Face BigScience 项目的重要成果,直接受到 FLAN 的启发:
T0 的设计思路:- 基础模型:T5-Large(770M 参数)- 训练数据:来自 PromptSource 的多任务指令数据- 任务数量:107 个数据集,共 1700+ 个 prompt- 核心验证:在小参数模型上也能实现指令泛化T0 的贡献在于证明了 FLAN 的思路不局限于超大规模模型(137B+),在 770M 的规模上也能获得显著的零样本泛化提升。
7.3 研究贡献
| 贡献 | 影响 |
|---|---|
| Text-to-Text 统一框架 | 成为 NLP 任务标准范式,影响了后续所有 instruction-tuned 模型 |
| 指令微调(FLAN) | 直接启发了 InstructGPT、ChatGPT 的训练方法 |
| 系统性消融实验 | 树立了大规模模型研究的实验范式 |
| C4 数据集 | 成为预训练数据集的事实标准之一 |
| Span Corruption | 成为 Encoder-Decoder 模型的主流预训练目标 |
7.4 对 GPT 时代的启示
虽然 Decoder-only 架构(GPT 系列)最终成为主流,但 T5/FLAN 的思想影响深远:
- 指令微调范式:FLAN 证明的”指令微调 → 零样本泛化”成为现代 LLM 的标准训练步骤
- 任务统一思想:Text-to-Text 的理念在 ChatGPT 等 instruction-following 模型中得到延续
- 预训练目标研究:Span Corruption 和混合去噪的思想影响了 LLaMA、PaLM 等后续模型的预训练
- 开源精神:T5 是最早的大规模开源预训练模型之一,推动了开源 LLM 生态的发展
小结
T5 和 FLAN 是大语言模型发展史上两座重要的里程碑,分别在预训练架构和指令微调两个方向做出了开创性贡献。
核心贡献:
历史意义:
- 任务统一:T5 证明了所有 NLP 任务可以统一为文本生成,消除了任务特定架构的需要
- 指令微调:FLAN 开创了 LLM 泛化能力训练的范式,直接启发了 ChatGPT 的诞生
- 开源精神:T5/FLAN-T5 成为最重要的开源 LLM 之一,推动了整个开源社区的发展
- 研究方法论:T5 论文的大规模消融实验为后续研究树立了标杆
虽然 GPT 系列的 Decoder-only 架构最终成为主流,但 T5/FLAN 的贡献不可磨灭——它们的思想已经深深融入了现代大语言模型的训练流程中。
常见问题 FAQ
Q1:T5 为什么选择 Encoder-Decoder 而不是 Decoder-only?
A:T5 论文系统地比较了三种架构(Encoder-Decoder、Decoder-only、Prefix LM)。实验表明 Encoder-Decoder 在需要双向理解的任务(如分类、问答)上更有优势。此外,Encoder-Decoder 天然适合 Span Corruption 这种去噪预训练目标。不过随着模型规模增大,Decoder-only 架构逐渐成为主流。
Q2:Span Corruption 和 BERT 的 MLM 有什么区别?
A:主要区别有三点:(1) MLM 随机掩盖单个 token,Span Corruption 掩盖连续的 token 片段(span);(2) MLM 使用 [MASK] 标记,Span Corruption 使用 sentinel tokens(<extra_id_0> 等),后者是词汇表的一部分;(3) Span Corruption 的目标需要自回归解码,而非 MLM 的独立预测。
Q3:FLAN 和 InstructGPT 有什么关系?
A:FLAN 是指令微调的先驱工作(2021),证明了在多种 NLP 任务上微调可以让模型理解新指令。InstructGPT(2022)在此基础上加入了 RLHF(人类反馈强化学习),使模型不仅遵循指令,还更符合人类偏好。可以说 FLAN 验证了指令微调的可行性,InstructGPT 将其与对齐技术结合。
Q4:FLAN-T5 和原始 T5 的区别是什么?
A:原始 T5 仅通过 Span Corruption 预训练,没有经过指令微调。FLAN-T5 在 T5 预训练权重的基础上,使用 1836 个任务的指令数据进行微调。FLAN-T5 在几乎所有 zero-shot 和 few-shot 评测上都显著优于原始 T5。
Q5:T5 现在还有使用价值吗?还是已经被淘汰了?
A:T5 在纯生成任务上确实不如现代的 Decoder-only 模型(如 LLaMA、GPT-4)。但在需要双向编码理解的任务(如文本分类、信息抽取、语义匹配)上,Encoder-Decoder 架构仍有优势。FLAN-T5 也常被用作基线模型和蒸馏的教师模型。
Q6:C4 数据集有什么局限性?
A:C4 的主要局限包括:(1) 仅包含英语,不适用于多语言任务;(2) 数据来源为 2019 年的 Common Crawl,时效性有限;(3) 清洗过程可能移除了某些有价值的长尾内容;(4) 存在一定的隐私和偏见问题。后续的 mC4 和 C4 多语言版本部分解决了这些问题。
Q7:FLAN 的指令模板数量对效果有多大影响?
A:FLAN 论文发现,增加模板数量可以显著减少模型对特定格式的过拟合。每个任务至少 5-10 个不同模板是推荐的最低数量。FLAN-v2 将模板数量扩展到 15000+,进一步提升了泛化效果。但超过一定数量后,收益会递减。
Q8:UL2 和 T5 的 Span Corruption 有什么区别?
A:T5 只使用一种 Span Corruption 策略(固定破坏比例和 span 长度分布)。UL2 提出混合使用三种不同的去噪目标(R-Denoiser、S-Denoiser、X-Denoiser),覆盖从短到长的不同破坏粒度。UL2 还引入了模式指示 token,让模型知道当前使用的是哪种去噪模式。
参考资料
- Exploring the Limits of Transfer Learning with T5 (Raffel et al., 2019)
- Finetuned Language Models are Zero-Shot Learners (Wei et al., 2021)
- Scaling Instruction-Finetuned Language Models (FLAN-v2) (Chung et al., 2022)
- UL2: Unifying Language Learning Paradigms (Tay et al., 2022)
- Multitask Prompted Training Enables Zero-Shot Task Generalization (T0) (Sanh et al., 2021)
- mT5: A massively multilingual pre-trained text-to-text transformer (Xue et al., 2020)
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
部分信息可能已经过时






