迁移学习(Transfer Learning)

1. 迁移学习 Transfer Learning

1.1 Motivation

  • 能在一个任务上学习一个模型,然后用其来解决相关的别的任务,这样我们在一个地方花的时间,学习的一些知识,研究的一些看法可以在可以在另外一个地方被使用到;
  • 在深度学习中我们会训练很多深层的神经网络, 训练这些神经网络需要大量(带标签)数据,同时训练的代价非常高。就是说,我们很难对每一个任务都去制作一个巨大的数据集去训练。

如果我们在一个任务上训练好的模型,能在其他地方使用,效果最好。

1.2 Approaches

  • 训练好一个模型,然后把它做成一个特征提取的模块(例如:ResNet,VGG16);
  • 在一个相关的任务上训练好一个模型,然后在另一个任务上直接用它;
  • 训练好一个模型,然后对其进行微调,使得模型在新的任务上能够适应。

1.3 Related to

  • 半监督学习:利用未标记数据,帮助带标记数据推进工作;
  • zero-shot / few-shot learning:极端条件下,任务中我们没有样本或者样本很少。对于前者,我们必须学习到关于这个新样本特征的映射。对于后者,我们可以在 big data sets 上面先学习到一个一般化的映射,然后再到少量样本上进行映射的更新或升级;
  • 多任务学习:每一个任务都有自己的数据,数据量不够,这是前提。但每个任务之间是相关的,那么可以将所有的数据放在一起,然后同时训练多个任务,任务之间互相收益。

2. Applications in CV

2.1 转移知识 Transferring Knowledge

dataset ImageNet Car-dataset Mnist
examples 1.2M 50K 60K
classes 1000 100 10
  • 存在许多大规模的已经标注好的CV数据集;
  • 通常自己任务的数据集会比大的数据集(例如ImageNet)小很多。正常情况下,在不知道模型效果如何的情况下,我们是慢慢投入数据。如果效果好,就继续投入,这是一个迭代的过程。

2.2 预训练 Pre-trained

迁移学习(Transfer Learning)_第1张图片

对于一般的神经网络,我们可以把它分成两部分,一部分叫编码器(做特征提取,将原始图片的原始像素转化在一个语义空间中可以线性可分的一些特征),另一部分叫解码器(简单的线性分类器,将编码器的表示映射成想要的标号,或者是做一些决策)。

预训练模型:

在一个比较大的数据集上训练好一个模型,具有一定的泛化能力(放在新的任务上或者新的数据集上,原模型多多少少有点效果)。举个例子,一个解决分类的神经网络模型,即使最后它完成的是分类问题,但在网络的前面几层,它还是学会了如何去处理图片像素的信息。

2.3 微调 Fine-Tuning

迁移学习(Transfer Learning)_第2张图片

微调是怎么做的:

  • 在新的任务上构建一个新的模型,但新模型的架构要跟与训练的模型架构一致;
  • 在找到合适的预训练模型之后要初始化我们的模型(将预训练模型中,除了最后一层之外的权重都复制给自己的模型;最后一层还是用随机的权重)。
  • 在初始化后,就可以开始学习了,这步跟我们平常的学习没有什么区别。
  • 有一点另外的,就是要限制fine-tuned的学习率。这是因为初始的结果已经是比较好了(即预训练已经取得不错的效果),已经在想要“解”的附近了,限制学习率的做法可以使得我们不会走太远;另外就是说不要训练太长的时间。限制搜索空间。

2.4 固定最底层 Freeze Bottom Layers

关于神经网络,我们通常认为它是一个层次化的学习过程。最底层一般是学习了底层的一些特征表示,随着层数越来越高,它多多少少会学习到更全局上、语义上的东西。所以一般来说,底层与它上面的层没有太大的关系。
迁移学习(Transfer Learning)_第3张图片

固定多少层还是要根据具体应用来看,假设应用与预训练模型差别比较大的话,可以多训练一些层。

2.5 如何寻找预训练模型

迁移学习(Transfer Learning)_第4张图片

  • 首先要去有没有我们想要的,其次是看它是基于哪种训练集上训练出来的。
  • ModelHub、ModelZoom。

2.6 fine-tuning 的一些应用

迁移学习(Transfer Learning)_第5张图片

3. 总结

迁移学习(Transfer Learning)_第6张图片

  • 预训练模型是基于大数据集上训练的,任务通常是图片分类;
  • 除最后底层的权重要随机初始化外,前面层数的权重都直接采用预训练模型上已经训练好的权重。
  • 微调的话,需要采用小的学习率进行调整,因为这样会加速收敛。有的时候会提升精度,有时也不会,但通常情况下不会变差。在CV中是经常被推荐的做法。

by: 沐神

你可能感兴趣的:(神经网络,计算机视觉,神经网络,迁移学习)