本节摘要:按"任务同不同"与"目标侧有无标签"两根轴,迁移学习分为归纳式、直推式、无监督三大类。你日常做的预训练模型微调几乎都属于归纳式;直推式对应同任务跨分布的领域适应场景;无监督迁移则处理双侧都无标签的表示学习。本节给出分类树、各类的判断口诀与代表方法,并用代码演示如何判断一个具体项目落在哪个格子。
迁移学习的系统化分类,公认框架由学者潘嘉玮与杨强在跨世纪后的调研论文中定型:以源任务与目标任务的关系为主轴、以标签可得性为辅轴,把纷乱的迁移方法收进一张表。此后深度学习时代的实践发生了有趣的收敛——绝大多数工程师每天做的事,都被这张表里"归纳式"一格覆盖,但另外两格在跨领域与无监督场景仍不可替代。了解全表的意义在于:当你遇到不合常规的项目时,知道还有别的格子可以站。
三类各有判断口诀:
为什么预训练加微调属于归纳式?以 BERT 为例:源任务是掩码词预测,目标任务是情感分类——任务变了;目标侧有几千条标注——归纳式的条件全部满足。
| 类别 | 源任务举例 | 目标任务举例 | 代表方法 | 工程队行话 |
|---|---|---|---|---|
| 归纳式 | 掩码预测、ImageNet 分类 | 文本分类、缺陷检测 | 预训练-微调、特征提取 | 旧宅改新用途 |
| 直推式 | 英文情感分类 | 中文评论情感分类 | 实例加权、特征对齐、对抗领域适应 | 同用途换城市重装修 |
| 无监督式 | 无标签源域表示学习 | 无标签目标域聚类/异常检测 | 自编码器迁移、对比学习复用 | 毛坯房之间借图纸 |
注意直推式与归纳式的边界情况:如果任务"看起来相同"但标签集有细微差别(比如源是五星打分、目标是好评差评二分类),严格说已经换了标签空间,应归归纳式。边界不清时,以"预测输出的语义是否一致"为准。
写一个小的判断函数,把项目特征(目标侧有无标签、任务是否相同)映射到分类格子:
def classify_transfer(target_labeled: bool, same_task: bool, source_labeled: bool = True) -> str: """按两轴三问定位迁移类别""" if not target_labeled and not source_labeled: return "无监督迁移" if same_task: return "直推式迁移(任务同、域变,走领域适应工具箱)" return "归纳式迁移(预训练-微调主线)" # 三个真实项目代入 projects = [ ("ImageNet模型迁移做缺陷二分类", True, False, True), ("英文情感模型转中文评论", True, True, True), ("无标签设备日志迁移做异常检测", False, True, False), ] for name, tl, st, sl in projects: print(f"{name}: {classify_transfer(tl, st, sl)}") # 输出: # ImageNet模型迁移做缺陷二分类: 归纳式迁移(预训练-微调主线) # 英文情感模型转中文评论: 直推式迁移(任务同、域变,走领域适应工具箱) # 无标签设备日志迁移做异常检测: 无监督迁移
定位为什么重要?因为类别决定工具箱。直推式项目里拼命调冻结与学习率常常收效甚微——它的病根在分布差异,需要的是下一节的领域适应手段;归纳式项目反过来,盲目加领域对齐损失反而拖慢收敛。
再补一个数据侧的判断练习:分布差异的显著度检验,帮你确认"域是不是真的变了"。
import numpy as np from scipy import stats rng = np.random.default_rng(7) # 源域某特征的分布(如文本序列长度的对数) src = rng.normal(3.5, 0.6, size=500) # 目标域同特征(法律文本更长) tgt = rng.normal(4.1, 0.7, size=300) # 双样本 KS 检验:分布是否相同 stat, p = stats.ks_2samp(src, tgt) print(f"KS 统计量: {stat:.3f}, p 值: {p:.2e}") # 典型输出: KS 统计量: 0.342, p 值: 3.10e-24 # p 远小于 0.05:分布确实显著不同,域漂移坐实,值得考虑领域适应
p 值小到需要科学计数法表示,说明这不是抽样噪声——两个域真的不同。工程上,这样的检验应该在项目开工前跑一遍,而不是等微调效果差了再回头找原因。
⚠️ 常见坑:把所有项目都硬塞进"预训练-微调"这一条归纳式流水线。任务相同、纯分布漂移的项目(如换设备后的同任务识别)走领域适应往往事半功倍。
分类的真正考验在边界情况,补三个高频的易混判断:
**判断一:换了标签粒度算不算换任务?**源是"五星打分"、目标是"好评差评二分类"——标签空间被重新定义了,严格意义是归纳式。但两个任务高度相关,工程上常按"准直推"处理:分布偏移的手段(如重加权)依旧有效。判断原则:预测输出的语义一致才算同任务。
**判断二:目标侧只有极少量标签算哪类?**几十条标注撑不起独立的监督学习,但直推式方法(伪标签、对齐)可以借用源模型的判断。这类"半监督式直推"在工业界极为常见,分类上仍归直推式——少量标签用于校准而非从头学习。
**判断三:无监督迁移与自监督预训练什么关系?**自监督预训练是源侧的施工方式(用无标签数据学表示),无监督迁移是源目标双侧都无标签的迁移类别。当自监督表示从源域搬到目标域的无监督任务(聚类、异常检测)时,两者交汇。辨析的意义在于:选型时别把"用自监督模型"直接等同于"走无监督迁移路线"。
💡 关键直觉:分类不是贴标签游戏,它决定你打开哪个工具箱。工具箱开错了,里面再好的工具也治不了你的病。