时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity

1. 写在前面

今天整理的这篇文章是2019年CVPR上的一篇paper, 依然来自于清华的团队,也是时空序列预测的一篇文章, 这篇文章依然是从一个新的视角–非平稳性的角度去看待到时空序列的预测学习, 前面提到的时空序列预测模型ConvLSTM、PredRNN、PredRNN++等虽然对时空序列有着比较大的建模能力, 但是捕捉时间序列的非平稳性的特征效果不是很好, 没有充分发掘出时间序列的非平稳特征, 问题出在了LSTM的忘记门上, 所以这篇文章为了能够更好的利用时间序列的非平稳性特征, 关键就是改进了这个忘记门的结构, 把这个forget gate换成了两个级联的LSTM, 分别叫做MIM-M和MIM-S分别对非平稳特征和平稳特征进行建模,使得对时空序列的特征学习更加的powerful, 而这里的灵感来源就是传统时间序列模型中把不平稳序列变成平稳序列的方式—差分。所以这篇文章提出的Memory in Memory的神经网络结构更加的强大。

亮点如下

  • 提出了一种新的循环神经网络Memory In Memory来实现时空背景下的非稳态建模, 将高阶非稳态表述为与像素强度统计变化趋势相关的高阶多项式, 然后把非稳态多项式的阶数通过几个差分运算来降低。
  • 利用时间序列分析的不断差分可以使得时间序列变平稳的思想:逐层堆叠具有差分输入的MIM。MIM块是为了模拟复杂的变化而衍生出来的,它使用两个级联递归模块来处理时空动态中的非稳态和近似稳态成分。
  • MIM结构中针对LSTM的forget门进行了改进, 把传统的forget门换成了两个级联的LSTM结构, 使得网络有了捕捉时空序列中非平稳特征的能力。

论文下载地址:https://arxiv.org/abs/1811.07490v2

时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity

大纲如下:

  • PART ONE: Abstract
  • PART TWO: Intorduction
  • PART THREE: Model
  • PART FOUR: Experiments
  • PART FIVE: Conclusions

Ok, let’s go!

2. Abstract

我们知道, 时间序列中,有一个很重要的特性就是平稳性, 平稳的时间序列能够更好的通过模型去预测, But, 文章中一开始就提到自然时空过程在许多方面都可能是高度非稳态的,例如低层次的非稳态,如局部像素值的空间相关性或时间依赖性;以及高层次的变化,如降水预报中雷达回波的积累、变形或消散。 所以这时候再用模型去预测的时候就会比较困难, 而这篇文章提出了一种Memory in Memory的网络结构, 正是为了解决非平稳时间序列的建模问题

这个结构的灵感来自于克拉默分解, 即
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
任何一个非平稳过程都可以分解为:确定项+时间变量多项式+零均值随机项

而通过差分的操作,我们可以把时间变量多项式转换成一个常量,使确定性的组成部分可预测。 之前的那些模型呢? 像LSTM, ConvLSTM, PredRNN, PredRNN++等, 它们的记忆转换方式比较简单(这个和LSTM的forget门有关), 所以不能很好的利用差分信息, 也不能很好的对非平稳时间序列进行有效建模。 而Memory in Memory(MIM)网络结构中, 把LSTM中的forget门换成了两个LSTM级联的方式, 既能够模拟时空序列中的平稳特性也能够捕捉非平稳特性, 并且在动态手写数字识别, 交通检测, 人体行为识别, 降雨量任务上都取得了好的效果。

所以这篇文章的核心就是Memory in Memory的结构, 究竟是如何改进的, 又如何能够捕捉非平稳和平稳特征的?带着这两个问题我们具体看看吧 ????

3. Introduction

这一部分, 首先, 我们得理解一下非平稳到底是一个怎么样的事情, 作者在这里举了一个降雨量预测的例子:在进行降水预报时,应仔细考虑不断变化的雷达图上复杂多样的局部趋势, 但由于空间和时间上复杂的非稳态性,这个问题非常困难。

时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
目前的一些模型处理这种非平稳只是通过CNN的循环或者RNN的简单记忆转换, 但这显然是没法很好的建模这些非稳态的特性。

