Higher Order Recurrent Neural Networks
添加链接描述
上篇的TTRNN那篇文章中,对RNN的结构描述非常抽象,不是很明白,找到了与之相关的HORNN这篇文章,继续研究一下。
之前看的TTRNN这种方法,就是提出了一种高阶的马尔科夫RNN以解决长时间依赖问题。其实这种方法就是借鉴于HORNN这篇文章,HORNN这篇文章2016就在arxiv上了,但是至今都没发出去。
与TTRNN那篇文章一样,将正常的RNN模型看作是一种一阶模型。
而与之相对应的则是高阶RNN模型,这篇文章给出的定义感觉更加清晰一些。HORNN的作者提出,其实这种高阶模型只是在原始的RNN模型中增加了几个记忆单元(h),并且在反馈计算的时候,分别以不同的权重反馈。
其大致的模型如上所示。左边的为正常的RNN单元,右边的则是三阶RNN单元。可以看到,一阶的话只需要更新一个权重矩阵,而三阶RNN则需要更新三个权重矩阵。
如果将这种循环的3阶RNN单元形式展开,其实是如上的形式。其实就是在每次RNN输出的时候,将该时刻的隐藏态记录下来,用于之后RNN单元的计算。在每次计算RNN单元的时候,要往里面输入前3个隐藏态的数据,然后进行前馈计算,然后在每次更新的时候,要更新3倍的参数量。
但是作者认为,这样的做法有点杂乱,会影响最后的效果。正常来说,ht-3受到来自ht-1和ht-2的影响应该比来自ht的影响要大,为了体现这一点,于是作者加入了pooling操作。作者列举了三种pooling。
MAX-BASED POOLING:
FOFE-BASED POOLING:
这种pooling方式,就是认为给定一个alpha,根据时间上的远近,施加一个指数,保证近的隐藏态有更大的值。
GATED HORNNS:
最为合理的就是第三种pooling。第三种pooling借鉴了soft-attention的思路,也是让网络自动更新,而不是人为地设定,如下所示。其实也就是根据每次的权重矩阵,以及x和h计算一次得分函数,最后每个权重矩阵乘以这个得分函数即可。所以其实这个HORNN在思路上整体是与attention类似的。一般的attention是在RNN单元计算完隐藏态后进行得分函数的计算,而这个HORNN是在RNN单元内部计算得分函数,具体的实现可能有一些差别。