【WSDM 2018】Predicting Multi-step Citywide Passenger Demands Using Atention-based Neural Networks

题目

Predicting Multi-step Citywide Passenger Demands Using Atention-based Neural Networks
(基于注意力机制的神经网络多步预测全市客运需求)

论文背景

上海交通大学计算机学院 2018WSDM(第十一届网络搜索与数据挖掘国际会议 )上的会议论文

论文摘要

现有的研究重点是预测选定地点或热点地区的下一个时间步的乘客需求。然而,我们认为 城市全网的多步乘客需求包含了时变的需求趋势和全局的客流状态,因此更有利于避免供需不匹配,并制定有效的车辆分配/调度策略。本文提出了一种端到端深度神经网络模型,采用 基于卷积和ConvLSTM单元的encoder-decoder框架 来识别复杂的特征,以捕捉 时空特性上下车交互对全市乘客需求的影响。模型中嵌入了 注意力模型 来刻画潜在的全市出行规律的影响。我们使用 出租车和自行车数据集评估模型,实验结果表明模型效果较好

论文主要观点

这篇论文是预测接下来几个时刻的流量(Multi-step)。本文认为多步需求预测(Multi-step demand prediction)更具有意义。Multi-step demand prediction 不仅能够体现流量变化的趋势,而且能够表达处全局的变化,从而能够避免因临时突发的需求变化而导致整体预测失误。首先,多步乘客需求表明了需求的变化趋势,这有助于避免存在临时需求波动时的冲动性车辆调度响应。相比之下,短期乘客需求预测结果往往是短时间的,更容易造成不必要的车辆调度。其次,大量的车辆遍布全市。预计整个城市的乘客需求将概括全局状况,从而在实现更好的车辆分配方面提供更多信息。作者还认为 需求量 (pickup demands) 同 dropoff demands 是紧密相关的,因此需要将两者结合起来构成 两个通道

注:pickup demands 指的是从某地出发的流量,dropoff demands 指的是到达某地的流量

本文研究了多步城市客流需求预测问题(某个区域上下车客流需求)。问题的关键技术挑战是如何处理

  • 复杂的时空对乘客需求的影响
  • 上下车交互作用

论文主要思路

论文提出了一种端到端的深度神经网络来解决多步城市乘客需求预测问题。将某一时段的全市范围内的上下车需求组织成一个3D需求张量,并将之前时间区间内的一系列需求张量作为输入。预测模型为 encoder-decoder 框架。在编码阶段,使用卷积单元从每个张量中提取空间特征,这些特征有效地捕捉到上下车之间的空间影响和相互作用。然后利用 ConvLSTM 揭示复杂的时空影响,从而得到输入序列的高级表示。解码器的行为与编码器相反,其输出未来的需求张量。过程中嵌入了注意力机制。

论文主要贡献及创新点

  • 文章第一次定义了全网多步预测问题。针对这一预测任务,提出了一种端到端深度神经网络模型。采用了一个基于卷积和ConvLSTM单元的编码器解码框架,能够有效地捕捉复杂的时空影响和上下车交互

  • 引入注意力模型并集成到解码器中,提高了预测性能

  • 使用纽约的出租车和自行车数据集验证模型,结果表明,该方法预测效果最好

论文主要内容

数据预处理

文章中使用的是 出租车TaxiNYC单车数据CitiBikeNYC
出租车TaxiNYC
(用从2009年到2013年五年的记录作为训练数据,同时记录在2014年和2015年分别作为验证集和测试集)

单车数据CitiBikeNYC (从2013年7月1日到2016年6月30日)
(一个自行车行程信息包含:旅行持续时间、开始和结束站id、开始和结束时间戳。使用数据从2015年7月1日到2015年12月31日作为验证集,数据从2016年1月1日到2016年6月30日作为测试集,其他作为训练数据)

首先仍旧是将整个城市划分为若干个 m × n m × n m×n 的方格,且通过一个超参数 λ λ λ 来控制方格的宽度。
如图, A A A B B B C C C 分别表示三个区域,红色的通道表示 pickup demand,蓝色部分表示 dropoff demand。从表c中可看出上一时刻的 dropoff demand 会影响到下一时刻的 pickup demand

