【李沐老师观点】微调是深度学习,特别是计算机视觉来说,最重要的一种技术。整个深度学习为什么正常WORD?是因为微调的存在。所谓“微调”也称为“Transfer Learning”,即迁移学习,它是影响和改变了计算机视觉的一种重要方法。
李沐老师强调,即使前面所介绍过的一些知识被忘记,但是【微调】是不可被遗忘的,是深度学习最重要的一种技术,必须搞清楚。
一、标注一个数据集代价极高
理论上,数据集越大越好,越复杂越好。但是,通过对于我们来说,我们希望在大数据集上预先训练好的东西有助于我们在自己的数据集上提高我们的训练速度与精度,而不是重新再训练那个大数据集(一起也训练不起)。其实,人工智能追求的一个重要目标就是,已经训练好大数据集,再训练此领域小数据集时可以【借用】一下,即可轻松实现。
或者说,假设在源数据集(一个比较大的数据集)上已经训练好了一个模型,模型中特征提取的部分对源数据集是有效的,那么它对目标数据集也应该是有效的,这样做是优于随机生成提取特征的。但是,最后一部分是不能直接使用的,因为标号发生了改变,所以最后一部分难以进行重用。
【微调核心思想】在一个比较大的源数据集上训练好的模型中用于特征提取的部分,在目标数据集上提取特征时进行重用。
二、典型神经网络架构回顾
整体来看,几乎所有作分类的神经网络具有上述样子。
三、微调中的权重初始化
如图左边,假设我们已经在源数据集上训练好了一个模型,其中对应的训练各步统称为Pre-train(预训练成的)。那么,如右所示,当我们在目标数据集上重新训练一个模型的时候,我们选择使用与左侧一样架构的模型,例如你使用的是ResNet18,那么我们的训练模型也选择使用ResNet18。
于是,我们在做模型除了最后一层的其他前面所有层的初始化时,我们模型的初始化不再使用随机的初始化,而是从你那边(左边)训练好的模型中对应位置层中复制过来。那么,这样一来,抛开最后一层,前面各层性能应当是已经不错的,但是,我们可以根据自己的需求再对相应的前面中的一些层再行参数调整,称为【微调】。这就是微调的核心思想。
四、训练阶段
【使用更强的正则化】的意思是:如果不使用预训练模型,直接在自己的数据集上正常训练,在时间足够的情况下也是可以从随机初始化训练到完全 fitting 自己的数据集,但是可能会导致 Overfitting ,这是没有必要的,不如对预训练模型进行微调。
使用更小的学习率:已经比较接近最优解了,因此不需要太大的学习率。
源数据集远远复杂于目标数据集,通常微调的效果更好!
【注意】源数据集的类别数、图片数量、样本个数通常是目标数据集的 10 倍或者 100 倍,才能达到很好的微调效果;否则,微调的效果不如直接在目标数据集上进行重新训练。
五、固定住底部的一些层
六、总结
现在,工业界已经迅速应用各类预训练的大型科学实验模型,正是基于本文微调原理。