迁移学习--深度迁移学习
文章:How transferable are features in deep neural networks
代码部分:http://yosinski.com/transfer
1. 背景与简介
这篇文章挺有意思的,我们知道在做深度网络的时候,一开始网络学的是general的特征,之后才越来越细化,越来越specific。那么到底怎么衡量一层是general和specific的呢?这种转变到底是突然在某一层发生的,还是慢慢渐变式地发生的呢?这种转变是在哪个部分发生的,开始、中间、还是最后一层?研究这些问题,是因为这些问题对研究迁移效果很有帮助,因为我们进行迁移,本质就是要找出source和domain里的共同点,所以要在general层面上进行迁移。因此,找出哪一层是general的,哪一层是specific的,也就显得至关重要了。
一般的迁移学习是这样的:训练好一个网络(我们称它为base network)→把它的前n层复制到target network的前n层→target network剩下的其他层随机初始化→开始训练target task。其中,在做backpropogate(反向传播)的时候,有两种方法可以选择:(1)把迁移过来的这前n层frozen(冻结)起来,即在训练target task的时候,不改变这n层的值;(2)不冻结这前n层,而是会不断调整它们的值,称为fine-tune(微调)。这个主要取决于target数据集的大小和前n层的参数个数,如果target数据集很小,而参数个数很多,为了防止overfitting(过拟合),通常采用frozen方法;反之,采用fine-tune。
而这篇文章通过实验设计,分析了深度网络里不同层在不同设置下的迁移效果,比较了在相似的数据集之间和不同的数据集之间迁移的效果,另外发现了用迁移特征初始化比随机初始化更好。
2. 主要贡献
2.1. 定义了深度网络里面的层到底什么时候是general的,什么时候是specific的。
A和B:两个task,可以分割为两个相似的数据集(random A/B splits)和不相似的数据集(man-made and natural)
设定:ImageNet分类类别为1000个,可以分割为两个分别有500个类别的数据集,也可以分割为分别有645000个样本的数据集。
层数总共为8层,为了更好地举例子,我们对上面所说的“前n层”里面的n取n=3,把这个第n层称为example layer。但是n=3只是这里为了更直观地举例子,之后实验中我们仍然用未知数n来标记,即BnB、AnB等。
base A:A上训练的神经网络
base B:B上训练的神经网络
selffer B3B:前3层从base B里面的前3层得到,且前3层是frozen的;后5层随机初始化,并在B上进行训练。这个网络有啥用呢?它可以作为之后要提到的迁移网络的对照组;
transfer A3B:前3层从base A里面的前3层得到,且前3层是frozen的;后5层随机初始化,且在B上进行训练。重点来了,如果A3B和baseB的效果差不多,说明第3层对B来说仍然是general的;如果差多了,那第3层就是specific to A的,不适合迁移到B;
selffer B3B+:和B3B一样,只不过它不用frozen前3层,而是会学习所有层数,即它是fine tune的;
transfer A3B+:和A3B一样,只不过它不用frozen前3层,而是会学习所有层数,即它是fine tune的。
用一张图来展示:
2.2. 比较了深度网络里不同层次迁移效果,展示了不使用fine-tune时,迁移效果下降的原因可能有两个:
一是特征本身specificity的问题,就比如现在已经到了网络稍深一点的层次了,网络学的已经是specific的特征,这时候去迁移效果会不好。解决方法就是选出general的层,进行迁移;
二是把一个特征之间是co-adapted(耦合)的网络分割了的问题。这一个我的理解可能是和frozen相关,就是本来网络里的特征是耦合的、紧密联系的,但是因为我们把前n层frozen了,相当于把网络割成了两部分,这样可能会导致效果不好。解决方法就是fine tune。
2.3. 展示了相似数据集之间的迁移效果优于不同数据集之间的迁移效果。
2.4. 展示了训练网络时,使用迁移的weights(权重)去初始化的效果会比随机初始化的效果要好,无论是在相似的数据集上迁移还是在不相似的数据集上迁移。
作者之所以想到这个的初衷是因为曾经有文章提出随机的convolutional filters(卷积过滤器)、rectification(修正)、pooling(池化)、local normalization(局部正则化)训练的效果和学习后的这些参数训练的效果差不多,但是它是在很小的数据集上进行的,在很大的数据集上会怎样呢?
2.5. 无论使用多少层的迁移特征对网络进行初始化,在fine tune之后效果都会变得很好。
3. 实验
3.1. 展示贡献2.1、2.2、2.5的实验:这个实验是用两个相似的数据集(random A/B splits)训练的。实验分别在baseB、BnB、BnB+、AnB、AnB+上进行。(同理也可以换成baseA、AnA、AnA+、BnA、BnA+)
直接上图可以看结论:
可以看到这么几个结论:
(1)baseB(白色)完全没有copy任何网络的前n层,所以n=0。训练结果大概为0.625,这个作为一个基准。
(2)BnB(深蓝色)在前两层还好好的,也就是当frozen第一层然后训练剩下层数时,以及frozen前两层然后训练剩下层数时,都表现不错;但是n取3,4,5,6的时候就不同了,效果下降,尤其是4和5层下降尤为厉害;然后第6层已经接近回到baseB的水平了,最后慢慢回归到正常水平。
文章推测,这是因为在连续layer之间,feature是co-adapted的(即紧密联系的),而frozen使得这种co-adaptation没办法被学习。一开始,梯度下降还是可以找到比较好的解的,但是后来越来越多层无法被一起训练的时候,就没办法找到很好的解了;而后来为啥又好了呢?可能是因为对于梯度下降来说,relearn一两层很容易就能找到一个好的解,也就是说,6、7层的特征之间和7、8层的特征之间的co-adaptation比较低,因此效果又提升了。
(3)BnB+(浅蓝色)一直都和base case的效果差不多,说明fine-tuning可以改善BnB中效果下降的情况;
(4)AnB(深红色)在前两层效果都很不错,说明前两层特征都是general的;但是在第三层的时候效果开始变差,4-7层的时候变得尤其差。正如在2.1中提到的,这时候BnB就起到对照作用了。回顾一下,2.2提到效果下降有两个原因,一个是feature的specific问题,一个是co-adpated丢失的问题。可以看到在第3、4、5层时,BnB的效果也是下降的,所以这里主要是co-adaptation的问题;而在第6和7层时,BnB的效果已经恢复了,所以已经没有co-adapted丢失的问题,因此这时候主要就是feature的specific导致的了。【此处展示了2.1和2.2】
此外,这里也展示了在某一个层上迁移比在所有层(n=8时)上直接训练的效果要好,所以这里的贡献有:一是从每一层的层面上量化了什么时候迁移效果会最好;二是展示了迁移效果变差的两个原因(即feature的specific问题和co-adapted问题)轮流主导了迁移效果的变差。
(5)AnB+(浅红色)展示了fine tune的惊人效果,fine tune之后的迁移效果甚至比直接在target数据集上训练的效果要好,哪怕是在大的数据集上。而且同样的训练时间下BnB+无法呈现这么好的效果。此外,可以看到无论n取值多少,AnB+的效果都是差不多的,所以迁移多少层似乎对效果也没什么影响,下表也展示了这一点。【此处展示了2.5】
3.2. 展示贡献2.3的实验:其实就是在不相似的数据集(man-made and natural)上做实验,然后把它和前一个实验的效果对比。
由于数据集A和B发生了改变,首先要先看看baseA和baseB的效果,它的效果和前一个实验中的baseA和baseB的效果是差不多的,这样在后续展示迁移效果下降的时候才有说服力(不然别人会challenge说有可能是数据集本身就导致了效果变差,而不是迁移效果变差)。
下图中上面那条是baseB(白色点)和AnB(橙色点)的效果,下面是baseA(白色点)和BnA(橙色点)的效果,可以看到随着n变大,它们效果的下滑都要比上述实验中的要厉害,展示了在不相似的数据集之间迁移效果会比相似数据集之间迁移效果要差。
至于这两条线的差别,文章指出可能只是因为A和B数据集包含类别个数不同的原因,不是关注重点。
3.3. 展示贡献2.4的实验:通过对比随机初始化weight的实验结果和用迁移过来的weight初始化的实验结果得出结论。
作者分别在相似数据集(random A/B splits)和不相似数据集(man-made and natural)上进行AnB的实验,并在相似数据集(random A/B splits)上实验,并且都减掉了base level performance,这样它们在n=0的时候都是0,方便比较。
可以看到:(1)不相似数据集之间迁移的效果确实比相似数据集之间迁移效果下降得快,再次佐证了2.3;(2)即使是用不相似数据集上迁移的参数进行训练,也比随机初始化参数训练的效果要好。
前面提到,作者想到这个是因为曾经有文章提出随机的参数训练的效果和学习后的这些参数训练的效果差不多,为什么这里展示的却是迁移参数训练效果会更好呢?作者分析说,可能就是因为那篇文章里用的数据太少,导致学习后的参数训练时过拟合了,作者在附录中有对这一点进行了实验,不过不是重点,所以就不赘述了。
迁移学习--深度迁移学习相关推荐
- 长文回顾NIPS大会最精彩一日:AlphaZero遭受质疑;NIPS史上第一场正式辩论和LeCun的激情抗辩/据理力争;元学习深度强化学习亮点复盘。
机器之心原创 机器之心海外部 作者:Tony Peng.Alex Chen.Qintong Wu.之乎 美国时间周四,NIPS大会走完了日程的一半.工业界的众多公司搬东西撤出了展览会场,受邀演讲也全部 ...
- 2019年伯克利大学 CS294-112《深度强化学习》第1讲:课程介绍和概览(笔记)
这里是CS294-112深度强化学习课程,我的名字叫Sergey Levine是这门课的授课老师,材料会放在课程主页:http://rail.eecs.berkeley.edu/deeprlcours ...
- 多Agent 深度强化学习综述
多Agent 深度强化学习综述 人工智能技术与咨询 来源:<自动化学报>,作者梁星星等 摘 要 近年来,深度强化学习(Deep reinforcement learning,DRL) 在诸 ...
- 强化学习(八) - 深度Q学习(Deep Q-learning, DQL,DQN)原理及相关实例
深度Q学习原理及相关实例 8. 深度Q学习 8.1 经验回放 8.2 目标网络 8.3 相关算法 8.4 训练算法 8.5 深度Q学习实例 8.5.1 主程序 程序注释 8.5.2 DQN模型构建程序 ...
- 写的书太受欢迎怎么办?北大《深度强化学习》重磅开放下载
来源:机器之心 由于太受欢迎,这本书先后出版了英文.中文简体和中文繁体三个版本.其覆盖内容的范围之广令帝国理工学院教授.香港浸会大学副校长郭毅可印象深刻.如今,这本书的中文简体版正式开放下载. 得益于 ...
- 深度强化学习_深度学习理论与应用第8课 | 深度强化学习
本文是博雅大数据学院"深度学习理论与应用课程"第八章的内容整理.我们将部分课程视频.课件和讲授稿进行发布.在线学习完整内容请登录www.cookdata.cn 深度强化学习是一种将 ...
- 用深度强化学习玩atari游戏_(一)深度强化学习·入门从游戏开始
1.在开始正式进入学习之前,有几个概念需要澄清,这样有利于我们对后续的学习有一个大致的框架感 监督型学习与无监督型学习 深度强化学习的范畴 监督型学习是基于已有的带有分类标签的数据集合,来拟合神经网络 ...
- dpg learning 和q_深度学习和强化学习之间的差别有多大?
我是做深度强化学习的(Deep Reinforcement Learning)的,这个问题有趣.我对@张馨宇他在此问题下的简洁回答非常认同:"可以用深度学习这个工具来做强化学习这个任务,也可 ...
- 深度增强学习:走向通用人工智能之路
深度增强学习:走向通用人工智能之路 本文是系列文章中的第一篇,是对深度增强学习/深度强化学习的基本介绍以及对实现通用人工智能的探讨. 现在但凡写人工智能的文章,必提Alpha Go.也正是因为Alph ...
最新文章
- 2018-3-23Markov 链(笔记一)定义
- python中figsize什么意思_matplotlib 设置图形大小时 figsize 与 dpi 的关系
- 并发的发展历史-真空管和穿孔打卡
- 开关造成的毛刺_LED射灯开关关了为什么还会闪
- 培养用户习惯才是软件的唯一出路!
- php3.2接口分页,thinkphp3.2.3分页完整实例
- 为什么网卡名称从eth0变成了enp*s*
- tkmybatis更新无效
- Watir vs Selenium
- 安装关系型数据库MySQL 安装大数据处理框架Hadoop
- 好用的3D建模软件,就是不用?
- 【通信仿真】Aloha协议仿真含Matlab源码
- 【CF335 E】Counting Skyscrapers
- spritekit 动画_使用SpriteKit在Swift中创建动画
- pcb元器件焊接技巧
- Linux文件I/O实验报告
- 好看的个人网站源码_新手想建个人网站,都要注意哪些关于自助建站源码的坑?...
- dell10代cpu装linux,戴尔10代cpu装win7系统及bios设置|戴尔十代cpu台式机装win7
- 数字金额转换大写 先写个完整的然后将如零拾替换成零
- 日语基础语法(完整篇)