选自Googleblog
作者:Alex Fabrikant
机器之心编译
参与:王子嘉、张倩
据说,等公交有一个窍门:如果左等右等都等不到,只要点上一支烟它马上就到。这个段子似乎告诉我们,等公交是一门玄学。但在机器学习界,这类玄学问题可以用科学方式解决。
公共交通支撑着全球数亿人的日常通勤,其中一半以上都跟公共汽车有关。随着全球范围内城市的不断发展,通勤者们开始希望知道公共交通的延误情况,尤其是极易因堵车而晚点的公交车。尽管已经有很多交通机构在向谷歌地图提供实时数据,但由于技术和资源的限制,很多机构是没办法提供这些信息的。
最近,谷歌地图引入了公交车实时交通延迟提示系统,这个系统可以预测全球包括亚特兰大、萨格勒布、伊斯坦布尔及马尼拉等数百个城市的公交车延迟,它让六千多万人能更准确地预估自己的通勤时间。
通过这个系统,用户可以知道自己的公交是否会晚点,晚点多长时间。系统还能根据沿途的实时交通状况更准确地预测出行时间。此外,用户还可以在地图上精确地看到延误的位置。
这个系统上个月初开始在印度试点,它将实时交通情况预测和路线、站点数据结合起来,组成了一个机器学习模型,可以更好地预测出乘坐公交到达目的地需要多长时间。
模型的由来
在许多没有交通运输机构实时预测的城市,谷歌从被调查的用户那里了解到,他们将谷歌地图规划的行车路线作为参考,巧妙地预估了公交的延误情况。但是公共汽车不只是一个加大号汽车,它们到站要停;加速、减速和转弯会需要更长的时间;有时还有特殊的道路特权,比如公共汽车专用道。
以周三下午的悉尼公交车为例,可以看到公共汽车的实际运行时间(蓝色)比公布的时间表(黑色)晚几分钟。汽车交通(car traffic)速度(红色)确实与公交车的速度有一定关系,如公交车在 2000 米时的减速,以及在 800 米标志处的长时间停靠,都使得公交车的速度明显慢于汽车。
为了开发模型,研究人员从公交机构提供的一段时间内公交车的位置序列中(来自公交机构的实时反馈)提取训练数据,并将它们与公交行驶路线上的车辆行驶速度进行比对。他们根据公交时刻表中街区和站点的到达情况将模型划分为一系列时间轴单元,每个单元对应预测的一段时间。由于报告频率低、公交车移速快,以及街区及站点过短的情况,一对相邻观测点常常会跨越许多单元。
这种结构与最近在语音处理、机器翻译等方面都有良好表现的神经序列模型不谋而合。但谷歌的模型更简单,每个单元独立完成其对应的任务,最终的输出是每个单元预测时间的总和。与其他的序列模型不同,该模型不需要学习组合单元输出,也不需要通过单元序列传递状态。但是序列结构让我们可以同时(1)训练单个单元持续时间的模型,(2)优化「线性系统」,其中每个观察到的轨迹都将总持续时间的值作为它所跨越的单元的时间总和。
为了对从蓝点出发的公交车程(a)进行建模,模型(b)将对蓝色站点、三个路段、白色站点的时间轴单元预测延迟时间相加。
对位置建模
训练模型时,除了道路交通带来的延误,研究者还考虑了公交路线细节以及行程位置和时间。即使是在一个小社区内,该模型也需要将汽车速度预测转化为不同街道上的公交车速度。在下面的左边面板中,研究者用颜色编码了模型在一段车程中汽车速度和巴士速度之间的预测比率。较红、较慢的部分可能对应于公交车在车站附近的减速。至于高亮框中代表快速的绿色带,研究者从 StreetView(右图)中了解到,他们的模型发现了一条只允许公共汽车转弯的车道。顺便说一下,这条路线是在澳大利亚,在那里右转弯比左转慢,如果模型不考虑地理位置特殊性就会忽略这个方面。
为了获取具体街道、社区和城市的特点,研究者让模型学习一种梯度式表示区域大小的方式,模型中时间单元的地理信息(公路或站点的精确位置)由不同尺度上的位置嵌入的总和表示。他们在训练时对特定情况下的精确位置的惩罚会逐渐加重,并将结果用于特征选择。这样就可以确保考虑到百米内复杂区域中影响公交行为的细节特征,而开放的乡村中这种细粒度特征很少。
在训练时,研究者也考虑了查询情况不在训练库内的可能性。在每个训练 batch 中,他们随机抽取一些实例,并以随机比例舍弃部分地理信息。最终他们有一部分实例保留精确的公交路线和街道信息,另一部分仅保留邻近或城市级别的位置,剩下的则根本没有地理信息。这样可以使模型更好地应对后续查询不在训练数据中的情况。研究者使用了谷歌地图在客流高峰期、停车困难等项目中使用的数据库,并对用户公交车程进行了匿名推断,以扩展训练语料库的覆盖范围。然而,世界上大多数的公车路线还是不在他们数据库中,因此模型必须能够稳健地泛化到新的区域。
学习当地特征
不同的城市和社区也有不同的特征,因此研究者让模型将其位置表示与时间信号相结合。公交车有一个复杂的时间依赖性:例如周二下午 6:30 到下午 6:45 这个时间段,某些街区可能正在结束高峰时段,部分地区处于用餐时间,而有些安逸的小镇可能处于完全安静的情况。模型学习到当地时间和日期的嵌入,并与位置表示相结合,以获得类似公交站高峰时段这样明显的局部特征,而这些特征是通过汽车交通观察不到的。
这种嵌入利用 4 维向量表示一天中的时间。与大多数神经网络内部结构不同,四维空间很难可视化,所以让我们看看模型如何通过下面的艺术渲染在其中三个维度中表示时间。该模型确实了解到时间是周期性的,将时间放在「循环」(loop)中。但这个循环不仅仅是类似钟面的扁平圆圈,模型在学习中也加入了很大的弯曲度,让其他神经元组成简单的规则,以便轻松地区分「半夜」或「上午晚些时候」等概念,这些概念不会体现太多公交车行为的变化。同时,晚上的通勤模式在社区和城市之间的差异更大,模型在下午 4 点到晚上 9 点之间创造了更加「皱巴巴」的复杂模式,这样就可以对每个城市的高峰时间做出更复杂的推断。
模型的时间表示(4 维中的 3 维)形成了一个循环,可以再把它想象成手表的周长。像下午 4 点到晚上 9 点和早上 7 点到 9 点这类与地理位置相关的时间窗变得更加复杂,而像凌晨 2 点到 5 点这样的无特征大窗口则会因规则简单而极少弯曲。(来自威尔·卡斯拉 [Will Cassella] 的《艺术家的构想》[Artist's idea],使用了 textures.com 网站上的纹理和 hdrihaven 网站上的高动态范围图像。)
与其他信号一起,这个时间表示即使在车速不变的情况下也可以预测复杂的模式。例如,在乘坐 10 公里长的公共汽车穿越新泽西州时,模型注意到了午餐时间的人流量和工作日的高峰时间:
思想整合
完成模型的训练后,来看看它对悉尼公交车的了解。如果在当天的汽车交通数据上运行模型,它会给出如绿色点所示的预测。它的预测并不是百分百正确的,例如,在 800 米处,公交至少停了 31 秒,但是预测的停留时间仅有 10 秒。不过研究者在公交车运动的 1.5 分钟内做了短暂的停留,比单独的时间表或汽车驾驶时间给我们带来的信息更多。
提前规划
现在模型好像还有一件事没做,那就是公交车时刻表本身。到目前为止,在官方代理的公交时刻表实验中,他们没有显着改善研究者的预测。在一些城市,巨大的交通波动可能会扰乱对时间表的预测。还有的公交时刻表可能是准确的,但这个准确是来源于公交机构对交通模式的了解。而谷歌希望从数据中推断出这些情况。
本文为机器之心编译,转载请联系本公众号获得授权。
------------------------------------------------
领取专属 10元无门槛券
私享最新 技术干货