注:pickup demands 指的是从某地出发的流量,dropoff demands 指的是到达某地的流量

在这里插入图片描述

论文问题定义

论文的第三部分给出了三个定义,分别是 Grid Map , Pickup/Dropff Demand Maps, Multi-step Citywide Demands Precition。简单来说,这三个定义分别做了如下工作:

  • Grid Map: 定义网格,将整个城市划分为若干个格子,且有一个能够控制网格宽度的参数 λ λ λ ,同时将所有的原始数据都映射到网格中

  • 统计每个时间间隔内,各个网格中的 pickup/dropoff demand

  • 定义需要解决的问题

对数据的处理和文章基本一致《Deep Spatio-Temporal Residual Networks for Citywide Crowd Flows Prediction

网络模型

论文中所用到的模型: Seq2Seq,Attention 和 ConvLSTM。在 Seq2Seq 中使用注意力机制的话,需要用到 thought vector

thought vector也就是根据编码时候各个时刻的输出和当前解码时刻的输出所计算出来的一个向量。使用 thought vector 可以从多个编码器的输出中提取信息,包括编码器的最后一步输出和其他步骤的输出,从而获得更丰富的信息表示。
在这里插入图片描述

但在论文中,作者使用的却是由 representative demand tensors(下文称作 A A A)计算出的向量。
对于任何(个人目前所知)场景下的流量预测问题,如某地区的订单量、人流量、车流量等等都是存在若干种规律的。在论文中,作者的观点认为对于某个任务来说,假如其存在 K K K 种潜在规律,那么在解码预测的时候给输入作用上某种规律,则结果应该会更好。(在翻译模型的Seq2Seq模型中注意力是作用在记忆单元的输出上的(注意力机制通常加在编码器的最后一步输出上),而在这篇论文种却是作用在输入上的)
研究发现,客流需求分布具有一定的时空规律,这可能是由潜在的全市范围内的客流格局造成的。例如,地铁车站在工作日的高峰时段的需求总是很高,而在午夜的需求却很低。为了捕捉这种规律,作者对历史需求张量执行 K-means 聚类。由此产生的 K K K 个代表性需求张量称为标注张量。在本文中,利用注意力模型将这些标注张量纳入到下一步的需求预测中,这是一种全新的尝试。

模型框架

在这里插入图片描述
论文是将某个区域根据经纬度划分为网格。将某个时间段全网所有区域的上下车需求组织为 3D 张量( M ∈ R ( n ∗ m ∗ 2 ) M∈R(n*m*2) MR(nm2)),多步预测就是输入过去多个时间段的需求,输出未来多个时间段的需求。
采用 encoder-decoder 框架。首先将乘客需求张量的输入序列“编码”为固定维表示,然后对这些表示进行“解码”,以生成未来所需张量。

编码 Encoding Previous Passenger Demands

对于Encoder部分主要包括了两个部分:CNN 和 ConvLSTM 。 Encoder输入是前 N个时间段的三维tensor。encoder部分其实就是叠加了两个 Conv 层两个 ConvLSTM 层,在 ConvLSTM 层的输出会有hidden state 和cell state,该状态会作为 decoder 的初始状态作为输入。
对于输入的demand tesors { M 1 , ⋯ M N } \{M_1 , ⋯ M_N\} { M1,MN} ,首先每一个demand tensor M t M_t Mt 都通过 L L L 层的卷积处理得到 I t , L e I^e_{t,L} It,Le,因此对于 N N N 个demand tesors 来说将得到 { I t , L e } t = 1 N \{I^e_{t,L}\}^N_{t=1} { It,Le}t=1N ;接着将 { I t , L e } t = 1 N \{I^e_{t,L}\}^N_{t=1} { It,Le}t=1N 喂给多层的ConvLSTM网络。

注意力 Attention

