transfer learning / fine tuning
卷积神经网络需要大量的数据和资源来进行训练, 例如, imagenet ILSVRC model 是需要在1.2 million 张图片,利用多GPU,耗时2-3个周的训练才能完成.
transfer learning 是将在之前任务(例如image net)训练过的网络权值,迁移到一个新任务上去. 研究者们或者参与者们已经更习惯于, 而非偶尔使用transfer learning and fine-tuning.
而且, 迁移学习和fine-tuning 策略确实表现得不俗. Razavian et al (2014)的实验表明,简单的使用从 image net ILSVRC训练的到的模型来进行特征提取, 利用提取到的特征来训练新的模型.利用这样的策略进行一系列的计算机视觉任务,他们得到了state-of-the-art或者说接近state-of-the-art的实验结果.
- trainsfer learning: 利用在image net(或其他数据集)上训练的网络. 去掉最后的fully-connected layer. 然后将网络剩余部分当做一个feature extractor, 以用于其他新的数据. 一旦利用该网络对所有图片提取到了特征. 可以用这些特征训练一个新的classifier.
- Fine-tuning: 去掉并重新训练网络上层的全连接层, 并且微调网络其余部分的权重.
使用哪种策略
- 有两点因素需要考虑
- 你所用数据的规模
- 你所用数据库和已训练网络数据库之间的相似性.
- 用自己的数据从零开始训练网络, 这个策略也得考虑.
根据以上表格, 情况分为四种:
* 相似数据集 & 小规模数据集(你的数据集): 迁移高层特征(尽量去除已有网络高层的全连接层, 将剩余部分作为分类器), 利用网络提取特征, 然后训练分类器. 不进行fine-tuning, 避免了在小规模数据集上带来overfit问题, 使用提取的高层特征, 是利用了两个数据库之前的相似性.
* 非相似 & 小规模数据库: 迁移底层特征, 提取特征训练数据库. 不建议进行fine-tuning,是为了避免在大数据库上训练的特征会给小数据集的训练带来overfit. 使用底层的特征是以为底层的特征一般比较general.
* 相似数据集 & 大规模数据集: 进行fine-tuning, fine-tuning是为了避免overfit.
* 非相似数据集 & 大规模数据集: 进行fine-tuning, fine-tuning是为了避免overfit.