前言
LSTM模型是基于RNN循环网络提出的一种改进的门控网络
通过各个门很好地控制了时间步前后的信息
他一共有四个门,分别是遗忘门,输入门,候选记忆细胞,输出门
他能较好地建模长语义,缓解梯度消失的问题
问题提出
可以看到我们的输入x和隐藏状态H是相互独立的,理论上来说,当前输入应该是和前一时间步的隐藏状态有关,但是LSTM中只是将这两个进行运算,获得各个门的输出。
因此有研究者提出在进入各个门之前,输入和隐藏状态需要做一定的交互运算,而事实证明,这个简单的小改动,大大提升了LSTM的性能
这篇工作也被整理发布,叫Mogrifier LSTM
有兴趣的朋友可以去读一读
https://arxiv.org/pdf/1909.01792.pdf
整体结构
作者的这一思想朴素简单,就是在进入门之前对输入和隐藏状态做一定的张量运算
他定义了一个迭代轮数i,当i为奇数的时候执行第一个公式的运算,当i为偶数的时候执行第二个公式的运算。迭代完成后,就进入到传统的LSTM运算当中
这个迭代轮数在实验中是作为一个超参数,研究者可以根据任务不同自行调节
我这里也简单地画了一个图
代码实现
作者将这个工作整理成了一个jupyter notebook发布在了github上
https://github.com/RMichaelSwan/MogrifierLSTM/blob/master/MogrifierLSTM.ipynb
下面是我对代码做的一些注释
"""
https://github.com/RMichaelSwan/Mogrifier