时间序列预测很火的一维CNN+LSTM结构，CNN和LSTM之间该如何连接？
之前我也思考过这个问题，问题的本质原因在于：时间序列数据与文本数据、图像数据具有不同的“信息结构” 下面的讨论针对在 N 个观测对象上采集到了 T 个时间步的序列样本。y_{i,t} 表示第 i 个对象在第 j 个时间片的观测数据，其仅为单一数值。此类数据可以整理为如下的矩阵形式： \begin{pmatrix} y_{1,1}& \cdots & y_{1,T}\\ \vdots & \ddots & \vdots\\ y_{N,1}& \cdots & y_{N,T} \end{pmatrix} 是对于N 个零售物品每天的销售额， N 个交通检测器每5min检测的车流量，N 个地点的气温监测站每小时的平均温度等实际问题的抽象概括，也就是通常意义下的 N 维时间序列。 当把数据输入LSTM时，需要从数据矩阵中抽取样本整理为[batch_size, N ,time_step]的三维形式。而在具体运算的过程中，LSTM是按照time_step循环进行。在每次循环中，计算公式如下： 这样以来，问题的关键矛盾点就出现了：LSTM里面的矩阵乘法（如上图中蓝色框所示） 式中的 x_t 是输入数据，具体为[batch_size, N]维度的矩阵，即（以 q_1,q_2,\cdots,q_r 表示所选取的batch）： x_t=\begin{pmatrix} y_{q_1,1}& \cdots & y_{q_1,N}\\ \vdots & \ddots & \vdots\\ y_{q_r,1}& \cdots & y_{q_r,N} \end{pmatrix} W 是参数矩阵，具体为[N, hidden_size]维度的矩阵，即（以 s 表示hidden_size）： W=\begin{pmatrix} w_{1,1}& \cdots & w_{1,s}\\ \vdots & \ddots & \vdots\\ w_{N,1}& \cdots & w_{N,s} \end{pmatrix} 不难发现：矩阵乘法 x_t\cdot W 会把 x_t 的每一行与 W 的每一列进行逐元素的乘积，再相加来得出计算结果，即： y_{q_i,1}\times w_{1,j}+ \cdots +y_{q_i,N} \times w_{N,j} , 1\leq i \leq r,1\leq j \leq s 这样就会造成N 个检测器的数据混加在一起，而对于这个问题本身，每个检测器的时间序列本身都具有独立的语义信息，用矩阵乘法显然会让数据中原有的语义信息完全混淆在一起。 于是解决思路就是替换掉矩阵乘法，这就有了“广为流传”的ConvLSTM[1]，也就是把LSTM中的矩阵乘法换为卷积运算。 具体的计算公式和示意图如下所示： 这样以来，只有卷积核对应位置的局部元素参与运算，N 个检测器的数据就不会被混淆在一起。 ConvLSTM实现了解决问题的一大步，但其似乎也不是的最终解决答案。 原因在于：在大多数场景下， N 个检测器间并不是完全独立的，其间的关联关系需要进行刻画（很多时候表现为空间关联性），而ConvLSTM无法灵活地实现这个目标。 在我最近的一篇研究中，提出了先用GCN来提取用N个检测器的空间关联性，然后用 1\times1 卷积来代替矩阵乘法的方式。 该方法的好处在于：GCN可以根据自定义的邻接关系实现关联特征的提取，然后 1\times1 卷积完全是对于每个时间序列单独进行feature augment，极具灵活性。 所提出的模型结构如下图所示，这种方法特别适用于处理具有时空关联性的高维时间序列数据。 特别补充一点：这个方法进一步加入了缺失值补全机制并把目标函数定义为自监督形式，使得其可以直接处理含有缺失值的时间序列。 我把上图所示模型对应的代码单独整理出来，如下所示，代码基于tf1.x版本 论文链接如下，欢迎感兴趣的朋友阅读 如果上述内容对你有帮助，还希望引用我们的论文 Zhang, Z., Lin, X., Li, M., & Wang, Y. (2021). A customized deep learning approach to integrate network-scale online traffic data imputation and prediction.Transportation Research Part C: Emerging Technologies, 132, 103372. 