然后作者分析了一下原因, 发现了LSTM的记忆转换太简单了, 导致了没法捕捉到这些非平稳特性,

时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
问题出在了这个forget Gates, 这个东西在很多时候都是饱和状态, 这里的饱和状态, 其实是我这里没大弄明白的一个问题, 我不明白这个饱和状态到底是forget gates是0还是1, 查阅资料大部分说是1, 而通过这里的描述, 感觉也像是1, 因为如果我们拿LSTM的记忆更新公式来看的话, 如果ft=1, 这时候意味着记忆状态几乎不会随着当前的输入信息被更新, 而是一直记住前面的一种平稳状态。
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
也正好符合论文后面的解释, 按照这个说法这时候可能会出现一个什么问题呢? 如果是一个平稳的时间序列的话, 这个不会有什么太大的影响, 但是一旦在平稳序列遇到点非平稳的部分, 这时候的记忆状态可能也不会被更新, 基于记住前面的平稳部分, 毕竟大部分都是平稳, 出现一点小不平稳的话可能认为是异常, 这可能导致了非平稳性捕捉不好

But, 如果看了论文后面, 作者在第一个实验后面做了一个饱和检测,这里又产生了迷惑, 感觉说的前后有点矛盾:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
根据这一段的描述会发现, 貌似饱和又在说forget gates 等于0, 那如果是等于0了, 根据那个更新公式, 那不始终在更新记忆吗? 哪来的“implying almost time-invariant memory state transitions”? 所以我这里其实有点懵, 感觉前后有点矛盾。 但是如果从非平稳序列的角度来看的话, 其实说的好像也合理, 就是如果序列本身是非平稳序列的话, 就像作者说的, 这时候如果换做是普通的像PredRNN, LSTM这种网络, 面对非平稳的序列, 为了捕捉到当前时刻或者短期的剧烈变化, 肯定是把forget门弄到0上, 然后不断的刷新当前的记忆, 这时候带来的问题就是没法记住长期的非平稳状态, 毕竟总是在刷新, 记忆不断的被覆盖掉。所以从这个角度来看的话, 这个地方等于0其实也说的通了。

所以这个地方我是怎么理解的, 当然可能理解有错误, 但是不管矛盾不矛盾, 不可否认的就是传统的LSTM这种的记忆转移机制对于存在非平稳的时间序列建模存在问题, 至少遇到非平稳序列的时候, 没法灵活的记忆平稳特性和非平稳特性。 那么有没有一种结构能够自适应性的既可以捕捉平稳特性, 也可以捕捉非平稳特性呢?

哈哈, 这就是Memory in Memory了。 这个东西把LSTM的遗忘门机制换掉了, 而是采用了两个级联的LSTM的方式, 后面我们会看到具体的结构, 这两个级联的结构既可以捕捉平稳性, 也可以学习非平稳性, 其中一个结构叫做MIM-N负责学习非平稳, 非平稳性的学习它是采用了差分的方式把时间序列变得平稳, 如果差分一下还不平稳, 就多差分几次, 这就是最终那个堆叠的MIM了, 当然这是后话。 总之通过不停的差分, 就可以把时间序列的非平稳特性里面的平稳部分学习到, 而另一个MIM-S负责学习平稳部分, 通过这两个哥们的配合, 竟然可以使得非平稳建模变得可能, 而思想来源也非常的简单, 就是传统时间序列建模的差分。 就是ARIMA里面的那种思想:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
所以新的idea, 新的创新有时候不是那么难get, 老方法用到新模型, 可能就会带来新的突破, 关键是有没有去留意, 去想这些东西,哈哈。反正我是没想到。

但是还要注意, 差分虽然可以把非平稳序列变得平稳, 但是会损失信息, 就像原数据是8, 5, 通过差分是3, 原数据是10, 7, 差分之后也是3一样, 差分都是3, 但是原数据不同, 所以差分会损失一部分信息, 所以这也是为什么作者只把差分用到了遗忘门, 而不是全部门的原因:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
后面就是相关工作了, 时空序列这块相关工作, 从2015年的ConvLSTM到2017的PredRNN, 2018年的PredRNN++, 还有v*n等,这些模型都是对时空数据建模, 但是存在的问题就是非平稳时序建模问题, 因为他们面临的任务, 降雨量预测, 交通预测, 人体行为预测等基本上非平稳居多。作者在这里还举了一个很形象的例子:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
平稳性和非平稳性同在, 如何更好的对这两块进行建模呢? 这是该文章研究的关键。下面就看具体的方法了, 主角登场:

