深度学习中的迁移学习介绍

2023-11-04

迁移学习(Transfer Learning)的概念早在20世纪80年代就有相关的研究,这期间的研究有的称为归纳研究(inductive transfer)、知识迁移(knowledge transfer)、终身学习(life-long learning)以及累积学习(incremental learning)等。直到2009年,香港科技大学杨强教授对迁移学习的研究进行了总结和归纳,迁移学习才开始有了较为完善的框架和基本概念。迁移学习的研究范围和研究领域非常广泛。

推荐学习迁移学习一个非常好的资源:https://github.com/jindongwang/transferlearning

迁移学习是指将原来用于解决任务A的网络结构和权值迁移到任务B中,并且在任务B中也能得到较好的结果的一种训练方法。迁移学习之所以能够实现的原理是由于卷积神经网络在浅层学习的特征具有通用性。在样本不足的情况下,可以使用迁移学习,将这些通用特征学习从其他已经训练好的网络中迁移过来,从而节省训练时间,并且得到较好的识别结果。

在迁移学习中,有两个基本的概念:领域(Domain)和任务(Task)

(1).领域:是进行学习的主体。领域主要由两部分构成:数据和生成这些数据的概率分布。特别地,因为涉及到迁移,所以对应于两个基本的领域:源领域(Source Domain)和目标领域(Target Domain)。这两个概念很好理解。源领域就是有知识、有大量数据标注的领域,是我们要迁移的对象;目标领域就是我们最终要赋予知识、赋予标注的对象。知识从源领域传递到目标领域,就完成了迁移。

(2).任务:是学习的目标。任务主要由两部分组成:标签和标签对应的函数。

迁移学习:给定一个有标记的源域和一个无标记的目标域。这两个领域的数据分布不同。迁移学习的目的就是要借助源域的知识,来学习目标域的知识(标签)。或是指基于源域数据和目标域数据、源任务和目标任务之间的相似性,利用在源领域中学习到的知识,去解决目标领域任务的一种机器学习方法。

迁移学习并没有一个统一的分类方法。下图给出了迁移学习的常用分类方法:

迁移学习按学习方法分类,可以分为四个大类:基于样本的迁移学习方法、基于特征的迁移学习方法、基于模型的迁移学习方法、基于关系的迁移学习方法。

(1). 基于样本的迁移:简单来说就是通过权重重用,对源域和目标域的样例进行迁移。是按照源域的样本与目标域样本的相似性,对于相似度高的源域样本赋予较高的权重,并迁移增广到目标域的训练样本集中用于目标模型的训练,样本的迁移方法主要应用于分类问题。

(2).基于特征的迁移:就是更进一步对特征进行变换。意思是说,假设源域和目标域的特征原来不在一个空间,或者说它们在原来那个空间上不相似,那我们就想办法把它们变换到一个空间里面,那这些特征不就相似了?

近年来,基于特征的迁移学习方法大多与神经网络进行结合,在神经网络的训练中进行学习特征和模型的迁移。

(3).基于模型的迁移:就是说构建参数共享的模型。这个主要就是在神经网络里面用的特别多,因为神经网络的结构可以直接进行迁移。比如说神经网络最经典的finetune就是模型参数迁移的很好的体现。

Finetune,也叫微调、finetuning,是深度学习中的一个重要概念。简而言之,finetune就是利用别人已经训练好的网络,针对自己的任务再进行调整。

A.为什么需要已经训练好的网络?在实际的应用中,我们通常不会针对一个新任务,就去从头开始训练一个神经网络。这样的操作显然是非常耗时的。尤其是,我们的训练数据不可能像ImageNet那么大,可以训练出泛化能力足够强的深度神经网络。即使有如此之多的训练数据,我们从头开始训练,其代价也是不可承受的。那么怎么办呢?迁移学习告诉我们,利用之前已经训练好的模型,将它很好地迁移到自己的任务上即可。

