专栏首页机器学习与python集中营深度学习不得不会的迁移学习(Transfer Learning)

深度学习不得不会的迁移学习(Transfer Learning)

一、概述

在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型;然后利用这个学习到的模型来对测试文档进行分类与预测。然而,我们看到机器学习算法在当前的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)全连接层根据特征组合进行评分分类。

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

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

转自:https://blog.csdn.net/u013841196/article/details/80919857

本文分享自微信公众号 - 机器学习与python集中营(yasuozet01),作者:草yang年华

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 常用的模型集成方法介绍:bagging、boosting 、stacking

    本文介绍了集成学习的各种概念,并给出了一些必要的关键信息,以便读者能很好地理解和使用相关方法,并且能够在有需要的时候设计出合适的解决方案。

    小草AI
  • 【个人整理】faster-RCNN的训练过程以及关键点总结

    前言:faster-RCNN是区域卷积神经网络(RCNN系列)的第三篇文章,是为了解决select search方法找寻region proposal速度太慢的...

    小草AI
  • Dropout、梯度消失、Adam 优化算法,神经网络优化算法看这一篇就够了

    对于机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不⼀定更...

    小草AI
  • 几千条文本库也能做机器学习!NLP小数据集训练指南

    深度学习往往需要大量数据,不然就会出现过度拟合,本文作者提出了一些在文本数据量不够大的时候可用的一些实用方法,从而赋予小数据集以价值。

    CDA数据分析师
  • 几千条文本库也能做机器学习!NLP小数据集训练指南

    深度学习往往需要大量数据,不然就会出现过度拟合,本文作者提出了一些在文本数据量不够大的时候可用的一些实用方法,从而赋予小数据集以价值。

    大数据文摘
  • 【干货指南】机器学习必须需要大量数据?小数据集也能有大价值!

    深度学习往往需要大量数据,不然就会出现过度拟合,本文作者提出了一些在文本数据量不够大的时候可用的一些实用方法,从而赋予小数据集以价值。

    新智元
  • ResNet告诉我,我是不是世界上最美的人?

    大数据文摘
  • 模型训练太慢?来试试用这个方法提速吧!

    原标题:How to Train Your Model (Dramatically Faster)

    崔庆才
  • 如何确定最佳训练数据集规模?6 大必备“锦囊”全给你了 | 技术头条

    【导读】对于机器学习而言,获取数据的成本有时会非常昂贵,因此为模型选择一个合理的训练数据规模,对于机器学习是至关重要的。在本文中,作者针对线性回归模型和深度学习...

    AI科技大本营
  • 纳米神经网络 NanoNet:数据有限,照样玩转深度学习

    【新智元导读】解决深度学习问题时,使用迁移学习能够很好地减少所需的训练数据量。但是,使用这种方法需要更多的专业知识,比如判断如何调试问题、将哪一层的输出作为输入...

    新智元

扫码关注云+社区

领取腾讯云代金券