迁移学习
动机
-
利用在一项任务上训练的模型执行相关任务
-
由于DNN需要大量数据且训练成本高,因此在深度学习中很受欢迎
方法
-
特征提取。
-
针对相关任务培训模型并重新使用它
-
从相关模型进行微调
相关性
-
半监督学习
-
在极端情况下,zero-shot/few-shot学习
-
多任务学习,其中每个任务都有一些标记数据可用
迁移知识
- 在普通大的数据集训练好后,把模型再迁移到自己的数据集上
预训练模型
将神经网络划分为
- 特征提取器(编码器),将原始像素映射到线性可分特征
- 线性分类器(解码器),进行决策
预训练模型
-
在大规模通用数据集上训练的神经网络
-
特征提取器可以很好的推广到其他数据集或者是任务
微调技术
- 初始化新模型,使用预训练模型的特征提取器参数初始化特征提取器
- 随机初始化输出层
- 在局部最小值附近开始参数优化
- 用一个小的学习率模型训练几个epochs,规范化搜索空间
固定底层
- 神经网络学习到层级之间的特征
- 低级的特征是普遍存在的,例如曲线、边、斑点
- 高级特征更多特定于任务和数据集,例如分类标签
- 在微调中,固定底层,从头开始训练顶层,这样保留低层的通用特性完整
预训练模型网址
-
TensorFlow 模型:https://tfhub.dev/
import timm
from torch import nn
model = timm.create_model('resnet18', pretrained=True)
model.fc = nn.Linear(model.fc.in_features, n_classes)
# Train model as a normal training job
应用
微调预训练模型被广泛应用于各种CV应用中
- 检测、分割(相似的图像但不同的目标)
- 医学、卫星图像(相同的任务,但不同的图像)
微调加速了收敛速度,可以获得相似的精度
总结
- 大规模数据集上的训练前模型(通常是图像分类)
- 使用针对下游任务的预训练模型来初始化权重
- 微调可以加速收敛,可能提高精度