一、什么是模型微调?
模型微调(Fine-tuning)是指在一个已预训练好的模型基础上,针对特定任务对模型参数进行二次训练或部分训练的过程。其核心思想是迁移学习(Transfer Learning)的具体应用,充分利用已有知识来适配新的任务,从而大幅减少训练成本、时间与数据需求。
在深度学习中,微调通常应用于大规模模型(如BERT、ResNet、GPT等),并广泛用于图像分类、自然语言处理、语音识别等领域。
【深度学习】常见模型-BERT(Bidirectional Encoder Representations from Transformers)(双向编码器表示)-优快云博客
【深度学习】计算机视觉(CV)-图像分类-ResNet(Residual Network,残差网络)_cv resnet-优快云博客
二、微调的基本流程
-
选择预训练模型
-
可使用开源模型(如 torchvision.models、transformers、timm)
-
通常选择在大规模数据集上训练好的模型(如ImageNet、COCO、OpenAI模型)
-
-
构建下游任务网络
-
修改输出层以匹配目标任务(如分类数目不同)
-
可添加额外的自定义层(如全连接、注意力层)
-
-
冻结部分层参数(可选)
-
防止梯度更新,保留已有知识
-
常见做法:冻结卷积层,仅微调全连接层
-
-
设置优化器和损失函数
-
仅优化未冻结的参数
-
常用:Adam、SGD、交叉熵损失(分类任务)
-
-
训练与评估
-
使用小学习率训练(如1e-4或更低)
-
验证精度提升,避免过拟合
-
三、微调策略类型
策略类型 | 描述 |
---|---|
冻结特征提取器 | 仅训练新添加的分类层,底层特征不变 |
部分微调 | 冻结前几层,仅训练后几层 |
全部微调 | 所有参数均参与梯度更新 |
分阶段微调 | 先训练高层,逐步解冻低层,防止灾难性遗忘(Catastrophic Forgetting) |
四、关键技巧与注意事项
1. 小学习率微调
通常使用比预训练阶段更小的学习率(如 1e-5
),以防原有参数剧烈变化导致性能下降。
2. 正则化技术
应用 Dropout、权重衰减(L2正则化)等防止过拟合,尤其当数据较小时尤为重要。
3. 数据增强
适用于图像类任务,可增强模型泛化能力,提高效果。
4. 层级学习率(Layer-wise Learning Rate Decay)
高层用较大学习率,底层用较小的,有助于更稳定迁移。
五、PyTorch 微调实例(以ResNet为例)
import torchvision.models as models
import torch.nn as nn
# 加载预训练的 ResNet18
model = models.resnet18(pretrained=True)
# 冻结前面的参数
for param in model.parameters():
param.requires_grad = False
# 替换最后全连接层
model.fc = nn.Linear(model.fc.in_features, 10) # 适配10类分类任务
# 只优化最后一层
optimizer = torch.optim.Adam(model.fc.parameters(), lr=1e-4)
六、应用案例
任务方向 | 应用模型 | 微调形式 |
---|---|---|
图像分类 | ResNet、EfficientNet | 冻结卷积层 + 微调全连接层 |
文本分类 | BERT、RoBERTa | 微调Transformer + 添加输出层 |
文本生成 | GPT、T5 | 全部微调或LoRA轻量化微调 |
语音识别 | Wav2Vec2 | 微调最后几层 + 下游任务适配头 |
七、轻量化微调扩展(进阶)
面对大模型微调成本过高的问题,近年来出现了一些轻量微调方法:
-
Adapter:在模型层间插入小模块,固定主干,仅训练Adapter
-
LoRA(Low-Rank Adaptation):低秩矩阵分解插入主干权重
-
BitFit:仅微调偏置项
-
Prefix-tuning / Prompt-tuning:固定模型,仅训练输入前缀或提示词参数
这些方法大大降低计算资源消耗,在少样本学习(few-shot)中尤为常用。
八、总结
模型微调是连接预训练与应用场景的桥梁,具备高效迁移、低资源需求、灵活适配等优势。正确选择微调策略与控制训练细节,能使预训练模型在具体任务上达到极优表现,是现代人工智能系统不可或缺的核心技术之一。