
引言我们业务只有几百张标注图能从零训个模型吗——几乎每个落地项目都会被问到。答案是别从零训站在预训练模型的肩膀上。迁移学习正是把 ImageNet 上预训练好的视觉先验、或大规模语料上预训练好的语言先验借到你的小数据任务上。本篇拆解两种用法并给出小样本下的量化收益与实操技巧。一、迁移学习两类范式1.1 特征提取式Feature Extraction冻结预训练骨干backbone的所有参数只训练你接在后面的新分类头。相当于把 backbone 当作一个固定的特征提取器。优点训练快、显存省、几乎不过拟合。缺点backbone 的特征是通用域的未必适配你的特定分布。适用数据极少几百~几千、任务与预训练域接近。1.2 微调式Fine-tuning解冻全部或大部分层端到端用小学习率继续训练让 backbone 适配你的数据。优点上限更高能学到领域专属特征。缺点显存大、易过拟合、需要谨慎调学习率。适用数据较多万级及以上、任务与预训练域有差异。二者不是二选一实践中常组合先特征提取跑通再分层解冻做微调见第四节。二、CV 侧 ResNet 迁移实验思路与代码以一个小样本医疗影像二分类为例对比三种方案。下面给出可运行的关键代码基于torchvision数值为公开基准典型区间随数据规模与随机种子浮动非本机实测import torch from torchvision import models, transforms from torch import nn, optim # 1) 加载 ImageNet 预训练 ResNet-18 weights models.ResNet18_Weights.DEFAULT backbone models.resnet18(weightsweights) # 2) 特征提取式冻结 backbone只换最后一层 for param in backbone.parameters(): param.requires_grad False in_feat backbone.fc.in_features backbone.fc nn.Linear(in_feat, 2) # 你的类别数 # 特征提取阶段只优化 fc optimizer optim.Adam(backbone.fc.parameters(), lr1e-3) # 3) 微调式解冻全部整体小学习率 for param in backbone.parameters(): param.requires_grad True optimizer_all optim.AdamW(backbone.parameters(), lr3e-5, weight_decay0.01)三种方案的典型收益对比数百张标注、公开基准区间方案准确率典型区间过拟合风险从零训练~60%极高特征提取冻结 backbone~78%低全模型微调~85%中需正则迁移学习把小数据任务从不可用拉到可用——这正是它成为落地第一选择的原因。三、NLP 侧 BERT 迁移对照NLP 的迁移范式与 CV 完全同构只是 backbone 换成 BERTfrom transformers import BertForSequenceClassification, BertTokenizer model BertForSequenceClassification.from_pretrained( bert-base-chinese, num_labels2) tokenizer BertTokenizer.from_pretrained(bert-base-chinese) # 同样可以冻结底层、只训顶层——垂直领域小数据常用 for name, param in model.named_parameters(): if encoder.layer.11 not in name and classifier not in name: param.requires_grad False # 仅解冻最后一层 分类头垂直领域如医疗、法律文本与通用语料分布差异大时分层解冻 差异化学习率见下节往往比全量微调更稳。四、分层解冻与差异化学习率微调的核心技巧是越靠近输入的层越通用、越靠近输出的层越任务相关。因此分层解冻Layer-wise Unfreezing先只训顶层确认收敛后再逐步解冻更深的层。差异化学习率Discriminative LR浅层小学习率如 1e-5深层大学习率如 3e-4避免浅层通用特征被破坏。# PyTorch 给不同层组设置不同学习率 params [ {params: backbone.conv1.parameters(), lr: 1e-5}, {params: backbone.layer2.parameters(), lr: 3e-5}, {params: backbone.layer3.parameters(), lr: 1e-4}, {params: backbone.fc.parameters(), lr: 3e-4}, ] optimizer optim.Adam(params)此外数据增强强度要适配迁移阶段特征提取阶段可增强弱一些避免破坏预训练特征微调阶段可增强强一些防过拟合。五、小样本效果量化与适用边界你的标注数据量推荐策略 1k特征提取 强数据增强慎用全微调1k ~ 10k分层解冻差异化学习率 10k可考虑全模型微调甚至从头预训练子集跨域极大如 X 光 → 自然图像用领域自适应 / 自监督再预训练打底避坑预训练域与任务域差异过大时直接微调可能负迁移此时先做自监督预训练更靠谱。分类头随机初始化容易在初期污染backbone 梯度建议先用特征提取暖机几轮。六、适用边界总结迁移学习不是银弹它的前提是存在可复用的通用特征。当你的任务与预训练域高度同构如自然图像分类、通用中文文本分类收益最大当任务极其特殊如特定工业缺陷、罕见蛋白质结构则需要更多领域数据或自监督打底。总结迁移学习把数据少这个落地最大障碍变成了可管理问题冻结骨干做特征提取保底分层解冻做微调冲上限。本文的 CV/NLP 双对照与差异化学习率代码可直接套进你的项目。记住一句话——小数据别从零训先借预训练模型的力。参考资料Pan, S. J., Yang, Q. (2010).A Survey on Transfer Learning.Yosinski, J., et al. (2014).How transferable are features in deep neural networks?Hugging Face Transformers 迁移微调文档。torchvision 预训练模型列表与权重说明。往期回顾模型训练调参技巧——学习率、正则化与优化器循环神经网络及其变体 LSTM/GRU 实战BERT 模型原理解析与微调实战关注作者继续《深度学习工程化》专栏下一篇进入计算机视觉的定位世界——目标检测 YOLO 演进。本篇出自专栏《深学之路从感知机到智能体》—— 从感知机到大模型智能体的完整深度学习连载基础工程化 、扩散模型 / RAG / Agent 等。每篇附可运行代码与原创实验收藏专栏不迷路。