论文笔记|Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting

Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting  论文地址

一、摘要

这篇文章是来自香港科技大学的团队,这个团队有和香港观测站合作,他们有一个前身的工作还有数据都是靠这个机构来收集的。这篇论文利用convolution LSTM 对降雨预报进行预测。他们的这个工作是用来做对天气的预测,他们收集了很多很多的雷达图,这些雷达图主要是空照图,直接看某一个区域云层的分布,而且是沿着时间轴变化。因此有过去时间轴和云层图,就可以预测未来时间点的云层该往哪里走,预测天气变化,以及一个地区将来降雨的几率是多少。

二、介绍

既然有时间轴,并且要做预测的事情,首先可以想到的就是传统的LSTM模型。雷达图中的云层是具有空间性,用传统LSTM模型会导致云层图丧失地理位置信息,因此很难预测云层的移动位置。所以这篇文章的作者提出Convolutional LSTM模型,即将传统LSTM 的fully-connected layer 改成Convolutional layer.

即时预测在天气预测中是一个非常重要的问题。在机器学习领域之外,物理学家使用数学模型做数值运算(NMP model),但是这个模型过于复杂,短时间内做预测是不太可行的,并且也没有效益。所以科学家尝试着去用Real-time Optical flow by Variational methods for Echoes of Radar(Rover), 直接看过去的雷达图,学习云层沿着时间轴是如何变化,并用以预测未来云层图是如何变化的,来对地区做降雨预报。这个模型实际是有应用在香港观测站中的强降雨系统中。作者提到直接用光流来预测其实是有很明显的缺点的,首先是这个模型没有办法end-to-end training, 光流的计算与雷达图的分析其实是分成两个完全不同的step,如果要对一个地区做降雨预测,没办法end-to-end知道现在的云层图是这样,未来的云层图是哪样,进而无法对地区的天气预报,没有end-to-end training, 就没有办法得到powerful的model, 作者希望用近年非常成功的深度学习的方法end-to-end learning来得到更多的performance;其次必须非常了解spatiotenporal sequence, 所以很直观的可以用RNN来做。

为了解决时空的问题,作者提出convolutional LSTM来解决。这一篇文章除了做在天气预报中,它首先应用在移动的MNIST数据中,看前4个frame数字的位置来预测下4个frame的位置,沿着飘动的方向是已知的,可以利用过去所看到资讯来预测它要怎么移动。

三、准备阶段

首先作者定义模型的输入和输出,输入是一个M * N的图像,这个图像有P个channel,这P个channel其实就等同与传统图片中的RGB,直接把雷达图切成P个patch,再什什么起来。沿着时间轴t总共有t个x。目标是通过先前的J个观测点来预测之后长度为K的序列,作者给了下面的的这个公式:

3.1传统LSTM

作者先给出了传统LSTM的介绍,LSTM有input gate、forget gate、output gate三个gate。文章中给出了传统LSTM的公式:

但是这里作者给的比较简单,因此我在网上找到了传统LSTM的简单理解:

LSTM的关键是细胞状态,表示细胞状态的这条线水平的穿过图的顶部。LSTM的删除或者添加信息到细胞状态的能力是由被称为Gate的结构赋予的。

LSTM的第一步是决定要从细胞状态中丢弃什么信息。 该决定由被称为“忘记门”的Sigmoid层实现。它查看ht-1(前一个输出)和xt(当前输入),并为单元格状态Ct-1(上一个状态)中的每个数字输出0和1之间的数字。1代表完全保留,而0代表彻底删除。

下一步是决定我们要在细胞状态中存储什么信息。 这部分分为两步。 首先,称为“输入门层”的Sigmoid层决定了我们将更新哪些值。接下来一个tanh层创建候选向量Ct,该向量将会被加到细胞的状态中。在下一步中,我们将结合这两个向量来创建更新值。

现在是时候去更新上一个状态值Ct−1了,将其更新为Ct。签名的步骤以及决定了应该做什么,我们只需实际执行即可。

我们将上一个状态值乘以ft,以此表达期待忘记的部分。之后我们将得到的值加上 it∗Ct。这个得到的是新的候选值,按照我们决定更新每个状态值的多少来衡量。

