1. 基本概念
Fine Tuning(微调) 是迁移学习中的一种常用技术,通过调整预训练模型参数使其适应新任务。核心思想是复用在大规模数据集(如ImageNet)上训练得到的通用特征,并针对特定任务进行优化。
2. 为什么需要Fine Tuning
-
数据不足:目标领域数据量较少时,直接训练模型容易过拟合。
-
训练成本高:避免从头训练大型模型(如ResNet、BERT)。
-
特征复用:底层特征(边缘/纹理)具有通用性,仅需调整高层语义特征。
3. 常见方法
3.1 全网络微调
# PyTorch示例:加载预训练模型后全参数训练
model = torchvision.models.resnet18(pretrained=True)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)3.2 冻结部分层
# 冻结卷积层,仅训练全连接层
for param in model.parameters():
param.requires_grad = False
model.fc = nn.Linear(512, num_classes) # 替换最后一层3.3 分层学习率
-
底层(靠近输入层):较小学习率(如1e-5)
-
顶层(靠近输出层):较大学习率(如1e-3)
4. 实施步骤
-
选择预训练模型:与目标任务领域相关(CV/NLP)
-
数据预处理:保持与原始模型相同的归一化方式
-
修改模型结构:替换最后的分类/回归层
-
设置训练策略:
-
初始阶段可先训练新添加的层
- 逐步解冻部分底层进行微调
- 评估与迭代:通过验证集监控过拟合
5. 优缺点分析
| 优点 | 缺点 |
|---|---|
| 训练效率高 | 需要谨慎调整学习率 |
| 小数据表现优异 | 可能破坏原有良好特征 |
| 适用于多种任务 | 计算资源消耗仍较大 |
6. 典型应用场景
-
计算机视觉:医学影像分类(使用ImageNet预训练模型)
-
自然语言处理:领域特定文本分类(基于BERT微调)
-
数据量 < 1k 的小样本学习任务
7. 注意事项
-
学习率选择:通常比原始训练时小1-2个数量级。
-
数据增强:尤其在小数据集场景下必需。
-
早停法:密切关注验证集损失变化。
-
正则化:适当使用Dropout/L2正则化。
8. 扩展技巧
-
渐进式解冻:按层从顶到底逐步解冻参数。
-
差分学习率:不同层组使用不同学习率。
-
SWA(随机权重平均):提升模型鲁棒性。