机器学习/深度学习入门:微调和深度学习的关系

在实际中,因为数据量小的缘故,很少有人会去从零开始去训练出一个CNN(train from scratch)。相反,普遍的做法都是在一个大的数据集上(比如ImageNet,包含120万张来自1000的类的数据集)进行预训练一个CNN模型,然后在这使用这个模型作为固定特征提取器或者网络的初始化权重应用在特定的任务中。主要的迁移学习的场景:

Ø  CNN feature + classifier;这个比较好理解,通常做法就是在大的数据集(比如ImageNet)上训练出一个CNN,然后提取最后一层卷积层或者倒数第二层全连接层的输出作为CNN 特征,然后直接使用 SVM、贝叶斯或softmax等分类器进行分类;

Ø  Fine-tuning:将在大数据集上训练得到的weights作为特定任务(小数据集)的初始化权重,重新训练该网络(根据需要,修改全连接层输出);至于训练的方式可以是:1.微调所有层2.固定网络前面几层权重,只微调网络的后面几层,这样做有两个原因:A. 避免因数据量小造成过拟合现象;B.CNN前几层的特征中包含更多的一般特征(比如,边缘信息,色彩信息等),这对许多任务来说是非常有用的,但是CNN后面几层的特征学习注重高层特征,也就是语义特征,这是针对于数据集而言的,不同的数据集后面几层学习的语义特征也是完全不同的;

从上面大致可以看出迁移学习其实就是一种学习得到的知识对另一种知识的学习的影响。迁移学习它可以看作是一种学习体系,关注的核心问题是,如何将之前学习的得到的“知识”运用到其他领域中去。而fine-tune只是迁移学习的一种实现手段。通俗的讲就是,有点像武侠小说中的“吸星大法”将别人修炼好的功力直接吸收过来,然后自己稍微打坐,疏通一下经脉,把吸收过来的工作化为己用。

猜你喜欢

转载自blog.csdn.net/M_Z_G_Y/article/details/81870888