11.6.2 预训练范式

- 理解预训练范式和“每个任务从零训练”的差别
- 理解预训练 -> 迁移 -> 微调的主线
- 通过可运行示例建立“共享底座”的直觉
- 理解为什么现代 NLP 主线几乎都围绕它展开
先建立一张地图
Section titled “先建立一张地图”如果你已经学过词向量、上下文化表示和语言模型,这一节最自然的续接就是:
- 前面你已经看到文本表示越来越强
- 这一节开始回答“为什么后来整个 NLP 都开始围绕一个共享底座来组织”
所以预训练范式不是“又多训一步”,而是:
- 任务组织方式本身变了
预训练范式这节最适合新人的理解顺序不是“先记模型名”,而是先看清:
flowchart LR A["海量通用语料"] --> B["先学共享语言能力"] B --> C["形成预训练底座"] C --> D["再迁移到具体任务"] D --> E["微调 / 特征抽取 / Prompt"]所以这节真正想讲清的是:
- 为什么“每个任务从零训练”会浪费
- 为什么“先学底座,再迁移”会改变整个 NLP 主线
一、为什么预训练会改变整个 NLP?
Section titled “一、为什么预训练会改变整个 NLP?”因为很多任务共享底层语言能力
Section titled “因为很多任务共享底层语言能力”无论是:
- 分类
- NER
- 问答
- 翻译
它们都需要一些共同底层能力,例如:
- 词义理解
- 语法结构
- 上下文建模
如果每个任务都从零学,会很浪费
Section titled “如果每个任务都从零学,会很浪费”这就像:
- 每次做新题,都从头学语言本身
显然成本很高。
预训练范式的核心
Section titled “预训练范式的核心”于是更合理的做法就变成:
- 先在海量通用文本上学基础能力
- 再把这份能力迁移到具体任务
这就是现代 NLP 的主线。
第一次学预训练范式,最该先抓住什么?
Section titled “第一次学预训练范式,最该先抓住什么?”最该先抓住的不是模型名,而是这句:
预训练的核心价值,是把很多任务都共享的语言能力先集中学出来。
这句话一旦稳住,后面你再看:
- BERT
- GPT
- T5
就会更自然地先问:
- 它在这条共享底座主线里扮演什么角色?
二、预训练、迁移、微调三者关系是什么?
Section titled “二、预训练、迁移、微调三者关系是什么?”目标是:
- 学通用语言表示和模式
目标是:
- 把已有能力带到新任务上
目标是:
- 在具体任务上做进一步适配
预训练像先读通识教材。 迁移像把这套基础搬去新科目。 微调像针对考试题型做专项训练。
为什么这个类比特别值得先记?
Section titled “为什么这个类比特别值得先记?”因为很多新人第一次接触预训练,会误以为:
- 预训练 = 再多训练一会儿
但这个类比会帮你更稳地看到:
- 预训练在学通用能力
- 迁移在复用能力
- 微调在做任务适配
三、先跑一个“共享底座”示例
Section titled “三、先跑一个“共享底座”示例”shared_representation = { "退款": [1.0, 0.2, 0.1], "发票": [0.3, 1.0, 0.1], "密码": [0.1, 0.2, 1.0],}
def sentence_vector(tokens): vectors = [shared_representation[token] for token in tokens if token in shared_representation] dim = len(vectors[0]) return [sum(vec[i] for vec in vectors) / len(vectors) for i in range(dim)]
def classify_intent(tokens): vec = sentence_vector(tokens) scores = { "refund": vec[0], "invoice": vec[1], "password": vec[2], } return max(scores, key=scores.get), scores
for tokens in [["退款"], ["发票"], ["密码"]]: print(tokens, "->", classify_intent(tokens))预期输出:
['退款'] -> ('refund', {'refund': 1.0, 'invoice': 0.2, 'password': 0.1})['发票'] -> ('invoice', {'refund': 0.3, 'invoice': 1.0, 'password': 0.1})['密码'] -> ('password', {'refund': 0.1, 'invoice': 0.2, 'password': 1.0})从左往右看:每个输入词都复用同一张共享表示表,然后一个很小的任务分类器读取三个分数维度。这就是“先有共享底座,再做任务适配”的缩小版。
这个例子在说明什么?
Section titled “这个例子在说明什么?”它想表达的不是一个真实强模型, 而是最核心的范式感觉:
- 先有共享表示底座
- 再在其上完成具体任务
为什么这很像预训练时代的思路?
Section titled “为什么这很像预训练时代的思路?”因为你不再是:
- 每个任务单独从零学所有表示
而是:
- 复用一套已有语言表示
新人第一次学预训练范式,最该先记什么?
Section titled “新人第一次学预训练范式,最该先记什么?”最值得先记的其实是:
- 预训练不是“多训一步”,而是在换任务组织方式
- 共享底座能力是现代 NLP 的核心资产
- 下游任务的门槛因此大幅下降
为什么“共享底座”这个视角特别重要?
Section titled “为什么“共享底座”这个视角特别重要?”因为它会直接改变你后面看问题的方式。
你不再只是问:
- 这个任务要不要单独做一个模型?
而会开始更自然地问:
- 这个任务能不能建立在已有底座之上?
- 我到底需要微调、特征抽取,还是 Prompt?
四、为什么这条路后面会走向 BERT / GPT / T5?
Section titled “四、为什么这条路后面会走向 BERT / GPT / T5?”因为它能规模化
Section titled “因为它能规模化”一旦预训练成立, 更大的数据、更多的计算通常会继续提升底座能力。
因为它更通用
Section titled “因为它更通用”同一底座可以迁移到很多任务。
因为它降低了下游门槛
Section titled “因为它降低了下游门槛”很多任务不再需要从零训练一个大模型, 而是:
- 直接拿预训练模型适配
五、最容易踩的坑
Section titled “五、最容易踩的坑”误区一:预训练范式只是“先训练一下”
Section titled “误区一:预训练范式只是“先训练一下””不对。 它改变的是整个任务组织方式。
误区二:所有任务都一定要微调
Section titled “误区二:所有任务都一定要微调”有些任务只要:
- 特征抽取
- Prompt
- 检索
就够了。
误区三:只记模型名字,不理解范式
Section titled “误区三:只记模型名字,不理解范式”真正重要的是:
- 为什么先学通用能力再迁移有效
学完这一页,至少保留这张证据卡:
- 模型选择
- BERT、GPT、T5、Transformer 流水线或其他预训练基线
- tokenizer 输出
- id、mask、解码文本或批次形状
- 任务结果
- 分类、生成、抽取或文本到文本输出
- 失败检查
- 错误的模型家族、token 限制、领域不匹配、成本或延迟
- 期望产出
- 模型调用结果加一段简短的选择理由
这节最重要的是建立一个时代判断:
现代 NLP 的核心变化,不只是模型变大了,而是训练范式从“每个任务单独做”转向了“先学通用底座,再迁移适配”。
只要这层判断立住,后面学 BERT、GPT、T5 就不会只剩流行词。
这节最该带走什么
Section titled “这节最该带走什么”- 现代 NLP 的关键变化,不只是模型更大,而是范式变了
- 预训练、迁移、微调必须放在同一条主线里理解
- 后面学 BERT / GPT / T5 时,先想它们各自在这条主线里的角色
如果再压成一句话,那就是:
预训练范式真正改变的,不只是训练顺序,而是整个 NLP 从“任务各做各的”转向了“共享一个更强的语言底座”。
- 用自己的话解释:为什么预训练范式会显著降低很多 NLP 任务的门槛?
- 想一想:哪些任务可能只需要预训练特征,不一定要全量微调?
- 这个“共享底座”例子在真实系统里分别对应什么?
- 为什么说预训练范式改变的不只是模型,而是整个任务组织方式?
解题思路与讲解
- 预训练降低门槛,是因为模型在看到你的小型任务数据前,已经学过大量通用语言模式。
- 可能只需要预训练特征、不必完整微调的任务包括相似度搜索、聚类、简单分类和检索重排 baseline。
- “共享底座”对应真实系统中用同一个预训练 encoder 或模型家族服务多个下游 head、prompt 或 adapter。
- 预训练范式改变的不只是模型,也改变了任务组织方式:数据、评估、适配和部署都围绕可复用 foundation model 展开。