HighwayNetwork主要解决的问题是,网络深度加深,梯度信息回流受阻造成网络训练困难的问题。先看下面的一张对比图片,分别是没有highway和有highway的。
可以看到当网络加深,训练的误差反而上升了,而加入了highway之后,这个问题得到了缓解。
HighwayNetwork和gridLSTM二者的差别就在于,在前馈【Feedforwardnetwork】中只有一个input,而LSTM中每一层都要把这一个时刻的x也作为输入。所以很自然的一个想法,在LSTM中有一个forgetgate决定要记住以前多久的信息,那么在前馈网络中也可以引入一个gate来决定有哪些之前的信息干脆就不要了,又或者有哪些以前的信息直接在后面拿来用。
那最简单LSTM变种是GRU,所以highway network借鉴了GRU的方法,把resetgate拿掉,再把每个阶段的x拿掉。
在这里,我们做的改变就是:①每一步中的inputxt是没有的;②每一步中的inputyt是没有的;③改一下变量符号,RecurentNetwork我们都用h表示神经网络的输出;但是feedfowardnetwork我们用network表示④at-1是第t-1层的输出⑤没有resetgate,原因:
当然感觉也可以将ResNet看做是竖起来的LSTM。那ResNet里面的变换可以是很多层的,所以在现在的实现中,很常见的一个情况是将这个东西叫做一个residualblock。
这种highway network好处就是,你可自动控制要用多少个layer。如下图,红色的手写数字代表这个network用了多少层:
所以利用highwaynetwork有一个非常明显的好处就是可以避免前馈网络太深的时候会导致梯度消失的问题。另外有一个好处就是通过highwaynetwork可以让网络自己去学习到底哪个layer是有用的。
那既然可以将深度的记忆传递下去,那么这样的操作也可以用到LSTM里面,也就是gridLSTM。一般的LSTM是通过forgetgate将时间方向上的信息传递下去的,但是并没有将layer之间的信息传递下去。因此gridLSTM就是加一个参数纵向传递,从而将layer的信息传递下去,直观上来说,就是在y后面再拼一个vector,然后这个vector的作用跟c一样。具体的可以看一下DeepMind的这篇论文,GridLSTM。粗略来说,结构上像这样:
怎么把这些gridLSTM的block连接起来呢?要在横纵两个方向都弄一下: