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

article/2025/10/13 0:43:53

迁移学习(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

GitHub:https://github.com/fengbingchun/NN_Test


http://chatgpt.dhexx.cn/article/plRLIeum.shtml

相关文章

迁移学习综述

这是我根据北京邮电大学一位博士的讲解视频所归纳的笔记 视频地址:https://www.bilibili.com/video/BV1ct41167kV?spm_id_from333.337.search-card.all.click 正文 我们为什么需要迁移学习? 众所周知,AlphaGo是通过强化学习去训练&#x…

整理学习之深度迁移学习

迁移学习(Transfer Learning)通俗来讲就是学会举一反三的能力,通过运用已有的知识来学习新的知识,其核心是找到已有知识和新知识之间的相似性,通过这种相似性的迁移达到迁移学习的目的。世间万事万物皆有共性&#xff…

迁移学习简要

什么是迁移学习 迁移学习是一种机器学习方法,就是把任务为A的开发模型作为其的初始点,重新使用在任务为B的开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务。虽然大多数机器学习的新 算法都是为了解决单个任务而设计的…

迁移学习(Transfer),面试看这些就够了!(附代码)

1. 什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都…

迁移学习

简介 好的机器学习模型需要大量数据和许多GPU或TPU进行训练。大多数时候,他们只能执行特定的任务。 大学和大公司有时会发布他们的模型。但很可能你希望开发一个机器学习应用程序,但没有适合你的任务的可用模型。 但别担心,你不必收集大量数据…

迁移学习(Transfer)

1. 什么是迁移学习 迁移学习(Transfer Learning)是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都…

2021-11-29 拿到第一个badger

Coursera课程的前三节 What is data science Tool of data science Methodology of data science 感觉更像是阅读理解 今天拿到了第一个badger 准备花一周把剩下俩阅读理解拿了,开始搞实战部分 我走得很慢,但是从来不停下

Postgersql神器之pgbadger安装配置

文章目录 1.介绍2.安装pgbager3.参数调整3.1相关参数内容3.2 重启db4.配置apache5.安装libtext-csv-perl,6.手动产生报告 7.排程自动产生分析报告7.2脚本授权:7.3设定crontab7.4检视pgbadger日志分析报告 1.介绍 pgbadger是postgresql 三大神器之一:pg_…

BoltDB,RocksDB,PebbleDB,BadgerDb简介及测评

几个常用数据库性能分析 ​ 最近公司需要选型一款单机KV数据库来做业务承载,所以我对比了目前市面上比较流行的几个KV数据库并记录下来,包括boltdb,rocksdb,pebbledb,badgerdb四款,我将简单分析一下各数据库的特点,最后用自己的简…

智能优化算法-蜜獾算法Honey Badger Algorithm(附Matlab代码)

引言 提出了一种新的元启发式优化算法——蜜獾算法(Honey Badger Algorithm,HBA)。该算法受蜜獾智能觅食行为的启发,从数学上发展出一种求解优化问题的高效搜索策略。蜜獾挖掘和采蜜的动态搜索行为。于2021年发表在Mathematics and Computers in Simula…

惠普ipaq蓝牙键盘配对码_将旧的Compaq Ipaq从Ubuntu 5.10 Breezy Badger升级到8.10 Intrepid Ibex...

惠普ipaq蓝牙键盘配对码 Ive got an old Compaq Ipaq that I gave my then 10 year old niece to play with. I put Ubuntu 5.10 "Breezy Badger" on it. Fast forward to today, and she wants it refreshed. It hasnt been on the Internet for 3 years so it does…

BadgerDB 原理及分布式数据库的中应用与优化

Part 1 - BadgerDB 设计架构 Badger[1] 是基于论文:WiscKey: Separating Keys from Values inSSD-conscious Storage[2] 的思想利用 Go 语言进行设计实现的。 LSM-Tree 的优势在于将随机写转换为顺序写,将大块的内存连续地写入到磁盘,减少磁…

vue手风琴组件_Vue 2的Badger手风琴组件

vue手风琴组件 Vue-Badger手风琴 (vue-badger-accordion) Badger-Accordion Component for Vue 2.0. Vue 2.0的Badge-Accordion组件。 An accessible light weight, vanilla JavaScript accordion. 轻巧的香草JavaScript手风琴。 View demo 查看演示 Download Source 下载源 …

防追踪创安全网络环境 EFF推Beta版“Privacy Badger”扩展

自棱镜监控丑闻曝光之后在线安全和个人隐私成为网络上热门的话题,为此电子前沿基金会(EFF)今天推出了beta测试版本“Privacy Badger”扩展程序,为Chrome和Firefox浏览器用户打造安全的在线网络环境,阻挡一系列目前网络…

小米手机应用ICON角标Badger显示

项目有个新需求,像iOS一样给应用加个未读消息数量的角标,网上查了下这个开源框架还是不少的,这里介绍一个比较好用的,git地址:https://github.com/leolin310148/ShortcutBadger,集成和实现比较容易&#xf…

Honey Badger BFT共识协议详解

阅读建议 Honey Badger BFT应用了很多前人的研究,进行了巧妙的构造和优化,初次学习往往难以理解。在阅读时可以先大致了解各个构造块的基本作用,再了解总体的共识过程。之后回过头来深入研究各个构造块的原理,特别是BA算法&#…

badger和rocksDB性能对比

结论: 从最后一个表格来看,ssd只对batch_read和batch-write操作有优势,而且在多协程的情况下,这个优势也丢失了。从第二和第三个表格来看,badger的write操作比rocksDB慢了一个数量级,而batch_write操作badg…

Honey Badger BFT(异步共识算法)笔记

最近一直在看Honey Badger BFT共识协议,看了很多博客和一些相关的论文,但是发现有些博客存在着部分理解错误的地方,或者就是直接翻译2016年的那一篇论文,在经过半个多月的细读之后,打算整理出这篇博客,方便…

Badger、Leveldb

BadgerDB v2 介绍 2017年发行 来自DGraph实验室 开源 纯go语言编写 https://github.com/dgraph-io/badger https://godoc.org/github.com/dgraph-io/badger 内存模式 (所有数据存在内存,可能丢失数据)SSD优化键值分离 Key(00000*.sst) Valu…

badger 一个高性能的LSM K/V store

大家好,给大家介绍一下, 新晋的高性能的 K/V数据库: badger。 这是 dgraph.io开发的一款基于 log structured merge (LSM) tree 的 key-value 本地数据库, 使用 Go 开发。 事实上,市面上已经有一些知名的基于LSM tree的k/v数据库…