一、基于TrajGRU的短临预报实现:模型结构

文章介绍了基于TrajGRU的短临预报模型,用于解决ConvLSTM无法捕捉旋转和向四周耗散运动的问题。TrajGRU在GRU的基础上学习光流运动,提高外推性能。通过双线性插值的warp函数处理浮点索引,实现对云层运动的模拟。论文中采用类似Encoder-Decoder结构,TrajGRU作为核心部分,用于处理雷达数据的时空连续性问题。
摘要由CSDN通过智能技术生成

前言

参考基于基于CONVLSTM的短临预报实现,针对ConvLSTM模型存在的无法捕捉旋转和向四周耗散运动问题,提出了可以学习光流运动的TrajGRU模型。在继承时序卷积神经网络对时序和空间特征良好敏感性的基础上,又能学习到真实的光流运动,进而模拟自然界中云层的真实运动,提高模型外推的性能。

模型架构

一、GRU与LSTM

LSTM有三个门,input、forget、output,GRU有两个门,reset、update。由于门的存在,LSTM和GRU都可以解决时序网络的长短时依赖问题,能够捕捉时序特征。

LSTM的三个门:input Gate、forget Gate、output Gate

  1. i_{t} = sigmoid(W_{xi}x_{t} + W_{hi}H_{t-1}+b_{i})   
  2. f_{t} = sigmoid(W_{xf}x_{t} + W_{hf}H_{t-1}+b_{f})
  3. c_{t} = f_{t} *c_{t-1}+i_{t}*tanh(W_{xc}x_{t} + W_{hc}H_{t-1}+b_{c})
  4. o_{t} = sigmoid(W_{xo}x_{t} + W_{ho}H_{t-1}+b_{o})
  5. h_{t} = o_{t}*tanh(c_{t})
LSTM与CovLSTM

ConvLSTM state和state之间的传递是通过卷机实现的,FC- LSTM是通过全连接实现的。