最后,我们需要决定我们要输出什么。 此输出将基于我们的细胞状态,但将是一个过滤版本。 首先,我们运行一个sigmoid层,它决定了我们要输出的细胞状态的哪些部分。 然后,我们将单元格状态通过tanh(将值规范化到-1和1之间),并将其乘以Sigmoid门的输出,至此我们只输出了我们决定的那些部分。

多个LSTM可以堆叠并在时间上连接来形成更复杂的结构。这种模型已经应用于解决许多现实生活中的序列建模问题。

3.2 ConvLSTM网络

模型的输入是一个M * N 的网格,每个网格的channel size为P,即输入为一个3D tensor。作者给出了模型的公式,如下:

这个模型和传统LSTM的不同:

①ConvLSTM模型中将fully-connect layer改成convolutional layer

②而且这个模型的input是3D tensor。

作者有观察到,当Kernel size即w所代表的kernel size越大,能够捕获更快的动作。如果kernel size过小,那这个模型只能捕获慢动作。所以说当我们要观察的物体移动速度非常快的时候,我们就需要一个非常大的kernel size来调整,所以说这个kernel size就变成模型的超参数。在文章中引用的论文[16]中有提到,传统LSTM与ConvLSTM的关系是非常神奇的,传统LSTM其实可以说是ConvLSTM的一个特别的例子,因为全连接其实就是某一种的卷积,只不过传统LSTM的kernel_size是整个image或整个input。而且在卷积之后得到的输出会受制于kernel_size以及kernel在做filter浓缩移动的步伐,输出的大小也会受到影响,输出的大小通常都比输入的大小来得小。因此我们必须做padding,让输出和输入的大小相同。

作者在这里提到了zero-padding,zero-padding的功能是提供容纳未来资讯进来的通道。利用过去的观察对未来做预测,我们在外围的地方做padding,有一些云层就会从我们填的zero-padding慢慢进来,把他们连接到雷达云层图中,可以理解为云层慢慢地挤进我们的实现,我们就可以观察到云层的变化。但是我们对外来的云层先前是没有认知的。我们需要给这些外来的云层留空位,让模型能够接受我们从来都没有看过的资讯。

3.3 Encoding-Forecasting Structure(模型结构)

作者给出了模型的结构。使用的是一个非常传统的结构型LSTM,将两层的LSTM拼在一起,作为一个encode network,模型在decode的时候,直接把encode的资讯复制过来,再decode出来。两层资讯希望都能用到,直接用的话,输出就会得到两倍大小,所以作者在这里用到了一个1 * 1 的convolution layer把结果卷积成想要的输出。预测未来雷达图的问题就可以被formulate:

这个模型是一个多个LSTM拼接,因此它有很强的代表性用于复杂的动态系统来预测,比如作者在这里研究的即时预测问题。

四、实验

作者首先在可移动的MNIST上做实验,来检验ConvLSTM的功效,他们使用不同的层数以及kernel size,并且研究了一些在范围之外的例子。作者第二是运用在预测某个地区未来的降雨程度、几率。他们在这两个实验中得到了以下结论:

①比起传统LSTM,ConvLSTM更适合用于时空相关性的问题中;

②kernel size大于1是解决时空运动模式的本质。如果kernel size小于1时,每个kernel只看一个像素,它没有办法看到一整块的东西,因此没有办法解决到一整块东西所带来的资讯;

③更深的模型可以产生更好的结果,即使它的参数更少;

④比起ROVER,ConvLSTM在即时预测的问题上表现更好。

4.1 移动MNIST数据集

对于这个数据集,所有的例子都有20帧长(10帧用于输入,10帧用于预测),并且包括了两个在64*64像素内跳动的手写数字。这些移动的数字都是在MNIST数据集中选择出的一个包含500个数字的自己。手写数字的初始位置和速度方向都是随机的,速度的大小在(3,5]这个左开右闭的区间内随机。最终获得了一个15000的数据集。其中10000个数据用于训练,2000个数据用作验证序列,3000用于测试。他们使用基于时间的反向传播算法使得交叉熵损失(cross-entropy loss)最小以及使用学习率为10-3和延迟率为0.9的均方根反向传播,通过这两个方法对所有的LSTM模型进行训练。并且,他们还在验证集中使用了early-stopping的方法,如果模型的表现越来越差,说明模型有可能以及过拟合,使用这个方法来停止训练。

