Paper | 深度网络中特征的可迁移性
论文:How transferable are features in deep neural networks?
1. 核心贡献
我们都知道,深度网络中的特征是逐渐特化的。如果我们将一个深度网络中的高层特征,迁移用于另一个任务,那么这个新任务的表现很有可能不理想。
这篇文章讨论的就是深度网络中特征的可迁移性,通过实验有以下3点发现:
- 越高层的特征越难以迁移。
- 迁移后网络的参数联动性被打破,导致了优化困难。
- 迁移往往会带来泛化能力上的飞跃,即使在迁移后仍长时间迭代收敛。
解释一下第二点,可能需要看完实验部分才知道是什么意思。
假设我们的源任务S和目标任务T的网络前n层是一样的。我们想把S前n层迁移。
方法1:前n层参数固定(frozen);方法2:前n层参数只用于初始化但不固定,其参数可以在新任务上继续优化。
方法2看上去会更好。因为方法1打破了T网络的前n层和后几层的参数联动性,优化产生了困难。这就是第三点的由来。
但是要注意,我们之所以迁移,大多情况下是因为T任务的数据量太少,而S任务训练数据充足。如果我们继续优化前n层的特征,很可能会导致过拟合,泛化能力下降。
如果我们需要论证深度网络中特征的可迁移性,或者论证影响可迁移性的因素,那么这篇文章是有借鉴意义的。
2. 实验设置
2.1. 任务设置
一个特征的可迁移性有多强,可以通过迁移实验的好坏来评价。显然,该性质与任务之间的差异有很大关系。
为了减小偶然性,作者从ImageNet中随机选择了1000个类别,再随机分为两组。从两组中随机抽出任务A和任务B,作为迁移源任务和目标任务。
为了探究任务差异与可迁移性的关系,作者还按以下方式分组:前一组全为自然物体,而后一组全为人造物体。
2.2. 网络设置

对任务A和B,都配置一个8层网络。前n层(\(1{\le}n{\le}7\))用来迁移;图中为\(n=3\)。
为了进一步考察可迁移性,作者有以下设置:
BnB网络:B的前n层是从训练好的B网络内迁移得到的,且参数固定;后\((8-n)\)层随机初始化并进一步训练优化。
AnB网络:B的前n层是从训练好的A网络内迁移得到的,且参数固定;后\((8-n)\)层随机初始化并进一步训练优化。
BnB+网络:B的前n层是从训练好的B网络内迁移得到的,参数不固定,可以进一步训练优化。
AnB+网络:B的前n层是从训练好的A网络内迁移得到的,参数不固定,可以进一步训练优化。
目的:
- 探究完全迁移的优势;
- 探究第3层的特征是general的(迁移效果好)还是specific的(迁移效果差)。
- 探究限制可迁移性的因素(第3点发现)。
- 探究固定参数迁移的优势。
具体目的,继续看实验结果。
3. 实验结果

实验中尝试了4种分组,因此有8个数据集和网络参与了测试。上图中8个圈圈就是它们的测试结果,Top-1分类准确率大概是62.5%。
参数的联动性是很重要的。
我们看上图的深蓝色圈圈,代表的是BnB网络的测试结果。当\(n \ge 2\)时,网络的性能比原B网络更差。
换句话说,BP过程由于前n层的固定变得很不正常,因此参数训练得不好。
当然了,如果n较大,那么这个网络需要训练的参数就不多了,因此效果又提升了。如图中\(n = 6,7\)时。
这也是第一篇文献发现了:优化困难最容易在中间层发生,既不是开始也不是最后。BnB+网络的表现和基础网络基本一致,起码不会像BnB一样衰减。
底层特征泛化能力较强。
我们看AnB的表现,当\(n=1,2\)时,网络表现是不错的。虽然参数固定,但特征仍然在B任务上表现出色。
但层数较深时,特征可迁移性就很差了。当然,这与联动性的破坏也有关系(基于BnB的实验)。完全自由迁移的效果真的太棒啦!
看AnB+的表现就知道了。无论从何时开始迁移,效果都比基础网络更好!
并且,即使我们长时间训练,迁移带来的爆炸效果仍然回荡不绝!
Q & A
是因为解决了过拟合吗?不是的,因为B任务的数据集也很大呀!
是因为AnB+的总迭代次数比B更长吗?不是的,因为AnB+和BnB+都是450k+450k次迭代,但AnB+比BnB+效果更好!