为了能更清楚的说明解码部分,作者解释了整个注意力计算的结构图:

  • 第一步,先利用 K K K 均值聚类确定 K K K个具有代表性的需求张量 A A A(3维张量),即前文提到的标注张量(这 K K K个标注张量应该就是 K K K的聚类中心)。然后将该向量通过一个双层的 CNN 提取特征得到 a a a (也是三维张量)。
  • 第二步,获取权重向量。将 a a a 和上一步 encoder 输出的 hidden state 展平 flatten 后输入到多层神经网络中,输出一个单一值 ɑ ɑ ɑ ,将 K K K ɑ ɑ ɑ 经过 s o f t m a x softmax softmax 函数得到归一化的权重矩阵。 K K K 个权重加权到 K K K a a a 上,得到最终的加权后的 Z t Z_t Zt。(加权这块因为 K K K a a a 都是三维张量,权重向量是一维的,即由 K K K 个权重,所以就是 K K K 个三维张量的对应位置分别用权重向量进行加权求和,即可得到最终的 Z t Z_t Zt Z t Z_t Zt仍然是三维张量)。
    在这里插入图片描述

首先需要说明的就是这个demand tensors { A k } k = 1 K \{A_{k}\}^K_{k=1} { Ak}k=1K,这也就是作者在 idea 部分说到 representative demand tensor ,它也是一个3维的张量,其中 ( A k ) i j (A_k)_{ij} (Ak)ij 反映了区域 g i j g_{ij} gij 受某种潜在规律作用后的pickup 和dropoff demands。

个人的理解是:由于每种流量数据都可能暗含着 K K K 种潜在的变化规律,而 { A k } k = 1 K \{A_{k}\}^K_{k=1} { Ak}k=1K K K K 个张量是最直接最能体现这 K K K 种规律的张量。根据论文种的介绍 { A k } k = 1 K \{A_{k}\}^K_{k=1} { Ak}k=1K 就是将原始数据集聚类后的 K K K 个簇中心。

K K K 是怎么来的呢:原文中的实验部分提到,一个恰当的 K K K 值应该满足较低的簇间距离(下图的distortion)和较高的轮廓系数(下图中的Silhouette)基于这样的原则作者在两个数据集上的 K K K 分别是16和32。
在这里插入图片描述
在有了 { A } k \{A\}_{k} { A}k 之后,进一步对其进行卷积操作得到 a k a_k ak ;接着将编码部分最后一时刻的隐含状态 H t d H^d_t Htd 分别同 a k a_k ak 通过一个2层神经网络进行相似度计算得到 α t 1 α_{t1} αt1 α t 2 α_{t2} αt2 α t k α_{tk} αtk ,最后再进一步得到注意力向量 z t z_t zt。具体公式:
h t k a = f ( W h a H t − 1 d ‾ + W a a k ‾ + b h a ) , ∀ k ∈ [ 1 ,   K ] s t k a = f ( W s a h t k a ) , ∀ k ∈ [ 1 ,   K ] a t k = exp ⁡ ( s t k a ) ∑ k = 1 K exp ⁡ ( s t k a ) , ∀ k ∈ [ 1 ,   K ] z t = ∑ k = 1 K a t k a k \begin{aligned} \mathrm{h}_{\mathrm{tk}}^{\mathrm{a}} & =\mathrm{f}\left(\mathrm{W}_{\mathrm{h}}^{\mathrm{a}} \overline{\mathrm{H}_{\mathrm{t}-1}^{\mathrm{d}}}+\mathrm{W}_{\mathrm{a}} \overline{\mathrm{a}_{\mathrm{k}}}+\mathrm{b}_{\mathrm{h}}^{\mathrm{a}}\right), \forall \mathrm{k} \in[1, \mathrm{~K}] \\ \mathrm{s}_{\mathrm{tk}}^{\mathrm{a}} & =\mathrm{f}\left(\mathrm{W}_{\mathrm{s}}^{\mathrm{a}} \mathrm{h}_{\mathrm{tk}}^{\mathrm{a}}\right), \forall \mathrm{k} \in[1, \mathrm{~K}] \\ \mathrm{a}_{\mathrm{tk}} & =\frac{\exp \left(\mathrm{s}_{\mathrm{tk}}^{\mathrm{a}}\right)}{\sum_{\mathrm{k}=1}^{\mathrm{K}} \exp \left(\mathrm{s}_{\mathrm{tk}}^{\mathrm{a}}\right)}, \forall \mathrm{k} \in[1, \mathrm{~K}] \\ \mathrm{z}_{\mathrm{t}} & =\sum_{\mathrm{k}=1}^{\mathrm{K}} \mathrm{a}_{\mathrm{tk}} \mathrm{a}_{\mathrm{k}} \end{aligned} htkastkaatkzt=f(WhaHt1d+Waak+bha),k[1, K]=f(Wsahtka),k[1, K]=k=1Kexp(stka)exp(stka),k[1, K]=k=1Katkak

