当前位置: 首页 > news >正文

深度学习——迁移学习实战指南

**迁移学习(Transfer Learning)**就是:把一个模型在大数据、大任务上学到的知识,迁移到另一个相关任务上使用。

在深度学习里,它最常见的形式是:

先用一个已经训练好的预训练模型 再在自己的小数据集或新任务上微调

比如,别人已经用 ImageNet 训练好了 ResNet,它已经学会了很多通用视觉特征:边缘、纹理、形状、物体部件。你现在要做“猫狗分类”或“医学图像分类”,就不必从零开始训练,而是直接拿这个 ResNet 作为起点。


1. 为什么迁移学习有效?

因为神经网络学到的很多特征是可以复用的。

以图像任务为例:

浅层:边缘、颜色、纹理 中层:局部形状、物体部件 深层:类别相关语义

浅层和中层特征通常比较通用。
例如识别猫、车、鸟、医学图像时,很多任务都需要先识别边缘、纹理、局部结构。

所以预训练模型不是“只会 ImageNet”,而是已经学到了一套比较好的视觉表示。

对于 NLP 也是类似的:

BERT / GPT / RoBERTa 等模型

在大规模文本上预训练后,已经学到了词义、语法、上下文关系和一些世界知识。再迁移到情感分类、文本匹配、问答、命名实体识别等任务时,效果通常比从零训练好很多。


2. 迁移学习解决什么问题?

数据少

如果你的任务只有几百张图片、几千条文本,从零训练一个深度网络很容易过拟合。
迁移学习可以利用预训练模型已有的知识,减少对标注数据的依赖。

训练成本高

从零训练大模型非常耗时、耗显存、耗算力。
使用预训练模型可以显著缩短训练时间。

效果更好

预训练模型通常已经在大规模数据上学到了稳定表示,所以作为初始化点更好,微调后往往能得到更高准确率。


3. 常见迁移学习方式

方式一:特征提取 Feature Extraction

把预训练模型当成固定特征提取器,只训练最后的分类层。

例如图像分类中:

ResNet 前面的卷积层保留并冻结 把最后的 1000 类分类头替换成自己的分类头 只训练新的分类头

适合:

你的数据很少 新任务和预训练任务比较相似 算力有限 想快速得到 baseline

优点:

训练快 不容易过拟合 显存需求较低

缺点:

模型适应新任务的能力有限 如果新任务和原任务差异大,效果可能受限

方式二:微调 Fine-tuning

用预训练权重初始化模型,然后继续训练部分或全部参数。

常见做法:

替换最后分类头 先训练分类头 再解冻后面几层 最后用较小学习率微调整个模型

适合:

数据量中等或较大 新任务和预训练任务有一定差异 追求更好效果

优点:

适应能力更强 通常效果比只做特征提取更好

缺点:

训练成本更高 更容易过拟合 学习率需要小心设置

方式三:部分冻结

不是全冻结,也不是全训练,而是冻结前面层,只训练后面层。

例如 CNN 中:

冻结浅层卷积 训练深层卷积和分类头

原因是:

浅层特征通用:边缘、纹理、颜色 深层特征任务相关:类别语义

所以很多时候没有必要改浅层,只需要让深层适应新任务。


4. 图像任务中的迁移学习例子

假设你要做一个 5 类花朵分类任务,但只有 2000 张图片。

可以这样做:

1. 加载 ImageNet 预训练的 ResNet 2. 去掉原来的 1000 类分类层 3. 换成 5 类分类层 4. 冻结 backbone 5. 先训练新的分类头 6. 解冻最后几个 block 7. 用较小学习率微调

PyTorch 例子:

importtorchimporttorch.nnasnnfromtorchvisionimportmodels model=models.resnet50(weights=models.ResNet50_Weights.IMAGENET1K_V2)# 替换分类头num_features=model.fc.in_features model.fc=nn.Linear(num_features,5)# 冻结 backboneforname,paraminmodel.named_parameters():ifnotname.startswith("fc."):param.requires_grad=Falseoptimizer=torch.optim.AdamW(model.fc.parameters(),lr=1e-3)

这时只训练最后的分类层。

之后可以解冻最后几层:

forname,paraminmodel.named_parameters():ifname.startswith("layer4")orname.startswith("fc"):param.requires_grad=Trueoptimizer=torch.optim.AdamW(filter(lambdap:p.requires_grad,model.parameters()),lr=1e-4,weight_decay=1e-4)

5. NLP 中的迁移学习

NLP 里迁移学习更常见。

典型流程是:

预训练语言模型 → 下游任务微调

比如用 BERT 做情感分类:

输入文本 经过 BERT 编码 取 [CLS] 表示 接一个分类层 在情感分类数据上微调

常见预训练模型:

BERT RoBERTa DeBERTa GPT 系列 T5 LLaMA 类模型

NLP 微调通常会训练整个模型,但学习率很小,例如:

1e-5 到 5e-5

因为预训练模型已经有较好的参数,学习率太大容易破坏原有知识。


6. 什么时候适合迁移学习?

适合迁移学习的情况:

数据量少 标注成本高 训练资源有限 任务和已有预训练任务有一定相关性 想快速建立 baseline 模型从零训练效果差

例如:

医学图像分类 工业缺陷检测 小样本文本分类 语音识别微调 目标检测微调 情感分析 命名实体识别 推荐系统 embedding 迁移

7. 什么时候迁移学习效果可能不好?

迁移学习不是万能的。

如果源任务和目标任务差异太大,可能出现负迁移(Negative Transfer)

例如:

用自然图像预训练模型迁移到非常特殊的雷达图像 用英文文本模型迁移到低资源小语种 用普通场景模型迁移到医学影像

不是一定不行,但可能需要:

更多微调 更低学习率 更合适的预训练模型 领域内预训练 更多目标领域数据

8. 迁移学习中的关键问题

1. 冻结多少层?

一般经验:

数据量建议
很少冻结大部分层,只训练分类头
中等冻结浅层,训练后几层
较多全模型微调
新任务和原任务很相似多冻结一些
新任务和原任务差异大多解冻一些

2. 学习率怎么设?

迁移学习通常学习率要比从零训练小。

常见设置:

只训练分类头:1e-3 左右 微调 backbone:1e-5 到 1e-4 Transformer 微调:1e-5 到 5e-5

一个常用策略是:分类头用大学习率,预训练层用小学习率

例如:

optimizer=torch.optim.AdamW([{"params":model.backbone.parameters(),"lr":1e-5},{"params":model.classifier.parameters(),"lr":1e-4}])

因为分类头是随机初始化的,需要学得快;backbone 已经有知识,只需要轻微调整。


3. 数据增强重要吗?

很重要。

尤其是小数据迁移学习,如果不做数据增强,很容易过拟合。

图像中常见增强:

随机裁剪 随机翻转 颜色抖动 旋转 Mixup CutMix RandAugment

文本中常见方法:

同义词替换 回译 随机 mask prompt 改写 数据扩充

4. 是否要重新训练 BatchNorm?

CNN 微调时 BatchNorm 要特别注意。

如果目标数据集很小,BatchNorm 的统计量可能不稳定。常见做法:

冻结 BatchNorm 或者使用很小学习率微调

如果目标数据分布和预训练数据差异较大,可以考虑更新 BatchNorm 统计量,但要小心验证集表现。


9. 迁移学习和从零训练的区别

方式初始化数据需求训练成本收敛速度适用场景
从零训练随机初始化数据大、任务特殊
特征提取预训练权重,冻结大部分层小数据、相似任务
微调预训练权重,训练部分或全部层中等中等较快大多数实际任务

10. 实用调参流程

可以按这个流程做:

1. 先选一个合适的预训练模型 2. 替换最后任务头 3. 冻结 backbone,只训练任务头 4. 观察验证集效果 5. 解冻最后几层,用小学习率微调 6. 如果还欠拟合,再解冻更多层 7. 如果过拟合,加强正则化和数据增强 8. 最后再尝试更大模型或领域预训练模型

11. 选择预训练模型的原则

优先选和目标任务接近的模型。

图像任务:

普通图片分类:ImageNet 预训练 ResNet / EfficientNet / ConvNeXt / ViT 医学影像:医学数据预训练模型更好 目标检测:COCO 预训练模型 人脸任务:人脸数据预训练模型 遥感图像:遥感数据预训练模型

文本任务:

中文任务:中文 BERT、MacBERT、RoBERTa-wwm、中文大语言模型 英文任务:BERT、RoBERTa、DeBERTa 生成任务:T5、GPT 类模型 多语言任务:mBERT、XLM-R

12. 一句话总结

迁移学习就是把大模型在大数据上学到的通用表示拿来复用,再针对自己的任务做少量训练。

最常用的实践是:

小数据:冻结预训练模型,只训练分类头 中等数据:解冻后几层微调 大数据或领域差异大:全模型小学习率微调

它的核心价值是:

少数据也能训练出不错模型 训练更快 泛化更好 更容易得到强 baseline
http://www.jsqmd.com/news/804920/

相关文章:

  • 图片去水印怎么操作?免费图片去水印工具2026实测,这几种方法真的好用 - 科技热点发布
  • 厚街家电清洗哪家值得推荐:秒杀家电清洗信誉好 - 17329971652
  • 免费图片去水印工具推荐:2026实测哪款效果好?图片水印怎么去除 - 科技热点发布
  • 寄存器链设计思路
  • 53.tcp socket
  • 值得信赖!广州晶石石英式动态称重传感器,以工匠精神铸就品质 - 品牌速递
  • 5/12
  • 【企业级AI效能审计】:Perplexity Pro在代码审查/论文研读/竞品分析中的实际吞吐量下降曲线与临界性价比拐点
  • 告别电网波动干扰:手把手教你用双同步坐标系锁相环搞定不平衡电压
  • 告别试错式编程:用结构化迭代与AI协同优化代码
  • 厚街联合办公哪家值得推荐:秒杀联合办公卓越典范 - 17322238651
  • 厚街管道疏通哪家值得推荐:秒杀管道疏通超高效 - 13724980961
  • 从平局投票看技术社区运营:低门槛互动如何提升用户参与感
  • 【AI】动态规划:执行中调整计划的实现
  • 嘉兴中小微企业财税攻略:会计事务所选择全解析 - 速递信息
  • 纳米芯片可靠性设计:从电迁移、NBTI到系统级验证实战
  • HDLbits刷题避坑:FSM与计数器组合题Q3a的三种常见错误写法(附Verilog代码对比)
  • 独立开发者一人公司如何高效管理多个API Key与用量
  • 开源工业物联网框架openOii:从协议解析到规则引擎的实战指南
  • UVa 203 Running Lights Visibility Calculator
  • 图片去水印用什么工具?免费图片去水印工具推荐,2026 实测哪款好用 - 科技热点发布
  • Ollama模型下载加速:绕过官方源,从Hugging Face等镜像站快速部署本地大模型
  • 我用 AI 写了一首歌,并把它上传到了 QQ 音乐、酷狗音乐、酷我音乐
  • WebChatGPT:为ChatGPT添加实时联网搜索功能的浏览器扩展详解
  • 从NOIP真题到日常开发:用Python和C++两种思路搞定‘数字统计’问题
  • 厚街婚礼策划哪家值得推荐:秒杀婚礼策划匠心定制 - 17329971652
  • 对比按需调用与 Token Plan 套餐在长期项目中的成本差异感受
  • Linux通过cgroups限制进程的cpu、内存使用率
  • 鼻毛剪刀哪个牌子好?鼻毛修剪器哪个牌子好?鼻毛剪十大品牌推荐
  • C#/.NET/.NET Core技术前沿周刊 | 第 70 期(2026年5.01-5.10)