B.为什么需要finetune?因为别人训练好的模型,可能并不是完全适用于我们自己的任务。可能别人的训练数据和我们的数据之间不服从同一个分布;可能别人的网络能做比我们的任务更多的事情;可能别人的网络比较复杂,我们的任务比较简单。举一个例子来说,假如我们想训练一个猫狗图像二分类的神经网络,那么很有参考价值的就是在CIFAR-100上训练好的神经网络。但是CIFAR-100100个类别,我们只需要2个类别。此时,就需要针对我们自己的任务,固定原始网络的相关层,修改网络的输出层,以使结果更符合我们的需要。

C. Finetune的优势:不需要针对新任务从头开始训练网络,节省了时间成本;预训练好的模型通常都是在大数据集上进行的,无形中扩充了我们的训练数据,使得模型更鲁棒、泛化能力更好;Finetune实现简单,使得我们只关注自己的任务即可。在实际应用中,通常几乎没有人会针对自己的新任务从头开始训练一个神经网络。Finetune是一个理想的选择。

深度网络的finetune可以帮助我们节省训练时间,提高学习精度。但是finetune有它的先天不足:它无法处理训练数据和测试数据分布不同的情况。而这一现象在实际应用中比比皆是。因为finetune的基本假设也是训练数据和测试数据服从相同的数据分布。这在迁移学习中也是不成立的。因此,我们需要更进一步,针对深度网络开发出更好的方法使之更好地完成迁移学习任务。以数据分布自适应方法为参考,许多深度学习方法都开发出了自适应层(Adaptation Layer)来完成源域和目标域数据的自适应。自适应能够使得源域和目标域的数据分布更加接近,从而使得网络的效果更好。从上述的分析我们可以得出,深度网络的自适应主要完成两部分的工作:一是哪些层可以自适应,这决定了网络的学习程度;二是采用什么样的自适应方法(度量准则),这决定了网络的泛化能力。

设计深度迁移网络的基本准则:决定自适应层,然后在这些层加入自适应度量,最后对网络进行finetune

生成对抗网络GAN(Generative Adversarial Nets)受到自博弈论中的二人零和博弈(two-player game)思想的启发而提出。它一共包括两个部分:一部分为生成网络(Generative Network),此部分负责生成尽可能地以假乱真的样本,这部分被成为生成器(Generator);另一部分为判别网络(Discriminative Network),此部分负责判断样本是真实的,还是由生成器生成的,这部分被成为判别器(Discriminator)。生成器和判别器的互相博弈,就完成了对抗训练。

GAN的目标很明确:生成训练样本。这似乎与迁移学习的大目标有些许出入。然而,由于在迁移学习中,天然地存在一个源领域,一个目标领域,因此,我们可以免去生成样本的过程,而直接将其中一个领域的数据(通常是目标域)当作是生成的样本。此时,生成器的职能发生变化,不再生成新样本,而是扮演了特征提取的功能:不断学习领域数据的特征,使得判别器无法对两个领域进行分辨。这样,原来的生成器也可以称为特征提取器(Feature Extractor)

(4).基于关系的迁移:这个方法用的比较少,这个主要就是说挖掘和利用关系进行类比迁移。比如老师上课、学生听课就可以类比为公司开会的场景。这个就是一种关系的迁移。这种方法比较关注源域和目标域的样本之间的关系。