解码 Decoding Multi-step Passenger Demands

Decoder 的输入即为预测的 B B B 个时间步,每个时间步都是三维 tensor。Encoder最终输出的 hidden state 和 cell state 作为decoder 的初始状态 initial state 。另外注意力部分的输出 Z t Z_t Zt 也是 decoder 部分的输出。ConvLSTM部分的计算公司如下:
i t d = σ ( W z i d ∗ z t + W h i d ∗ H t − 1 d + b i d ) f t d = σ ( W z f d ∗ z t + W h f d ∗ H t − 1 d + b f d ) o t d = σ ( W z o d ∗ z t + W h o d ∗ H t − 1 d + b o d ) C t d = f t d ∘ C t − 1 d + i t d ∘ tanh ⁡ ( W z c d ∗ z t + W h c d ∗ H t − 1 d + b c d ) H t d = o t d ∘ tanh ⁡ ( C t d ) \begin{aligned} & \mathrm{i}_{\mathrm{t}}^{\mathrm{d}}=\sigma\left(\mathrm{W}_{\mathrm{zi}}^{\mathrm{d}} * \mathrm{z}_{\mathrm{t}}+\mathrm{W}_{\mathrm{hi}}^{\mathrm{d}} * \mathrm{H}_{\mathrm{t}-1}^{\mathrm{d}}+\mathrm{b}_{\mathrm{i}}^{\mathrm{d}}\right) \\ & \mathrm{f}_{\mathrm{t}}^{\mathrm{d}}=\sigma\left(\mathrm{W}_{\mathrm{zf}}^{\mathrm{d}} * \mathrm{z}_{\mathrm{t}}+\mathrm{W}_{\mathrm{hf}}^{\mathrm{d}} * \mathrm{H}_{\mathrm{t}-1}^{\mathrm{d}}+\mathrm{b}_{\mathrm{f}}^{\mathrm{d}}\right) \\ & \mathrm{o}_{\mathrm{t}}^{\mathrm{d}}=\sigma\left(\mathrm{W}_{\mathrm{zo}}^{\mathrm{d}} * \mathrm{z}_{\mathrm{t}}+\mathrm{W}_{\mathrm{ho}}^{\mathrm{d}} * \mathrm{H}_{\mathrm{t}-1}^{\mathrm{d}}+\mathrm{b}_{\mathrm{o}}^{\mathrm{d}}\right) \\ & \mathrm{C}_{\mathrm{t}}^{\mathrm{d}}=\mathrm{f}_{\mathrm{t}}^{\mathrm{d}} \circ \mathrm{C}_{\mathrm{t}-1}^{\mathrm{d}}+\mathrm{i}_{\mathrm{t}}^{\mathrm{d}} \circ \tanh \left(\mathrm{W}_{\mathrm{zc}}^{\mathrm{d}} * \mathrm{z}_{\mathrm{t}}+\mathrm{W}_{\mathrm{hc}}^{\mathrm{d}} * \mathrm{H}_{\mathrm{t}-1}^{\mathrm{d}}+\mathrm{b}_{\mathrm{c}}^{\mathrm{d}}\right) \\ & \mathrm{H}_{\mathrm{t}}^{\mathrm{d}}=\mathrm{o}_{\mathrm{t}}^{\mathrm{d}} \circ \tanh \left(\mathrm{C}_{\mathrm{t}}^{\mathrm{d}}\right) \end{aligned} itd=σ(Wzidzt+WhidHt1d+bid)ftd=σ(Wzfdzt+WhfdHt1d+bfd)otd=σ(Wzodzt+WhodHt1d+bod)Ctd=ftdCt1d+itdtanh(Wzcdzt+WhcdHt1d+bcd)Htd=otdtanh(Ctd)
从公式中可以看到,ConvLSTM的输入除了上一时刻的 H t − 1 d H^d_{t-1} Ht1d C t − 1 d C^d_{t-1} Ct1d 之外,还有的就是当前时刻的注意力向量。在得到多个时刻的输出 H t d H^d_{t} Htd 后,再经过多层(同编码部分的CNN一样)的卷积作为整个模型的输出(其输出 H H H 再经过两个Conv 层得到最终的输出)
在这里插入图片描述
Decoder红色标注那部分,就是循环神经网络内部两种状态随时间步传递循环的过程。

