(一)简述---承接上文---基于pytorch实现highway networks之train deep networks
上文已经介绍过highway netwotrks提出的目的就是解决深层神经网络训练困难的问题,以及简单的解释了为什么深层神经网络会出现梯度消失和梯度爆炸的问题,这里详细的介绍一些highway networks以及使用pytorch实现highway networks。
(二)highway networks
什么是highway networks?
highway netowrks是允许信息高速无阻碍的通过各层,它是从long short term memory(lstm) recurrent networks中的gate机制受到启发,可以让信息无阻碍的通过许多层,达到训练深层神经网络的效果,使深层神经网络不在仅仅具有浅层神经网络的效果。
notation
(.)操作代表的是矩阵按位相乘
sigmoid函数:sigmoid= 1/(1 e^(-x) )
highway networks formula
普通的神经网络由l层组成,用h将输入的x转换成y,忽略bias。h是非线性激活函数,但是,通常呀可以采用其他的形式,像convolutional和recuerrent。
对于highway networks,增加了两个非线性转换层,t(transform gate) 和 c(carry gate),t表示输入信息被转换的部分,c表示的是原始信息x保留的部分 ,其中 t=sigmoid(wx b)
为了计算方便,这里定义了 c = 1 - t
需要注意的是x, y, h, t的维度必须一致,几个公式相比,公式3要比公式1灵活的多,可以考虑一下特殊的情况,t= 0的时候,y = x,原始信息全部保留,t = 1的时候,y = h,原始信息全部转换,不在保留原始信息,仅仅相当于一个普通的神经网络。
搭建highway networks策略
上文已经说过,x,y,h,t的维度必须是一致的,这里提供了两种策略:
采用sub-sampling或者zero-padding(下采样或者是补零的操作)。
使用普通的线性层改变维度,不使用highway。
个人实验结果
在相同的参数情况下测试了不同深度的神经网络对于情感分析5分类任务的准确率,从图中可以看出浅层神经网络对比变化不是很明显,5层的话就有了一些变化,准确率相差了一个点左右。由于硬件资源,更加深的深层神经网络还没有测试。
paper 实验结果
从论文的实验结果来看,当深层神经网络的层数能够达到50层甚至100层的时候,loss也能够下降的很快,犹如几层的神经网络一样,与普通的深层神经网络形成了鲜明的对比。
demo
在pytorch上实现了多个highway networks,其中包括单纯的highway networks,以及convolution highway networks、lstm highway networks以及highway networks的一些变种。
highway networks implement in pytorch
references
highway networks(paper)
training very deep networks
training very deep networks--highway networks
very deep learning with highway networks
hightway networks学习笔记
notation
欢迎转载、转载请注明出处。http://www.cnblogs.com/bamtercelboo/p/7581364.html