什么是预训练?
假设你现在需要搭建一个NN完成图像分类的任务。首先,你需要随机初始化参数,接着使用训练数据开始训练网络,不断对网络进行调整直至网络的损失值越来越小。当你觉得训练结果达到一个满意的状态后,就可以将模型的参数保存下来,以便在下次执行类似任务时拿出来可以直接使用,并且能够获得较好的结果。这个过程就是pre-training。
什么是微调?
在某天,你想在一个新的数据集上进行图像分类工作。这个时候,你可以直接调用之前保存下来的模型参数作为该任务的初始化参数,然后在训练过程中,根据训练结果不断调整,使结果达到预期状态。你使用的是一个pre-trained模型
之后,你又接收到一个类似的图像分类的任务。这个时候,你可以直接使用之前保存下来的模型的参数来作为这一任务的初始化参数,然后在训练的过程中,依据结果不断进行一些修改。这时候,你使用的就是一个,而过程就是fine-tuning。
总结
预训练 就是指预先训练的模型的过程;
微调 就是指将预训练的模型作用于自己的数据集,并调整参数适应自己数据集的过程。
微调的作用
在CNN领域中,很少有人自己从头训练一个CNN网络。主要原因是很小的概率能拥有足够大的数据集,从头训练,很容易造成过拟合。
所以,一般的操作都是在一个大型的数据集上训练一个模型,然后将该模型作为类似任务的初始化或者特征提取器。这样既节省了时间和计算资源,又能很快能达到较好的效果。