预训练pretrain+微调(fine-tune)
我们平常深度学习用的比如VGG16中会有一个参数,pretrain=True,这就意味着模型采用了预训练模型,而预训练时迁移学习最常用的方法
一个典型例子就是在Imagenet训练一个backbone,然后在另一个新的数据集上(比如cifar、cub)的训练集微调(fine-tune)backbone,然后在这个新的数据集的测试集上对模型进行测试。
那咱为啥不在新数据上从头train一个模型呢?我们都知道,Imagenet图片量很大,且图片所覆盖域较为全面,可以近似看作对真实世界数据分布的刻画,因此希望在ImageNet上训练的模型能够提取通用的图片特征,而这种通用的特征很可能能迁移到下游一个没有见过的图片域。因此广泛认为,在ImageNet(或者更大的数据集)上训练一个backbone,然后再微调是最好的方式。
transfer learning有一个区别于domain adaptation的非常关键的点,即训练时的数据集和微调时的数据集的图片不仅domain不同,category也通常是不一样的。由于category不同,导致微调时原有的网络分类层不能用了,得重新学一个;而由于domain不一样了,backbone提取的特征也不够discriminative了,因此需要finetune backbone。后面将看到,从这两点将直指few-shot learning核心问题。
(关于domain和category的介绍请看小样本学习入门)
迁移学习根据样本标注情况分类
Transfer Learning - 知乎 (zhihu.com)
根据特征空间,迁移情景,迁移方法分类
迁移学习(Transfer),面试看这些就够了!(附代码) - mantch - 博客园 (cnblogs.com)
也可以换个比较通俗的说法,基于实例,映射,网络,对抗分类:
Transfer learning 【迁移学习综述_汇总】 - 知乎 (zhihu.com)
有人催这一块我再更