3. Model

为了更好的建模平稳和非平稳, 作者首先改进了原来LSTM的单元结构, 基于之前的ST-LSTM block, 把里面的forget去掉, 换成了两个级联LSTM, 得到了新的MIM block, 然后又把MIM block 进行层层堆叠, 得到了最终的神经网络。 我们下面分开来看他们的工作原理:

3.1 Memory In Memory Blocks

首先作者说当把时间序列的平稳特性和非平稳特性同时建模的时候, 序列预测才会变得更加有效。 而PredRNN的问题出在了简单的记忆转换机制, 所以这里作者把里面的forget门换掉:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
改变的地方可以看下面这个图:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity

这里的改进就是把ST-LSTM的forget结构换成了两个LSTM级联的方式, 第一个LSTM, 用于捕捉上一时间步上一层的隐态到本时间步上一层隐态的非平稳变化, 学习一个差分特征, 所以它接收的输入是上一层上一时间步的H和上一层当前时间步的H, 然后计算它俩的差值,这个LSTM叫做non-stationary module(MIM-N),它基于差分平稳的假设学习差分特征, 即非平稳性特征。 这里的公式是这样的:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
这个其实就是个LSTM, 只不过输入变成了差分的形式, 而N在这里依然是一个记忆单元的作用存在, 保留着非平稳特征的记忆。这哥俩的工作原理如下:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity

另一个LSTM, 把前面的非平稳特征和前一时间步的记忆单元作为输入, 来学习平稳的时间序列变化, 所以这个叫做stationary module(MIM-S), 公式如下:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
这个也是一个LSTM, 所以公式看起来也比较简单明了, 之类的S依然是类似一个记忆单元的方式存在, 是平稳特征和非平稳特征的一个综合记忆状态。

通过这两个级联的LSTM块, 既可以学习非平稳特征, 也可以学习平稳特征了。 并且由于这两个都是LSTM, 可以达到自适应学习的效果。就像文章提到的:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
所以最终, MIM块的更新公式如下:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
这个做出的改进主要是时间维度的记忆流传递过程, 把记忆的更新过程变得复杂全面了一些, 对比PredRNN的更新公式, 其实就改了上面的一部分, 可以和PredRNN的公式进行对比一下:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
只是上面的那一部分, 把原来的forget门替换成了MIM-N和MIM-S的级联装置, 这样可以同时捕捉平稳和非平稳特征。 这就是MIM block的原理了。

3.2 Memory in Memory Networks

我们知道, 如果一个非平稳序列想变成平稳, 那么就可以通过差分的方式, 那么一次差分如果依然非平稳, 就可以差分两次, 通过这个思路, 如果是一个高阶非平稳序列, 就可以通过差分多次变成平稳,
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity

所以这里进行了MIM Blocks的堆叠来捕捉高阶非平稳性的特征。最终的网络结构是这样的:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
这个结构其实如果知道了PredRNN的话, 理解起来并不难, 基本还是那个架构, 只不过加了差分输入, 因为差分的输入为左下方的hidden state,所以这种结构不能存在于第一层,即第一层还是利用ST-LSTM。公式如下:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
这个就不多解释了吧, 看上面图就差不多能看明白。 这里还需要注意一点:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
这里说了一下, 为啥是需要上一时间步上一层的H和上一层当前时间步的H做差分。

4. Experiments

实验部分这里就不详细说了, 因为这些实验设置和之前一样, 前面已经有两篇文章在讲这些实验了, 这里大体上放一下结果, 这次实验用的数据集是4个, 手写数字识别, 交通预测, 人体行为识别, 降水预测。首先是实验的超参设置:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity

4.1 Moving MNIST

移动的是手写数字识别, 设置部分可以参考PredRNN部分, 这里我们看一下结果:

时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
最后的两个要好, MIM是基于ST-LSTM进行的改进, 而MIM*是基于Casual LSTM进行的改进, 关于这两个细节, 可以参考PredRNN和PredRNN++。

然后是验证了MIM-N和MIM-S的作用, 我们这里应该学习人家的这种实验设计思想, 先总体和其他模型对比, 然后再各自分析是不是都起作用:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
这里对比了一下单独的MIM-N, 单独的MIM-S和MIM三者, 发现When MIM-N and MIM-S are interlinked, the entire MIM model achieves the best performance

下面是MIM层数的实验, 这里得到的结论是3层的MIM堆积比较好。因为我们前面分析过, 过分的差分会丢失太多的信息, 所以这里需要有一个权衡。
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
第四个就是遗忘门的饱和实验, 这个由于在前面分析过了, 这里就不再赘述。

4.2 TaxiBJ Traffic Flow

这里直接看一下结果吧:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity

4.3 Radar Echo

这里同样的看一下效果:
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity

4.4 Human3.6 M

时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity

5. 结论

对于时空序列预测任务, 对于非平稳数据的建模也是非常重要的, 所以这篇paper主要就是对于如何有效的捕捉平稳和非平稳特性进行的研究。 我们用那种总结的套路来总结一下:

  • 论文解决什么问题? 时空序列数据的非平稳建模
  • 论文采用了什么方法? 提出了MIM网络, 改进了原时空模型的内部结构, 把forget门替换成了两个LSTM级联的方式, 既可以学习到时空序列的短期的非平稳特征也可以学习长期的平稳特性, 为了更好的捕捉到高阶非平稳性, 把多个MIM进行了层级堆叠。
    时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
  • 达到了一个什么效果? MIM网络在手写数字预测, 降雨量预测, 交通预测和人体行为预测的时空序列任务中与其他网络相比, 达到了更好的效果。

哈哈 是不是呢?
时空序列预测之Memory In Memory: A Predictive Neural Network for Learning Higher-OrderNon-Stationarity
这篇文章可以学习的地方:

  1. idea的寻找方面, 有时候传统的模型里面的一些思想迁移到现代的模型里面,有可能就会实现很大的突破, 所以一定要细心观察, 放低姿态, 千万不要对传统的模型有一种不屑的态度, 以为都什么年代了, 太老的东西没有用的, 但是一些思想仍然需要我们学习。 只要不知道, 就是我们需要学习的知识, 知识没有高低贵贱之分, 不要带着有色眼镜去看待知识。
  2. 差分的思想值得学习借鉴, 差分可以让非平稳序列变得平稳, 这样可以更好的对非平稳序列建模
  3. 提出的这个网络结构也可以考虑迁移到别的任务中去。
  4. 论文的构思技巧值得学习, 不管是论文的整体架构,还是数据结果的呈现部分, 尤其是数据结果的呈现和实验部分, 我们既然提出了一个结构, 改进了一些地方, 就应该做一些对比的实验来论证我们的观点, 这样才能使论文更加的饱满。

现在才发现人家顶会论文要说页数的话并不是太多, 但是读完之后感觉醍醐灌顶, 豁然开朗, 感觉做了大量的工作和实验, 所以需要学习人家的写作技巧和思路啊。

参考

论文源代码: https://github.com/Yunbo426/MIM

最近有个想法, 就是在GitHub上建立了一个仓库, 记录自己读过的一些papers, 主要包括推荐系统, NLP, 时空序列预测, 海表温预测, 深度学习, 机器学习等方向, 对于精读论文, 会写相关的论文笔记和代码复现, 而通读的论文会总结一些思想,把所有论文放在一块便于统一管理和查看。对于比较好的论文, 还会单独总结成博客,仓库和博客进行关联, 双剑合璧。 如果有感兴趣的, 欢迎查看一下, 等我把论文整理到一定数量了, 也欢迎star一下哈哈 ????,

由于目前还是论文小白, 刚起步, 目前没有几篇, 但是这个仓库后面就会频繁更新了。相信我, 没错的 ????
筋斗云https://github.com/zhongqiangwu960812/ReadPapaers