迁移学习(Transfer Learning)

迁移学习概述

背景

随着越来越多的机器学习应用场景的出现,而现有表现比较好的监督学习需要大量的标注数据,标注数据是一项枯燥无味且花费巨大的任务,所以迁移学习受到越来越多的关注。

传统机器学习(主要指监督学习)

  • 基于同分布假设
  • 需要大量标注数据

然而实际使用过程中不同数据集可能存在一些问题,比如

  • 数据分布差异
  • 标注数据过期
    训练数据过期,也就是好不容易标定的数据要被丢弃,有些应用中数据是分布随着时间推移会有变化

如何充分利用之前标注好的数据(废物利用),同时又保证在新的任务上的模型精度?
基于这样的问题,所以就有了对于迁移学习的研究

定义及分类

目标
将某个领域或任务上学习到的知识或模式应用到不同但相关的领域或问题中。

主要思想
从相关领域中迁移标注数据或者知识结构、完成或改进目标领域或任务的学习效果。

上图是一个商品评论情感分析的例子,图中包含两个不同的产品领域:books 图书领域和 furniture 家具领域;在图书领域,通常用“broad”、“quality fiction”等词汇来表达正面情感,而在家具领域中却由“sharp”、“light weight”等词汇来表达正面情感。可见此任务中,不同领域的不同情感词多数不发生重叠、存在领域独享词、且词汇在不同领域出现的频率显著不同,因此会导致领域间的概率分布失配问题。

迁移学习的形式定义及一种分类方式

迁移学习里有两个非常重要的概念

  • 域(Domain)
  • 任务(Task)

可以理解为某个时刻的某个特定领域,比如书本评论和电视剧评论可以看作是两个不同的domain
任务 就是要做的事情,比如情感分析和实体识别就是两个不同的task

关键点

  1. 研究可以用哪些知识在不同的领域或者任务中进行迁移学习,即不同领域之间有哪些共有知识可以迁移。
  2. 研究在找到了迁移对象之后,针对具体问题所采用哪种迁移学习的特定算法,即如何设计出合适的算法来提取和迁移共有知识。
  3. 研究什么情况下适合迁移,迁移技巧是否适合具体应用,其中涉及到负迁移的问题。

当领域间的概率分布差异很大时,上述假设通常难以成立,这会导致严重的负迁移问题。
负迁移是旧知识对新知识学习的阻碍作用,比如学习了三轮车之后对骑自行车的影响,和学习汉语拼音对学英文字母的影响
研究如何利用正迁移,避免负迁移

基于实例的迁移

基于实例的迁移学习研究的是,如何从源领域中挑选出,对目标领域的训练有用的实例,比如对源领域的有标记数据实例进行有效的权重分配,让源域实例分布接近目标域的实例分布,从而在目标领域中建立一个分类精度较高的、可靠地学习模型。
因为,迁移学习中源领域与目标领域的数据分布是不一致,所以源领域中所有有标记的数据实例不一定都对目标领域有用。戴文渊等人提出的TrAdaBoost算法就是典型的基于实例的迁移。

基于特征的迁移

特征选择

基于特征选择的迁移学习算法,关注的是如何找出源领域与目标领域之间共同的特征表示,然后利用这些特征进行知识迁移。

特征映射

基于特征映射的迁移学习算法,关注的是如何将源领域和目标领域的数据从原始特征空间映射到新的特征空间中去。
这样,在该空间中,源领域数据与的目标领域的数据分布相同,从而可以在新的空间中,更好地利用源领域已有的有标记数据样本进行分类训练,最终对目标领域的数据进行分类测试。

基于共享参数的迁移

基于共享参数的迁移研究的是如何找到源数据和目标数据的空间模型之间的共同参数或者先验分布,从而可以通过进一步处理,达到知识迁移的目的,假设前提是,学习任务中的的每个相关模型会共享一些相同的参数或者先验分布。

深度学习和迁移学习结合

深度学习需要大量的高质量标注数据,Pre-training + fine-tuning 是现在深度学习中一个非常流行的trick,尤其是以图像领域为代表,很多时候会选择预训练的ImageNet对模型进行初始化。

下面将主要通过一些paper对深度学习中的迁移学习应用进行探讨

**Pre-training+Fine-tuning

2014年Bengio等人在NIPS上发表论文 How transferable are features in deep neural networks,研究深度学习中各个layer特征的可迁移性(或者说通用性)
文章中进行了如下图所示的实验,有四种模型

  • Domain A上的基本模型BaseA
  • Domain B上的基本模型BaseB
  • Domain B上前n层使用BaseB的参数初始化(后续有frozen和fine-tuning两种方式)
  • Domain B上前n层使用BaseA的参数初始化(后续有frozen和fine-tuning两种方式)

