单一任务 SFT 容易导致灾难性遗忘(catastrophic forgetting)——通用对话能力下降。通过数据混合与课程学习(curriculum learning),在拉高目标任务的同时保留基座能力。
系列索引:微调技术路线导读
一、何时需要混合
| 场景 | 做法 |
|---|---|
| 窄分类 + 怕格式退化 | 掺 5–20% 通用指令数据 |
| 多业务线共用一个模型 | 按流量或优先级设比例 |
| CPT + SFT 同一阶段 | 按 token 比例混 text 与对话 |
| 对齐后能力掉 | SFT 通用集 + DPO 时控 β |
二、多任务比例
| 策略 | 说明 |
|---|---|
| 均匀 | 每任务等量 sample(小任务过采样) |
| 按重要性 | 主任务 70%,辅助 30% |
| 按 token | 长文档任务按 token 加权,防短样本刷屏 |
| 动态 | 前期主任务高,后期加通用(课程) |
1 | from datasets import concatenate_datasets, interleave_datasets |
三、通用能力保留
从基座 instruct 模型的公开指令集(如 Alpaca、ShareGPT 子集)抽取 5–20% 与领域数据混合:
- 监控通用抽检集(人工或 EM)。
- lr 不宜过高;LoRA 通常足够。
05-04 全参 vs PEFT | Math-04/20 遗忘对策。
四、CPT 与 SFT 混合
| 模式 | 说明 |
|---|---|
| 串行(推荐) | 05-02 CPT 后再 SFT |
| 并行混训 | 需自定义 dataloader;同一 step 不同 loss 掩码 |
混训时 CPT 样本用全序列 loss,SFT 用 completion_only——实现复杂度高于串行。
五、简单课程学习
- 阶段 1:短样本、简单标签、高 lr(或标准 lr)。
- 阶段 2:加长上下文、难样本、降 lr 或续训。
- 阶段 3(可选):加入开放生成或多轮。
实现:train_dataset 按难度排序后分阶段 trainer.train(resume_from_checkpoint=...)。
六、评估
混合后必须分任务报告指标,勿只看总 loss:
| 集合 | 指标 |
|---|---|
| 主任务 test | F1 / EM |
| 通用抽检 | 人工 / 小 benchmark |
| invalid 率 | 格式是否退化 |
七、小结
混合 = 比例可控 + shuffle 可复现 + 分任务验收。默认窄任务可不必混合;开放 instruct 模型做深领域 SFT 时建议掺通用集。
下一步:08-01 基线评估。