迁移学习(Transfer Learning) 是指将一个领域中学到的知识应用到另一个不同但相关的领域中,尤其适用于数据稀缺、训练代价高的场景。
一、迁移学习的核心定义
迁移学习是指:将一个任务上训练好的模型(通常是大规模数据上训练好的)所获得的知识,迁移应用到另一个任务中,以提升新任务的性能或加速训练。
简单理解:
- 不从零开始训练模型;
- 而是借助已有模型的“经验”来帮助新任务。
二、迁移学习的形式
迁移学习主要有以下几种常见形式:
类型 | 描述 | 应用场景 |
---|---|---|
特征迁移 | 利用源任务中提取的特征作为目标任务的输入 | 图像识别中常见 |
模型微调(Fine-tuning) | 用源模型初始化目标任务模型,然后在目标任务数据上进一步训练 | NLP和CV中最常用 |
参数迁移 | 迁移部分参数,如共享前几层参数,后面几层根据目标任务微调 | 多任务学习 |
实例迁移 | 直接利用源领域的数据样本来辅助目标领域训练,可能加权 | 样本分布相近 |
对抗迁移学习 | 加入领域判别器,使模型能学习到领域不变的表示 | 跨领域文本、图像学习 |
三、迁移学习的常见流程(以 NLP 为例)
以大语言模型如 BERT 为例,迁移学习通常分两步:
-
预训练(Pretraining):
- 在海量通用数据(如Wikipedia、BookCorpus)上训练模型;
- 学习通用语言知识、语义结构等。
-
微调(Fine-tuning):
- 在特定任务(如情感分类、问答系统)的小数据集上继续训练;
- 调整模型参数以适应新任务。
# 示例:使用 Hugging Face 微调一个预训练的 BERT 模型
from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments
model = BertForSequenceClassification.from_pretrained("bert-base-uncased")
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
# 接下来加载你自己的数据并训练即可
四、迁移学习的优势
- 减少训练成本:不必从零开始训练模型;
- 降低数据需求:新任务只需较少的数据;
- 更高准确率:使用已有知识能避免过拟合;
- 广泛适应性:适合NLP、CV、语音、推荐系统等多领域。
五、大模型中的迁移学习(重点)
在大模型(如 GPT-4、LLaMA、Baichuan)中,迁移学习被广泛使用:
阶段 | 描述 |
---|---|
预训练模型 | 在大规模通用数据上训练(如 GPT、BERT) |
SFT(监督微调) | 在少量人工标注数据上进行微调 |
PEFT(参数高效微调) | 如LoRA、QLoRA,仅调整部分参数或引入Adapter模块 |
六、典型应用示例
- NLP:
- 使用
bert-base-chinese
微调做中文情感分类;
- 使用
- 计算机视觉:
- 使用 ResNet 在 ImageNet 上预训练后迁移到肺炎X光图像分类;
- 语音识别:
- 使用 wav2vec2 微调成普通话识别模型;
- RAG 框架:
- 使用预训练的生成模型 + 检索模块微调适配企业知识问答。