目标:
怎么训练很深的神经网络
然而过深的神经网络会造成各种问题,梯度消失之类的,导致很难训练
作者利用了类似LSTM的方法,通过增加gate来控制transform前和transform后的数据的比例,称为 Highway network
至于为什么会有效...大概和LSTM会有效的原因一样吧。
方法:
首先是普通的神经网络,每一层H从输入x映射到输出y,H通常包含一个仿射变换和一个非线性变换,如下
在这个基础上,highway network添加了两个gate
1)T:trasform gate
2)C:carry gate
添加后的层输出如下:
对应的导数为
那么还剩下一个问题,这个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相关参数的激活
第二列和第三列表示transform gate的输出,某种意义上说更明显,多数项的gate是close的,仅仅把输入直接传递给输出,只有少数项是激活的。
最后一列是输出,可以看出,输入和输出并没有改变太多,同一block上基本同正负。
从上面的结果看,其实这更像是skip connection,输入的结果并不会影响每一层,而是在直接传递n层后给了后面的某一层,这有点像高速公路,多数车在一个车道行驶,偶尔变道。
那么这种“变道”是固定的吗?答案是不对,数据还是会选择合适地方进行变道,如下图所示
答案:要看问题
对于MNIST,由于问题比较简单,因此就算是移除60%的层,依然可以有让人满意的结果
但是对于复杂的问题,比如CIFAR,随便删除一些层会导致结果大幅度下降,这也就说明深层数对于复杂问题而言更重要(废话
总结:
这篇与其说是怎么构造更深的神经网络,不如说是如何帮网络中的信息做路由,不同的信息应该在不同的层得到激活,而不是都在同一层。
而和一般的skip-connection不同,这种跨层的关系不是固定的,是通过学习得到的,所以对问题的适应性应该会更强。