2468 字
6 分钟
LLM Basellm base
中训练 Continued Pretraining:领域增强与能力注入

解释中训练为什么介于预训练和后训练之间,以及它如何用于代码、数学、长上下文、多语言和垂直领域能力增强。

中训练很容易被忽略,但它是理解大模型训练管线的关键夹层。它不是普通 SFT,也不是重新预训练,而是在 base model 已有能力上继续补专项分布。

一、中训练是什么#

中训练可以先这样定义:

中训练是介于预训练和后训练之间的继续预训练阶段,通常在高质量领域数据或专项能力数据上继续做语言模型训练,用来增强模型在某些方向上的基础能力。

它常见的叫法有:

  • Continued Pretraining
  • Continual Pretraining
  • Domain-Adaptive Pretraining
  • Mid-training

不同团队叫法不完全一样,但核心思想接近:模型已经完成大规模通用预训练,现在不从零开始,而是在更聚焦的数据上继续训练。

位置大概是:

通用预训练
-> 中训练 / 继续预训练
-> SFT / 偏好优化 / 安全对齐
-> 评估和上线

二、为什么需要中训练#

一个很现实的问题是:预训练很强,但它太泛了。

通用模型可能会懂一点法律、懂一点代码、懂一点数学、懂一点医学,但如果业务需要它在某个方向上稳定表现,仅靠通用预训练不一定够。

另一个问题是:后训练数据通常太少。

SFT 数据可能只有几万到几十万条,偏好数据可能更少。它们适合教模型"怎么回答",但很难补足大量底层知识和领域语言分布。

所以中训练的价值是:

  1. 用更大规模的领域数据补能力。
  2. 让模型适应某类文本分布。
  3. 在后训练前先把 base model 的底子打厚。
  4. 降低后训练阶段"硬教格式、硬灌知识"的压力。

举个例子:

如果目标是训练一个代码模型,只靠 SFT 喂一些"写一个函数"的问答,模型会学到回答格式,但不一定真正熟悉大型代码库、依赖关系、测试模式和工程习惯。

如果先用大量高质量代码、issue、PR、文档和测试做中训练,再做 SFT,效果通常会更稳。

三、中训练常见目标#

1. 代码能力#

训练数据可能包括:

  • GitHub 代码仓库
  • API 文档
  • 单元测试
  • issue / PR 描述
  • 代码解释和题解

模型会更熟悉代码语法、上下文依赖、错误修复和工程结构。

2. 数学能力#

训练数据可能包括:

  • 数学题库
  • 解题过程
  • 证明文本
  • 公式推导
  • 竞赛题和教材

这类中训练能补推理链条和符号表达,但最终能不能做对题,还要看评估和后续 RL/Verifier 训练。

3. 长上下文能力#

长上下文不是简单把窗口调大就行。模型还要学会在长文本里保持位置感、引用前文、整合多段信息。

中训练可以加入:

  • 长文档
  • 长代码库
  • 长对话
  • 多文档问答
  • 长篇报告和论文

4. 垂直领域能力#

比如医疗、法律、金融、教育、企业知识。

这类数据能让模型更熟悉领域术语和表达方式,但要非常注意数据安全、版权和合规问题。

5. 多语言和本地化#

一个模型英文很强,不代表中文业务就好用。

中训练可以补中文语料、中文网页、中文问答、本地法规、本地产品文档,让模型更适合具体语言环境。

四、中训练和 SFT 的区别#

这是理解中训练时最关键的对比。

可以用一句话区分:

中训练主要补"模型知道什么、熟悉什么分布",SFT 主要补"模型如何按指令回答"。

更具体一点:

维度中训练SFT
数据形态大量原始文本、代码、领域文档instruction-response、多轮对话
训练目标继续做语言建模对 assistant answer 做监督学习
主要作用补知识、补能力、补分布学指令跟随、格式、风格
数据规模通常更大通常更小、更精
产物更强 base / domain baseassistant / instruct model

比如法律模型:

  • 中训练数据:法规全文、判例、合同、法律解释。
  • SFT 数据:用户问"这份合同有什么风险",模型按结构输出风险点、依据和建议。

这两个阶段不是互斥关系,而是前后配合。

五、中训练和 RAG 的区别#

中训练还经常和 RAG 混在一起。

可以这样理解:

