课程学习(Curriculum Learning)是一种训练策略:不把训练数据一股脑随机打乱喂给模型,而是按“由易到难”的顺序组织样本,先学简单例子,再逐步加入困难例子。
打个比方。人类学数学,先数数、再加减、再方程、最后微积分。如果第一天就上微积分,大概率挫败。模型也一样。训练初期参数接近随机,直接看复杂样本,损失大、梯度方向乱,更新容易震荡,甚至卡在坏的局部区域。先看简单样本,模型能快速抓住主要模式,参数进入一个较好的区域;再逐步提高难度,模型在这个基础上做精细调整,收敛更快,最终效果往往也更好。
“难度”没有统一标准。可以是样本噪声大小、类别边界是否清晰、序列长度、图像分辨率、任务复杂度,也可以是模型当前预测的损失值。常见做法:按损失排序,损失小的先学;按序列长度分桶,短的先学;多任务里先学简单任务,再学复杂任务。
和相邻概念的区别:
| 概念 | 谁决定顺序/选择 | 核心问题 |
|---|---|---|
| 课程学习 | 预设课程(人/规则) | 按什么顺序训练 |
| 自步学习(Self-paced Learning) | 模型自己 | 当前能学哪些样本 |
| 主动学习(Active Learning) | 模型挑样本请人标注 | 标哪些数据最值 |
| 迁移学习(Transfer Learning) | 源任务到目标任务 | 知识从哪来 |
课程学习不是万能药。如果“简单”的定义与目标任务不匹配,或者简单样本本身有偏,可能损害最终性能。随机打乱有时是强基线。实际使用时,通常要对比实验。
对从业者:语言模型可以先短序列后长序列,图像模型可以先低分辨率后高分辨率,强化学习(Reinforcement Learning)可以先简单环境再复杂环境,微调时可以先冻结底层再逐步解冻。对普通人:学新技能也可以拆成难度阶梯,但别把“简单”等同于“舒适”,要逐步把自己暴露在挑战里。
