4. 特征迁移基础

各位同学,咱们今天聊聊特征迁移。说白了,就是怎么把在一个任务上学到的“本事”,用到另一个相关任务上。你想想看,从头训练一个模型多费劲啊,数据要标、算力要烧、时间要等。特征迁移就是来解决这个问题的。

我个人习惯把特征迁移分成三大流派:Domain Adaptation(域自适应)、Fine-tuning(微调)、知识蒸馏(Knowledge Distillation)。它们目标相似,但路子完全不同。我在项目中遇到过不少同学把这仨搞混,今天咱们一次理清楚。

4.1 什么是特征迁移?

先给个直观定义:特征迁移,就是把源领域(Source Domain)中学到的特征表示,迁移到目标领域(Target Domain)中,提升目标任务的性能。

举个例子。你训练了一个能识别“猫”的模型,现在想让它识别“老虎”。猫和老虎长得像,特征有重叠。直接迁移特征,比从头训练快得多。嗯,这里要注意:迁移的前提是两个任务之间有共性。如果硬把识别猫的特征拿去识别汽车,那效果肯定翻车。

核心公式(非正式版):

迁移学习效果 ≈ 源任务与目标任务的特征重叠度 × 源模型质量

重叠度越高,迁移越顺;源模型越强,迁移收益越大。

4.2 Domain Adaptation(域自适应)

域自适应,解决的是数据分布不一致的问题。源域和目标域的任务相同,但数据分布不同。

我举个例子你就懂了。你在实验室的完美光照下拍了1000张“产品缺陷”照片,训练了一个检测模型。结果到了工厂产线,光照暗、背景乱、相机角度还歪了。模型直接崩了。这就是典型的域偏移(Domain Shift)。

域自适应的核心思想:让模型学到“域不变”的特征。说白了,就是不管光照怎么变、背景怎么换,模型只关注“缺陷”本身。

4.2.1 常见做法

  • 对抗训练:加一个域判别器,让特征提取器骗过它。特征提取器学到的特征,域判别器分不清是来自源域还是目标域,那这些特征就是域不变的。
  • 最大均值差异(MMD):在损失函数里加一项,拉近源域和目标域的特征分布距离。
  • 风格迁移:把源域图像“翻译”成目标域风格,再训练。

避坑指南:我曾经在工业质检项目里用对抗域自适应,结果模型学偏了——它把“光照暗”当成了特征,反而忽略了真正的缺陷。后来我加了梯度反转层(GRL)的权重调节,才稳住。记住:域自适应不是万能的,源域和目标域差距太大时,效果有限。

4.3 Fine-tuning(微调)

微调,大家应该最熟悉。它的核心思想:用预训练模型做初始化,然后在目标任务上继续训练。

你想想看,ImageNet上训出来的ResNet,已经学会了边缘、纹理、形状这些通用特征。你拿来识别医学影像,只需要把最后的分类头换掉,然后整个模型或者部分层用你的数据再训一训。这就是微调。

4.3.1 微调的两种策略

策略 做法 适用场景
全量微调 所有层都参与训练 目标数据量较大,且与预训练数据差异大
冻结微调 冻结底层(特征提取层),只训练顶层(分类头) 目标数据量小,且与预训练数据相似

注意:微调不是越久越好。我见过有人微调了100个epoch,结果模型把预训练学到的通用特征全忘了,这叫灾难性遗忘。我建议:先冻结底层训几个epoch看看效果,再决定要不要解冻。

4.4 知识蒸馏(Knowledge Distillation)

知识蒸馏,路子更野。它的核心思想:用一个大的、复杂的教师模型(Teacher),去教一个小的、简单的学生模型(Student)。

为什么需要蒸馏?大模型精度高,但推理慢、显存大,部署到手机或边缘设备上不现实。小模型快,但精度不够。蒸馏就是让小模型“偷师”大模型的“软知识”。

4.4.1 蒸馏的关键:软标签

传统训练用硬标签(0或1),蒸馏用软标签——教师模型输出的概率分布。比如识别一张图,教师模型输出:猫0.7、狗0.2、兔子0.1。这个分布里包含了“猫和狗有点像”的信息,硬标签里没有。

蒸馏的损失函数通常长这样:

Loss = α * KL散度(教师软标签 || 学生软标签) + (1-α) * 交叉熵(学生输出, 硬标签)

α控制蒸馏的强度。我习惯设0.7左右,让学生既学教师的“经验”,又不偏离真实标签。

我的经验:蒸馏时,温度参数T很关键。T越高,软标签越“平滑”,学生学到更多类间关系。T太低,软标签接近硬标签,蒸馏效果打折扣。我一般从T=3开始调。

4.5 三大流派的核心区别

好了,咱们把三个方法放在一起对比一下。你想想看,它们到底差在哪?

维度 Domain Adaptation Fine-tuning 知识蒸馏
核心问题 数据分布不一致 目标任务数据少 模型太大,部署困难
迁移什么 域不变的特征 预训练权重 教师模型的输出分布
是否需要源数据 需要(源域+目标域) 只需要预训练模型 只需要教师模型
模型结构变化 通常不变 可能换分类头 学生模型更小
典型应用 跨场景、跨设备 CV、NLP预训练模型 模型压缩、边缘部署

说白了:域自适应解决“数据变了”的问题,微调解决“数据不够”的问题,蒸馏解决“模型太大”的问题。三者可以组合使用。我在实际项目中,经常先做域自适应对齐数据分布,再用微调适配任务,最后蒸馏压缩模型。一条龙服务。

4.6 知识结构图

下面这张图,帮你把三个流派的关系和核心逻辑串起来:

特征迁移三大流派结构图 特征迁移三大流派 特征迁移 Domain Adaptation Fine-tuning 知识蒸馏 核心:域不变特征 解决:数据分布不一致 核心:预训练权重 解决:目标任务数据少 核心:软标签分布 解决:模型太大部署难 三者可组合使用 域自适应 → 微调 → 蒸馏

4.7 小结

这一章咱们把特征迁移的三大流派理清楚了。我个人觉得,理解它们的关键不在于背定义,而在于想清楚:你当前的问题到底出在哪?

  • 数据分布变了?→ 试试域自适应。
  • 数据不够?→ 微调走起。
  • 模型太大跑不动?→ 蒸馏压缩。