将深度学习应用在图像处理领域中时,会观察到第一层(first-layer)中提取的features基本上是类似于Gabor滤波器(Gabor filters)和色彩斑点(color blobs)之类的。
通常情况下第一层与具体的图像数据集关系不是特别大,而网络的最后一层则是与选定的数据集及其任务目标紧密相关的;文章中将第一层feature称之为一般(general)特征,最后一层称之为特定(specific)特征

  • 特征迁移使得模型的泛化性能有所提升,即使目标数据集非常大的时候也是如此。
  • 随着参数被固定的层数n的增长,两个相似度小的任务之间的transferability gap的增长速度比两个相似度大的两个任务之间的transferability gap增长更快 两个数据集越不相似特征迁移的效果就越差
  • 即使从不是特别相似的任务中进行迁移也比使用随机filters(或者说随机的参数)要好
  • 使用迁移参数初始化网络能够提升泛化性能,即使目标task经过了大量的调整依然如此。

一、什么是预训练和微调?

  • 预训练(pre-training/trained)和微调(fine-tuning)这两个词经常在论文中见到,
  • 你需要搭建一个网络模型来完成一个特定的图像分类的任务。首先,你需要随机初始化参数,然后开始训练网络,不断调整直到网络的损失越来越小。在训练的过程中,一开始初始化的参数会不断变化。当你觉得结果很满意的时候,你就可以将训练模型的参数保存下来,以便训练好的模型可以在下次执行类似任务时获得较好的结果。这个过程就是pre-training
  • 之后,你又接收到一个类似的图像分类的任务。这时候,你可以直接使用之前保存下来的模型的参数来作为这一任务的初始化参数,然后在训练的过程中,依据结果不断进行一些修改。这时候,你使用的就是一个 pre-training/trained 模型,而过程就是fine-tuning
  • 所以,预训练 就是指预先训练的一个模型或者指预先训练模型的过程;微调 就是指将预训练过的模型作用于自己的数据集,并使参数适应自己数据集的过程。

二、预训练和微调的作用

  • 在 C N N 领域中,实际上,很少人自己从头训练一个 C N N 网络。主要原因是自己很小的概率会拥有足够大的数据集,基本是几百或者几千张,不像 ImageNet 有 1200 万张图片这样的规模。拥有的数据集不够大,而又想使用很好的模型的话,很容易会造成过拟合。
    所以,一般的操作都是在一个大型的数据集上(ImageNet)训练一个模型,然后使用该模型作为类似任务的初始化或者特征提取器。比如 VGG,Inseption 等模型都提供了自己的训练参数,以便人们可以拿来微调。这样既节省了时间和计算资源,又能很快的达到较好的效果

  • [1]. What is pretraining in deep learning & how does it work?

    [2]. CS231n: Convolutional Neural Networks for Visual Recognition

DANN (Domain-Adversarial Neural Network)

这篇paper将近两年流行的对抗网络思想引入到迁移学习中,从而提出了DANN


图中所展示的即为DANN的结构图,框架由feature extractor、label predictor和domain classifier三个部分组成,并且在feature extractor和domain classifier 之间有一个gradient reversal layer;其中domain classifier只在训练过程中发挥作用

  • DANN将领域适配和特征学习整合到一个训练过程中,将领域适配嵌入在特征表示的学习过程中;所以模型最后的分类决策是基于既有区分力又对领域变换具有不变性的特征。
  • 优化特征映射参数的目的是为了最小化label classifier的损失函数,最大化domain classifier的损失函数,前者是为了提取出具有区分能力的特征,后者是为了提取出具有领域不变性的特征,最终优化得到的特征兼具两种性质。

参考文献

Transfer Learning

[1] How transferable are features in deep neural networks(NIPS2014 Bengio et al.)
[2] Learning and Transferring Mid-Level Image Representations using Convolutional Neural Networks(CVPR2014 Oquab.et al.)
[3] Domain Adaptation for Large-Scale Sentiment Classification: A Deep Learning Approach(ICML2011 Glorot. Bengio.et al.)
[4] Marginalized denoising autoencoders for domain adaptation (ICML2012 Chen et al.)
[5] Domain-Adversarial Training of Neural Networks(JMLR2016 Ganin.et al.)

pre-training/fine-tuning

[1]. What is pretraining in deep learning & how does it work?

[2]. CS231n: Convolutional Neural Networks for Visual Recognition