ConvGRU的两个门:update Gate和reset Gate

  1. Z_{t} = \sigma (W_{xz}*X_{t} + W_{hz}*H_{t-1})
  2. R_{t} = \sigma (W_{xr}*X_{t} + W_{hr}*H_{t-1})
  3. H_{t}^{'} = f (W_{xh}*X_{t} + R_{t}*(W_{hh}*H_{t-1}))
  4. H_{t} = (1-Z_{t})*H_{t}^{'} + Z_{t}*H_{t-1}

GRU相比LSTM,在不牺牲性能的前提下,减少了模型的计算量,这对于开展算法实验非常重要。模型的计算量较少,迭代出结果的时间就会减少,这样就能更快的进行模型验证以及试验不同的参数组合。

回到本文中的问题,再利用卷积时序网络进行雷达数据外推时,虽然采用GRU模型作为时序基准网络能够减少模型迭代出结果的时间,但是相同的,GRU也无法解决自然界中云团不规则运动的问题。这是因为,对于卷积神经网络来说,当卷积核确定时,卷积核与图像中的连接位置就是确定的,这就导致卷积核对于平移特征或者静态的特征有较好的捕捉,而无法学习到旋转运动的特征。

When used for capturing spatiotemporal correlations, 
the deficiency of ConvGRU and other ConvRNNs is that the connection structure and weights are fixed for all the locations. 
The convolution operation basically applies a location-invariant filter to the input。

当用模型捕捉时空相关性特征时,ConvGRU和其他卷积时序网络的缺点是对于图像中的每个位置,其连接结构和
参数都是固定的。
换句话说,对于特定的输入,卷积其实是用一个局部位置固定的滤波器进行滤波的过程。
ConvRNNs vs TrajRNNS

如上图a所示,对于一般的卷积时序网络,图像中的每个位置的连接结构和参数都是确定的。

以X2为例,对于X2中的蓝色位置,他是通过X1固定位置的特征值经过大小和参数都确定的卷积核得到的。加入层间都是使用3*3的卷积核,那么对于X2中的每一个位置对应的特征值,它的连接X1中的位置和卷积参数都是固定的。这就导致对于时空连续性问题中的旋转运动特征,X2中蓝色位置的特征不是其对应的X1中固定位置的特征卷积得到的,有可能是分散在不同的位置上的特征经过卷积得到的,如上图b所示。所以,动态的学习X2每个位置的特征是由X1中哪些位置的特征卷积得到的是更为合理和贴近实际问题模型的。

二、TrajGRU

前面提到了常规卷积时序网络在提取时空相关性特征时存在的问题和局限性,针对这个问题,较为广泛认可的一个解决方案就是香港中文大学施行健提出的TrajGRU模型,ConvLSTM模型也是他提出来的(真正的大牛)。

参考论文《Deep Learning for Precipitation Nowcasting- A Benchmark and A New Model》,作者对TrajGRU模型做出了详细的解释。

which uses the current input and previous state 
to generate the local neighborhood set 
for each location at each timestamp. 
Since the location indices are discrete and non-differentiable, 
we use a set of continuous optical flows to represent these
“indices”. The main formulas of TrajGRU are given as follows:

使用当前的输入以及上一个时刻的状态为每一个时间步的每一个位置生成连接集合。

由于连接集合是不可微分的,连接集合是特征图中的坐标索引如(2,3)等。所以为了能够传递梯度,使用连续的光流集合表示这些索引值。也即是不直接使用索引,而是使用索引对应的特征值。
在模型训练时,图像中的特征值是连续的float类型,所以是可微分的。

可能会有疑问:既然模型输出的都是float,那么输出的索引也是float,所以应该是可微分的。

我的理解:输出虽然是float类型,但是代表意义是索引,而位置索引本身必定是不可微分的,所以要取其对应的连续可微分的特征值。

可以用如下公式表示:

U_{t},V_{t} = \gamma (X_{t},H_{t-1}),

Z_{t} = \sigma (W_{xz}*X_{t}+\sum_{l=1}^{L} W_{hz}^{l}*warp(H_{t-1},U_{t,1},V_{t,l})),

R_{t} = \sigma (W_{xr}*X_{t}+\sum_{l=1}^{L} W_{hr}^{l}*warp(H_{t-1},U_{t,1},V_{t,l})),

H_{t}^{'} = f (W_{xh}*X_{t}+R_{t}o(\sum_{l=1}^{L} W_{hh}^{l}*warp(H_{t-1},U_{t,1},V_{t,l})))

H_{t} = (1-Z_{t})oH_{t}^{'} + Z_{t}oH_{t-1}

与ConvGRU的计算公式对比,多了一步生成光流分量索引的过程,其次是在上一时刻的hidden state处理上二者不同。对于ConvGRU,卷积得到特征图上的每个位置与前一特征图上的连接位置和权值都是固定的,而TrajGRU则是不固定的,是由L个动态计算得到的连接位置及其权值。上文提到,这种动态计算输出的是特征值的索引,所以需要通过warp函数转换成可微分的特征值,便于模型进行反向传播。

论文中warp函数是双线性插值,\gamma是生成光流分量的索引(x,y)的“结构生成网络”,由于x,y是float类型,有可能出现小数的情况,所以需要双线性插值方法找到其对应的特征值。

\gamma的结构:输入是input + hidden state 卷积结构:kernelsize(5,5)input channels 32

用pytorch实现:

# inputs to flow

# 这里input要经过一次卷积并且输出通道数是32,
# 因为对于RNN结构来说,输入的时间序列长度必等于隐藏层时间序列长度
# 论文中定义了生成光流分量索引的网络(结构生成网络)是(5,5)卷积核,以及32特征图
# 所以原始输入和中间状态都需要做一步转化,才能进入到结构生成网络中。
self.i2f_conv1 = nn.Conv2d(in_channels=input_channel,
                                out_channels=32,
                                kernel_size=(5,5),
                                stride=1,
                                padding=(2,2),
                                dilation=(1,1))

# hidden to flow

self.h2f_conv1 = nn.Conv2d(in_channels=self._num_filter,
                                out_channels=32,
                                kernel_size=(5,5),
                                stride=1,
                                padding=(2,2),
                                dilation=(1,1))

# generate flow
# 生成L个连接也就是生成L个光流分量的索引,
# 由于特征图都是二维的,有行和列,所以结构生成网络
# 的输出通道数是L*2
self.flows_conv = nn.Conv2d(in_channels=32,
                                out_channels=self._L*2,
                                kernel_size=(5,5),
                                stride=1,
                                padding=(2,2))

根据上面pytorch的实现,对比一下TrajGRU和ConvGRU的计算量。

对于RNN网络来说,模型的参数量由state-to-state的参数量决定,即状态转换部分的参数量其主导作用。

 

假设ConvGRU模型中状态转换部分网络参数配置,(K,K)卷积核,输出通道数是C,那么其参数量为

K * K * C * C 

K*K 是单个卷积核的参数量

C 是输入和输出的通道数量(输入输出通道数必相等)


假设ConvGRU模型中状态转换部分网络参数配置,连接数是L,输出通道数是C,那么其参数量为

L * C * C 

这里不是基于卷积核的实现,所以不是 L*L, L个连接只有L个参数量。

最后,论文中采用了类似Encoder-Decoder的结构,TrajGRU相当于下图中的RNN,Downsample和Upsample分别通过卷积和转置卷积实现。

模型架构图

以上就是模型的整个算法结构,接下来会更新模型的实现以及一些训练调优小技巧。模型的实现部分会结合代码详细展开。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nobrody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值