解释中训练为什么介于预训练和后训练之间,以及它如何用于代码、数学、长上下文、多语言和垂直领域能力增强。
中训练很容易被忽略,但它是理解大模型训练管线的关键夹层。它不是普通 SFT,也不是重新预训练,而是在 base model 已有能力上继续补专项分布。
一、中训练是什么
中训练可以先这样定义:
中训练是介于预训练和后训练之间的继续预训练阶段,通常在高质量领域数据或专项能力数据上继续做语言模型训练,用来增强模型在某些方向上的基础能力。
它常见的叫法有:
- Continued Pretraining
- Continual Pretraining
- Domain-Adaptive Pretraining
- Mid-training
不同团队叫法不完全一样,但核心思想接近:模型已经完成大规模通用预训练,现在不从零开始,而是在更聚焦的数据上继续训练。
位置大概是:
通用预训练-> 中训练 / 继续预训练-> SFT / 偏好优化 / 安全对齐-> 评估和上线二、为什么需要中训练
一个很现实的问题是:预训练很强,但它太泛了。
通用模型可能会懂一点法律、懂一点代码、懂一点数学、懂一点医学,但如果业务需要它在某个方向上稳定表现,仅靠通用预训练不一定够。
另一个问题是:后训练数据通常太少。
SFT 数据可能只有几万到几十万条,偏好数据可能更少。它们适合教模型"怎么回答",但很难补足大量底层知识和领域语言分布。
所以中训练的价值是:
- 用更大规模的领域数据补能力。
- 让模型适应某类文本分布。
- 在后训练前先把 base model 的底子打厚。
- 降低后训练阶段"硬教格式、硬灌知识"的压力。
举个例子:
如果目标是训练一个代码模型,只靠 SFT 喂一些"写一个函数"的问答,模型会学到回答格式,但不一定真正熟悉大型代码库、依赖关系、测试模式和工程习惯。
如果先用大量高质量代码、issue、PR、文档和测试做中训练,再做 SFT,效果通常会更稳。
三、中训练常见目标
1. 代码能力
训练数据可能包括:
- GitHub 代码仓库
- API 文档
- 单元测试
- issue / PR 描述
- 代码解释和题解
模型会更熟悉代码语法、上下文依赖、错误修复和工程结构。
2. 数学能力
训练数据可能包括:
- 数学题库
- 解题过程
- 证明文本
- 公式推导
- 竞赛题和教材
这类中训练能补推理链条和符号表达,但最终能不能做对题,还要看评估和后续 RL/Verifier 训练。
3. 长上下文能力
长上下文不是简单把窗口调大就行。模型还要学会在长文本里保持位置感、引用前文、整合多段信息。
中训练可以加入:
- 长文档
- 长代码库
- 长对话
- 多文档问答
- 长篇报告和论文
4. 垂直领域能力
比如医疗、法律、金融、教育、企业知识。
这类数据能让模型更熟悉领域术语和表达方式,但要非常注意数据安全、版权和合规问题。
5. 多语言和本地化
一个模型英文很强,不代表中文业务就好用。
中训练可以补中文语料、中文网页、中文问答、本地法规、本地产品文档,让模型更适合具体语言环境。
四、中训练和 SFT 的区别
这是理解中训练时最关键的对比。
可以用一句话区分:
中训练主要补"模型知道什么、熟悉什么分布",SFT 主要补"模型如何按指令回答"。
更具体一点:
| 维度 | 中训练 | SFT |
|---|---|---|
| 数据形态 | 大量原始文本、代码、领域文档 | instruction-response、多轮对话 |
| 训练目标 | 继续做语言建模 | 对 assistant answer 做监督学习 |
| 主要作用 | 补知识、补能力、补分布 | 学指令跟随、格式、风格 |
| 数据规模 | 通常更大 | 通常更小、更精 |
| 产物 | 更强 base / domain base | assistant / instruct model |
比如法律模型:
- 中训练数据:法规全文、判例、合同、法律解释。
- SFT 数据:用户问"这份合同有什么风险",模型按结构输出风险点、依据和建议。
这两个阶段不是互斥关系,而是前后配合。
五、中训练和 RAG 的区别
中训练还经常和 RAG 混在一起。
可以这样理解:
| 对比项 | 中训练 | RAG |
|---|---|---|
| 知识位置 | 写进模型参数 | 放在外部知识库 |
| 更新成本 | 需要重新训练或增量训练 | 更新文档即可 |
| 适合内容 | 稳定、通用、常用的领域能力 | 高频更新、可追溯的事实知识 |
| 风险 | 遗忘、污染、成本高 | 检索失败、上下文拼接、引用错误 |
所以企业场景里常见做法不是二选一,而是组合:
- 稳定领域语言和任务能力:用中训练或微调写进模型。
- 高频变化的知识:用 RAG 外挂。
- 输出格式和流程:用 SFT 和提示词约束。
六、训练中要小心什么
中训练听起来像"继续喂数据就行",但风险不少。
1. 灾难性遗忘
如果领域数据太窄,模型可能提升了某个方向,但通用能力下降。
2. 数据污染
如果训练数据里混入 benchmark 答案,评估会虚高。
3. 数据质量不稳定
低质量网页、重复模板、错误代码会把模型带偏。
4. 训练配比难调
领域数据比例太低,学不到东西;比例太高,又可能损伤通用能力。
5. 安全和隐私
企业内部文档、用户日志、医疗和法律数据,都要先做脱敏和权限审查。
七、中训练的训练策略
中训练在形式上接近预训练,但工程上会更谨慎。因为模型不是从零开始,而是在已有能力上继续改参数。
1. 学习率通常更小
从零预训练时,模型参数还没有形成稳定能力;中训练时,模型已经有通用语言能力。如果学习率过大,很容易把原本能力冲坏。
所以中训练常见做法是:
- 使用比预训练更小的学习率。
- 增加 warmup,避免刚开始梯度过猛。
- 监控通用能力评估集,防止只看领域 loss。
2. 数据要混合,而不是只喂领域数据
如果只喂法律、医疗或公司代码,模型可能快速适应该领域,但通用对话、数学、代码或安全能力下降。
更稳的做法是混合数据:
领域数据:提高专项能力通用高质量数据:维持基础语言能力安全数据:避免领域语料把边界冲掉代码/数学数据:按模型目标保留专项能力混合比例没有万能答案。它取决于目标任务、领域数据质量和模型已有能力。实际训练时要靠评估曲线调。
3. 可以只训练一段,不追求 loss 极低
中训练不是考试刷分。loss 继续下降不代表模型整体更好,可能只是更贴合窄领域语料。
因此要同时看:
- 领域验证集 loss。
- 通用 benchmark 是否退化。
- 领域任务评估是否提升。
- 安全和拒答行为是否异常。
- 生成风格是否变窄。
4. 训练数据要保留来源和版本
中训练常常涉及公司文档、行业资料、代码仓库、用户日志。后续如果模型出现幻觉、泄露或版权问题,需要能追溯是哪批数据进入了训练。
所以数据集最好记录:
sourcelicensecleaning rulededup versionPII statustrain/eval split八、一个具体例子:做公司内部代码助手
目标:让模型更懂公司内部代码库。
比较合理的路线可能是:
- 选一个通用代码能力较强的 base model。
- 收集公司内部代码、README、接口文档、测试、常见 issue。
- 做清洗:去密钥、去隐私、去重复、去无效生成文件。
- 做中训练:让模型适应内部代码风格、目录结构和 API。
- 做 SFT:构造"解释函数""补单测""修 bug""按规范写接口"的指令数据。
- 做 Agentic 训练或评估:让模型在代码环境里调用搜索、运行测试、修改文件。
- 上线后收集失败修复记录,进入数据飞轮。
这样中训练解决的是"熟悉公司代码分布",SFT/Agent 训练解决的是"怎么帮开发者完成任务"。
九、本篇小结
中训练不是"再微调一下"这么简单,它更像是对 base model 的能力底盘做二次塑形。它仍然主要靠语言模型目标学习分布,但数据更聚焦,学习率更谨慎,评估更强调"专项提升"和"通用不崩"的平衡。
可以用一句话记住:
中训练补底层能力,SFT 塑造交互行为,RAG 提供外部可更新知识。专题阅读
LLM Base
这篇文章属于同一条阅读链。你可以直接在这里切换,不用再回到列表页重新找。
部分信息可能已经过时
留言区
留言
欢迎纠错、补充、交流。昵称和评论内容必填;如果你愿意,也可以留下联系方式,仅站主可见。