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
对于一般的神经网络,我们可以把它分成两部分,一部分叫编码器(做特征提取,将原始图片的原始像素转化在一个语义空间中可以线性可分的一些特征),另一部分叫解码器(简单的线性分类器,将编码器的表示映射成想要的标号,或者是做一些决策)。
预训练模型:
在一个比较大的数据集上训练好一个模型,具有一定的泛化能力(放在新的任务上或者新的数据集上,原模型多多少少有点效果)。举个例子,一个解决分类的神经网络模型,即使最后它完成的是分类问题,但在网络的前面几层,它还是学会了如何去处理图片像素的信息。
2.3 微调 Fine-Tuning
微调是怎么做的:
- 在新的任务上构建一个新的模型,但新模型的架构要跟与训练的模型架构一致;
- 在找到合适的预训练模型之后要初始化我们的模型(将预训练模型中,除了最后一层之外的权重都复制给自己的模型;最后一层还是用随机的权重)。
- 在初始化后,就可以开始学习了,这步跟我们平常的学习没有什么区别。
2.4 固定最底层 Freeze Bottom Layers
2.5 fine-tuning 的一些应用
3. 总结
|