对比项中训练RAG
知识位置写进模型参数放在外部知识库
更新成本需要重新训练或增量训练更新文档即可
适合内容稳定、通用、常用的领域能力高频更新、可追溯的事实知识
风险遗忘、污染、成本高检索失败、上下文拼接、引用错误

所以企业场景里常见做法不是二选一,而是组合:

  • 稳定领域语言和任务能力:用中训练或微调写进模型。
  • 高频变化的知识:用 RAG 外挂。
  • 输出格式和流程:用 SFT 和提示词约束。

六、训练中要小心什么#

中训练听起来像"继续喂数据就行",但风险不少。

1. 灾难性遗忘

如果领域数据太窄,模型可能提升了某个方向,但通用能力下降。

2. 数据污染

如果训练数据里混入 benchmark 答案,评估会虚高。

3. 数据质量不稳定

低质量网页、重复模板、错误代码会把模型带偏。

4. 训练配比难调

领域数据比例太低,学不到东西;比例太高,又可能损伤通用能力。

5. 安全和隐私

企业内部文档、用户日志、医疗和法律数据,都要先做脱敏和权限审查。

七、中训练的训练策略#

中训练在形式上接近预训练,但工程上会更谨慎。因为模型不是从零开始,而是在已有能力上继续改参数。

1. 学习率通常更小#

从零预训练时,模型参数还没有形成稳定能力;中训练时,模型已经有通用语言能力。如果学习率过大,很容易把原本能力冲坏。

所以中训练常见做法是:

  • 使用比预训练更小的学习率。
  • 增加 warmup,避免刚开始梯度过猛。
  • 监控通用能力评估集,防止只看领域 loss。

2. 数据要混合,而不是只喂领域数据#

如果只喂法律、医疗或公司代码,模型可能快速适应该领域,但通用对话、数学、代码或安全能力下降。

更稳的做法是混合数据:

领域数据:提高专项能力
通用高质量数据:维持基础语言能力
安全数据:避免领域语料把边界冲掉
代码/数学数据:按模型目标保留专项能力

混合比例没有万能答案。它取决于目标任务、领域数据质量和模型已有能力。实际训练时要靠评估曲线调。

3. 可以只训练一段,不追求 loss 极低#

中训练不是考试刷分。loss 继续下降不代表模型整体更好,可能只是更贴合窄领域语料。

因此要同时看:

  • 领域验证集 loss。
  • 通用 benchmark 是否退化。
  • 领域任务评估是否提升。
  • 安全和拒答行为是否异常。
  • 生成风格是否变窄。

4. 训练数据要保留来源和版本#

中训练常常涉及公司文档、行业资料、代码仓库、用户日志。后续如果模型出现幻觉、泄露或版权问题,需要能追溯是哪批数据进入了训练。

所以数据集最好记录:

source
license
cleaning rule
dedup version
PII status
train/eval split

八、一个具体例子:做公司内部代码助手#

目标:让模型更懂公司内部代码库。

比较合理的路线可能是:

  1. 选一个通用代码能力较强的 base model。
  2. 收集公司内部代码、README、接口文档、测试、常见 issue。
  3. 做清洗:去密钥、去隐私、去重复、去无效生成文件。
  4. 做中训练:让模型适应内部代码风格、目录结构和 API。
  5. 做 SFT:构造"解释函数""补单测""修 bug""按规范写接口"的指令数据。
  6. 做 Agentic 训练或评估:让模型在代码环境里调用搜索、运行测试、修改文件。
  7. 上线后收集失败修复记录,进入数据飞轮。

这样中训练解决的是"熟悉公司代码分布",SFT/Agent 训练解决的是"怎么帮开发者完成任务"。

九、本篇小结#

中训练不是"再微调一下"这么简单,它更像是对 base model 的能力底盘做二次塑形。它仍然主要靠语言模型目标学习分布,但数据更聚焦,学习率更谨慎,评估更强调"专项提升"和"通用不崩"的平衡。

可以用一句话记住:

中训练补底层能力,SFT 塑造交互行为,RAG 提供外部可更新知识。

专题阅读

LLM Base

这篇文章属于同一条阅读链。你可以直接在这里切换,不用再回到列表页重新找。

当前进度3 / 14

留言区

留言

欢迎纠错、补充、交流。昵称和评论内容必填;如果你愿意,也可以留下联系方式,仅站主可见。

0

正在加载评论...

0 / 2000

阅读导航

文章目录

当前阅读位置将在这里显示

0 节