总结

对于论文中的需求预测问题,首先作者认为 pickup demands 应该是与收到 dropoff demands 影响的,应该将两者进行结合
其次作者认为对于流量预测问题应该从全局最优的角度来进行考虑,故而提出了multi-step。
最后作者还认为每种流量数据都可能存在多种潜在的规律(latent mobility patterns),并且可以将这种潜在的规律作用于解码时的输入来提高预测结果。

数据集说明

出租车TaxiNYC:纽约出租车数据集,数据集是结构化文本,记录的是纽约出租车的通行信息,包括起点终点的经纬度、时间、乘客数、费用等等。数据集有四类车:Green car、Yellow car、For-Hire Vehicle(FHV)、High Volume For-Hire Vehicle(HVFHS)

注:官方已经把所有数据文件格式从 CSV 改为 Parquet 格式

纽约出租车数据集整理及数据说明

单车数据CitiBikeNYC :旅程时间、开始时间、停止时间、起始站ID、起始站名称、起始站纬度、起始站经度、结束站ID、终点站名称、终点站纬度、终点站经度、自行车号码、出生年份、用户类型–(客户=24小时通行证或3天通行证用户;订阅者=年度会员)、性别–(零=不详;1=男性;2=女性)

CitiBike System Data官网
Kaggle CitiBike System Data数据集

其他问题(参考)

解释使用 attention 的原因? 大体感觉上是寻找离 h h h 最近的一个聚类中心 a i a_i ai , 用 a i a_i ai 代替 h h h 的值(虽然都是soft ),但是不太清楚为什么要这样做。一般的 attention 系数 α α α 不是应当和 MLP 输出的值做加权平均吗?为什么这个模型里面 α α α 和聚类中心去做加权平均了呢?

:第一点,为什么要用attention?我们都知道,对于任何(个人目前所知)场景下的流量预测问题,如某地区的订单量、人流量、车流量等等都是存在若干种规律的。在论文中,作者的观点认为对于某个任务来说,假如该数据集存在 K K K 种潜在规律,那么在解码预测的时候给输入作用上某种规律,则结果应该会更好。
什么意思呢?由于这类数据通常存在着规律特性(且是多种,设为 K K K种),并且假如我们能找到这 K K K 种规律,然后将符合当前时刻输出的规律再作用于当前时刻,这样就会使得预测的结果更准确。而聚类的作用就是用来找这 K K K 种规律,Attention则是用来从 K K K 种规律中找最符合当前时刻输出的那种规律特性。

第二点,一般的 attention 系数 α α α 不是应当和 MLP 输出的值做加权平均吗?为什么这个模型里面 α α α 和聚类中心去做加权平均了呢?
答: 一般的 attention 中, α α α 通过 MLP 得到,然后再将 a l p h a alpha alpha 作用于 MLP 的输入(文中是 a 1 a_1 a1 , a 2 a_2 a2,… a k a_k ak ,也就是MLP的输入用CNN提取一次特征后的结果,形式上也差不多),可以再仔细看看论文中的网络结构。

猜你喜欢

转载自blog.csdn.net/qq_44033208/article/details/130081630