目标:

怎么训练很深的神经网络
然而过深的神经网络会造成各种问题,梯度消失之类的,导致很难训练
作者利用了类似LSTM的方法,通过增加gate来控制transform前和transform后的数据的比例,称为Highway network
至于为什么会有效...大概和LSTM会有效的原因一样吧。

方法:

首先是普通的神经网络,每一层H从输入x映射到输出y,H通常包含一个仿射变换和一个非线性变换,如下

在这个基础上,highway network添加了两个gate
1)T:trasform gate
2)C:carry gate
添加后的层输出如下:

可以看出T和C控制就是x和H之间的比例,为了简化,设C=1-T
 

显然,y的值:
 

对应的导数为
 

那么还剩下一个问题,这个transform gate的形式是什么,作者使用的是类似LSTM中的仿射变换+sigmoid的方法:

其中b的值会被初始化为负值(-1~-3),这样的话初始状态carry gate的值会更大,也就是说输出y会更偏向x。
 
另外,由于这里要求每一层的输入x与输出y有相同的大小,所以在每一层之间可能存在一个映射层,把上一层映射到下一层的输入大小。

实验:

所有实验使用带动量的SGD,学习率随指数衰减,每一层的H由仿射和RELU组成,文中提供了源码:
http://people.idsia.ch/~rupesh/very_deep_learning/
 
首先是网络层数的实验
 

highway指的是本文方法,plain指的是普通的神经网络,可以看出,对于深层的神经网络,highway的结果要好得多。这也就说明添加transform gate的方法是有效的。
 
另外还有一些关于准确率/层数/参数数量相关的实验:

分析:
 
首先看看各个gate相关参数的激活

上图中的第一列表示gate的bias项,CIFAR数据集中,bias随着层数不断增减,这也就说明前几层受原始输入影响比较大,而后几层则受激活函数H影响更大。
第二列和第三列表示transform gate的输出,某种意义上说更明显,多数项的gate是close的,仅仅把输入直接传递给输出,只有少数项是激活的。
最后一列是输出,可以看出,输入和输出并没有改变太多,同一block上基本同正负。
 
从上面的结果看,其实这更像是skip connection,输入的结果并不会影响每一层,而是在直接传递n层后给了后面的某一层,这有点像高速公路,多数车在一个车道行驶,偶尔变道。
 
那么这种“变道”是固定的吗?答案是不对,数据还是会选择合适地方进行变道,如下图所示

另一个问题,既然真正激活的内容那么少,是不是意味着许多层并没有提供贡献?
答案:要看问题
对于MNIST,由于问题比较简单,因此就算是移除60%的层,依然可以有让人满意的结果
但是对于复杂的问题,比如CIFAR,随便删除一些层会导致结果大幅度下降,这也就说明深层数对于复杂问题而言更重要(废话
 
总结:
这篇与其说是怎么构造更深的神经网络,不如说是如何帮网络中的信息做路由,不同的信息应该在不同的层得到激活,而不是都在同一层。
而和一般的skip-connection不同,这种跨层的关系不是固定的,是通过学习得到的,所以对问题的适应性应该会更强。

【论文笔记】Training Very Deep Networks - Highway Networks的更多相关文章

  1. 论文笔记(1):Deep Learning.

    论文笔记1:Deep Learning         2015年,深度学习三位大牛(Yann LeCun,Yoshua Bengio & Geoffrey Hinton),合作在Nature ...

  2. 论文笔记: Dual Deep Network for Visual Tracking

    论文笔记: Dual Deep Network for Visual Tracking  2017-10-17 21:57:08  先来看文章的流程吧 ... 可以看到,作者所总结的三个点在于: 1. ...

  3. 论文笔记之:Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks

    Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks NIPS 2015  摘要:本文提出一种 ...

  4. 论文笔记:Deeper and Wider Siamese Networks for Real-Time Visual Tracking

    Deeper and Wider Siamese Networks for Real-Time Visual TrackingUpdated on 2019-04-01 16:10:37 Paper ...

  5. 论文笔记:Semantic Segmentation using Adversarial Networks

    Semantic Segmentation using Adversarial Networks 2018-04-27 09:36:48 Abstract: 对于产生式图像建模来说,对抗训练已经取得了 ...

  6. 论文笔记:Siamese Cascaded Region Proposal Networks for Real-Time Visual Tracking

    Siamese Cascaded Region Proposal Networks for Real-Time Visual Tracking 2019-03-20 16:45:23 Paper:ht ...

  7. 论文笔记:Learning regression and verification networks for long-term visual tracking

    Learning regression and verification networks for long-term visual tracking 2019-02-18 22:12:25 Pape ...

  8. 【论文笔记】Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition

    Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition 2018-01-28  15:4 ...

  9. 论文笔记:Visualizing and Understanding Convolutional Networks

    2014 ECCV 纽约大学 Matthew D. Zeiler, Rob Fergus 简单介绍(What) 提出了一种可视化的技巧,能够看到CNN中间层的特征功能和分类操作. 通过对这些可视化信息 ...

随机推荐

  1. SQLServer复制表

    把a的表结构复制到a1表,1=2不复制数据,如果要复制数据,就不要whereselect * into a1 from a where 1=2注意:这种方式不能复制主键.索引等信息如果要全部复制,只能 ...

  2. hdu3966(树链剖分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意:一颗树上,每个点有权值,定义三种操作: 1)I操作表示从a到b节点之间的节点都加上一个值 ...

  3. JavaScript中国象棋程序(1) - 界面设计

    "JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第1节. 这一系列共有9个部分: 0.JavaScript中国象 ...

  4. 【Python中if __name__ == '__main__': 的解析】

    在很多Python代码中,在代码的最下方会看到  if __name__ == '__main__':,这段代码到底有什么用呢? 在理解这个语句的作用前,需要知道的是,一般的Python文件后缀为.p ...

  5. Servlet第六篇【Session介绍、API、生命周期、应用】

    什么是Session Session 是另一种记录浏览器状态的机制.不同的是Cookie保存在浏览器中,Session保存在服务器中.用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录 ...

  6. 你能选择出,前几个元素吗?使用纯css

    面试被问到 ,你能选择出前几个元素吗?括弧只能使用css 我当时是一脸懵逼... 回去的路上思考一路 终于想到了解决办法 虽然为时已晚 但是觉得很有意义... 首先要用到 否定选择器 : :not() ...

  7. OpenGL Windows 窗口程序环境搭建

    OpenGL环境搭建步骤: Downloading OpenGL 根据官网的说法: In all three major desktop platforms (Linux, macOS, and Wi ...

  8. C#面向对象 类的继承

    1.类的访问权限: public:跨程序集,命名空间,必须被using引用: internal:默认当前命名空间: 2.类成员的访问权限: private:私有的,只能当前类: protecte:受保 ...

  9. Java:类的构造函数

    类的构造函数   类的构造函数特点: 1. 构造函数也称为构造方法,构造函数名和类名相同.     2. 构造函数不能有返回值,也不能用void声明. 3. 构造函数可以有参数,也可以无参数,在一个类 ...

  10. SGU 120 Archipelago (简单几何)

    120. Archipelago time limit per test: 0.25 sec.  memory limit per test: 4096 KB Archipelago Ber-Isla ...