Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning



这是一篇郑宇团队2019年发表在 **IEEE Transactions on Knowledge and Data Engineering** 杂志上的一篇论文。 从题目来看文章提出的模型是一个多任务模型,在阅读文论之后发现是为了解决两个问题: ①流量预测;(同论文 [上一篇博文介绍的论文一样](https://blog.****.net/The_lastest/article/details/85001601)) ②流向预测;(从区域A到区域B的流量预测) 下面就从论文的目的、模型结构和损失函数三个方面来说一下自己的理解。

1. 论文目的

尽管上面已经总结了论文所要解决的主要问题,但笔者认为还是有必要详细介绍一下问题的背景(特别是第二个问题)以便于后面对网络模型的理解。首先,作者在介绍部分提出了从结点和边两个角度(Node-level)来分别解决这两个问题,那么这是怎么定义的呢?

1.1 Node-level

Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning

从图p0099所示为将一个大的区域划分成的若干小区域,以r1,r2,r3,r4r_1,r_2,r_3,r_4分别表示4个小的区域。从(b)图中可以看出,流入到4个区域的流量分别为3,3,0,5;从4个区域流出的流量分别为3,2,5,1;此时,就得到了图©中的上面部分,若以时间为坐标轴,我们就能够得到如p0067所示的数据帧。接着,通过对历史数据的学习来预测下一时刻的数据帧。 这就是论文需要解决的第一个流量预测问题。

Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning

1.2 Edge-level

所谓从边的角度,就是从原始轨迹数据中,将每个区域之间的人口流向及流量通过一个带权有向图来表示。如图p0099中(a)所示,蓝色和红色箭头分别表示流出和流进的方向。根据(b)中的具体情况,我们就能得到一个带权有向图(©下面部分),其中箭头表示方向,权值表示流量。同时,可以看出,若有N个区域,则对应有向图就有N个顶点,以及理论上有N平方种转移的可能性(只是有很多权值为0的边,而这也导致的数据的稀疏性)。同样,若以时间为坐标轴,我们也能得到一系列这样的有向图;接着通过对历史数据的学习来预测下一时刻的有向图,这样就得到了实体的迁移方向和数量。这就是论文需要解决的第二个问题。

但这样的带权有向图如何喂给一个网络呢?论文作者给出的方案就是将其用向量来表示,如下图所示:

Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning

在图p0100中,有向图(a)经过展开后变成了©中所示的两个矩阵。其中左边表示出,右边表示进。例如第一行的2,1,3 分别表示从r1r1r2r2的流量为2,r1r1r4r4的流量为1,r3r3r1r1的流量为3。最后,再将数据组织成(d)中的形式喂给网络进行卷积操作。值得注的是:图©中所有空白的地方都是0,这将导致(d)中每个channel的数据异常稀疏,所以作者提出先对©中的每个行向量进行Embedding操作,然后再构造成(d)的样式喂给网络。

总结一下就是,论文需要解决的就是流量进出和流量迁移方向两个方面的预测;通过对上述两个问题的解决,不仅能够知道每个区域在接下来一个时刻的具体流量,而且还知道了这些流量是从哪个区域转移过来的。

We here define the goal of our paper. Given the historical flow observations {Xt,Mtt=t1, ,tT\mathcal{X}_t,\mathcal{M}_t| t = t_1,\cdots,t_T} and external features ET\mathcal{E}_T , we propose a model to collectively predict XtT+1\mathcal{X}_{t_{T+1}} and MtT+1\mathcal{M}_{t_{T+1}} in the future

2. 模型

Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning

如图p0101所示为整个网络的结构,如果是之前了解过STResNet的话,看到这个结构那就一定不陌生了。从整体上看,整个网络呈对称的结构,上面部分为NodeNet,下面部分为EdegNet。

首先,对于上面的NodeNet来说,原始数据(最左上角)经过(1a)序列化的处理即可喂入到网络中;而对于EdeNet来说,原始数据先要经过(2a)转换为有向图,然后经过(2b)转换成矩阵表示形式再喂给网络(进入网络后首先是Em操作)。

接着,对于上下两个部分的数据来说都将流入到一个名为3S-FCN的模块中(也就是3个FCN),并且上下这两个3S-FCN模块的网络结构都相同,如下图所示。

Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning

从图p0102可知,这个FCN结构是有一系列的卷积和残差连接构成的,且一目了然就不多说。另外,虽然FCN指的是全连接卷积网络,但在论文中的提现仅仅在于上下两个网络的输入输出大小一致,在这点上和全卷积网络相同,所有作者起了’FCN’这个名字。而其它地方并没有提现出全卷积网络中的“反卷积”操作。 下一步就是对这三个部分的一个融合(作者称为PM融合),以EdegNet为例,其融合方式为:

Mfcn=WcMc+WpMp+WqMq\mathcal{M}_{fcn}=W_c\odot\mathcal{M}_c+W_p\odot\mathcal{M}_p+W_q\odot\mathcal{M}_q

在经过如上步骤之后,NodeNet部分的输出为Xfcn\mathcal{X}_{fcn},EdgeNet部分的输出为Mfcn\mathcal{M}_{fcn}。从网络结构图可以看出,Xfcn,Mfcn\mathcal{X}_{fcn},\mathcal{M}_{fcn}首先都进入到一个名为"BRIDGE"的模块,然后再分别输出。作者之所以设计这么一个模块,而不是直接进行后面的步骤,是因为作者认为这两这是相互影响的,所以也要进行融合。

Third, the in/out flows and transition flow are highly correlated and mutually reinforced. The sum of transitions streaming into a location is the in-flow of the location. Likewise, an accurate prediction of the total outflow in a location can help predict the transition flows from the location to other places more accurately, vice versa.

Considering that node flow is correlated with edge flow, so the representations learned from NODENET and EDGENET should be connected

同时,对于这两部融合的方式提出了几种4.3节中还进行了讨论。例如 sum fusion(按位加),concat fusion(堆叠)。经融合后便是卷积操作,接着就是将天气等额外因素同上一步卷积后的结果进行"Gating Fusion".

Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning

如图p0103所示,右下角的灰色方框就是训练得到的‘门’,两个门分别通过对Fx,FmF_x,F_m 的作用达到天气影响流量的拟合,然后经Tanh作用输出网络。

Fm(i,j)=σ(We(:,i,j)Et(:,i,j)+be(i,j))M^t(c,:,:)=tanh(FmMRes(c,:,:)),c=0, ,2N1X^t(c,:,:)=tanh(FxXRes(c,:,:)),c=0, ,0,1 \begin{aligned} F_m(i,j)&=\sigma(W_e(:,i,j)\cdot\mathcal{E}_t(:,i,j)+b_e(i,j))\\[1ex] \hat{\mathcal{M}}_t(c,:,:)&=tanh(F_m\odot\mathcal{M}_{Res}(c,:,:)),c=0,\cdots,2N-1\\[1ex] \hat{\mathcal{X}}_t(c,:,:)&=tanh(F_x\odot\mathcal{X}_{Res}(c,:,:)),c=0,\cdots,0,1 \end{aligned}

到这儿,整个网络的结构算是介绍完了,最后再来说说损失函数。

3. 损失函数

总的来说损失函数包含三个部分:Jedge\mathcal{J}_{edge},Jnode\mathcal{J}_{node}Jmdl\mathcal{J}_{mdl}
argmin  Jedge=tTc=02N1Qtc(M^t(c,:,:)Mt(c,:,:))F2argmin  Jnode=tTc=01Ptc(X^t(c,:,:)Xt(c,:,:))F2argmin  Jmdl=tT(X^t(0,:,:)outflowc=0N1M^t(c,:,:)outgoing  transitionsF2+X^t(1,:,:)inflowc=N2N1M^t(c,:,:)incoming  transitionsF2) \begin{aligned} argmin\;\mathcal{J}_{edge}&=\sum_{t\in\mathcal{T}}\sum_{c=0}^{2N-1}||Q^c_t\odot\left(\hat{\mathcal{M}}_t(c,:,:)-\mathcal{M}_t(c,:,:)\right)||^2_F\\[2ex] argmin\;\mathcal{J}_{node}&=\sum_{t\in\mathcal{T}}\sum_{c=0}^{1}||P^c_t\odot\left(\hat{\mathcal{X}}_t(c,:,:)-\mathcal{X}_t(c,:,:)\right)||^2_F\\[2ex] argmin\;\mathcal{J}_{mdl}&=\sum_{t\in\mathcal{T}}\left(||\color{blue}{\underbrace{\hat{\mathcal{X}}_t(0,:,:)}_{outflow}-\underbrace{\sum_{c=0}^{N-1}\hat{\mathcal{M}}_t(c,:,:)}_{outgoing\;transitions}}||^2_F+||\color{red}{\underbrace{\hat{\mathcal{X}}_t(1,:,:)}_{inflow}-\underbrace{\sum_{c=N}^{2N-1}\hat{\mathcal{M}}_t(c,:,:)}_{incoming\;transitions}}||^2_F\right)\\[2ex] \end{aligned}

其中Jedge\mathcal{J}_{edge}Jnode\mathcal{J}_{node}好理解,分别表示两个网络各自的损失。而Jmdl\mathcal{J}_{mdl}则表示二者结合起来的损失,具体是什么含义呢? 看下面的举例。

Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning

如图p0104,从本质上说左右两边的表示是等价的,因此二者之间的损失应该为0. 因此图中红色部分也就对应公式中的红色部分;蓝色对应蓝色公式。

对于inflow:
[3305][0+0+3+12+0+0+10+0+0+01+2+2+0]F2||\begin{bmatrix}3&3\\0&5\end{bmatrix}-\begin{bmatrix}0+0+3+1&2+0+0+1\\0+0+0+0&1+2+2+0\end{bmatrix}||^2_F

对于outflow:
[3251][0+2+0+10+0+0+23+0+0+20+1+0+0]F2||\begin{bmatrix}3&2\\5&1\end{bmatrix}-\begin{bmatrix}0+2+0+1&0+0+0+2\\3+0+0+2&0+1+0+0\end{bmatrix}||^2_F

整个论文的介绍就到此结束了,其它的实验对比就不细说了。对于这篇论文来说,给自己的启示也有不少:
①同一数据能够从不同角度来挖掘出有用的信息;
②损失函数的设计,损失函数个人觉得有两个地方值得学习。P,Q的引入,以及对两者的结合,看起来都很简单但是能想到这一步却不容易。要是换作愚钝的我,能想到引入P,Q就非常不错了。

Flow Prediction in Spatio-Temporal Networks Based on Multitask Deep Learning