【深度学习系列】迁移学习Transfer Learning
在前面的文章中,我们通常是拿到一个任务,譬如图像分类、识别等,搜集好数据后就开始直接用模型进行训练,但是现实情况中,由于设备的局限性、时间的紧迫性等导致我们无法从头开始训练,迭代一两百万次来收敛模型,所以这个时候迁移学习就派上用场了。
什么是迁移学习?
为什么需要迁移学习?
- 满足深度学习训练数据量的数据太少。对于一个机器学习的任务,譬如分类,如果数据量过小,我们是否一定要上深度学习呢?其实不必然。如果在实际的生产过程中,能够用规则就能得到好的效果的就用规则,能够用简单的模型就用简单的模型,我们常听到的“奥卡姆剃刀”其实就是这个意思,减少模型的复杂度,能够从某种程度上避免过拟合的情况。那么对于小量数据集,没有必要一定需要用深度学习的方法来做。同样,如果要对一个新任务分类,或者识别,搜集不了大量的正负样本,怎么训练呢?
新数据集相比于原数据集更小但内容很不相同。由于数据较小,只训练一个线性分类器可能更好。因为数据集不同,从网络顶部就开始训练分类器可能不是最好的选择,这包含更多的数据集特定特征。另外,从网络前部的激活函数开始训练分类器可能更好一点。
新数据集相比于原数据集较大,但内容非常不同。由于数据集很大,我们可能会期望从头开始训练一个 DCNN。然而,在实践中从一个预训练模型开始初始化权重仍然是一种有益的方法。在这种情况下,我们会有足够的数据和信心对整个网络进行微调。
如何做迁移学习?
在实践中,我们通常不会完全从头开始随机初始化训练 DCNN,这是因为有能满足深度网络需求的足够大小的数据集相当的少见。作为代替,常见的是在一个大型数据集上预训练一个 DCNN,然后使用这一训练的 DCNN 的权重作为初始设置或作为相关任务的固定的特征提取器。 举个例子,我们知道Imagnet是目前最大的图像识别数据库,目前已经有很多基于imagenet数据训练的网络模型,如inceptionv3、v4等,假如现在给你一个任务,希望你能做一个车系识别,你有两个选择:
一是搜集大量的车系数据,对这些车系数据进行模型训练;
二是基于imagenet训练好的网络模型,然后把搜集好的车系数据加到基于之前训练好的模型继续训练,进行fine-tuning。
传统的做法都是第一种,但是这就会遇到一个问题,一是车系的图片够不够多,体量够不够大?如果数据量不够,最后训练的效果会不会很不好?其实我们可以通过 把ImageNet 或其他大型数据集学习到的网络特征运用于一个图片分类或其他基于图片特征的任务,这就是迁移学习的思想。其实可以这样理解,如果从零开始训练,那么初始化权重一般情况下要么是都为0,要么随机设置,当我们导入了在大规模数据集上训练好的模型后,相当于在以这个模型现有的参数作为初始化的权重,不过至于在具体的任务上的泛化能力如何,还是得看具体的场景。
迁移学习的限制
上文提到我们在迁移学习中会使用预训练的网络,所以我们在模型架构方面受到了一点点限制。比如说,我们不能随意移除预训练网络中的卷积层。但由于参数共享的关系,我们可以很轻松地在不同空间尺寸的图像上运行一个预训练网络。这在卷积层和池化层和情况下是显而易见的,因为它们的前向函数(forward function)独立于输入内容的空间尺寸。在全连接层(FC)的情形中,这仍然成立,因为全连接层可被转化成一个卷积层。
迁移学习的相关资料
对迁移学习感兴趣的同学,可以关注这个github repo:transferlearning,以及王晋东写的系列文章:
《小王爱迁移》系列之六:学习迁移(Learning To Transfer)
《小王爱迁移》系列之七:负迁移(Negative Transfer)
《小王爱迁移》系列之九:开放集迁移学习(Open Set Domain Adaptation)
《小王爱迁移》系列之十:张量迁移学习(tensor unsupervised domain adaptation)
《小王爱迁移》系列之十一:选择性对抗迁移学习(Selective Adversarial Network)
《小王爱迁移》系列之十二:新年新气象-重新整理的迁移学习资源仓库
【深度学习系列】迁移学习Transfer Learning的更多相关文章
- 基于深度学习和迁移学习的识花实践——利用 VGG16 的深度网络结构中的五轮卷积网络层和池化层,对每张图片得到一个 4096 维的特征向量,然后我们直接用这个特征向量替代原来的图片,再加若干层全连接的神经网络,对花朵数据集进行训练(属于模型迁移)
基于深度学习和迁移学习的识花实践(转) 深度学习是人工智能领域近年来最火热的话题之一,但是对于个人来说,以往想要玩转深度学习除了要具备高超的编程技巧,还需要有海量的数据和强劲的硬件.不过 Tens ...
- AI小白必读:深度学习、迁移学习、强化学习别再傻傻分不清
摘要:诸多关于人工智能的流行词汇萦绕在我们耳边,比如深度学习 (Deep Learning).强化学习 (Reinforcement Learning).迁移学习 (Transfer Learning ...
- keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)
引自:http://blog.csdn.net/sinat_26917383/article/details/72982230 之前在博客<keras系列︱图像多分类训练与利用bottlenec ...
- 读论文系列:Deep transfer learning person re-identification
读论文系列:Deep transfer learning person re-identification arxiv 2016 by Mengyue Geng, Yaowei Wang, Tao X ...
- DNN结构构建:NAS网络结构搜索和强化学习、迁移学习
前言 谷歌推出的NASNet架构,用于大规模图像分类和识别.NASNet架构特点是由两个AutoML设计的Layer组成--Normal Layer and Reduction Layer,这样的效果 ...
- java8 学习系列--NIO学习笔记
近期有点时间,决定学习下java8相关的内容: 当然了不止java8中新增的功能点,整个JDK都需要自己研究的,不过这是个漫长的过程吧,以自己的惰性来看: 不过开发中不是有时候讲究模块化开发么,那么我 ...
- 迁移学习( Transfer Learning )
在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型:然后利用这个学习到的模型来对测试文档进行分类与预测.然而,我们看到机器学习算法在当前的Web挖掘研究中存在着一个关 ...
- 【迁移学习】2010-A Survey on Transfer Learning
资源:http://www.cse.ust.hk/TL/ 简介: 一个例子: 关于照片的情感分析. 源:比如你之前已经搜集了大量N种类型物品的图片进行了大量的人工标记(label),耗费了巨大的人力物 ...
- 迁移学习(Transfer Learning)(转载)
原文地址:http://blog.csdn.net/miscclp/article/details/6339456 在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型 ...
- 迁移学习-Transfer Learning
迁移学习两种类型: ConvNet as fixed feature extractor:利用在大数据集(如ImageNet)上预训练过的ConvNet(如AlexNet,VGGNet),移除最后几层 ...
随机推荐
- Effective Java 第三版——18. 组合优于继承
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- TCP网络编程-----客户端请求连接服务器、向服务器发数据、从服务器接收数据、关闭连接
SOCKET m_sockClient; unsigned short portNum; ------------------------------------------------------- ...
- JMeter插件之 BlazeMeter's XMPP----测试Openfire等
JMeter也可以测试XMPP协议了,之前一直使用Tsung或者是直接写java代码结合Java request来进行,现在可以用BlazeMeter提供的插件来进行XMPP测试,无需过多编码. 首先 ...
- Redis in Docker on Linux Container
记录:在Docker中运行一个Redis实例当我们在Windows系统中安装好Docker以后,在Hyper-V中会自动创建一个Linux虚拟机,如果这个虚拟机没有运行,说明当前运行的是Windows ...
- python 虚拟环境--virtualenv
virtualenv 是一个创建隔绝的Python环境的工具.virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包. 安装方式一: pip install v ...
- Django-- 多数据库联用
django项目中使用多个数据库的方法, 多个数据库的联用 以及多数据库时数据导入导出的方法. 直接给出一种简单的方法吧,想了解更多的到官方教程,点击此处 给每个app都可以单独的设置一个数据库 se ...
- QA: 自闭合标签要不要手动闭合?
起 自闭合标签末尾要不要加 /,这个问题一直 "困扰" 着我.但是抱着无所谓的态度,一直没有仔细去看下. 以 img 标签为例,一般有以下三种写法: <img src=&qu ...
- 【Docker】安装Docker及基本使用
该文以CentOS系统为例,介绍Docker安装及基本使用.为了简化安装流程,Docker 官方提供了一套安装脚本,CentOS 系统上可以使用这套脚本安装: curl -sSL https://ge ...
- HDU5131-Song Jiang's rank list HDU5135-Little Zu Chongzhi's Triangles(大佬写的)
Song Jiang's rank list Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 512000/512000 K (Java ...
- POJ_1064 二分搜索
/*POJ 1064 *题目大意:有N条绳子,他们的长度分别为Li,如果从他们中切割K条长度相同的绳子的话,这K条绳子每条最长能有多长?答案保留到小数点后2位 *算法分析:这个问题用二分搜索可以非常容 ...