Q904训练与微调真题解析LLM 训练AgentAlpha 社区真题库约 6 分钟更新 2026-09-29

什么是「数据课程「(Data Curriculum)学习

什么是「数据课程「(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)

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。