http://blog.itpub.net/29829936/viewspace-2641919/

2019-04-18 10:04:53

目录

一、概述

二、什么是迁移学习?

2.1 模型的训练与预测:

2.2 为什么要迁移学习?

2.3 迁移学习有几种方式

2.4 三种迁移学习方式的对比

三、实验:尝试对模型进行微调,以进一步提升模型性能

3.1 Fine-tune所扮演的角色

3.2 Fine-tune 也可以有三种操作方式

3.3 不同数据集下使用微调

3.4 微调的注意事项

四、多重预训练视觉模型的迁移学习

一、概述

在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型;然后利用这个学习到的模型来对测试文档进行分类与预测。然而,我们看到机器学习算法在当前的Web挖掘研究中存在着一个关键的问题:一些新出现的领域中的大量训练数据非常难得到。我们看到Web应用领域的发展非常快速。大量新的领域不断涌现,从传统的新闻,到网页,到图片,再到博客、播客等等。传统的机器学习需要对每个领域都标定大量训练数据,这将会耗费大量的人力与物力。而没有大量的标注数据,会使得很多与学习相关研究与应用无法开展。其次,传统的机器学习假设训练数据与测试数据服从相同的数据分布。然而,在许多情况下,这种同分布假设并不满足。通常可能发生的情况如训练数据过期。这往往需要我们去重新标注大量的训练数据以满足我们训练的需要,但标注新数据是非常昂贵的,需要大量的人力与物力。从另外一个角度上看,如果我们有了大量的、在不同分布下的训练数据,完全丢弃这些数据也是非常浪费的。如何合理的利用这些数据就是迁移学习主要解决的问题。迁移学习可以从现有的数据中迁移知识,用来帮助将来的学习。迁移学习(Transfer Learning)的目标是将从一个环境中学到的知识用来帮助新环境中的学习任务。因此,迁移学习不会像传统机器学习那样作同分布假设。

二、什么是迁移学习?

迁移学习(Transfer learning) 顾名思义就是把已训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务都是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习。

2.1 模型的训练与预测:

深度学习的模型可以划分为 训练 和 预测 两个阶段。

训练 分为两种策略:一种是白手起家从头搭建模型进行训练,一种是通过预训练模型进行训练。

预测 相对简单,直接用已经训练好的模型对数据集进行预测即可。

2.2 为什么要迁移学习?

(1)站在巨人的肩膀上:前人花很大精力训练出来的模型在大概率上会比你自己从零开始搭的模型要强悍,没有必要重复造轮子。

(2)训练成本可以很低:如果采用导出特征向量的方法进行迁移学习,后期的训练成本非常低,用CPU都完全无压力,没有深度学习机器也可以做。

(3)适用于小数据集:对于数据集本身很小(几千张图片)的情况,从头开始训练具有几千万参数的大型神经网络是不现实的,因为越大的模型对数据量的要求越大,过拟合无法避免。这时候如果还想用上大型神经网络的超强特征提取能力,只能靠迁移学习。

2.3 迁移学习有几种方式

(1)Transfer Learning:冻结预训练模型的全部卷积层,只训练自己定制的全连接层。

(2)Extract Feature Vector:先计算出预训练模型的卷积层对所有训练和测试数据的特征向量,然后抛开预训练模型,只训练自己定制的简配版全连接网络。

(3)Fine-tune:冻结预训练模型的部分卷积层(通常是靠近输入的多数卷积层),训练剩下的卷积层(通常是靠近输出的部分卷积层)和全连接层。

* 注:Transfer Learning关心的问题是:什么是“知识”以及如何更好地运用之前得到的“知识”,这可以有很多方法和手段,eg:SVM,贝叶斯,CNN等。而fine-tune只是其中的一种手段,更常用于形容迁移学习的后期微调中。

2.4 三种迁移学习方式的对比

(1)第一种和第二种训练得到的模型本质上并没有什么区别,但是第二种的计算复杂度要远远优于第一种。

(2)第三种是对前两种方法的补充,以进一步提升模型性能。要注意的是,这种方法并不一定能真的对模型有所提升。

本质上来讲:这三种迁移学习的方式都是为了让预训练模型能够胜任新数据集的识别工作,能够让预训练模型原本的特征提取能力得到充分的释放和利用。但是,在此基础上如果想让模型能够达到更低的Loss,那么光靠迁移学习是不够的,靠的更多的还是模型的结构以及新数据集的丰富程度。

