Transfer Learning
迁移学习将一个在某项任务上训练过的模型用作另一项任务的起点,因此新任务所需的带标签数据和训练时间会大幅减少。
迁移学习是一种机器学习技术,它将一个为某项任务训练的模型用作相关任务的起点。从随机权重开始训练神经网络需要大量带标注的数据和大量计算资源,而在数百万张图像上预训练的模型已经学会了大多数新任务所需的视觉特征。从这些学到的模型权重开始,新模型只需少得多的标注图像和一小部分训练时间,就能达到很高的准确率;因此,迁移学习是为自定义任务构建计算机视觉模型的默认方式。
迁移学习的工作原理#
迁移学习之所以有效,是因为深度网络会以层次结构学习特征。骨干网络的前几层会响应几乎所有图像中都会出现的边缘、颜色和纹理,而更深的层会将这些特征组合成物体部件和特定任务的概念。Yosinski 等人的一项研究测量了卷积网络中的这一变化过程,发现第一层特征具有通用性;随着更高层的特征逐渐适配原始任务,其可迁移性会降低;即使在新数据集上微调后,迁移来的特征仍能提升泛化能力。
这一过程分为两个阶段:
- 预训练: 模型在大型基准数据集(如 ImageNet、COCO 或 Objects365)上学习通用表示,并生成一组预训练权重。
- 适配: 输出层(例如分类器或检测头)会针对新类别进行替换或调整大小,并在目标数据集上训练。在特征提取中,预训练层保持冻结,只有新层参与学习。在微调中,部分或全部预训练层也会更新,通常使用较低的学习率。
要重新训练网络的多少部分,取决于两个问题:新任务有多少带标注的数据,以及它与预训练数据有多相似。斯坦福大学 CS231n 课程笔记列出了由此产生的四种情况:
目标检测中的迁移学习#
检测模型几乎总是通过迁移学习进行训练:官方YOLO26检查点先在Objects365上预训练 150 个周期,再在COCO上微调,YOLO26 训练方案对此有说明。在已加载的检查点上调用 train() 并指定新数据集,会迁移所有兼容权重;类别数量改变时,会重置特定类别的输出行,同时保留类别名称匹配的行;还接受 freeze 参数,用于固定前面的层,这对小型数据集最有帮助。
from ultralytics import YOLO
# 加载在 COCO 的 80 个类别上预训练的 YOLO26n 权重
model = YOLO("yolo26n.pt")
# 适配到新的单类别数据集;freeze=10 会固定前 10 层
results = model.train(data="medical-pills.yaml", epochs=20, freeze=10)预训练的骨干网络已经能够检测形状、边缘和纹理,因此训练只需利用医疗药丸数据集中 92 张带标注的训练图像,学习药丸的外观。
迁移学习与相关术语的比较#
- 微调: 实施迁移学习的一种方式,即在新数据上继续更新预训练权重。另一种主要方式是冻结骨干网络并进行特征提取。
- 领域适配: 一种迁移学习形式,任务保持不变,但数据分布发生变化,例如从白天图像转到夜间图像;通常目标数据只有少量或没有标注。
- 零样本学习和少样本学习: 无需带标注的示例或只需少量示例即可处理新类别,依赖预训练模型的通用知识,而不是完整的适配阶段。
- 参数高效微调(PEFT): 通过训练少量新增或选定的参数(例如 LoRA 矩阵),同时冻结原始权重,来适配非常大型的预训练模型。
- 灾难性遗忘: 模型在新数据上微调时丧失原任务技能的现象。在新的训练集中混入一些原类别图像,或冻结更多层,都可以减轻这种现象。










