【时空序列预测第四篇】PredRNN++: Towards A Resolution of the Deep-in-Time Dilemma in Spatiotemporal Predictive

风格不统一 提交于 2020-02-06 20:15:33

前言

保持住节奏,每周起码一篇paper reading,要时刻了解研究的前沿,是一个不管是工程岗位还是研究岗位AIer必备的工作,共勉!
准备再写几篇这种非常细致的文章之后,接下来写作主要集中在模型的结构,创新点,解决的问题,以及比较巧妙的操作,代码实战,以及我个人感觉需要写下来,并且有意思的东西。

一、Address

这是ICML2018年的一篇paper,来自于清华的团队
PredRNN++: Towards A Resolution of the Deep-in-Time Dilemma in Spatiotemporal Predictive

http://proceedings.mlr.press/v80/wang18b/wang18b.pdf
在这里插入图片描述

二、Introduction

2.1 创新思路

在这里插入图片描述
文中abstract中先指出本文作者的创新之一在于把双memory用级联的方式链接构建新的LSTM结构(Causal LSTM),并且全篇文章围绕deeper in time来说明,这里deeper in time在读完全篇之后理解为就是网络cell的堆叠和时间步的结构。

在这里插入图片描述
这里还提出了用一个gradient highway units work去解决存在的梯度消失问题,并且此结构和Causal LSTM无缝连接。
句子后面之所以会强调自适应的获取短时和长时的信息依赖,主要是因为对于一般RNN来讲长时更可能出现梯度消失的问题

2.2 存在问题

在这里插入图片描述
这里举出的两个特别的情况说的算是比较清晰。

  1. 突发情况造成的异常预测,这时所取决的依赖应该是短时的而不是长时的。
  2. 在场景中的目标很混乱的移动,主要指的还是互相覆盖等情况,有的时候会出现预测目标扰乱甚至错误预测,这就需要对目标的内容有一个很好的提取,需要很长时间的一个训练和依赖,所以长时间的依赖也是需要考虑的。

在这里插入图片描述
这里也把predrnn拿出来说了一下,这个模型用了两个memory结构,一个是原始的temporal memory,一个是新构建的spatialtemporal memory。
但是这种复杂的结构依旧受梯度消失难题的困扰,通过时间的反向传播,梯度的幅度呈指数衰减,其实就是对于长时的依赖和训练容易造成梯度消失的问题,这个也是RNN中比较常见的一个问题。

在这里插入图片描述
作者的key insight是做一个在每个时间步和每一层之间有一个可适应的连接,这个可以连接可以同时服务于长时和短时的路线。

在这里插入图片描述
这里也做了个总结,对于时空序列问题来讲,模型主要分为以RNN为主,和以CNN为主,也举出了两者的分别的问题。

  1. 长时间的动作中,CNN-based 方法的主要集中在空间表现信息而不是时间上的一致性
  2. RNN-based 方法主要有梯度消失的问题。

2.3 Revisiting Deep-in-Time Architectures

在这里插入图片描述
这是文章对比的三种结构。
对于(a)
在这里插入图片描述
在这里插入图片描述
这句话的意思就是在step to step这个过程中,也就是时间步的过程中就是普通的每层相连,不会有额外的建模能力。
对于(b)
在这里插入图片描述
增加了step to step传播的深度,因为其中的每个时间步的传播是从第L层传播到第1层,这个应该就是文章所谓的深度。
在这里插入图片描述
这里给了一个定义蛮有意思的,说这样的结构传播能够学习到短时的一些复杂的非线性变化。
但是依然存在梯度消失的问题。
对于(c)就是上次所讲的PredRNN结构了
在这里插入图片描述

三、PredRNN++

3.1 Causal LSTM

在这里插入图片描述
此时此刻我需要再把 LSTM 拿出来说一遍,不知道读者是否现在可以立马不看我下面这张图直接把所有的细节记起来。
如果不能,那就跟着我来吧。
在这里插入图片描述
跟着我捋一遍过程,当然我这里只简要说下基础:

  1. ht-1与Xt做concat操作,之后经过sigmoid形成[0, 1]的忘记门,输入门,输出门(我是按照上图的从左到右的顺序来讲述的)
  2. Ct-1通过忘记门
  3. ht-1与Xt做concat操作通过tanh激活函数,通过输入门(这里在通过输入门之前相当于生成了此时的输入生成状态)
  4. 以上通过遗忘门和输入门的两个向量相加就是最后的Ct,也就是此时的cell state
  5. 最后,这个cell state通过再一次的非线性变化tanh 最终通过输出门输出得到最后的ht

如果这里不是很清楚我不建议继续读下去先看我的一个特别特别细致的文章。
【Deep Learning】详细解读LSTM与GRU单元的各个公式和区别

这回我们再来看 Causal LSTM结构
在这里插入图片描述
主要是三层级联的结构,你仔细看一下,会发现第一层紫色的其实就是类似于LSTM的结构只不过画法是进行了展开
特点在于以下四点

  1. 每个门不是由X和H决定,而是由X和H以及C决定,通过输入门之前的状态也是又三者决定的
  2. 每个cell都是先进行输入门和忘记门的操作,之后输出这个cell的cell state,把输出门的结构放在了整个Causal LSTM的最后的橘色第三部分。
  3. 依旧存在两个memory结构,即C和M,只不过这里明显区分,C为temporal state,M为spatial state,因为输入C为上一个时刻的C,M是上一层的M,所以这里C与时间维度有关,M与空间维度有关。
  4. M作为第二部分的state输入,并且通过忘记门之前做了一个非线性操作tanh,
  5. 这里的输出门不是用的sigmoid激活,而是采用tanh激活,并且输出门的输入为前两个级联cell的输出以及最开始的输入
  6. 最后输出H取决于两个cell的共同输出即此时cell的temporal state和spatial state,而不是第二部分的最终输出state。
    在这里插入图片描述
    这里全部都标出了,我相信如果您认真看不会看不懂,更不会糊涂。
    说句实在话,全网应该找不出第二个比我还细致,像我一样一点点带您走进时空序列模型的博主了。
    在这里插入图片描述
    这里对 卷积核做了一个更为详细的说明。

看下 ST-LSTM与Causal LSTM之间的对比,这里不做更深入的说明了,因为近两篇文章已经足够说明,其他请大家自己吸收。
在这里插入图片描述
这里主要对比两个cell的结构,对比ST-LSTM来说,Causal LSTM对于M和H定义更加清晰,并且不是简单的concat,而是采用了一个递归深度更深的一个级联结构最终输出H
在这里插入图片描述
这个模型对突发实践效果更好些。
但是读到这里您有没有个自发的这样一个疑问:
就是说为什么要先update C再去级联生成M,为何不是后者在第一部分,前者在第二部分呢,也就是说用M去生成C?

其实这里是可以自行变换的,文中在实验部分也给出了这样变换之后结构的实验结果。

3.2 Gradient Highway

在这里插入图片描述
通过Recurrent Highway Networks的思想能够证明高速网络能够有效的在非常深的网络中传递梯度,继而防止长时导致的梯度消失。
通过这个想法,作者提出了Gradient Highway Unit (GHU), 结构如上图所示,公式如下:
相当于对两个输入做了个类似于GRU中的update gate的操作。
在这里插入图片描述

3.3 PredRNN++总体结构

在这里插入图片描述
和PredRNN相比,区别在于cell从ST-LSTM换为Causal LSTM 以及在第一层和第二层堆叠结构中引入GHU结构。
GHU的输入为目前的更低一层的输出以及前一个时刻的GHU的输入,即GHU连接了当前时刻以及前一个时刻的输入,引导的结果就是梯度不再是一股线传播了,而是可以直接在第一层与第二层之间有个高速的传播,换句话讲就是传播的距离缩短了,也就变得没有之前的那么’深‘了,可以有效的解决梯度消失的问题。
在这里插入图片描述
这里也对 GHU的里面的类似于update gate的结构做出了说明,主要是为了可适应性
在这里插入图片描述
其实这里你是否又会自发的出现一个问题:
为什么GHU结构要放在第一层与第二层之间呢?而没有放在其他两层之间呢??

