迁移学习基础:从预训练到微调
迁移学习基础:从预训练到微调
假设要训练一个识别三种花卉的模型,手头只有几百张标注图片。直接从随机参数开始训练,模型既要学习如何提取图像特征,又要学习如何区分花卉;有限的数据未必足以同时支撑这两件事。
如果已经有一个在大量自然图像上训练过的模型,能否保留它提取特征的能力,再让它学习花卉分类?这就是迁移学习的一种典型用法。
本文面向了解训练集、损失函数和梯度下降的读者,重点解释概念与实验思路,不依赖特定框架。花卉数据规模与后面的评估数字均为教学假设,不代表实际训练结果。
1. 先分清“领域”和“任务”
迁移学习(Transfer Learning)利用源领域或源任务中获得的知识,帮助目标领域或目标任务的学习。“源”表示知识来自哪里,“目标”表示最终要解决什么问题。
沿用 Pan 与 Yang 的综述中的基本记法,领域(Domain)写为:
其中, 是输入特征空间, 是输入随机变量, 是输入的概率分布。领域不只是“医学”“金融”这样的行业名称:同一种摄像头在白天和夜间拍摄,输入形式可以相同,数据分布却可能改变。
任务(Task)写为:
是标签空间, 是要学习的预测函数;在概率分类中,可以用条件分布 描述预测关系。下标 和 分别表示源与目标。经典定义关注 或 的情形。
| 示例 | 输入发生什么变化 | 预测目标发生什么变化 |
|---|---|---|
| 通用物体识别 → 三种花卉分类 | 从广泛的自然图像变为花卉图像 | 类别集合改变,需要新的分类头 |
| 白天道路识别 → 夜间道路识别 | 光照、噪声等分布改变 | 可以保留相同的类别含义 |
| 商品评论情感分析 → 酒店评论情感分析 | 词汇和表达习惯改变 | 仍预测情感,但具体语句与标签的关系可能改变 |
“输入尺寸相同”不等于“领域相同”,“标签名字相同”也不保证预测关系相同。分析迁移问题时,应把输入、分布、标签和可用标注分别写清楚。
2. 预训练模型究竟提供了什么
在深度分类模型中,可以把计算拆成两部分:
- 是一张输入图片。
- 是参数为 的特征提取器,也称骨干网络; 是它输出的特征向量。
- 是参数为 的分类头; 是各类别的预测概率。
预训练(Pretraining)先在源数据上学到参数 。迁移到花卉分类时,用 初始化特征提取器,并为三种花卉建立新的分类头。
预训练提供的是一种已经学到的表示方式和参数起点。源模型的输出若是“汽车、飞机、猫”等类别,就不能直接把那些输出当作三种花卉的概率;输出层必须与目标标签对应。
在常见视觉网络中,靠前的层往往提取较通用的局部特征,靠后的层更贴近源任务。这能解释为什么复用骨干网络、替换分类头是常见起点,但它不是所有模型、所有领域都成立的层级定律。具体取哪一层、能否复用,应由目标数据上的验证结果决定。参见 CS231n 的迁移学习讲义。
还要区分两个词:预训练描述“先前怎样学习”,迁移学习描述“这些知识怎样帮助新问题”。源端训练也可以不依赖人工类别标签,因此“迁移学习必须先有一个监督分类模型”并不成立。
3. 冻结与微调:目标数据更新哪些参数
设目标训练集有 个带标注样本 ,类别数为 ,预测第 类的概率为 。多分类交叉熵为:
它只取出每个样本真实类别的预测概率,再计算负对数并求平均。例如,某张图的真实类别是“雏菊”,该类预测概率从 变成 ,单样本损失就从 降到 。这里使用自然对数。
冻结与微调可以使用同一个目标损失;区别在于允许优化哪些参数。
3.1 冻结骨干,只训练分类头
固定 ,只求解:
输入图片仍然经过骨干网络,但目标任务的训练不更新骨干参数。可以把它理解为:先用固定的观察方式描述图片,再学习如何依据这些描述分类。
这种方式通常称为固定特征提取(Fixed Feature Extraction)。若分类头只包含一个线性映射,再接分类所需的输出函数,常称为线性探测(Linear Probing)。
3.2 解冻部分或全部骨干,继续训练
微调(Fine-tuning)从预训练参数出发,允许部分或全部骨干参数随目标任务更新。全量微调的形式是:
部分微调则只更新 中选定的层,其余参数保持固定。此时不仅分类规则在变,提取特征的方式也在适应花卉数据。
| 方案 | 骨干的初始参数 | 更新范围 | 需要回答的问题 |
|---|---|---|---|
| 从头训练 | 随机初始化 | 骨干与分类头 | 不使用源知识能做到什么程度? |
| 固定特征提取 | 预训练参数 | 新分类头 | 现有特征是否足够区分目标类别? |
| 部分微调 | 预训练参数 | 新分类头与部分骨干 | 调整部分表示是否有收益? |
| 全量微调 | 预训练参数 | 骨干与新分类头 | 数据和预算能否支撑更大范围的调整? |
在数据较少时,可以先训练分类头,再以较小学习率尝试解冻靠后的层。这是一条容易诊断的实验顺序,不是必须优于其他方案的规则;学习率和解冻范围仍要在验证集上选择。TensorFlow 官方教程展示了这样的两阶段流程。
冻结参数不等于固定所有运行状态
含批归一化(Batch Normalization)的模型还维护均值、方差等统计量。是否更新这些状态,与框架的训练模式和冻结语义有关。实现时要单独核对;不能只看到参数没有梯度,就断言整个骨干输出始终不变。
4. 迁移学习与领域适应是什么关系
“加载预训练权重再微调”是迁移学习的常见实现,但没有覆盖全部迁移问题。
考虑白天到夜间的道路分类:若夜间图片有标签,可以直接构造目标监督损失;若只有白天标签和夜间无标签图片,上面的目标交叉熵就不能直接计算。这时需要考虑领域适应(Domain Adaptation)等方法。
一种常见的无监督领域适应设定是:源域有标注,目标域无标注,类别空间相同,希望减轻输入分布变化带来的影响。“无监督”在这里指目标域没有训练标签,并不表示整个流程没有任何标签。
例如,领域对抗神经网络(DANN)同时考虑标签预测和领域判别:特征应能帮助预测类别,又尽量让领域判别器难以区分样本来自源域还是目标域。它体现了“学习跨域表示”的思路。
但只让两个领域的特征看起来相似,并不自动保证分类正确。假设目标域的两类特征恰好交换了位置,整体分布仍可能相近,源分类边界却会给出错误标签。因此,要关心的是与目标任务有关的知识能否迁移,而不只是两个数据集是否相似。
阅读相关方法时,可以先记录这三件事,避免仅凭名称判断适用范围:
- 源域和目标域分别有哪些数据、哪些标签?
- 目标类别是否与源类别一致,是否存在新增类别?
- 迁移的是样本信息、特征表示,还是模型参数?
5. 一个可以落实的花卉分类实验
以下是教学用实验设计,尚未执行训练。假设有三类花卉共 600 张图片,各类 200 张;目标是识别来自相同采集条件的新图片。
第一步:先划分数据,再训练模型
在不存在重复或关联样本的简化条件下,可按类别分层划分为训练集 360 张、验证集 120 张、测试集 120 张。训练集更新参数,验证集选择方案,测试集用于方案确定后的最终评估。
若同一朵花被连续拍摄多次,应按花朵实体或拍摄批次分组划分,而非直接随机分图;此时不必强求上面的精确比例。否则模型可能在测试集中遇到几乎相同的画面,造成数据泄漏。
若实际目标是识别另一台相机拍摄的图片,测试集也应体现这一条件。来自原相机的随机划分,只能检验原采集条件下的泛化。
第二步:明确模型接口
记录骨干网络、权重来源、预训练数据说明,以及输入尺寸、颜色通道和归一化方式。相同尺寸不代表相同预处理,必须按所选权重的要求处理输入。
假设骨干最终输出 维特征,三分类线性头可写为:
新分类头有 个可训练参数。冻结方案只更新这些参数;微调方案还会更新所解冻的骨干参数。512 维只是此处的示例设定,应以实际模型的输出形状为准。
第三步:建立能比较的实验组
先比较“随机初始化训练”和“预训练骨干冻结”,再增加“部分微调”。尽量使用相同的目标数据划分、模型架构和评价指标,并为各方案提供事先约定的调参预算。
公平比较不要求所有方案使用完全相同的学习率:适合随机初始化的学习率未必适合预训练权重。应公开每组的训练轮数、学习率选择方式、停止条件和计算开销。
若只记录目标任务训练时间,应明确它不包含源模型预训练成本。可以说明复用现成权重节省了本次训练开销,但不能据此声称整个学习过程没有预训练代价。
第四步:在验证集上选择,再评估测试集
每轮记录训练损失和验证指标,保存按验证指标选出的模型。对类数均衡的这个例子,可先看准确率,再查看混淆矩阵及每类召回率,确定哪些花卉容易混淆。
若微调后训练损失下降、验证表现却持续变差,应检查过拟合、学习率和解冻范围;这不是“还没训练够”的充分证据。方案选定后,在未参与调参的测试集上评估,并在条件允许时重复多个随机种子,报告均值与波动。
6. 如何判断正迁移与负迁移
负迁移(Negative Transfer)指引入源知识后,目标学习的表现反而变差。它需要相对于合理的“不迁移”基线判断,不能仅凭源任务与目标任务的准确率高低判断。
设 为越大越好的同一目标评价指标,定义:
在同一评估协议下, 表示该次比较有收益, 表示该次比较有损失。一次小幅差异还可能来自随机波动,不能直接推广为某种方法始终有效或无效。
例如,假设同一测试集上从头训练准确率为 ,冻结方案为 ,微调方案为 。冻结方案比基线高 7 个百分点,微调比冻结低 3 个百分点,但仍比从头训练高 4 个百分点。因此,不能只因为微调不如冻结,就把它称作相对于从头训练的负迁移。这组数字仅用于解释比较关系。
| 观察到的现象 | 优先核对的原因 |
|---|---|
| 冻结方案训练与验证表现都较差 | 输入预处理、类别映射、分类头训练是否正常,以及源特征是否适用 |
| 微调后训练表现很好,验证表现下降 | 过拟合、学习率过大、解冻过多或验证分布不同 |
| 源域表现好,目标域表现差 | 分布变化、源域特有线索,以及标签语义是否一致 |
| 测试结果异常接近满分 | 重复样本、分组泄漏、测试集参与调参或预训练数据重叠 |
这些现象是排查入口,不是根因证明。先排除实现和评估问题,再讨论知识本身是否适合迁移。
7. 自检:能否回答这三个问题
- 源模型识别 1000 类,目标只识别 3 类,为什么通常要替换分类头?
- 冻结骨干时,目标图片是否仍然需要经过骨干网络?
- 目标域没有标签时,能否直接用目标真实类别计算交叉熵?
对应答案是:输出的类别语义与维数需要匹配;仍需前向计算特征,只是不更新冻结参数;没有真实标签就无法直接计算这项监督损失,需要额外的学习机制或标注。
理解迁移学习,可以始终沿着四个问题推进:知识从哪里来,迁移了什么,目标数据允许更新什么,以及对照实验是否证明它有帮助。
参考资料
- Sinno Jialin Pan, Qiang Yang. A Survey on Transfer Learning. IEEE Transactions on Knowledge and Data Engineering, 2010. 领域、任务、迁移学习与负迁移的基础定义。
- Stanford CS231n. Transfer Learning. 固定特征提取、微调与数据规模的关系。
- TensorFlow. Transfer learning and fine-tuning. 两阶段迁移流程及批归一化处理;本文未复现其训练结果。
- Yaroslav Ganin et al. Domain-Adversarial Training of Neural Networks. Journal of Machine Learning Research, 2016. 无监督领域适应与领域对抗表示学习。