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


什么是迁移学习?

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

为什么需要迁移学习?

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

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


如何做迁移学习?

  在实践中,我们通常不会完全从头开始随机初始化训练 DCNN,这是因为有能满足深度网络需求的足够大小的数据集相当的少见。作为代替,常见的是在一个大型数据集上预训练一个 DCNN,然后使用这一训练的 DCNN 的权重作为初始设置或作为相关任务的固定的特征提取器。 举个例子,我们知道Imagnet是目前最大的图像识别数据库,目前已经有很多基于imagenet数据训练的网络模型,如inceptionv3、v4等,假如现在给你一个任务,希望你能做一个车系识别,你有两个选择:

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

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

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


 迁移学习的限制

  上文提到我们在迁移学习中会使用预训练的网络,所以我们在模型架构方面受到了一点点限制。比如说,我们不能随意移除预训练网络中的卷积层。但由于参数共享的关系,我们可以很轻松地在不同空间尺寸的图像上运行一个预训练网络。这在卷积层和池化层和情况下是显而易见的,因为它们的前向函数(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)

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

【深度学习系列】迁移学习Transfer Learning的更多相关文章

  1. 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)

    基于深度学习和迁移学习的识花实践(转)   深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...

  2. AI小白必读:深度学习、迁移学习、强化学习别再傻傻分不清

    摘要:诸多关于人工智能的流行词汇萦绕在我们耳边,比如深度学习 (Deep Learning).强化学习 (Reinforcement Learning).迁移学习 (Transfer Learning ...

  3. keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72982230 之前在博客<keras系列︱图像多分类训练与利用bottlenec ...

  4. 读论文系列:Deep transfer learning person re-identification

    读论文系列:Deep transfer learning person re-identification arxiv 2016 by Mengyue Geng, Yaowei Wang, Tao X ...

  5. DNN结构构建:NAS网络结构搜索和强化学习、迁移学习

    前言 谷歌推出的NASNet架构,用于大规模图像分类和识别.NASNet架构特点是由两个AutoML设计的Layer组成--Normal Layer and Reduction Layer,这样的效果 ...

  6. java8 学习系列--NIO学习笔记

    近期有点时间,决定学习下java8相关的内容: 当然了不止java8中新增的功能点,整个JDK都需要自己研究的,不过这是个漫长的过程吧,以自己的惰性来看: 不过开发中不是有时候讲究模块化开发么,那么我 ...

  7. 迁移学习( Transfer Learning )

    在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型:然后利用这个学习到的模型来对测试文档进行分类与预测.然而,我们看到机器学习算法在当前的Web挖掘研究中存在着一个关 ...

  8. 【迁移学习】2010-A Survey on Transfer Learning

    资源:http://www.cse.ust.hk/TL/ 简介: 一个例子: 关于照片的情感分析. 源:比如你之前已经搜集了大量N种类型物品的图片进行了大量的人工标记(label),耗费了巨大的人力物 ...

  9. 迁移学习(Transfer Learning)(转载)

    原文地址:http://blog.csdn.net/miscclp/article/details/6339456 在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型 ...

  10. 迁移学习-Transfer Learning

    迁移学习两种类型: ConvNet as fixed feature extractor:利用在大数据集(如ImageNet)上预训练过的ConvNet(如AlexNet,VGGNet),移除最后几层 ...

随机推荐

  1. 基于SpringBoot开发一个Restful服务,实现增删改查功能

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

  2. Spring_Spring与AOP

    一.传统编程使用代理解决目标类增强问题 //主业务接口 public interface ISomeService { // 目标方法 void doFirst(); // 目标方法 void doS ...

  3. MySQL创建表的语句

    show variables like 'character_set_client';#查询字符集 show databases;#列出所有的服务器上的数据库alter create database ...

  4. 【高精度乘法】NOIP2003麦森数

    题目描述 形如2^{P}-12P−1的素数称为麦森数,这时PP一定也是个素数.但反过来不一定,即如果PP是个素数,2^{P}-12P−1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的 ...

  5. 通过Chocolatey软件包管理器安装.NET Core

    在Linux的世界里,有了yum/apt-get百分之九十的软件都可以通过它来安装管理.但是在Windows系统上,装个软件还是挺折腾的.比如我要装个Chrome浏览器,我先得打开IE浏览器吧,我还打 ...

  6. WebPack-Loader

    Loaders 鼎鼎大名的Loaders登场了! 1.什么是loaders Loaders是webpack中最让人激动人心的功能之一了.通过使用不同的loader,webpack通过调用外部的脚本或工 ...

  7. 错误:'dict' object is not callable

    在晚上学习别人的代码,偶然爆出错误:'dict' object is not callable 找了半天没发现错误.后来还想上文已经有变量名为dict. 因此dict在下面程序中被认为是一个变量不是内 ...

  8. 图的简单应用(C/C++实现)

    存档: #include <stdio.h> #include <stdlib.h> #define maxv 10//定义最大顶点数 typedef char elem;// ...

  9. 深度优先搜索(DFS)专题讲座PPT截图【需要原稿的请留言或私信】

    以下是今晚我在bilibili直播讲DFS算法的时候的ppt截图,ppt搞了一下午,水平有限,只能做成这个样子,供大家参考!(如果需要原稿,请在评论区留言或私信告诉我,我会发到你的邮箱里),感谢各位的 ...

  10. NYoj_171聪明的kk

    聪明的kk 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 聪明的"KK" 非洲某国展馆的设计灵感源于富有传奇色彩的沙漠中陡然起伏的沙丘,体现出本国不 ...