1
本文作者: 叨叨 | 2017-03-17 10:41 |
雷锋网[AI科技评论]按:本文根据郑宇教授在中国人工智能学会AIDL第二期人工智能前沿讲习班*机器学习前沿所作报告《多源数据融合与时空数据》编辑整理而来,雷锋网在未改变原意的基础上略作了删减。
郑宇
郑宇,微软研究院城市计算领域负责人、资深主任研究员、上海交通大学讲座教授、香港科技大学客座教授、人工智能国际权威期刊 ACM TIST 主编、美国计算机学会杰出科学家,ACM数据挖掘中国分会(KDD China)秘书长。2013年被MIT Technology Reivew评为全球杰出青年创新者(TR35)。在国际顶尖会议和期刊上发表论文百余篇,论文被引用12000多次, H-Index 53(Google Scholar,截至2017-3-15),2016年论文单年被引用3200余次。
谢谢介绍,谢谢邀请!大家经常听到的机器学习、人工智能这些概念,大部分应用案例都是在图形图像以及自然语言处理方面,在城市里跟我们生活比较接近的,特别是应用在时空数据的例子比较少。现在我就用城市大数据为例子,来说明一下机器学习如何应用于时空数据领域。
大家都知道我们现在生活越来越现代化,但是问题越来越多:交通拥堵、环境恶化、能耗增加。要解决这些问题在很多年前看似几乎不可能,因为城市设置非常复杂,环环相扣,牵一发而动全身,现在由于有了各种传感器技术的成熟和云计算单元的成熟,使得我们有各种各样的大数据,从社交媒体到交通流量,从气象条件到地理信息,如果使用得当的话,我们就能够用这些数据来发现城市面临的问题,并进一步通过组合这些数据来解决我们面临的挑战。基于这样的机遇和挑战,我们在2008年就提出了城市计算这样一个愿景,包括以下四个层面:从下往上(下图)有城市感知数据获取,城市数据的管理,城市数据的分析和挖掘到最后服务的提供。
虽然我们今天主题是叫机器学习,但是我想你们肯定想,机器学习到底能解决什么城市问题。在机器学习真正落地的过程中,可能还要依托于其他的平台甚至于其他的学科,包括数据管理。我就成体系地讲讲到底机器学习算法怎么改变我们生活中的方方面面。
从最下面的层面来看,城市数据感知这部分,其实每个层面都发现我们都需要用机器学习的方法来做一些事情,这个层面是概念上划分的,实际说是互相有交集的。
我们看城市数据的获取,获取方式主要有两种:
第一种,以传统传感器为感知的方法
第二种,以人为中心的感知方法
第一个,以传统传感器的感知方法进一步可以分成两个子类,要么把传感器放在一些固定的地方,要么把传感器装在一些移动的物体上面,比如说在公交车、出租车上装传感器,但是不管哪一种,一旦装完之后人就不参与了,这个数据自动传到我们后台。
另外一个,以人为中心的感知,这是比较新的概念,也叫群体感知,这里面也分成两个方面,一个叫做被动式群体感知,一个叫主动式群体感知。被动式群体感知,每天每个人都在参与,我们并不知道我们打电话的时候,我们的数据可以拿去改进通话网络的质量;我们并不知道我们公交车上下车刷卡的时候,这个数据可以帮助优化我们的公交线路,改进城市规划。把每个人的数据收集在一起,感知城市的变化,最后解决问题,这叫做被动式群体感知。主动式群体感知就是,任务是什么很明确,什么时间、什么地点、干什么事情、共享用什么数据,这个数据拿来干什么用都很清楚,甚至还有激励机制,你可以选择什么时候加入或不加入。这是目前城市数据来源的四种方式。
城市感知之后我们会遇到什么样的难点呢,特别是跟机器学习有什么相关性,我总结了四个方面的难点,跟机器学习相关的难点。
第一,我们在城市数据感知的时候,往往拿到的是采样数据,不是全集。
假设整个城市数据是灰色的点,我们可能只拿到红色的这一部分,某些属性在这些采样数据上分布跟在全集数据上的分布很不一样。举个实例,比如可以拿到出租车的GPS轨迹(数据),我们知道出租车只是整个城市里面车流的一小部分,出租车的分布跟我们私家车的分布可能很不一样,有的地方可能很多出租车,但是没有那么多私家车,反过来,可能有的地方很多私家车,却没有什么出租车。所以你不能说简单看到几个出租车,乘一个系数就推断有多少私家车,这个就是偏斜的分布问题,不管哪个场景里,发现我们拿到的都是采样,如何从这些采样数据里面把全集的知识推断出来,比如说怎么把整个城市里面所有车的车流量实时推断出来,这就是对应的难点。这个地方有相应的论文,如果你对这个问题感兴趣的话,类似的问题可以从这些论文里找到相关的技术,我先把它概述一下,这是第一个难点。
第二,Data Sparsity,我们的传感器往往是很少的
举个例子,我们北京市空气质量分析。北京市我们建了35个空气质量站点,你知道北京那么大,光靠这35个空气质量站点,怎么把整个北京市每个角落的空气质量都能够感知到呢,这是一个数据稀疏的问题,这里面要用到一些机器学习的方法来做。
第三,Data Missing的问题
这个问题可能很多人认为跟Data Sparsity是同一个问题,其实不是同一个问题.。Data Sparsity是采样点很少,Data Missing是说本来就应该有个点,可是因为传感器出现故障,导致这个小时的数据会丢失。Data Missing是一个雪上加霜的问题,不是同一个问题,一个是说传感器少,一个说我本来有传感器可能还会丢,怎么去把这个丢失的数据填满,这可能是很多问题需要做的预处理的第一步,后面学习的时候就要填,怎么填一下等下我来讲。Data Sparsity、Data Missing,这是第二和第三大挑战。
第四,资源有限
如何用有限的资源做更多的事情,采更多的数据,如何利用限的资源获得更大的感知效果,这是非常困难的。为什么困难?两个原因,第一,我们有很多候选集可以选,从很大的数据集里面选一部分数据的时候,往往是一个NP的问题。比如,我们城市那么大,每个路口都可以布充电桩或者加油站,而我只有钱布2到3个充电桩,我应该放在什么位置,使得效果最大化。这就是一个maximum coverage的问题。还有一个原因会导致问题更难,即我们根本不知道Ground Truth。假设北京已经有两个空气质量监测站点,我们还要建4个,我们要放在什么地方使得空气质量感知最大化,你没有建站点之前不知道这个空气质量多少,根本不知道什么叫好、什么叫坏,这是难点,里面都有相关的论文去解决这样的问题。
现在讲完城市感知的一些挑战和采集的方法之后,我们来看一个比较真实的例子。先看一个偏应用的,再看一个偏理论的。先看比较偏应用的。
我们都知道120系统,病人打电话到急救中心,急救中心会从救护车站派车把人送到医院,再返回到救护车站。救护车站并不都在医院,有很多原因。
第一,救护车运营系统和医院其实是两个不同的系统;
第二,很多时候我们必须要把救护车放在某个地方(不是在医院),要保证对任何一个呼救,救护车能在规定的时间内能够到达抢救地点。如果车都放到医院里面,必然有的地方就会太远,使得救护车不能在规定时间内到达,抢救病人。
下图是天津市的一个救护车站站点的分布图。以前站点的选址,可以说基本上是拍脑袋决定,比如根据一个地方大概的总人口数、路网密度来布置站点。大家知道120的需求量跟人口数并不一定成比例,还跟人的身体健康状况、年龄结构有关。现在我们有了真实的120求救数据,我们知道什么时间、什么地方,有多少人求救。以及救护车在急救过程中他们的GPS轨迹、花了多少时间,通过我们的方法、算法重新对站点的位置选址和布局,使得救护车救这么多病人平均抢救时间最小化。通过我们的算法重新选址后,我们能够把抢救时间缩短30%。比如,以前救100个病人假设花100个小时,现在只需要花70个小时,还是那么多车、还是那么多站点,我们却能更快地把病人送到医院。把时间节约下来留在在手术室抢救病人的生命,这是人命关天的事情,是资源调度优化的问题。这个站点如何部署就很有讲究了,你放的好和不好就会有很大的区别。
第一步放完站点之后,第二步,这个站点里面的车的数量不是固定的,有的地方早上需求量较大,有的地方晚上需求量较大,不能说车从早到晚一直放在某个站点,浪费了。这个车在站点之间如何动态调配,使得我们的资源最大化,这是问题。这是我们解决这个问题里边两个研究的点,这两个技术分别干什么事情,第一个是选站点,第二个是资源在站点之间的调配。你可以想象这是一类通用的问题。找出一个点,使得很多人到这个点的平均时间最短化。通俗的例子,比如我们10个同学聚会,选择哪个地方聚会,使得大家去的平均时间最短,这就是一个例子。我们救护车站、火警,凡是时间因素非常关键的选址都可选用这类模式。
第二个,偏理论的例子。我刚才说数据会缺失,要填补,怎么填补?这是一个非常基础的问题,几乎我们做所有的机器学习的人在第一步拿出数据的时候会发现,这个数据质量不好,有一些缺失。可能传感器坏了,或者数据没传过来。我们拿的很多数据都是有缺的,气象数据有缺的,空气质量有缺的,甚至包括车联网里面数据很多都是会出现残缺的,怎么填?这是一个很重要的问题。
我们怎么做呢?我们基本上就是利用缺失点时序以及空间邻居的数据,一起来把这个数据填满,而不是仅仅只看自己的时间临近值。至于怎么用、怎么填是有讲究的,是用前一小时的数据还是用周边的数据,这个其实是比较难决策的过程。
这个问题有几个难点,为什么很难?
第一,我们并不知道什么时候、什么地方数据缺,缺的是随机的,不是固定的,导致我们很多机器学习模型不能用。因为我们知道机器学习的输入,一定是有输入的特征、维度,各种维度是固定的,如果你不知道哪个地方会缺、哪个地方会有,你的目标在哪里都不知道,所以很难用一个很好的固定模型来做。甚至有时候会出现整体缺失,比如说6个小时断电了,所有传感器没有了,或者某一个传感器连续5、6个小时都没有数据,怎么办,这是一个难点,把缺失的数据填完是很难的。
第二,我们往往觉得用临近的差值就好了,但是临近差值并不一定就对,在很多应用场景里,特别是我们城市环境里面很多应用是不对的。用空气质量站点为例子,你们看这几个站点里面,这两个站点更近一点,这个站点更远一点,按理来讲空气质量缺失的是用近的代替更好一点,但实际发现,虽然这个站点距离近,但是这个站点是在森林里面,而两外两个站点都在商业区,商业区的空气质量更像,随着这两个商业区的位置比较远。因此,并不是越近的越像,还要看这些位置所处的环境,这会打破常规规律。时间上也是一样的,当然在平稳的时候,是越接近的时刻空气质量越像,比如,这一个小时可能跟未来一个小时的空气质量接近。当遇到大风、极端天气,出现陡降的时候,下一个小时的值可能骤降,还不如找更远的时间的空气质量还替代此刻的缺失值。时空临近不一定都是对的,可能大部分都是对的,但不一定都对。
我们用几个方法来解决这个问题:
第一,从时、空两个角度来解决
空间角度,就是可以用周边的站点数据。简单来说,把这个数据放在矩阵里面,每一行是传感器,每一列就是时间点,每个值就是这个传感器在这个时间点的读数,这个叉的就是缺的地方。这个缺的时候用周边的填,相当于用行间的关系把它填了。
时间角度,根据一个传感器自己的值,就是说前后的值、左右的值来填它,这个传感器前后时间值就对应这个矩阵里面左右行的值。
第二,从局部、全局两个角度来解决
局部,是用最近的数据来填,假设我把最近的数据形成一个小的矩阵,我们通过矩阵的关系来推断这个数值。
全局,是根据一个很长历史数据,找到经验性规律来填。 什么是全局,根据地理学第一定律,地球上越近的地方越像,大部分时候是满足这个规律的。随着距离的增加,两个点之间的空气质量相似点就应该下降,这个是正常的。往往都会用这种方法来做,跟距离成反比的线性加权关系。根据时间的话,一般都认为时间越远越不像,不像一般是指数衰减,一般是用SDS,β是一个小于1的系数,越远的越不像。这个是经验公式,不一定都满足,刚刚讲的例子就不满足,比如刚刚这两个地方虽然近,反而更远的更像,是因为这两个都是酒吧商业街,不见得这个地方就像,而且这个地方临近的时候也不见得像。这部分数据怎么办呢?就靠你最近一段时间的数据,我们不看长远的,就看最近一段时间里面的数据,把它形成一个local view。大家如果学过协同过滤,就是一个推荐的方法,我们把人看成一个传感器,你就可以用基于用户的方法和基于这个方法来做一个协同过滤。
总的来说,从时空来看,从局部全局看,2×2就有四种方法,对应四个模型,四个视角。用局部的时间、局部的空间和全局的时间、全局的空间,你分别都会有一个结果,这四个结果做一个多视角的学习(Multiview learning),得到最优解。每个模型的权重都是通过学习获得的。
总的来说,我们是要考虑局部、全局、时间、空间的关系,综合来填补缺失值。这个方法可以认为是目前在时空数据差值里面最好的方法,几乎在所有的方法里比较过是最好的。只要大家以后做传感器,做时空数据的时候,拿到数据第一步发现缺,你要填,就用这个方法。
回到我们的城市计算第二个层面,刚刚讲了城市感知层面,我们要看城市数据管理。要管好城市大数据就是三方面的东西,第一,时空数据,这是时空的属性,不是一般的文本,也不是视频。第二,就是这种增强性的云平台,不是普通的云平台。第三,时空的索引,就是查询和检索算法。
我为什么要讲数据管理呢?今天是机器学习的论坛,讲数据管理干什么呢?其实在真正的场景里面,如果没有这一层,很多机器学习的算法可能只能停留在论文上,很难在真实系统落地,数据管理的人本身跟机器学习的人应该有很好的合作关系,不是敌人,应该有机的合作。通过后面的这些例子,大家就会明白了,真正想把机器学习从理论变成实际,解决问题的话,还需要有数据管理的知识,要对平台有了解。
我们城市里面数据可能成千上万个,但是根据数据的结构来分的话其实就两种,一个是点数据,另一个是网数据。
根据数据关联的时空属性的变与不变与否,可以分成三类:1)是时间和空间都不变的,属性都不变,静态数据;2)是空间不变、时间变;3)时、空都变。
现在听起来比较抽象,所以说2×3是6组数据,你们可以想,你心目中所有的数据,我都会告诉你在哪儿。比如说我们的兴趣点数据,什么叫兴趣点?一个车站、一个酒吧、一个学校就是兴趣点,有坐标、有地址、有名称,一旦某个商场建好之后空间就不变了,有多少层楼、多少个窗户也是固定的,所以时间和空间都是静态的,这是点数据。
我们把传感器放在好,位置不变,是个点,可是每个读数随着时间变化,属于空间不变、时间变。
时间和空间都变是什么呢?就像我们去骑摩拜单车,去打Uber,坐滴滴,用户的数据就属于时空散点数据,比如2点有用户请求了,2点半有用户在另一个地方请求了,位置和位置是变化的,并且时间也在变。
什么是网络数据呢?路网是静态的,这个不变,时空都是静态的网络结构数据,一旦把交通流量叠加上来之后,就变成了空间静态,但是时间动态的数据。什么是时间和空间都动态并且网络结构信息呢?就是轨迹。我们可以想象一下,滴滴的轨迹,摩拜的轨迹,都属于这个数据,人类手机信号也属于这类数据,我们骑行也属于这个数据。
所以在摩拜和滴滴里面有两个数据,一个是用户请求数据,一个是骑行数据和开车数据。你随便想,任何一种数据都能放到这六种之一,为什么定义六种?因为不希望拿1千种数据,做1千个模型,1千种算法,这样我的系统没办法承担。一旦定义好这六种之后,可以对每种数据设定特定的管理算法、挖掘算法和机器学习算法,一旦有了数据之后,就能用这种方法套进去去做。这里面轨迹数据是最难的,是信息量最丰富的,人类的出行,打电话的记录,车的记录,飞机的记录,候鸟飞翔,飓风移动,都属于轨迹数据,因为时间、空间都在变。
讲完数据之后,讲讲平台。异构、多源、多模,是三个不同的东西。异构就是结构和非结构的;多源就是来自于不同的领域和数据源(比如气象和交通);多模,就是有文本的、影像的、语音的。在城市大数据里面,这三个是全部具备的,那我们也会同时处理这些东西。我们的应用不是城市级别的,不是说某个摄像头放在一个地方,或者在一条路上,那不叫城市计算。要做就是整个城市规模全做,需求量就是上百万级、上千万级用户规模,这种大的应用场景,这么多的数据,没有好的平台是做不到的,所以我们首先就会想到用云计算平台。但是非常抱歉的告诉大家,现在不管哪一家公司的云计算平台,都不能很好的支持时空大数据,也就是我们城市大数据,为什么呢?
有三个原因:
第一,时空数据的结构跟文本、图像是非常不一样的。大家可以想象我们拍了一个照片之后,这个照片始终是20K,拍的时候20K,永远是20K,不会说随着时间的变化不停的在变。但一辆车的轨迹在开车的过程中是不断增加的,而且轨迹中两个点不能随便交换,不像我们一般记录学生成绩,把两个学生成绩两行交换一下,并不能影响这个表格的准确性,时空数据就不能交换。
第二,我们以前查询文本的时候,可以把包含关键词的文本拿出来,但是我们做时空数据查询的时候,往往是靠一个时空范围,比如说查找我周边最近2分钟内空驶的出租车,查找过去两分钟所有这个楼周边的摩拜单车哪个是空的,这都是空间加时间范围查询,它不是一个Keyword Match的问题。甚至比如说在开车的过程中查找最近的加油站在哪里,车的位置还在变的,这都是在云计算平台里都不直接支持。
第三,真正要做城市大数据项目的时候,你发现绝对不是只用一种数据,会用到多种数据,而且还要把多种数据的知识融合在一起。要融合多源数据的话,先不把各类数据管理好,不把它有机的索引在一起,到时候根本来不及做快速融合的问题,这就叫混合式索引,数据和数据关联起来,把不同领域数据融合在一起。
这三个技术在现在的云平台里面都是缺失的。
基于这样的挑战,2015年在贵阳市,贵阳是城市大数据示范基地,我们落地了中国第一个真正意义上的城市大数据平台。
首先,我们定义了六种数据模型,刚刚介绍过,根据数据结构、时空属性变与不变,2*3=6种模型,不管什么数据,都能用这六种模型中的一种把数据装进去。我们利用了Azure本身的存储机制,我们并不是什么都自己做,全部自己做没有必要,我们是用这个来增强。这个很重要,我们在这个层面上加入了一个中间层,我们针对不同的数据结构设计了空间索引和时间索引算法,以及针对于多源数据之间的跨域管理做了混合式索引,把时空索引算法集成到 Storm、Hadoop、Spark里面去,向上提供API给我们的机器学习算法来用,使得我们的机器学习算法能够快速的访问大规模数据。如果你没有这个,你发现你真的上大系统的时候,我们连特征提取都还没做,这个任务的时间期限就到了,等不及你了。因为很多时候就是1秒钟、2秒钟就给我一个结果出来,如果我们光做特征提取就需要花了一两个小时,模型怎么上线,所以必须要有平台来支持。这里边既有分布式,也有索引,以前大家都说,我们有分布式系统了,不要索引了,那是不对的,我们可以结合在一起。有的时候你用100台机器学习做的事情,我可能2台机器就能做,因为有了索引和分布式的结合。
为了看平台的规律,给大家看几个例子。
这个是在贵阳市布充电桩的例子。假设根据过去一年车的轨迹信息,我们在这个区域内放五个充电桩,我应该放在哪五个路口,使这五个路口加在一起,覆盖的车的数量最大化,我强调一下,我们不是找最热门的前五个路口,没有意义,因为可能最热门的前五个路口都挨着,经过第一个路口就经过第二个路口,我是说五个路口加在一起覆盖的车总数最大化,就是不重复的车最大化。
以前做这个工作的时候,一轮结果计算需要8个小时到一天,因为计算量非常大。现在有个平台,3秒钟以内做出来,为什么需要做这么快呢?这又回到行业了,我们知道真正布充电桩的时候有很多因素要考虑,还有很多专业的要求,比如说这边是不是有空地,这周边有没有商场,有没有饭店来容纳我们的人,我们充电2—3个小时人去哪里,不能让他蹲在马路边,这些条件不符合的时候,可以允许用户把这某个推荐的点删掉,保留其他几个点,然后让算法回去再算,直到我得到一个满意的结果为止。
这个其实是变成一个新的概念——人机学习。新的时代已经是人的智能加机器智能合在一起。要实现人机智能,一定要提供一个交互的方法,把人的智能带进去。这个例子里面就是,我们先给算法一些简单规则,让算法找到一些初始的结果,让行业专家去看这些结果,用他的经验去判断这个点是否合适,需要删除掉还是加一个点,这样把人的知识和机器的知识融合在一起,同时把数据科学知识跟专业行业知识融合在一起。
这非常重要,往往我们做大数据、做机器学习的时候到会遇到最后一步落地困难的问题,我们只有数据科学知识,缺少行业知识,但真正解决问题两者是缺一不可。行业的人往往不懂机器学习。此外,行业专家心中有很多复杂条件,他不一定能很好的量化和表达出来。此时,利用机器学习驱动的交互可视分析的方法可以弥补两者之间的鸿沟。
正是因为要通过迭代、交互才能实现人机融合,保证算法执行的效率和性能就变得很重要。你想想,如果我们给算法一个反馈,要等一天才能看结果,人怎么能跟机器交互呢。只有像视频里那样,专家给出反馈,算法马上出结果,才能做到真正的吧人机智能交互和融合。要想获得这样的性能,刚才展现的那个城市大数据平台就变得必不可少。
这个问题刚刚说应用是在充电桩的选址,实际上广告牌的选址是一样的。很多时候说我们只有有限的钱放广告牌,我们放在哪几个路口使得覆盖最大化呢。跟我前面讲的救护车那个不一样,那个是时间最优化,这是一个覆盖范围最优化的问题。
没有平台,别想交互,别想跟人机智能结合,那我们也解决不了实际的行业问题,因为你拿这个结果给专家看的时候,我们还有很多因素没考虑呢,这个初步的结果可能根本没用。所以这也是一个行业知识跟机器学习结合的例子。
关于郑教授分享课报道的其他部分,敬请期待雷锋网的后续报道。
雷峰网版权文章,未经授权禁止转载。详情见转载须知。