迁移学习
对于新的数据,需要进行分类或者回归时,常用的方法是在以个大的数据集上(ImageNet包含120万张来自1000类别的数据集)进行预训练一个CNN模型,然后用这个预训练好的模型作为特征提取部分,或者网络的初始化权重应用在特定的任务中。
实际应用中,就是在预训练模型的后面接上全连接层,然后用softmax、SVM 或者贝叶斯对网络进行分类,也可以接上几层分类器用来做回归任务。
微调(Fine-tuning)
对于新的数据与原始数据相似度较高时,可以在原始数据训练得到的模型上对新的数据进行微调。
训练的方式为:
- 微调所有层
- 固定网络前几层权重,只微调网络的后面几层,这样做可以有两个原因:
- (1)避免因数据量小造成过拟合现象
- (2)CNN的前几层的特征中包含更多的一般特征(例如,边缘信息,色彩信息等) ,CNN的后面几层更多时提取高层特征也就是语义特征,针对数据而言,不同的数据集后面几层学习的语义特征也是完全不同。
对模型如何进行微调
如何确定应该对新数据集执行哪种类型的迁移学,这是几个因素的函数,但是两个最重要的因素是新数据集的大小(大小),以及它与原始数据集的相似性。
- 新数据集很小,与原始数据集相似 由于数据量很小,会容易过度拟合,微调网络网络不好,因此可以选择冻住前几层,对微调网络的后几层,也可以重新训练网络。
- 新数据集很大,并且与原始数据集相似。由于我们拥有更多数据,因此可以尝试通过整个网络进行微调,则不会过拟合。
- 新数据集很小,但与原始数据集有很大不同。由于数据很小,因此最好只训练线性分类器。由于数据集非常不同,因此最好不要从网络顶部训练分类器,该网络包含更多特定于数据集的功能。取而代之的是,从网络中较早的某个位置进行激活来训练SVM分类器可能会更好。
- 新数据集很大,并且与原始数据集有很大不同。由于数据集非常大,我们可以期望我们有能力从头开始训练网络。但是,实际上,使用来自预训练模型的权重进行初始化通常仍然是有益的。在这种情况下,我们将有足够的数据和信心来调整整个网络。
总结
从上面大致可以看出迁移学习其实就是一种学习得到的知识对另一种知识的学习的影响。迁移学习它可以看作是一种学习体系,关注的核心问题是,如何将之前学习的得到的“知识”运用到其他领域中去。而fine-tune只是迁移学习的一种实现手段。通俗的讲就是,有点像武侠小说中的“吸星大法”将别人修炼好的功力直接吸收过来,然后自己稍微打坐,疏通一下经脉,把吸收过来的工作化为己用。
引用