在现代深度学习领域,精细调整(Fine-tune)已经成为一种非常重要的技术手段。
预训练模型
在介绍finetune之前,先了解一下什么是预训练模型。在搭建一个网络模型来完成一个特定的图像分类的任务时,首先,需要随机初始化参数,然后开始训练网络,不断调整直到网络的损失越来越小。在训练的过程中,一开始初始化的参数会不断变化。当结果很满意的时候,就可以将训练模型的参数保存下来,以便训练好的模型可以在下次执行类似任务时获得较好的结果。这个过程就是pre-training。
之后接收到一个类似的图像分类任务。这时候,就可以直接使用之前保存下来的模型的参数作为这一任务的初始化参数,然后在训练的过程中,依据结果不断进行一些修改。这时候使用的就是一个pre-training/trained 模型,而过程就是fine-tuning。
所以,预训练就是指预先训练的一个模型或者指预先训练模型的过程;微调就是指将预训练模型作用于自己的数据集,并使参数适应自己数据集的过程。
微调的概念
为什么使用微调?首先要了解卷积网络的核心是:
而预训练模型的特点是:使用大型数据集进行训练,具备提取浅层基础特征和深层抽象特征的能力。使用微调不仅可以有效避免从头开始训练,浪费时间和资源的问题,而且可以一定程度上解决模型泛化能力低的问题。
使用微调的场合
什么情况下使用微调呢?
首先,使用的数据集与预训练模型的数据集相似,如果不太相似,比如使用的预训练模型是自然场景下的图片训练的,而目标任务是人脸识别,效果可能就没有那么好了。因为人脸的特征和自然景物的特征提取是不同的,所以相应的参数训练后也是不同的。
其次当使用自己搭建的CNN模型准确率太低的时候也可以考虑使用微调。
在实践中更常用的是,对于拥有较小的数据集,只需对那些经过大型数据集训练过的预训练模型结构进行微调,就可以达到快速训练模型的效果。