如果你要做一个计算机视觉的应用,相比于从头训练权重,或者说从随机初始化权重开始,不如你下载别人已训练好的网络结构的权重,你通常能够进展的相当快。用这个作为预训练,然后转换到你感兴趣的任务上。计算机视觉的研究社区,非常喜欢把许多数据集上传到网上,比如ImageNetMS COCO或者Pascal类型的数据集。你可以下载花费了别人几周甚至几个月而做出来的开源的权重参数,把它当作一个很好的初始化用在自己的神经网络上。用迁移学习把公共的数据集的知识迁移到你自己的问题上。如下图,假如说你要建立一个猫的检测器用来检测你自己的宠物猫,TiggerMisty或者Neither,忽略两只猫同时出现在一种图的情况。你现在可能没有TiggerMisty的大量图像,所以你的训练集会很小。此时可以从网上下载一些神经网络的开源实现,不仅把代码下载下来也要把权重(weights)下载下来。有许多训练好的网络你都可以下载,例如ImageNet,它有1000个不同的类别,因此这个网络会有一个Softmax单元,它可以输出1000个可能类别之一。你可以去掉这个Softmax层,创建你自己的Softmax单元用来输出TiggerMistyNeither三个类别。就网络而言,建议你把所有的层都看作是冻结的(frozen)。你冻结的网络中包含所有层的参数,你只需要训练和你的Softmax层有关的参数。这个Softmax层有三个可能的输出。通过使用其他人预训练的权重,你很可能得到很好的性能,即使只有一个小的数据集。幸运的是,大多数深度学习框架都支持这种操作,事实上,取决于用的框架。如果你的数据越多,你可以冻结越少的层,训练越多的层。这个理念就是,如果你有一个更大的训练集,也许有足够多的数据,那么不要单单训练一个Softmax单元,而是考虑训练中等大小的网络,包含你最终要用的网络的后面几层。最后,如果你有大量数据,你应该做的就是用开源的网络和它的权重把整个当作初始化然后训练整个网络。

迁移学习的应用:计算机视觉、图像分类、文本分类、行为识别、自然语言处理、视频监控、舆情分析、人机交互等。

注:以上所有的内容的整理均来自网络,主要参考:http://jd92.wang/assets/files/transfer_learning_tutorial_wjd.pdf

