迁移学习(Transfer Learning)是一种机器学习方法,其核心思想是将从一个任务或领域中学到的知识(模型参数、特征表示等)迁移到另一个相关任务或领域,以提升新任务的学习效率和性能。它解决了传统机器学习中"每个任务从零训练"的局限性,尤其在数据稀缺或计算资源有限时非常有效。
核心原理
- 1.知识迁移
- 源任务(Source Task):已有大量数据的原始任务(如ImageNet图像分类)。
- 目标任务(Target Task):数据较少的新任务(如医学影像识别)。
- 通过共享源任务学到的通用特征(如边缘、纹理等),减少目标任务对数据量的依赖。
- 2.网络结构复用
- 通常复用预训练模型(如ResNet、BERT)的前几层作为特征提取器,仅微调(Fine-tuning)最后几层以适应新任务。
常见方法
- 1.基于模型的迁移
- 直接使用预训练模型的部分或全部结构,冻结部分层参数(避免破坏已有特征),仅训练新增层。
- 例子 :用VGG16提取图像特征,替换全连接层后训练分类器。
- 2.基于特征的迁移
- 将源任务的特征表示(如词嵌入、CNN特征)作为目标任务的输入。
- 例子 :使用Word2Vec的词向量进行文本分类。
- 3.领域自适应(Domain Adaptation)
- 当源和目标数据分布不同时(如真实照片→卡通图像),通过对齐特征分布(如MMD、对抗训练)减少差异。
- 4.多任务学习
- 同时训练多个相关任务,共享部分模型参数,促进知识互补。
优势
- 降低数据需求 :目标任务只需少量标注数据。
- 加速训练 :无需从随机初始化开始训练。
- 提升泛化性 :源任务学到的通用特征可减少过拟合。
典型应用场景
- 1.计算机视觉
- 图像分类(预训练模型→特定场景分类)
- 目标检测(如Faster R-CNN基于ImageNet预训练)
- 2.自然语言处理(NLP)
- 文本分类(BERT微调)
- 机器翻译(多语言模型迁移)
- 3.跨领域任务
- 语音识别→音乐分类
- 游戏AI→机器人控制
注意事项
- 任务相关性 :源任务与目标任务需有共性(如共享低级特征)。
- 负迁移 :若任务差异过大,迁移可能降低性能,需谨慎选择策略。
- 微调策略 :学习率、冻结层数等超参数需实验调整。
实例代码(PyTorch)
python
import torch
from torchvision import models
# 加载预训练ResNet,冻结所有层
model = models.resnet18(pretrained=True)
for param in model.parameters():
param.requires_grad = False # 冻结参数
# 替换最后一层(适应新任务)
model.fc = torch.nn.Linear(512, 10) # 假设新任务有10类
# 仅训练最后一层
optimizer = torch.optim.SGD(model.fc.parameters(), lr=0.001)
迁移学习已成为深度学习落地的关键技术,尤其在医疗、金融等数据稀缺领域表现突出。