三、实验:尝试对模型进行微调,以进一步提升模型性能

3.1 Fine-tune所扮演的角色

 拿到新数据集,想要用预训练模型处理的时候,通常都会先用上面方法一或者方法二来看看预训练模型在新数据上的表现怎么样,摸个底。如果表现不错,还想看看能不能进一步提升,就可以试试Fine-tune,进一步解锁卷积层以继续训练模型。

但是不要期待会有什么质的飞跃。

 另外,如果由于新数据集与原数据集(例如ImageNet数据集)的差别太大导致表现很糟,那么一方面可以考虑自己从头训练模型,另一方面也可以考虑解锁比较多层的训练,亦或干脆只用预训练模型的参数作为初始值,对模型进行完整训练。

3.2 Fine-tune 也可以有三种操作方式

注:其实基本思路都是一样的,就是解锁少数卷积层继续对模型进行训练。

场景1:已经采用方法一的方式,带着冻僵的卷积层训练好分类器了。

如何做:接着用方法一里的模型,再解锁一小部分卷积层接着训练就好了。

场景2:已经采用方法二里的方式,把分类器训练好了,现在想要进一步提升模型。

如何做:重新搭一个预训练模型接新分类器,然后把方法二里训练好的分类器参数载入到新分类器里,解锁一小部分卷积层接着训练。

场景3:刚上手,想要 Transfer Learning + Fine-tune一气呵成。

如何做:和方法一里的操作一样,唯一不同的就是只冻僵一部分卷积层训练。需要注意的是,这么做需要搭配很低的学习率,因此收敛可能会很慢。

3.3 不同数据集下使用微调

数据集1

数据量少,但数据相似度非常高

  • 在这种情况下,我们所做的只是修改最后几层或最终的softmax图层的输出类别。

数据集2

数据量少,数据相似度低

  • 在这种情况下,我们可以冻结预训练模型的初始层(比如k层),并再次训练剩余的(n-k)层。由于新数据集的相似度较低,因此根据新数据集对较高层进行重新训练具有重要意义。

数据集3

数据量大,数据相似度低

  • 在这种情况下,由于我们有一个大的数据集,我们的神经网络训练将会很有效。但是,由于我们的数据与用于训练我们的预训练模型的数据相比有很大不同。使用预训练模型进行的预测不会有效。因此,最好根据你的数据从头开始训练神经网络(Training from scatch)。

数据集4

数据量大,数据相似度高

这是理想情况。在这种情况下,预训练模型应该是最有效的。使用模型的最好方法是保留模型的体系结构和模型的初始权重。然后,我们可以使用在预先训练的模型中的权重来重新训练该模型。

3.4 微调的注意事项

(1)通常的做法是截断预先训练好的网络的最后一层(softmax层),并用与我们自己的问题相关的新的softmax层替换它。

(2)使用较小的学习率来训练网络。

(3)如果数据集数量过少,我们进来只训练最后一层,如果数据集数量中等,冻结预训练网络的前几层的权重也是一种常见做法。

注:卷积神经网络的核心是:

(1)浅层卷积层提取基础特征,比如边缘,轮廓等基础特征。

(2)深层卷积层提取抽象特征,比如整个脸型。

(3)全连接层根据特征组合进行评分分类。

四、多重预训练视觉模型的迁移学习

和上面的方法二类似,只是我们现在拥有多个预训练模型,采用特征提取方法,使用堆叠技术将不同的预训练模型的特征组合在一起去训练。使用多个预训练模型后,与使用一个特征集的情况相同:它们希望提供一些不重叠的信息,从而使组合时性能更优越。

