时空序列


Convolutional LSTM(NIPS 2015)

Convolutional LSTM Network: A Machine LearningApproach for Precipitation Nowcasting

论文地址:https://arxiv.org/abs/1506.04214

目标

本文的主要目的是短时降水预报。短时降水预报的目的是在较短的时间内预测局部地区未来的降水强度。。

数据处理方法

  • 首先,作者把城市规范化成N×MN \times M的矩阵,其中每一块代表一个小的区域,这种方法可以抽象出城市各个地域的空间关系。同时每一块区域内的值就代表了这块区域内的雷达回波图

  • 其次,为了表征时间关系,作者将不同时间段的降雨数据划到了不同的矩阵中,具体来说,若有T个时刻,则一共有T张图,T*N*M个小区域的数据

  • 结合实际场景来看,假设我们在每个小区域内都有P种测量数据(这个P是怎么来的呢,实际上,雷达回波图中的一个点可以通过不同的变化获得一些特殊的物理性质),那在每一个时刻,当前城市的数据可以用一个张量XRP×N×M\mathcal{X}\in\mathcal{R}^{P\times N\times M}表示,这样在所有的时间上的张量表征即为X1,X2,....Xt\mathcal{X}_{1},\mathcal{X}_2,....\mathcal{X}_t。这么看来,这个时空序列问题就可以转换成:
    X^t+1,...,X^t+K=arg maxXt+1,...,Xt+Kp(Xt+1,...,Xt+KX^tJ+1,...,X^t) \hat{\mathcal{X}}_{t+1},...,\hat{\mathcal{X}}_{t+K} = \underset{\mathcal{X}_{t+1},...,\mathcal{X}_{t+K}}{\operatorname {arg\,max}}\,p(\mathcal{X}_{t+1},...,\mathcal{X}_{t+K}|\hat{\mathcal{X}}_{t-J+1},...,\hat{\mathcal{X}}_{t})

  • 冷静分析,我们其实可以发现这玩意和普通的一步预测也不一样(就是那种用前面所有的数据预测后面一步的数据),这里需要预测现有数据后的K步。

  • 具体如下图

matrix_picmatrix_pic