其实这里是也是可以自行变换的,文中在实验说明了其他情况。
文中有一句推测,也是一个很好的总结:
在这里插入图片描述

四、Experiments

参数,底层需要更大一些的hidden state维度
在这里插入图片描述
codes地址:(对于代码的讲解以后推出)
https://github.com/Yunbo426/predrnn-pp

在这里插入图片描述
利用 tf框架,lr=0.001,优化为ADAM,此外利用L1+L2正则化并采用scheduled sampling strategy
这里主要说明 Moving MNIST Dataset的实验部分,此数据集本身不再重复讲述。

4.1 预测表现

在这里插入图片描述
在这里插入图片描述
这里的实验主要都是针对有数字重叠的时候来举例的,这种其实更能说明模型的预测能力,这里PredRNN++效果相比于其他的模型,主要的优势在于更加清晰有明显的轮廓,模糊的程度降低,在此类问题中预测越来越模糊是一个十分棘手的问题,也是需要解决的问题。
在这里插入图片描述
为了更好的测试模型的泛化和迁移能力,这里也用包含三个数字运动的测试集进行模型测试,指标为MSE,值越小说明预测越好,可以看出所有的模型都是随着预测时间的长度增长,所预测的精度在下降,但PredRNN++依然是保持最高的精度,并且相比之下,下降率也是很小的
在这里插入图片描述

  1. 表中指标有SSIM,这个值范围为-1到1,是衡量产生的预测数据和真实数据的相似度,越大说明越相似。
  2. 表中也对更长的预测序列做一个说明,从输出为10 time steps到30 time steps。
  3. 对于我前面所提出的问题做出了说明,把Casual LSTM的内部结构空间和时间memory进行对应的交换。
  4. 是否连有GHU结构
    最终的结果由图可见,Causal LSTM+GHU的结构最好。
    通过对比①和②可以说明Causal LSTM 代替ST-LSTM 效果更好
    通过对比②和③可以说明还是TEMPORAL-TO-SPATIAL结构更好
    通过对比④和①可以说明GHU也可以和ST-LSTM结构无缝连接,并且GHU的效果明显
    通过对比⑤和②可以说明加入GHU可以得到更好的结果,如果是输出10 steps还是30 steps。

4.2 GHU实验

但是这里读者是否还记得我前面所问的一个问题就是这个GHU的放置位置,上表中应该是默认都放在第一层和第二层之间。
在这里插入图片描述
因为一共是设计四层Causal LSTM 结构,再加上一层GHU,所以有三种方法分别为Bottom,Middle,Top,实验可以证明最底层最好。

4.2 梯度分析

在这里插入图片描述
当预测的数字互相覆盖的时候,预测的难点在于,将他们分开,并且独立的目标不要失去自己的形状特征,依然能保持原有的形状。而这个的影响可能主要取决于梯度消失的问题,这个问题会防止这种很深的网络去获取长时数据的关系。
在这里插入图片描述
左图为每一个输入帧的最后时间步的loss函数的梯度范数,比如输入第一个图片,总共时间步移为10,那么输出第一个图片的loss求出来的梯度范数就是上图所示的值。右图为每一个输入帧出现数字覆盖情况的概率。
其他模型为比较陡峭的变化曲线,而PredRNN++是一个碗状的曲线,说明可以缓解梯度消失的问题,并且这个碗装和右图的上边界的碗状相像,这说明模型学习到了长时的信息依赖。

五、Conclusions

  1. 提出了新的LSTM结构Causal LSTM ,比ST-LSTM更好,其实主要思想是更改了两个memory的连接结构,ST-LSTM是简单的concat,而Causal LSTM 为级联结构。
  2. 为了解决梯度消失的问题,提出了GHU结构,主要是借鉴了高速的想法。
  3. 对梯度有一定很系统的分析。

又不知不觉,码了1w多字,不为了别的,就为了简单、通俗、易懂、全面,共勉。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!