目标:

怎么训练很深的神经网络
然而过深的神经网络会造成各种问题,梯度消失之类的,导致很难训练
作者利用了类似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. java struts2入门学习--基于xml文件的声明式验证

    一.知识点总结 后台验证有两种实现方式: 1 手工验证顺序:validateXxx(针对Action中某个业务方法验证)--> validate(针对Action中所有的业务方法验证) 2 声明 ...

  2. 【LeetCode】216. Combination Sum III

    Combination Sum III Find all possible combinations of k numbers that add up to a number n, given tha ...

  3. 联想Thinkpad笔记本自带win10改win7图文教程

    一.准备工作: 1.备份转移硬盘所有文件 2.改装win7将删除所有分区,要恢复预装的win10系统需到售后 3.4G空间以上U盘,制作U盘PE启动盘 4.操作系统:联想Lenovo笔记本专用GHOS ...

  4. 获取android手机基本信息

    /** * 获取android当前可用内存大小 */ private String getAvailMemory() {// 获取android当前可用内存大小 ActivityManager am  ...

  5. Pusher 消息推送测试工具

    1.Pusher 简介 Pusher 是一款为 iOS.Mac App 提供推送测试的小工具. 其它下载地址 Pusher v0.7.3 for Mac,密码:p19i. 2.使用方法 使用方法简介 ...

  6. Linux日期时间显示输出

    1.输出当前年月日 echo $(date +%F) 2014-02-21 2.输出当前时间(时分) echo $(date +%R) 12:45 3.输出当前时间(时分秒) echo $(date ...

  7. 常用代码之四:创建jason,jason转换为字符串,字符串转换回jason,c#反序列化jason字符串的几个代码片段

    1.创建jason,并JSON.stringify()将之转换为字符串. 直接使用var customer={}, 然后直接customer.属性就可以直接赋值了. 也可以var customer = ...

  8. C#基础第九天-作业-储蓄账户(SavingAccount)和信用账户(CreditAccount)

    要求1:完成以下两种账户类型的编码.银行的客户分为两大类:储蓄账户(SavingAccount)和信用账户(CreditAccount),两种的账户类型的区别在于:储蓄账户不允许透支,而信用账户可以透 ...

  9. xp中使用grubdos安装ubuntu13.04

    http://www.cnblogs.com/ggjucheng/archive/2012/08/18/2645916.html 根据以上帖子安装ubuntu13.04 当重启,进入ubuntu in ...

  10. php分享十九:网络带宽预估

    网络带宽是指在一个固定的时间内(1秒),能通过的最大位数据.就好象高速公路的车道一样,带宽越大,好比车道越多. 数字信息流的基本单位是bit(比特),时间的基本单位是s(秒),因此bit/s(比特/秒 ...