历史方法介绍

  • 基于 NWP 的方法
  • 基于radar echo extraolation的方法
  • 这两种方法是用来解决降水量预测问题的,不再详细展开(我觉得我以后应该不会用到所以就没有看

模型出现的心路历程

深度神经网络时期的哲学:只要能把我们遇到的问题转换成一个端到端的问题,同时能为这个模型提供足够多的数据量,那么我们就已经很接近解决这个问题了!(我也不知道我拟合出来的是个什么东西,但你说巧不巧,它就是work

  • 基于上面的哲学,我们发现要解决这个降雨量预测问题,实际上只要找到一个合适的模型就行(数据还是很多的)。那么我们进入深度神经网络时期,有什么适合的模型呢?RNN!LSTM!于是呢我们就选了LSTM。当然不是原始的LSTM,这里作者选用了fully connection LSTM(FC-LSTM)。我们后面再来介绍这里用到的FC-LSTM。
  • 另一个问题又出现了,FC-LSTM它没有考虑空间关系,它就是一个纯的时序模型,而降水量预测是个时空预测。那咋办呢,改!加空间关系!然后呢,convolutional LSTM(ConvLSTM)就浮出水面了

基础模型介绍

这里我想介绍一下FC-LSTM。FC-LSTM可以被视作一个多变量版本的LSTM。那么什么是多变量呢?就是输入呀,细胞状态呀,输出呀都是一个一维向量,而传统LSTM只是针对一个单变量。好的,看过LSTM的带哥带姐们可以跳过这了,下面走个形式
直接上图:

fc-lstmfc-lstm

或者我们换张图,我觉得这张图好理解一点:

lstmlstm

再整个公式:
it=σ(Wxixt+Whiht1+Wcict1+bi)ft=σ(Wxfxt+Whfht1+Wcfct1+bf)ct=ftct1+ittanh(Wxcxt+Whcht1+bc)ot=σ(Wxoxt+Whoht1+Wcoct+bo)ht=ottanh(ct)i_t=\sigma{(W_{xi}x_t+W_{hi}h_{t-1}+W_{ci}\cdot{c_{t-1}}+b_i)}\\f_t=\sigma{(W_{xf}x_t+W_{hf}h_{t-1}+W_{cf}\cdot{c_{t-1}}+b_f)}\\c_t=f_t\cdot{c_{t-1}}+i_t\cdot{tanh(W_{xc}x_t+W_{hc}h_{t-1}+b_c)}\\o_t=\sigma(W_{xo}x_t+W_{ho}h_{t-1}+W_{co}\cdot{c_t}+b_o)\\h_t=o_t\cdot{tanh(c_t)}
公式里出现的 \cdot 是哈达玛积哈。

进入正题!

FC-LSTM很强,但在处理这个问题上的性能不太好,主要是由于雷达图具有很强的空间相关性,即,在局部地区,云的运动是高度一致的。全连接结构有太多冗余连接,使得优化不太可能捕捉到这些局部一致性。于是,论文作者提出了Convolutional LSTM。Convolutional LSTM的最大改动就是加入了卷积操作(在input-to-state和stata-to-state两个层面都有哦)

上面我们提到过每一个时间点上的整图表示张量X\mathcal{X},由于有多种测量方式,所以这个张量是个三维的,为了适应这种表征方法同时考虑空间信息,ConvLSTM中无论是输入X\mathcal{X},细胞输出C\mathcal{C},隐藏状态H\mathcal{H},还是门结构it,ft,oti_t,f_t,o_t都是三维张量(其中后两维为N,M)。ConvLSTM通过同时考虑某个位置的当前输入和之前该位置的邻居状态预测未来的输出。而卷积操作就是用来聚合邻居状态的。再再整个公式:
it=σ(Wxixt+Whiht1+Wcict1+bi)ft=σ(Wxfxt+Whfht1+Wcfct1+bf)ct=ftct1+ittanh(Wxcxt+Whcht1+bc)ot=σ(Wxoxt+Whoht1+Wcoct+bo)ht=ottanh(ct)i_t=\sigma{(W_{xi}\ast{x_t}+W_{hi}\ast{h_{t-1}}+W_{ci}\cdot{c_{t-1}}+b_i)}\\f_t=\sigma{(W_{xf}\ast{x_t}+W_{hf}\ast{h_{t-1}}+W_{cf}\cdot{c_{t-1}}+b_f)}\\c_t=f_t\cdot{c_{t-1}}+i_t\cdot{tanh(W_{xc}\ast{x_t}+W_{hc}\ast{h_{t-1}}+b_c)}\\o_t=\sigma(W_{xo}\ast{x_t}+W_{ho}\ast{h_{t-1}}+W_{co}\cdot{c_t}+b_o)\\h_t=o_t\cdot{tanh(c_t)}

然后我们就可以发现,其实这玩意和LSTM几乎一模一样,唯一的差别就在于\ast表示的卷积操作,而卷积操作又会带来另外一个问题,就是得想办法保证隐藏状态和输入这些在维度上保持一致。那咋办呢?padding。

这里的padding解释感觉还挺有意思的,我先摘一段原文,然后再配上自己的理解:

Here, padding of the hidden states onthe boundary points can be viewed as using the state of the outside worldfor calculation. Usually, before the first input comes, we initialize all the states of the LSTM to zero which corresponds to“total ignorance” of the future. Similarly, if we perform zero-padding (which is used in this paper)on the hidden states, we are actually setting the state of the outside world to zero and assume no prior knowledge about the outside. By padding on the states, we can treat the boundary points differently,which is helpful in many cases. For example, imagine that the system we are observing is a moving ball surrounded by walls. Although we cannot see these walls, we can infer their existence by finding the ball bouncing over them again and again, which can hardly be done if the boundary points havethe same state transition dynamics as the inner points.

总结发言对于padding操作来说,填充的值可以被看作是场外信息入场,如果用0填充相当于没有场外信息,所以在第一层输入进来的时候,模型实际上是完全没有场外信息的,这时候我们需要把所有需要填充的值都填为0(来表示我真的不知道外面的信息,这里的所有包括了隐藏状态)。通过这种padding,相当于我们可以对边界点做不同的处理。(这里的不同处理指的是边界点和内部点),论文的例子是用一个透明空间内的滚球来解释的,我们虽然看不见边界,但可以通过滚球的碰触反弹来感受到边界,而如果我们将边界位置和内部的位置看作是一样的,那就很难去发现转移的模式了。

OK,单个的ConvLSTM结构就是这些,我们接着来看看论文给出的Encoding-forecasting结构(我反手就是一张论文截图!):

encode-forecastingencode-forecasting

整个结构是由两部分组成的,左边是一个编码网络,右边是一个预测网络。我们先来看左边,结合上面的padding解释,我合理怀疑这边的层是做完padding后的,九宫格呀啥的就是卷积操作。然后堆叠多个ConvLSTM结构实现对序列的编码。右边的预测网络的下几层就是编码层的复制,预测层的最终输出维度是要和Input保持一致的,所以在这届个copy的层连接后,需要接一个1×11\times1的卷积层操作。

总结

在2021年再回头看这篇论文,结构上来看是相对简单的,当然也是因为近些年受该文影响也出了很多其他的文章,所以会觉得结构不是很新鲜。简单的总结整个结构,我觉得这种方法就是卷积+LSTM,对应的问题也是欧几里得数据,结构也相对规整。可以直接横向将这个卷积操作类比到图结构这种非欧数据上,这种方法能处理的场景也会更加宽泛(现有的基于时空图的交通流量预测实际上和这种方法类似)