迁移学习(Transfer Learning)-- 概念理解相关推荐

  1. 深度学习不得不会的迁移学习Transfer Learning

    http://blog.itpub.net/29829936/viewspace-2641919/ 2019-04-18 10:04:53 目录 一.概述 二.什么是迁移学习? 2.1 模型的训练与预 ...

  2. 迁移学习(transfer learning)与finetune的关系?【finetune只是transfer learning的一种手段】

    目录 1.迁移学习简介 2.为什么要迁移学习? 3.迁移学习的几种方式 1)Transfer Learning: 2)Extract Feature Vector: 3)Fine-tune: 4.三种 ...

  3. 迁移学习(Transfer Learning)的背景、历史

    迁移学习(Transfer Learning)的背景.历史 迁移学习的背景.历史及学习 1.迁移学习提出背景 在机器学习.深度学习和数据挖掘的大多数任务中,我们都会假设training和inferen ...

  4. 迁移学习(Transfer learning)、重用预训练图层、预训练模型库

    迁移学习(Transfer learning).重用预训练图层.预训练模型库 目录 迁移学习(Transfer learning).重用预训练图层.预训练模型库 迁移学

  5. PyTorch 迁移学习 (Transfer Learning) 代码详解

    PyTorch 迁移学习 代码详解 概述 为什么使用迁移学习 更好的结果 节省时间 加载模型 ResNet152 冻层实现 模型初始化 获取需更新参数 训练模型 获取数据 完整代码 概述 迁移学习 ( ...

  6. 迁移学习(Transfer Learning)概述及代码实现(full version)

    基于PaddlePaddle的李宏毅机器学习--迁移学习 大噶好,我是黄波波.希望能和大家共进步,错误之处恳请指出! 百度AI Studio个人主页, 我在AI Studio上获得白银等级,点亮2个徽 ...

  7. 迁移学习(Transfer Learning)概述及代码实现

    基于PaddlePaddle的李宏毅机器学习--迁移学习 大噶好,我是黄波波,希望能和大家共进步,错误之处恳请指出! 百度AI Studio个人主页, 我在AI Studio上获得白银等级,点亮2个徽 ...

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

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

  9. 迁移学习 Transfer Learning—通俗易懂地介绍(常见网络模型pytorch实现)

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

  10. 【深度学习】迁移学习 (Transfer Learning)

    Introduction 把别处学得的知识,迁移到新场景的能力,就是"迁移学习". 具体在实践中体现为: 将 A任务上 预训练好的模型 放在B任务上,加上少量B任务训练数据,进行微 ...

最新文章

  1. 数字图像处理——第四章 频率域滤波
  2. 宜出行热力图怎么抓取_滴滴听不到单怎么办?七个小技巧
  3. 【转】[你必须知道的.NET]第二十一回:认识全面的null
  4. PaddlePaddle应用于百度视觉技术的工程实践
  5. 828c语言程序设计_21计算机考研只考一门高级语言程序设计的院校大汇总!
  6. 对老赖 绝不要忍 !一位美女程序媛的讨薪经历...
  7. java 数据object_java常用的object数据处理
  8. 主成份(PCA)与奇异值分解(SVD)的通俗解释
  9. luncence学习
  10. Eclipse搭建Android开发环境并运行Android项目 (详细)
  11. esxi能直通的显卡型号_2020最适合新手CG玩家的电脑配置【显卡--专业卡、游戏卡】...
  12. 使用xpath批量爬取堆糖图片
  13. [索引]引用Balancing bike sharing systems with constraint programming的文章
  14. 《经典算法案例》01-10:如何打印质数表(六列版)
  15. 有关敬业的一个小故事
  16. 微信小程序性能优化方案
  17. matlab butter stop,Matlab butter函数设计滤波器
  18. OSChina 周四乱弹 ——老板:把骨头统统交出来
  19. android 解锁mac,论一台笔记本三个不同系统的玩法,解锁正确姿势
  20. 学习动力方法介绍,让你们成为永动机

热门文章

  1. Statement接口的基本介绍和使用
  2. Moonbeam与Wormhole的Relayer Engine之间的跨链互连合约
  3. java远程连接linux并发送命令,两种方案比较Jsch与ganymed-ssh2
  4. HMMER批量比对及结果处理
  5. sklearn机器学习(六)逻辑回归实例乳腺癌检测
  6. 全国计算机等级考试四级笔试样卷网络工程师
  7. Basics Algorithms| 岭回归(Ridge regression)
  8. Windows 组件服务我的电脑出现红色向下箭头
  9. 数据库修改表名,字段名 字段类型
  10. 在list中插入一个数据