介绍

在深度学习领域,进行一个模型的训练往往需要大量的数据,否则会造成无法很好地拟合的问题。但是大多数情况下,现有数据量都是不够让模型很好地训练。

举个栗子

直接 from scratch 训练容易过拟合,比如你有少量训练图像都是雪地里的阿拉斯加犬,然后直接from scratch去训练模型,经过很多epoch的迭代训练,很可能会造成模型学到的特征阿拉斯加犬都是在雪地里面,然后你给一张在草地里的阿拉斯加犬就无法识别,反而你给一个在雪地里面的藏獒被错误识别成阿拉斯加犬。这就是过拟合,学习到了图片中非常个性的特征,不具有很好的泛化能力。

方法

Fine tuning就能较好地解决这个问题,现在常用的解决方案有两种:

  • 使用pretrained model 做Feature extract,然后再去做分类等任务。(也就是固定预训练模型参数,把预训练模型当成一个完整的特征提取器,然后将给定image转化成一个feature vector)
  • 使用pretrained model 做微调,增删模型后面若干层的网络结构,然后可以选择保留预训练模型的参数,这样可以保持模型的泛化能力,同时和后面调整的网络一起联合训练,使得模型更好地学习到新的数据特征。

优点

  1. 解决了我们小样本下使用复杂网络上容易过拟合的问题
  2. 节省了训练时间,因为网络前面几层提取的特征具备一定的泛化能力

技巧

在数据量非常少的时候,建议使用预训练模型做特征抽取。在数据量较大的时候,建议使用fine tuning微调。

实战

TODO