什么是「数据课程「(Data Curriculum)学习
1️⃣ 考察意图
面试官想看你能否解释课程学习在 LLM 预训练中的应用。刁钻点在于:很多人混淆了"数据课程"和"数据配比"——配比是"喂什么",课程是"什么时候喂"。答好了能展示你对训练动态的理解,以及"从易到难"这一人类学习原则在机器学习中的迁移。
2️⃣ 标准答
数据课程学习是按"难度"排序训练数据,先学简单样本再学复杂样本,加速收敛并提升最终性能。
1. 核心思想
- 人类学习是渐进的:先学加减法再学乘除,先学单词再学句子
- LLM 训练默认是随机采样(uniform sampling),所有数据混合在一起训练
- 课程学习:按难度排序,前期多采样简单数据(低困惑度),后期多采样复杂数据(高困惑度)
2. 难度定义方法
- 困惑度(Perplexity):用已训练的小模型给每个文档打分,PPL 低的为"简单",PPL 高的为"困难"
- 文本长度:短文本为"简单",长文本为"困难"
- 信息密度:用 entity density(每百 token 的实体数)衡量,密度低的为"简单"
- 任务类型:对话 < 摘要 < 推理 < 数学证明(按推理难度排序)
3. 课程策略
策略 1:线性课程
- 前期(0-50% 训练):80% 简单 + 20% 困难
- 后期(50-100%):20% 简单 + 80% 困难
- 效果:在代码任务上比随机采样提升 5%
策略 2: Anti-curriculum(反向课程)
- 先学困难再学简单
- 在某些场景(如噪声多的数据)比正向课程效果更好
- 原因:困难样本包含更多长尾知识,先学可以覆盖更多"低频但重要"的模式
策略 3:混合课程
- 始终保持一定比例的简单和困难数据,但比例动态变化
- 如:简单从 70%→30%,困难从 30%→70%,中间过渡
- 效果最稳定,不会出现"只学好学的"或"一上来就太难"的问题
4. 效果与适用场景
| 场景 | 课程学习效果 | 原因 |
|---|---|---|
| 代码/数学 | +5-10% | 推理能力需要基础概念先建立 |
| 通用语言 | +1-2% | 语言能力不需要严格的从易到难 |
| 多语言 | +3-5% | 先学主语言再学次语言更高效 |
| 领域适配 | +8-15% | 先学通用再学领域,避免灾难性遗忘 |
5. 实践挑战
- 计算开销:需要预先用小模型给所有数据打分(PPL 计算),增加预处理成本
- 难度定义不完美:PPL 低不一定意味着"简单"——也可能是重复模板或低质量文本
- 与数据配比的交互:课程学习调整的是"何时采样",配比调整的是"采样多少"。两者需要协同设计
3️⃣ 答题模板(30 秒电梯版)
"数据课程学习是按难度排序训练数据——先学简单(低PPL)再学复杂(高PPL)。难度用困惑度或文本长度定义。三种策略:线性课程(前易后难,代码任务+5-10%)、反向课程(先难后易,适合噪声数据)、混合课程(比例动态变化,最稳定)。适用场景:代码/数学效果好(+5-10%),通用语言效果小(+1-2%)。挑战:需要预计算难度分数、难度定义不完美、需与配比协同设计。"
4️⃣ 高频追问 & 应对
追问 1:课程学习在 LLM 预训练中有实际应用吗?哪些模型用了?
有,但不完全是标准课程学习。实际应用更多是"分阶段训练":(1) LLaMA-2 的预训练分两个阶段——第一阶段用通用数据训练大部分步数,第二阶段增加高质量数据(如百科、论文)的比例做"精炼";(2) GLM-4 的训练分三阶段——通用预训练→代码/数学增强→指令微调;(3) DeepSeek 的训练在后期增加了数学和代码数据的比例。这些做法本质上是课程学习的变体——虽然不严格按 PPL 排序,但遵循了"先通用后专业"的原则。
追问 2:反向课程为什么在某些场景更好?
反向课程(先难后易)在噪声多的数据集上效果好,原因:(1) 困难样本(高 PPL)可能包含更多长尾知识——先学这些可以避免后期"没见过"导致的 loss spike;(2) 简单样本(低 PPL)可能是重复模板——放在后期学不会浪费前期的"学习能力";(3) 在持续预训练中,先用困难的新领域数据建立领域知识,再用简单的通用数据"巩固",比反过来效果更好。但反向课程在代码/数学任务上效果差——推理能力需要基础概念先建立,不能先做难题再做简单题。
追问 3:课程学习和持续预训练(Continual Pre-training)有什么关系?
持续预训练可以看作课程学习的一种形式——先训练通用数据(第一阶段),再训练领域数据(第二阶段),本质上是"先简单后复杂"的课程。区别:(1) 课程学习是在同一次训练中调整数据顺序,持续预训练是分多次训练;(2) 课程学习通常保持相同数据集,只改采样顺序,持续预训练引入新数据集;(3) 持续预训练需要特别处理灾难性遗忘(混合旧数据),课程学习不需要。实践中两者可以结合——持续预训练的每个阶段内部用课程学习。
5️⃣ 避坑 · 常见错误答法
- ❌ "课程学习就是把数据按顺序排列" → ✅ "课程学习是动态调整采样概率——不是改变数据顺序,而是改变简单/困难数据的采样权重。简单数据在前期被多采样,困难数据在后期被多采样。"
- ❌ "课程学习总是比随机采样好" → ✅ "课程学习在代码/数学任务上效果好(+5-10%),但在通用语言任务上效果有限(+1-2%)。在噪声多的数据上,反向课程可能比正向课程更好。需要根据数据特性选择策略。"
- ❌ "课程学习和配比优化是一回事" → ✅ "课程学习调整的是'何时采样'(时间维度),配比优化调整的是'采样多少'(比例维度)。两者正交,可以同时使用——在课程学习的每个阶段内部用优化后的配比。"
6️⃣ 简历呼应
- 如果你有预训练项目:从"课程学习实验"切入,描述你对比随机采样 vs. 课程学习的训练曲线(loss 收敛速度、下游任务分数),给出在代码/数学任务上的提升数据
- 如果你只做过微调:用"SFT 数据排序"切入,说明在微调中先训练简单指令再训练复杂指令的效果
- 如果你是校招:在小型模型(100M)上实现课程学习,对比线性课程/反向课程/随机采样的效果,写博客
- "Curriculum Learning" (Bengio et al., 2009)
- "On the Effect of Pretraining Data on the Generalization of LLMs" (Tay et al., 2022)
- "Data-driven Curriculum for Pretraining Language Models" (Chen et al., 2023)