
续训 Continual Pre-training:为模型注入领域知识一、问题的起源:为什么 SFT 不够用?假设你在某金融机构工作,公司积累了十年来所有内部研究报告、风控文档和交易日志。你拿 llama-3-8b 做 SFT(指令微调)后让模型回答专业问题,结果发现模型把"次级贷款"解释成了"次要的贷款",把"压力测试"理解成"服务器压力测试"。这不是模型笨——这是它在预训练阶段从未见过这些领域的语料。这里涉及一个关键认知:SFT 主要教模型"怎么说",而 CPT(Continual Pre-training,续训)教模型"知道什么"。SFT 改变的是模型的输出分布和指令跟随能力,但对于完全陌生的概念和知识体系,它在 SFT 数据中看到的那几百条样本就像往大海里扔石子——波纹消失得很快。CPT 的核心思路是在基座模型的预训练权重之上,用大量领域文本做二次预训练,让模型真正"学会"这个领域的知识结构和术语体系。我在实际项目中遇到过这样一个例子:为一家医疗科技公司做病历结构化抽取,直接用 GPT-4 的 few-shot 提示效果平平,F1 只有 0.62。做一轮 SFT 后提升到 0.73,但瓶颈非常明显——模型对医学缩写(如 “CR” 到底是 “complete response” 还是 “creatinine”)频繁误判。后来用 8 万份脱敏电子病历做了两轮 CPT 再叠加 SFT,F1 直接冲到了 0.89。这 16 个点的差距就是领域知识注入的力量。二、CPT 的核心原理2.1 CPT 与 SFT 的本质区别维度SFT(指令微调)CPT(续训)目标改变行为模式(对话/指令跟随)注入领域知识(术语/逻辑/常识)数据量千级~万级万级~百万级数据格式instruction-input-output 对原始文本 / 自回归语料训练方式仅对输出部分计算 loss全文本自回归 loss(next-token prediction)学习率1e-5 ~ 5e-51e-5 ~ 5e-5(但需 warmup + cosine decay)参数量常用 LoRA / QLoRA推荐全参或高秩 LoRA(r≥64)风险过拟合 / 灾难性遗忘灾难性遗忘(更严重)CPT 延续了预训练阶段的训练范式——因果语言建模(Causal Language Modeling, CLM),即给定前文xtx_{t}xt预测当前 tokenxtx_txt,损失函数为标准的交叉熵:LCPT=−1∣D∣∑x∈D∑t=1∣x∣logPθ(xt∣xt) \mathcal{L}_{\text{CPT}} = -\frac{1}{|\mathcal{D}|} \sum_{x \in \mathcal{D}} \sum_{t=1}^{|x|} \log P_\theta(x_t \mid x_{t})LCPT=−∣D∣1