深度学习不得不会的迁移学习Transfer Learning相关推荐

  1. 【美团云】TensorFlow 迁移学习识花实战案例(Transfer Learning)

    TensorFlow 迁移学习识花实战案例(Transfer Learning) TensorFlow 迁移学习识花实战案例 什么是迁移学习 为什么要使用迁移学习 识花模型中迁移学习的思路 VGG模型 ...

  2. 基于特征的对抗迁移学习论文_有关迁移学习论文

    如果你有好的想法,欢迎讨论! 1 Application of Transfer Learning in Continuous Time Series for Anomaly Detection in ...

  3. 【学习笔记】pytorch迁移学习-猫狗分类实战

    1.迁移学习入门 什么是迁移学习:在深度神经网络算法的引用过程中,如果我们面对的是数据规模较大的问题,那么在搭建好深度神经网络模型后,我们势必要花费大量的算力和时间去训练模型和优化参数,最后耗费了这么 ...

  4. 【深度学习】一文看懂 (Transfer Learning)迁移学习(pytorch实现)

    前言 你会发现聪明人都喜欢"偷懒", 因为这样的偷懒能帮我们节省大量的时间, 提高效率. 还有一种偷懒是 "站在巨人的肩膀上". 不仅能看得更远, 还能看到更多 ...

  5. 带你用深度学习虚拟机进行文本迁移学习(附代码)

    作者:Anusua Trivedi.Wee Hyong Tok 翻译:付宇帅 校对:卢苗苗 本文5302字,建议阅读10分钟. 本文讲述了现代机器学习的模型,主要由微软数据科学家Anusua Triv ...

  6. 量化交易有因子动物园 深度学习里有模型动物园(ModelZoo)又叫模型市场基于深度学习的增量学习,迁移学习等技术发展而来【调研】

    前言 随着迁移模型的概念流行起来,就像快乐会传染样,自然语言处理,计算机视觉,生成模型,强化学习,非监监督学习,语音识别 这几个领域内部产生了大量的可复用可迁移学习的基础模型,领域之间的方法也在互相学 ...

  7. 迁移学习resnet_ResNet-V1-50卷积神经网络迁移学习进行不同品种的花的分类识别

    运行环境 python3.6.3.tensorflow1.10.0 Intel@AIDevCloud:Intel Xeon Gold 6128 processors集群 数据和模型来源 思路 数据集分 ...

  8. 2019年上半年收集到的人工智能迁移学习干货文章

    2019年上半年收集到的人工智能迁移学习干货文章 迁移学习全面指南:概念.项目实战.优势.挑战 迁移学习:该做的和不该做的事 深度学习不得不会的迁移学习Transfer Learning 谷歌最新的P ...

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

    在前面的文章中,我们通常是拿到一个任务,譬如图像分类.识别等,搜集好数据后就开始直接用模型进行训练,但是现实情况中,由于设备的局限性.时间的紧迫性等导致我们无法从头开始训练,迭代一两百万次来收敛模型, ...

最新文章

  1. php解释命令行的参数
  2. VTK:可视化算法之HeadBone
  3. netstat 详解
  4. 现代软件工程系列 学生的精彩文章 (3) 如何在Bug 不断的情况下还能保持平常心...
  5. 人工智障学习笔记——强化学习(5)DRL与DQN
  6. 蓝桥杯2016年C/C++ 混搭
  7. RPC框架的实现原理是什么?-开课吧
  8. POJ 3321 Apple Tree 【树状数组+建树】
  9. sonnar检查出没有的方法_你有没有定期检查轮胎?它还能换位置,真是“经济”宝藏方法...
  10. 设计模式-第四篇之代理模式
  11. 比特率与波特率有何差别?—Vecloud
  12. Mac小技巧——开启Google Chrome浏览器加速模式
  13. 绿色奖学金申请答辩PPT模板
  14. 抖音用什么编程语言_抖音是哪个公司的 抖音app所属公司 是哪个公司开发的
  15. js版【微信机器人】——wechat-robot
  16. copy-to-clipboard 复制
  17. 转载自www.dezai.cn 常用sql统计
  18. 《Python神经网络编程》自己动手编写一个神经网络
  19. 使用VMware对英伟达xavier nx2进行刷机
  20. 实现了一个golang周期任务调度包

热门文章

  1. logsoftmax前面为什么没用激活函数,有与没有影响不大吗,难道是这个原因,求明白的高手解答
  2. mysql面试关联查询语句_MySQL百万级、千万级数据多表关联SQL语句调优
  3. 智源大师讲座丨以色列科学与人文科学院院长David Harel: Combining Modeling and AI
  4. Radboud科学家探索材料「量子大脑」——没有软件,硬件也可以实现机器学习 | AI日报...
  5. 活动报名 | 因果科学与Casual AI读书会
  6. 一大清早,我就被编辑赶出了办公室……
  7. Masking GAN pytorch
  8. 新冠肺炎数据里学到的四个数据分析和机器学习知识
  9. 数据蒋堂 | 从一道招聘考题谈起
  10. 报名 | 大咖云集,清华方圆系列之大数据分析与可视化报告会