GitHubhttps://github.com/fengbingchun/NN_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习中的迁移学习介绍 的相关文章

  • 深度学习之图像分类(一)--分类模型的混淆矩阵

    深度学习之图像分类 一 分类模型的混淆矩阵 深度学习之图像分类 一 分类模型的混淆矩阵 1 混淆矩阵 1 1 二分类混淆矩阵 1 2 混淆矩阵计算实例 2 混淆矩阵代码 3 混淆矩阵用途 深度学习之图像分类 一 分类模型的混淆矩阵 今天开始
  • 【pytorch】迁移学习

    在很多场合中 没有必要从头开始训练整个卷积网络 随机初始化参数 因为没有足够丰富的数据集 而且训练也是非常耗时 耗资源的过程 通常 采用pretrain a ConvNet的方式 然后用ConvNet作为初始化或特征提取器 有两种迁移学习
  • Could not load dynamic library ‘libcupti.so.10.0‘; dlerror: libcupti.so.10.0...

    环境 Ubuntu 16 04 CUDA 10 0 CUDNN 7 6 5 nvcc NVIDIA R Cuda compiler driver Copyright c 2005 2018 NVIDIA Corporation Built
  • libsvm库简介及使用

    libsvm是基于支持向量机 support vector machine SVM 实现的开源库 由台湾大学林智仁 Chih Jen Lin 教授等开发 它主要用于分类 支持二分类和多分类 和回归 它的License是BSD 3 Claus
  • 基于Lasagne实现限制玻尔兹曼机(RBM)

    RBM理论部分大家看懂这个图片就差不多了 Lasagne写代码首先要确定层与层 RBM 正向反向过程可以分别当作一个层 权值矩阵互为转置即可 代码 coding utf 8 data format is bc01 written by Ph
  • 05 两层神经网络 - 神经网络和深度学习 [Deep Learning Specialization系列]

    本文是Deep Learning Specialization系列课程的第1课 Neural Networks and Deep Learning 中Shallow Neural Network部分的学习笔记 在前面的章节中 我们以逻辑回归
  • 深度学习中的验证集和超参数简介

    大多数机器学习算法都有超参数 可以设置来控制算法行为 超参数的值不是通过学习算法本身学习出来的 尽管我们可以设计一个嵌套的学习过程 一个学习算法为另一个学习算法学出最优超参数 在多项式回归示例中 有一个超参数 多项式的次数 作为容量超参数
  • 词向量的运算与Emoji生成器

    本文参考参考 没有对框架内容进行学习 旨在学习思路和方法 1 词向量运算 之前学习RNN和LSTM的时候 输入的语句都是一个向量 比如恐龙的名字那个例子就是将一个单词中的字母按顺序依次输入 这对于一个单词的预测是可行的 但是对于想让机器学习
  • 16个车辆信息检测数据集收集汇总(简介及链接)

    16个车辆信息检测数据集收集汇总 简介及链接 目录 1 UA DETRAC 2 BDD100K 自动驾驶数据集 3 综合汽车 CompCars 数据集 4 Stanford Cars Dataset 5 OpenData V11 0 车辆重
  • 程序记录(一)VGG16猫狗分类

    import torch from torchvision import datasets models transforms import os from torch utils data import DataLoader from t
  • SqueezeNet运用到Faster RCNN进行目标检测+OHEM

    目录 目录 一SqueezeNet介绍 MOTIVATION FIRE MODULE ARCHITECTURE EVALUATION 二SqueezeNet与Faster RCNN结合 三SqueezeNetFaster RCNNOHEM
  • 谈一谈关于NLP的落地场景和商业价值

    欢迎大家关注微信公众号 baihuaML 白话机器学习 在这里 我们一起分享AI的故事 您可以在后台留言 关于机器学习 深度学习的问题 我们会选择其中的优质问题进行回答 本期的问题 你好 请问下nlp在现在的市场主要应用在哪些方面 什么是N
  • 深度学习中的优化算法之RMSProp

    之前在https blog csdn net fengbingchun article details 124766283 中介绍过深度学习中的优化算法AdaGrad 这里介绍下深度学习的另一种优化算法RMSProp RMSProp全称为R
  • 【小白学习PyTorch教程】十三、迁移学习:微调Alexnet实现ant和bee图像分类

    Author Runsen 上次微调了VGG19 这次微调Alexnet实现ant和bee图像分类 多年来 CNN许多变体已经发展起来 从而产生了几种 CNN 架构 其中最常见的是 LeNet 5 1998 AlexNet 2012 ZFN
  • - UnitBox An Advanced Object Detection Network,arxiv 16.08

    UnitBox An Advanced Object Detection Network arxiv 16 08 download 该论文提出了一种新的loss function IoU loss 这点比较有意思 也容易复现 论文分析了fa
  • cifar数据集介绍及到图像转换的实现

    CIFAR是一个用于普通物体识别的数据集 CIFAR数据集分为两种 CIFAR 10和CIFAR 100 The CIFAR 10 and CIFAR 100 are labeled subsets of the 80 million ti
  • [Python人工智能] 三十三.Bert模型 (2)keras-bert库构建Bert模型实现文本分类

    从本专栏开始 作者正式研究Python深度学习 神经网络及人工智能相关知识 前一篇文章开启了新的内容 Bert 首先介绍Keras bert库安装及基础用法 这将为后续文本分类 命名实体识别提供帮助 这篇文章将通过keras bert库构建
  • 深度学习中的优化算法之AdaGrad

    之前在https blog csdn net fengbingchun article details 123955067 介绍过SGD Mini Batch Gradient Descent MBGD 有时提到SGD的时候 其实指的是MB
  • 基于矩阵求解多元线性回归

    多元线性回归法也是深度学习的内容之一 用java实现一下多元线性回归 一元线性回归的公式为 y a x b 多元线性回归的公式与一元线性回归的公式类似 不过是矩阵的形式 可以表示为Y AX b 其中 Y是样本输出的合集 X是样本输入的合集
  • Anchor是什么?

    1 选择性搜索 Selective Search 先介绍一下传统的人脸识别算法 是怎么检测出图片中的人脸的 以下图为例 如果我们要检测图中小女孩的人脸位置 一个比较简单暴力的方法就是滑窗 我们使用不同大小 不同长宽比的候选框在整幅图像上进行

随机推荐