任务差异增大,可迁移性变差。
见上图左上小图。上曲线为自然任务预测表现,下曲线为人造任务预测表现。白圈为基准。
我们取个均值,和上面的随机分组的表现相比,见上图下小图。红色曲线始终高于橙色曲线。可见,当刻意分为自然和人造时,任务差异性增强,网络的表现变差。任务差异增大,优化困难会增加。
见上图下小图,比较红色、橙色曲线。都是AnB网络,随着n增加,自然/ 人造分组的表现会降得更厉害,即优化困难增加得更剧烈。
绿色的不看了,那是随机滤波器。作者想说明,即便从差距较大的任务迁移,效果也要比随机滤波器好。现在看来这一点是很显而易见的,因为随机滤波器就是瞎猜嘛。
4. 启发
迁移学习常常用于解决数据量不足、网络易过拟合的问题。
但这篇文章告诉我们,在数据量充足的情况下,如果我们能从相似的任务中获得特征->迁移初始化,那么训练出来的网络总比随机初始化表现更好。
哪怕迁移后我们长时间迭代;无论我们迁移初始化的比例(多少是迁移初始化的)有多高。
当然,在实际应用时,我们更应该考虑数据的清洁、训练的合理性。否则迁移学习的效果是很难看到的。
Paper | 深度网络中特征的可迁移性的更多相关文章
- 深度网络中的Tricks
数据增强(Data augmentation) 预处理(Pre-processing) 初始化(Initializations) 训练中的Tricks 激活函数(Activation function ...
- 深度学习Bible学习笔记:第七章 深度学习中的正则化
一.正则化介绍 问题:为什么要正则化? NFL(没有免费的午餐)定理: 没有一种ML算法总是比别的好 好算法和坏算法的期望值相同,甚至最优算法跟随机猜测一样 前提:所有问题等概率出现且同等重要 实际并 ...
- 深度学习中 batchnorm 层是咋回事?
作者:Double_V_ 来源:CSDN 原文:https://blog.csdn.net/qq_25737169/article/details/79048516 版权声明:本文为博主原创文章,转载 ...
- 深度学习卷积网络中反卷积/转置卷积的理解 transposed conv/deconv
搞明白了卷积网络中所谓deconv到底是个什么东西后,不写下来怕又忘记,根据参考资料,加上我自己的理解,记录在这篇博客里. 先来规范表达 为了方便理解,本文出现的举例情况都是2D矩阵卷积,卷积输入和核 ...
- 卷积网络中的通道(Channel)和特征图
转载自:https://www.jianshu.com/p/bf8749e15566 今天介绍卷积网络中一个很重要的概念,通道(Channel),也有叫特征图(feature map)的. 首先,之前 ...
- 【论文笔记】如何理解深度学习中的End to End
End to end:指的是输入原始数据,输出的是最后结果,应用在特征学习融入算法,无需单独处理. end-to-end(端对端)的方法,一端输入我的原始数据,一端输出我想得到的结果.只关心输入和输出 ...
- Deep Learning 学习随记(五)Deep network 深度网络
这一个多周忙别的事去了,忙完了,接着看讲义~ 这章讲的是深度网络(Deep Network).前面讲了自学习网络,通过稀疏自编码和一个logistic回归或者softmax回归连接,显然是3层的.而这 ...
- Local Binary Convolutional Neural Networks ---卷积深度网络移植到嵌入式设备上?
前言:今天他给大家带来一篇发表在CVPR 2017上的文章. 原文:LBCNN 原文代码:https://github.com/juefeix/lbcnn.torch 本文主要内容:把局部二值与卷积神 ...
- 深度学习中Dropout原理解析
1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...
随机推荐
- Mysql表结构导出excel(含数据类型、字段备注注释)
SELECT "列名", "数据类型", "字段类型", "长度", "是否为空&quo ...
- (十)操作数据库、xlrd、xlwt补充
一.补充操作数据库: 1.建立游标时,指定返回的类型是字典 cur = coon.cursor(cursor=pymysql.cursors.DictCursor) 2.cur.fetchall() ...
- linux下Vim文本编辑器的常用快捷键
Linux插入命令 a 在光标之后插入字符 A 把光标移动到行首尾进入插入模式 i 在光标之前插入字符 I 把光标移动到行首并进入插入模式 o 在光标下插入新行 O 在光标上插入新行 Linux定位 ...
- dev 控件的treelist
最近项目中要求用dev 控件的treelist 树形控件. 如下图 要求如下: 1:选择父节点后,子节点全部打钩: 2:选择子节点而不选择父节点,则从当前节点的父节点一直到根节点check框都是半选状 ...
- python--第二十三天总结(一对多和多对多)
Django 的 ORM 有多种关系:一对一,多对一,多对多. 各自定义的方式为 : 一对一: OneToOneField 多对一: ForeignKey 多 ...
- get() got an unexpected keyword argument
TypeError: get() got an unexpected keyword argument 'news_id'ERROR basehttp 154 "GET /news/3/ H ...
- FPGA驱动步进电机
步进电机 步进电机是将电脉冲信号转变为角位移或线位移的开环控制电机,是现代数字程序控制系统中的主要执行元件,应用极为广泛.在非超载的情况下,电机的转速.停止的位置只取决于脉冲信号的频率和脉冲数,而不受 ...
- “菜”鸟理解.NET Framework(CLI,CLS,CTS,CLR,FCL,BCL)
既然要学.NET,就要先认识认识她,我不喜欢大段大段文字的东西,自己通过理解,画个图,来看看.NET的沉鱼落雁,闭月羞花之容. 最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基 ...
- js动态添加元素绑定事件问题
//开始是直接普通写的绑定click事件 其中li a i 中的i是动态添加的 结果是触发不了..$("li a i").click(function () { $(this).m ...
- js获取地址栏上参数的值
function GetQuerystring(name){ var reg=new RegExp("(^|&)" + name +"=([^&]*)(& ...