【深度学习系列】迁移学习Transfer Learning

  在前面的文章中,咱们一般是拿到一个任务,譬如图像分类、识别等,搜集好数据后就开始直接用模型进行训练,可是现实状况中,因为设备的局限性、时间的紧迫性等致使咱们没法从头开始训练,迭代一两百万次来收敛模型,因此这个时候迁移学习就派上用场了。git


什么是迁移学习?github

  迁移学习通俗来说,就是运用已有的知识来学习新的知识,核心是找到已有知识和新知识之间的类似性,用成语来讲就是触类旁通。因为直接对目标域从头开始学习成本过高,咱们故而转向运用已有的相关知识来辅助尽快地学习新知识。好比,已经会下中国象棋,就能够类比着来学习国际象棋;已经会编写Java程序,就能够类比着来学习C#;已经学会英语,就能够类比着来学习法语;等等。世间万事万物皆有共性,如何合理地找寻它们之间的类似性,进而利用这个桥梁来帮助学习新知识,是迁移学习的核心问题。

 


为何须要迁移学习?数据库

  • 知足深度学习训练数据量的数据太少。对于一个机器学习的任务,譬如分类,若是数据量太小,咱们是否必定要上深度学习呢?其实没必要然。若是在实际的生产过程当中,可以用规则就能获得好的效果的就用规则,可以用简单的模型就用简单的模型,咱们常听到的“奥卡姆剃刀”其实就是这个意思,减小模型的复杂度,可以从某种程度上避免过拟合的状况。那么对于小量数据集,没有必要必定须要用深度学习的方法来作。一样,若是要对一个新任务分类,或者识别,搜集不了大量的正负样本,怎么训练呢?
  • 新数据集相比于原数据集更小但内容很不相同。因为数据较小,只训练一个线性分类器可能更好。由于数据集不一样,从网络顶部就开始训练分类器可能不是最好的选择,这包含更多的数据集特定特征。另外,从网络前部的激活函数开始训练分类器可能更好一点。网络

  • 新数据集相比于原数据集较大,但内容很是不一样。因为数据集很大,咱们可能会指望从头开始训练一个 DCNN。然而,在实践中从一个预训练模型开始初始化权重仍然是一种有益的方法。在这种状况下,咱们会有足够的数据和信心对整个网络进行微调。架构

 


如何作迁移学习?dom

   在实践中,咱们一般不会彻底从头开始随机初始化训练 DCNN,这是由于有能知足深度网络需求的足够大小的数据集至关的少见。做为代替,常见的是在一个大型数据集上预训练一个 DCNN,而后使用这一训练的 DCNN 的权重做为初始设置或做为相关任务的固定的特征提取器。 举个例子,咱们知道Imagnet是目前最大的图像识别数据库,目前已经有不少基于imagenet数据训练的网络模型,如inceptionv三、v4等,假如如今给你一个任务,但愿你能作一个车系识别,你有两个选择:机器学习

  一是搜集大量的车系数据,对这些车系数据进行模型训练;函数

  二是基于imagenet训练好的网络模型,而后把搜集好的车系数据加到基于以前训练好的模型继续训练,进行fine-tuning。学习

  传统的作法都是第一种,可是这就会遇到一个问题,一是车系的图片够不够多,体量够不够大?若是数据量不够,最后训练的效果会不会很很差?其实咱们能够经过 把ImageNet 或其余大型数据集学习到的网络特征运用于一个图片分类或其余基于图片特征的任务,这就是迁移学习的思想。其实能够这样理解,若是从零开始训练,那么初始化权重通常状况下要么是都为0,要么随机设置,当咱们导入了在大规模数据集上训练好的模型后,至关于在以这个模型现有的参数做为初始化的权重,不过至于在具体的任务上的泛化能力如何,仍是得看具体的场景。spa

 


 迁移学习的限制

  上文提到咱们在迁移学习中会使用预训练的网络,因此咱们在模型架构方面受到了一点点限制。好比说,咱们不能随意移除预训练网络中的卷积层。但因为参数共享的关系,咱们能够很轻松地在不一样空间尺寸的图像上运行一个预训练网络。这在卷积层和池化层和状况下是显而易见的,由于它们的前向函数(forward function)独立于输入内容的空间尺寸。在全链接层(FC)的情形中,这仍然成立,由于全链接层可被转化成一个卷积层。因此当咱们导入一个预训练的模型时,网络结构须要与预训练的网络结构相同,而后再针对特定的场景和任务进行训练。

 


迁移学习的相关资料

  对迁移学习感兴趣的同窗,能够关注这个github repo:transferlearning,以及王晋东写的系列文章:

 《小王爱迁移》系列之零:迁移学习领域著名学者和研究机构

 

《小王爱迁移》系列之一:迁移成分分析(TCA)方法简介

 

《小王爱迁移》系列之二:联合分布适配(JDA)方法简介

 

《小王爱迁移》系列之三:深度神经网络的可迁移性

 

《小王爱迁移》系列之四:深度适配网络(DAN)

 

《小王爱迁移》系列之五:测地线流式核方法(GFK)

 

《小王爱迁移》系列之六:学习迁移(Learning To Transfer)

 

《小王爱迁移》系列之七:负迁移(Negative Transfer)

 

《小王爱迁移》系列之八:深度迁移学习文章解读

 

《小王爱迁移》系列之九:开放集迁移学习(Open Set Domain Adaptation)

 

《小王爱迁移》系列之十:张量迁移学习(tensor unsupervised domain adaptation)

 

《小王爱迁移》系列之十一:选择性对抗迁移学习(Selective Adversarial Network)

 

《小王爱迁移》系列之十二:新年新气象-从新整理的迁移学习资源仓库

 

 

参考资料:

1.https://zhuanlan.zhihu.com/p/33369085

2.http://blog.csdn.net/maweifei/article/details/52444342

相关文章
相关标签/搜索