作者分别使用了传统LSTM、input-to-state和state-to-state kernel size都是5*5的三种层数不同的ConvLSTM、还有两种state-to-state kernel size都是1*1的不同层数的ConvLSTM。作者给出如下的实验结果表格:

通过这个表格,我们可以看到ConvLSTM模型的表现都比传统LSTM模型的好,并且ConvLSTM深度更深但是参数更少的话,它也是会有更低的交叉熵损失。但是对与kernel size为1的模型,我们前面也有提到,kernel size必须大于1。

作者还给出了一个不在考虑范围内的例子,通过上面这个图我们可以看到,作者他们的模型是能够成功分离出重叠在一起的数字,并且能够能够大体地预测出动作即使预测的数字很模糊。

4.2 雷达图数据

在这篇文章中使用到的数据集是从2011到2013年在香港收集到的天气雷达图。因为不是每天都是雨天而且作者的目标是预测,所以他们选择了头97个雨天来构成他们的数据集。首先他们将强度值Z转换成灰阶像素P,这里使用到的公式是


然后在中部330*330的位置裁剪雷达图,然后他们对这个雷达图进行归一化到100*100的大小。为了减少由监测设备引起的噪声,还需要对雷达图进行去噪,这些噪声是通过将k-means聚类应用在月像素平均值来去除的。天气雷达数据每6分钟记录一次,所以每天就有240帧。为了得到训练、测试和验证不相交的子集,作者将每天记录的序列分成40个不重叠的帧块,并且随机地将4块用作训练,1块用作测试,1块用作验证。然后使用一个20帧宽的滑动窗口从这些块中切除数据实例。因此作者使用到的数据集包括8148个训练序列,2037个测试序列和2037个验证序列,并且所有的序列都是20帧长(5帧用于输入,15帧用于预测)。这个实验使用一个两层的ConvLSTM以及三个ROVER算法进行比较,使用了降雨均方误差(Rainfall-MSE)、临界成功指数(CSI)、虚警率(FAR)、发现概率(POD)以及相关性(Correlation)来评估模型的效益。文章中使用了以下公式来定义评估方式:

模型的表现在这几个评估模型的体现是:降雨均方误差越小越好,临界成功指数越大越好,虚警率越小越好、发现概率越大越好、相关性越大越好。最后作者给出了这个实验的结果图:

从上面这个表中我们可以看到,作者提出的模型不仅比传统LSTM效果好,并且还比任何一种ROVER的效果好。

通过图6,可以看到第四行使用ROVER2预测出来的云层在左上角有很大的一块空缺,而第三行使用ConvLSTM预测出来的图明显在左上角是有填充的,在前面作者也有提到需要给模型未接触过的资讯留空位,让模型接受它从未接触了解过的资讯,而ROVER2就没有办法很好的解决边界问题。而且ConvLSTM在这个例子中是使用点到点的训练,在这个数据集中一些复杂的时空模型可以通过非线性和卷积的方法学习。但是ROVER2就做不到点到点的训练。

通过作者给出的实验图片,可以发现使用ConvLSTM预测出来的图片在边缘更加的平滑,使用ROVER2预测出来的图片比较清晰且边缘更尖锐。比较实际图片,ConvLSTM预测出来的结果比ROVER更好。

五、结论

在这篇论文中,作者成功地将机器学习的方法(特别是深度学习)应用在至今还未从复杂的机器学习受益的具有挑战的即时预测问题上。ConvLSTM不仅继承了传统LSTM的优点,并且由于它内部的卷积结构使得它非常适合于时空数据。对于未来的工作,作者他们打算将这个ConvLSTM应用于基于视频的动作识别中。

六、启发

对于作者提出的ConvLSTM模型,预测出来的结果会被雾化,变得非常模糊。不过这个问题在“Unsupervised Learning for Physical Interaction through Video Prediction”中被改善。所以我在想能否把这个改善后的方法再应用于作者提出的降雨预测模型中。

你可能感兴趣的:(论文笔记|Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting)