时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第1张图片

前言

最近忙,抽出时间把之前零零碎碎差一点搞定的文章拿出来分享下。

原创不易,觉得好可以点赞,帮忙转发,对我的认可,我会更有动力去给大家带来优质的知识。

一、Address

NIPS2016 年的一篇paper,施博士大作。

这篇paper虽然和我前几篇比起来稍微有些古老,本来应该讲完convLSTM紧接着就讲轨迹GRU得,因为两篇算是一个工作的不断延申,但是因为种种原因吧,今天才下笔,但是我感觉无论如何这篇文章都算是大作,并且现在用起来依然效果不算差,所以还是值得重新读几遍,文中所作的工作量也是很大,主要提出了一个降水预测的基准,把整个实验流程中的主要问题和解决方案都指出来了,所以说还是十分值得学习的。

论文链接地址: https://arxiv.org/pdf/1706.03458.pdf

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第2张图片

二、Introduction and Model

2.1 时空序列问题与降水预测问题

顾名思义,论文名称中特意指出了降水预测这个领域,所以这篇主要的工作还是在这一领域,如果是气象学专业的可能并不陌生,不过和我一样不是这相关人士得可能会陌生了。

这里大致说下,大概就是雷达来实地监测,发出雷达,得到回传数据,形成对应的雷达回波图,每个雷达回波图的像素大概在0-80之间,这个像素值可以通过一个线性变换成降水值,所以简单来说就是时空序列预测问题,你的下一帧得像素预测明白了,自然降水得预测不会差,所以本质还是一个Spatial-Temporal Prediction问题。这个问题我觉得我已经在我的文章系列中反复提到过,可以看我的第一篇概述,也可以随便找一篇,看看第二部分,大致就明白了,这里不赘述了。

2.2 相关研究及本文创新

2.2.1 相关研究

这里也不想过多赘述了,其实就是把之前一些研究拿出来对比下。 主要分为三类把,因为那时候还算比较早期,基本上都是lstm的一些操作以及lstm+cnn的一些操作,还没有很好的结合。

5f4709b03616936f4f1123c4da2e8624.png

之后又稍微提了下SocialLSTM and the Structural-RNN (S-RNN), SocialLSTM 我记得我很久之前稍微看了下感觉还是很复杂的,也很有趣,感兴趣的可以看下,不过它主要针对的问题是人体轨迹方面的时空预测, S-RNN主要基于给与的时空图的预测,具体我这边也没研究过。

f9fd016d2a55c4d979ddedd23f9712de.png

2.2.2 本文创新

本文的创新主要是把可学习卷积引入到时空序列问题中,并且把EF结构重新更加直观的摆明了。

而最大最大的创新和工作量在于降水预测问题的benchmark。

2.3 模型

2.3.1 EF结构

①这是这篇文章中的 EF结构

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第3张图片

②而这个是ConvLSTM中所描述的

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第4张图片

③而他们的原始状态Seq2Seq是这样的

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第5张图片

当然这样我们看还是不直观,我把这三幅图弄在一起给大家看下

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第6张图片

seq2seq模型结构我想不用我多说了,因为大家都很熟悉应该,如果不熟悉,哪天我总结发下,也可以把代码coding部门一同介绍给大家,这篇paper中提出的EF主要的区别在于引入上下采样,以及预测的方向也就是Forcaster结构中的数据流的方向 倒置了。

0599fa9762f4a33db0c6cb19beae8502.png

那为什么要加入上下采样呢?经过实战你就明白了,没有上下采样你的机器会受不了,但是如果你的机器算力非常强倒也可以尝试不加,但是算起来速度太慢了,反而加上上下采样效果也很不错,速度快了,也不是那么吃显卡了。

那设计的时候为什么要倒置呢,其实文中也写得很清楚。

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第7张图片

主要的原因还是他认为high-level state提取的是一个偏向全局的时空信息,而low-level的能更加的影响预测,我个人感觉他这里这么设计,可能很单纯,就是因为发现没人这么做过,这么做完之后发现效果确实在降水预测问题中好了, 哈哈哈。 但是他后面我红色圈起来的部分还是很讲究的,可以随意的去插入rnn层,不需要跳过连接来聚合低级信息。

2.3.2 ConvGRU模型

这里把其中一个block给出,不赘述了,可以翻看我写的ConvLSTM模型,就是从那里演变过来的,公式如下:

2.3.2 Trajectory GRU模型

df3c42e31af1777fdb836c3ea79a479c.png

如果输入为全部都为0,reset gate全为一

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第8张图片

那基本上就相当于没有update了。

f2176de4128883873a2f9a3e36ce7fdd.png

这句话的意思就好比,你的卷积操作中的超参数都定了,比如kernel size、padding和dilation都定下来了。 那基本上可以说你想卷积的那个location领域的点是固定的了。

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第9张图片

而很多的信息其实他对应的邻域的点是及其不固定的,比如台风问题中,台风眼的旋转,移动都是变化万分的,如果只关注某个location的周围几个点可能并非关系密切,所以可学习的卷积渗入了。。

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第10张图片

每次卷积的点是学习得到的最为相关的点。 主要公式:

这里的l是卷积连接的点的个数,其他的通俗一些讲就是通过输入和上一个状态得到两个参数,通过这两个参数以及上一个状态配合输入得到两个门控,再通过门控得到新的状态,之后和GRU的reset gate那边一样的。 这里warp功能是双线性插值的方法来实现的

aa31c41b9425285f842682b86196ce5e.png

以及其中的

f3ac1797222385cc5bb192c3f8c58aea.png

这里模型部分基本上ok了,具体我觉得模型要理解深透还是要靠代码。

三、Experiments

此部分不再对MnistMoving数据集实验做说明,请自行观看,我主要是堆本篇最主要的降水预测基准做说明

3.1 HKO-7数据集

这是博士开源的雷达回波图数据集,具体看我标黄部分即可。

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第11张图片

需要注意的点,就是降雨问题,不是每天都会降雨,所以是个较为稀疏的问题,可能数据集不是很均衡,所以需要挑出一些有降雨的日子,并且雷达回波图和降水之间有一定的关系式,再来数据有一定的噪声,需要处理。

数据总体如下,5-10月份降水时间较多,并且博士在做实验的时候其实没留下太多的天数,可以看到2009-2014留了862天,不过一天就是240帧,足够玩模型了。

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第12张图片

3.2 去噪denoise

3.2.1 利用马氏距离去噪

4594f15dbe838654d1e5701ef3cc70a3.png

像素的马氏距离大于平均距离乘以三倍标准差为超出正常范围的点,也就是异常点。

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第13张图片

这里恕本人才学尚浅,没办法特别清晰的说明这个去噪方式,主要本人不是气象学专业的,这个方式我本人按照我的理解做了一下,发现效果一般,当然我做的数据集不是在HKO上的,HKO已经有做好的了,我在新的数据集上用本方法进行去噪,效果一般,并没有那么的好,当然也可能是我自己理解的不对。

因为时间比较久远,我只找到了这个版本的代码,这里贴出,有想法的可以留言和我一起讨论下。(只贴出核心部分代码)

def denoise(dat_arr):

    dat_arr = dat_arr.flatten()
    dat_mean = np.mean(dat_arr)
    dat_arr = dat_arr.T
    # print(len(features_T))

    D = np.cov(dat_arr)
    D = np.expand_dims(D, axis=0)
    D = np.expand_dims(D, axis=0)
    D_1 = np.linalg.pinv(D)

    m_dis = []
    for i in range(len(dat_arr)):
        delta = dat_arr[i] - dat_mean
        d = np.sqrt(np.dot(np.dot(delta, D_1), delta.T))
        m_dis.append(d)
    m_dis = np.array(m_dis)

    dis_mean = np.mean(m_dis)
    dis_std = np.std(m_dis)
    threshold = dis_mean + 3 * dis_std
    true_false = np.any([m_dis > threshold])
    if true_false == True:
        for i in range(len(m_dis)):
            if m_dis[i] > threshold:
                dat_arr[i] = 0

    print("denoise is over")
    return dat_arr

3.2.2 去除其他类型噪声

这个简单,直接判断下就好了

23a4f8cd7b17ac2605371cb88da7dc43.png

3.3 loss损失

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第14张图片

由于分析降水量的分布严重不均匀,其实也可以理解,一个地方不可能成天下暴雨,肯定是小雨的时候偏多些,当然这个还得看地区,比如我家这边冬天就是下雪了,哈哈哈。 所以这里有个常见的问题就是数据很不均匀,所以这里用的方法也比较常规吧,weights loss。

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第15张图片

以上是每个像素点所在Rain rate的权重,loss具体算法是mse和mae有一个比例,我个人实战1:1就还不错。

公式如下: i,j为对应像素点,n为第几个frame

and

3.4 评价指标

使用的是纯粹的mae mse以及降水预测问题中常用的HSS CSI(这两个指标你可以理解为新类型的F1依旧是通过TP,TN,FN,FPl来计算的)

ce1b148a5580e53b6f5cc3b662d88521.png

3.5 实验结果

具体参数和网络设计,请大家自行看论文吧,这里说意义不大。 主要用到了optical-flow,2DCNN,3DCNN,ConvGRU,TrajGRU。 很多标识看我的标黄部门,值得注意的是mae,mse自然是越小越好,但是HSS,CSI是越大越好。

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第16张图片

作者有对模型结果的置信空间和方差进行分析,以及不同阈值和评价指标之间的相互关系做了分析。

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第17张图片

时空角怎么理解_【时空序列预测第九篇】时空序列预测模型之轨迹GRU_第18张图片

四、Conclusions

  • 把可学习卷积引入到时空序列模型中, 提出了TrajGRU模型
  • 重新定义了EF结构
  • 对降水问题提供了一个工作量很大,很全面的benchmark,并对很多子问题进行了研究,比如预处理、imbalance

这篇文章并不是一次写完的,文章我反复看了好几遍,上一次看的时候写的,大概半年前,一直没写完,现在过了半年重新读一遍,依然感觉是大作,重拾笔,写完分享给大家。

你可能感兴趣的:(时空角怎么理解)