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出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...
随机推荐
- 利用PIL创建验证码
1. 随机生成rgb 元组 def random_RGB(min, max): return tuple([random.randint(min, max) for i in range(3)])2. ...
- 基于DPDK的高效包处理系统
一.概念 Intel® DPDK全称Intel Data Plane Development Kit,是intel提供的数据平面开发工具集,为Intel architecture(IA)处理器架构下用 ...
- Java框架spring Boot学习笔记(六):Spring Boot事务管理
SpringBoot和Java框架spring 学习笔记(十九):事务管理(注解管理)所讲的类似,使用@Transactional注解便可以轻松实现事务管理.
- pl/sql报错快速解决方法(新手推荐)
一:简介 今天登录数据库时莫名报了个奇怪的错:ORA-01033: ORACLE initialization or shutdown in progress可能是昨天匆忙电脑没正常关机导致的... ...
- 自己实现ArrayList
思路: 一 载体 ArrayList是一个集合容器,必然要有一个保存数据的载体. public class MyArraylist { private final static int INIT_CO ...
- 在Ubuntu中使用JDB调试代码
在Ubuntu中使用JDB调试代码 了解JDB JDB是JDK安装的一部分,是基于文本和命令行的调试工具,JDB是可以免费获取且平台独立的,缺点是只有命令行格式. JDB基础命令 在方法中设置断点st ...
- html转化为图片下载
业务需求:按照客户要求把排课表转化为图片下载到本地.一个月到排课有很多.所以图片会很大 <!DOCTYPE html> <html lang="en"> & ...
- C++ 深入理解 虚继承、多重继承和直接继承
[摘要] 本文从5段代码实例出发,通过类中类的普通继承,类的虚继承,类的多重继承,多个虚函数类的普通继承.虚继承与多重继承,几个交叉概念,详细的阐释了继承.虚函数与虚继承的基本概念,深入剖析了继承于虚 ...
- 面向对象的 __slots__
优点: 1. __slots__ 能够减小内存的占用,限制对象只能有这几个属性,再加属性会报错 . 副作用: 1. 设置了__slots__之后,实例对象就没有__dict__了 2. __slots ...
- linux内存黑洞
1.问题 k8s集群中node节点的内存使用率居高不下,使用率达到90%多.通过以下命令可以发现此虚拟机分配的内存为15g,但是用户进程使用的内存总共为7个多g,并且slab和pageTables使用 ...