迁移学习与模型微调
用预训练好的模型快速适配新任务,是深度学习工程实践的核心方法。
迁移学习概述
- 定义:将一个任务上学到的知识迁移到相关任务
- 为什么有效:底层特征(边缘/纹理/语法)在不同任务间通用
- 与从头训练对比:数据需求少、训练快、效果更好
预训练-微调范式
- 预训练阶段:在大规模通用数据上训练
- 微调阶段:在下游任务数据上继续训练
- 经典流程:
- 加载预训练模型权重
- 替换/添加任务特定层
- 选择冻结策略
- 用较小学习率微调
冻结层策略
全冻结(特征提取器)
- 冻结预训练所有层,只训练新添加的分类头
- 适用:目标数据少、与预训练数据相似
部分冻结
- 冻结底层,微调高层
- 底层捕获通用特征(边缘/纹理),高层捕获任务特定特征
全微调
- 所有层参与训练
- 适用:目标数据充足、与预训练任务差异大
不同数据规模的策略
| 数据规模 | 冻结策略 | 学习率 | 典型场景 |
|---|---|---|---|
| 数据极少(<100) | 全冻结,只训练分类头 | 1e-4 ~ 1e-3 | 小样本分类 |
| 数据少(100~1k) | 冻结底层,微调高层 | 1e-5 ~ 1e-4 | 领域迁移 |
| 数据中等(1k~10k) | 部分冻结或全微调 | 1e-5 ~ 5e-5 | 通用下游任务 |
| 数据充足(>10k) | 全微调 | 1e-5 ~ 2e-5 | 大规模微调 |
图像领域迁移学习
- torchvision.models:ResNet/ViT/EfficientNet 等预训练模型
- 替换最后全连接层:model.fc = nn.Linear(2048, num_classes)
- 特征提取 vs 微调
NLP 领域迁移学习
- Transformer 预训练模型:
- BERT(双向上下文理解)
- GPT(自回归生成)
- T5、BART(序列到序列)
- Hugging Face Transformers 库
- 任务特定头:分类/序列标注/问答/生成
微调 LLM
- Full Fine-tuning:更新所有参数
- PEFT(Parameter-Efficient Fine-Tuning):
- LoRA:低秩适配矩阵
- Adapter:插入小适配层
- Prefix Tuning:输入添加可学习前缀
领域自适应(Domain Adaptation)
- 源领域 vs 目标领域分布不同
- 方法:对抗性训练、最大均值差异(MMD)、自监督对齐
对比学习基础
- SimCLR:正负样本对对比
- MoCo:动量对比
- CLIP:图文对比预训练,零样本迁移能力
多任务学习
- 共享底层表示,多个任务头并行
- 好处:数据效率高、泛化性强
总结
- 迁移学习是深度学习落地的核心方法论
- 选择合适的冻结策略和微调策略是关键
- PEFT(LoRA)使大模型微调成为可能