预测人群流向:他的这项技术能知道朝阳群众们都要去哪儿
我们该如何丈量我们所生活的城市?
经济学家有 GDP 等经济学数值,社会学家有各项社会调查指标,建筑学家、统计学家…似乎各行各业都有自己「计算」一座城市的方法。那,计算机科学家该如何做这件事呢?
从 2008 年开始,来自微软亚洲研究院的郑宇博士开始主持一项名为「城市计算」的研究,具体地说,城市计算是一个通过不断获取、整合和分析城市中多种异构大数据来解决城市所面临的挑战(如环境恶化、交通拥堵、能耗增加、规划落后等)的过程。
在这个多种学科交叉(城市规划、交通、能源、环境、社会学和经济学等)、覆盖面积极大的领域,其主要研究的问题有四项:
- 城市感知:如何利用城市现有的资源(如手机、传感器、车辆和人等),在不干扰人们生活的前提下自动感知城市的韵律。如何从大量的传感器和设备中高效而可靠地收集、传送数据将给现有的传感器网络技术带来挑战。
- 海量异构数据的管理:城市产生的数据五花八门,属性差别很大。例如:气象是时序数据,兴趣点是空间点数据,道路是空间图数据,人的移动是轨迹数据(时间+空间),交通流量是流数据,社交网络上用户发布的信息是文本或图像数据。如何管理和整合大规模的异构数据是一个新的挑战。
- 异构数据的协同计算:这部分包括三个方面:(1) 如何从不同的数据源中获取相互增强的知识是一个新的课题。传统的机器学习往往基于单一数据,如自然语言处理主要分析文本数据,图像视觉主要基于图像数据。在城市计算的很多应用中,对不同性质的数据一视同仁,其效果并不理想。(2) 在保证知识提取深度的同时,如何提高对大数据的分析效率,从而满足城市计算中众多实时性要求较高的应用(如空气质量预测、异常事件监测等),也是一个难题。(3) 数据维度的增加也容易导致数据稀疏性问题。当数据规模达到一定程度,简单的矩阵分解算法都变得难以执行。
- 虚实结合的混合式系统:城市计算常常催生混合系统,如云加端模式,即信息产生在物理世界,通过终端设备被收集到云端(虚拟世界)分析和处理,最后云再将提取的知识作为服务提供给物理世界的终端用户。数据在物理和虚拟世界中来回穿行,从分散到集中,再到分散。这对系统的设计和搭建提出了更高的要求。
而在刚刚举行的 AAAI 2017 大会上,郑宇博士就城市计算问题最新发表了一篇名为《Deep Spatio-Temporal Residual Networks for Citywide Crowd Flows Prediction》的论文(下载地址在此: https://www.microsoft.com/en-us/research/publication/deep-spatio-temporal-residual-networks-for-citywide-crowd-flows-prediction/),这篇文章聚焦在「城市人流量预测」问题上,目的是希望预测整个城市每一个区域在未来某个时刻会有多少人进、多少人出。
(郑宇博士 图:微软)
举个例子,在 2014 年 12 月 31 号的上海外滩踩踏事件中,如果我们可以提前若干时间预测到当时的人流状况,相关政府部门就能提前做出人员疏导安排,防止悲剧的发生。
在贵阳预测出租车的流向
打开 UrbanFlow http://urbanflow.sigkdd.com.cn/这个网址,你能看到一个网格状的贵阳市。在这里,郑宇和他的团队把城市划成一公里乘一公里的方格,基于云计算和大数据以及 AI 技术,去预测每个格子里面未来会有多少出租车的进和出。
能获得什么样的预测结果取决于输入的数据, 「你给我手机信号,我就可以预测有多少人进和出。你给我地铁的刷卡记录,我就能预测地铁站有多少人进和出,这个模型是通用的,我们只需要在一些数据上去验证这个模型的准确性和有效性」,郑宇如是说道。
要做到这样的工作其实并不容易,需要解决的难点有三个:
- 第一, 影响人流的因素非常多,它与区域里面前一个小时有多少人进和出有关系,与周边区域有多少人进和出也有关系,甚至很远的地方有多少人进和出都会对你要预测的这个地方的人流有影响。
- 第二, 有很多外部因素,包括天气、事件,都会导致我们区域里面人流的变化,甚至是和平时的模式很不一样的变化。
- 第三, 人流是一种时空数据,它有它的空间属性和时间属性,这种时空属性很特别。这种特别的属性会导致像传统的深度学习方法不能直接应用。
为什么不能直接来用呢,我们需要从两种维度来分析,第一是空间,第二是时间。
从空间维度上来说,第一,空间属性跟一般的数据和文本不一样,空间有距离,空间有层次。第二,一个城市它有很多区,每个区又由很多街道社区组成,它有天然的层次,不像单纯的像素那样没有天然的层次感。
从时间维度上来说,人流作为一种时空属性的变量,在时间维度上具有周期性和趋势变化两种特征。
周期性就是说今天早上 8 点的车流量和昨天早上 8 点的车流量可能很像,但是和今天中午 12 点的车流量很不像,虽然今天中午 12 点钟离今天早上 8 点钟只有 4 个小时,而昨天早上 8 点钟离今天早上 8 点钟有 24 个小时,但反而是昨天更像。
而趋势性变化就是说天越来越冷了,天亮的时间越来越晚,大家出门的时间就会越来越晚,因此早高峰来的时间就会越来越晚,这种就是趋势性慢慢渐变的过程。
周期和趋势这两个东西加在一起就使得作为时空数据一种的人流量,跟以前的视频、图像和文本很不一样。因此,传统的深度学习方法就不能直接应用,所以这就是它的难点。
如何完成这项任务?
那究竟怎样完成这项难度很大的任务呢?我们来看看郑宇博士向极客公园就这个问题做出的解答:
我们用一公里乘一公里的格子把城市划分成网格,把收到的人流数据,手机也好或者是出租车轨迹也好,投射在网格里面,然后我们可以计算每个格子里面有多少人进和出,这部分是很容易做到的。
一个时间段里的数据是二维的平面图,而如果你有很多的时间点,它就变成了一个时序。我们同时会有对应的事件和天气信息,这就构成了我们现在数据的输出。
有了这样的数据之后,再对时间特性进行模拟。我们把最近几个小时、几帧的数据,输入到 时空残差网络(ST-ResNet)里面,模拟相邻时刻变化的平滑过程;然后把对应时间点昨天、前天以及再之前的数据输入来模拟周期性;再把更远之前(比如上上个礼拜、上个月)对应的数据拿进来模拟趋势性。
这三个结果出来之后做一个融合,再把外部事件、天气等因素拿进来进行二次融合,得到一个结果。
然后再考虑空间特性。我们知道深度卷积神经网络它是这样的过程——把一些区域划成格子之后,它会把相关的区域进行卷积运算合并到一个值,你可以认为通过一次卷积之后,我们把周围地区的这种人流的相关性给抓住了。卷积多次之后,相当于把更远的地方属性都卷积到一起了。如果你想捕捉很远的地方和你要预测的这个地方的相关性,就必须要这个网络的层次比较深,如果只有一层的话,那么根本抓不到很远地方的相关性。为什么要抓很远地方的相关性,因为当有大事发生的时候,一些人会坐地铁或者通过高速公路从很远的地方过来,根本不经过你想要预测的区域的周边。
一旦这个网络层次比较深,就会遇到问题,是什么问题?就是我们的训练会变得非常复杂、非常困难。为了保证训练效果好,可以提高训练精度,我们引入了这样一个残差网络结构。一方面为了能够捕捉距离不同区域之间的人流空间相关性,我们需要很深的卷积神经网络,可一旦卷积神经网络很深,我们训练的效果就会变得很差,另一方面我们还需要借助深度残差网络这个结构使我们的训练效果变得更好,这部分实际上是抓住了空间的属性。而前面说的那个结构就是时间属性。
正是因为我们有了之前对时空数据深刻的理解,我们才能设计出这样的网络结构。我们在这里只需要抽取一些关键帧,比如昨天同一时刻、前天同一时刻,其他时间的则可以不做输入,大概只要用几十帧的关键帧作为输入,就可以体现出几个月里面所包含的周期性和趋势性,使得我们的网络结构大大简化,但是训练的质量和效果却大大提高。
城市计算的想象空间还很大
目前,郑宇的团队主要在贵阳市部署了这套系统,研究采用的数据也主要是贵阳市 5000 多辆出租车的数据。未来,随着技术的进一步成熟,也许会有更多的城市采用这种城市安全预警方案。
当然,人流预测只是城市计算领域中的一个问题而已,它在物流管理、能源消耗、智能交通等不同问题上都有很大的应用空间。比如现在对人们困扰非常严重的雾霾问题,「只不过空气质量是另外一个方法,它不用考虑迁移,只要考虑每个点的影响,我们现在也是在用深度学习在做。」
在郑宇看来,未来的城市管理越来越考量的是综合实力,真正要交付城市计算的项目或者案例,一定是需要端到端的综合实力,从数据的采集、管理、分析、挖掘都要知道。不光是机器学习,还要涉及到云计算平台,并且要知道各种算法,包括数据管理、数据挖掘、机器学习、可视化等等。这种端到端的综合解决能力,才是大数据的能力。