第一, 影响人流的因素非常多,它与区域里面前一个小时有多少人进和出有关系,与周边区域有多少人进和出也有关系,甚至很远的地方有多少人进和出都会对你要预测的这个地方的人流有影响。 第二, 有很多外部因素,包括天气、事件,都会导致我们区域里面人流的变化,甚至是和平时的模式很不一样的变化。 第三, 人流是一种时空数据,它有它的空间属性和时间属性,这种时空属性很特别。这种特别的属性会导致像传统的深度学习方法不能直接应用。 为什么不能直接来用呢,我们需要从两种维度来分析,第一是空间,第二是时间。
从空间维度上来说,第一,空间属性跟一般的数据和文本不一样,空间有距离,空间有层次。第二,一个城市它有很多区,每个区又由很多街道社区组成,它有天然的层次,不像单纯的像素那样没有天然的层次感。 从时间维度上来说,人流作为一种时空属性的变量,在时间维度上具有周期性和趋势变化两种特征。 周期性就是说今天早上 8 点的车流量和昨天早上 8 点的车流量可能很像,但是和今天中午 12 点的车流量很不像,虽然今天中午 12 点钟离今天早上 8 点钟只有 4 个小时,而昨天早上 8 点钟离今天早上 8 点钟有 24 个小时,但反而是昨天更像。 而趋势性变化就是说天越来越冷了,天亮的时间越来越晚,大家出门的时间就会越来越晚,因此早高峰来的时间就会越来越晚,这种就是趋势性慢慢渐变的过程。 周期和趋势这两个东西加在一起就使得人流量作为时空数据的一种,跟以前的视频、图像和文本很不一样。因此,传统的深度学习方法就不能直接应用,所以这就是它的难点。 如何完成这项任务? 那究竟怎样完成这项难度很大的任务呢?我们来看看郑宇博士向极客公园就这个问题做出的解答: 我们用一公里乘一公里的格子把城市划分成网格,直播,把收到的人流数据,手机也好或者是出租车轨迹也好,投射在网格里面,然后我们可以计算每个格子里面有多少人进和出,这部分是很容易做到的。 一个时间段里的数据是二维的平面图,而如果你有很多的时间点,它就变成了一个时序。我们同时会有对应的事件和天气信息,这就构成了我们现在数据的输出。 有了这样的数据之后,再对时间特性进行模拟。我们把最近几个小时、几帧的数据,输入到时空残差网络(ST-ResNet)里面,模拟相邻时刻变化的平滑过程;然后把对应时间点昨天、前天以及再之前的数据输入来模拟周期性;再把更远之前(比如上上个礼拜、上个月)对应的数据拿进来模拟趋势性。
这三个结果出来之后做一个融合,再把外部事件、天气等因素拿进来进行二次融合,得到一个结果。 然后再考虑空间特性。我们知道深度卷积神经网络它是这样的过程——把一些区域划成格子之后,它会把相关的区域进行卷积运算合并到一个值,你可以认为通过一次卷积之后,我们把周围地区的这种人流的相关性给抓住了。卷积多次之后,相当于把更远的地方属性都卷积到一起了。如果你想捕捉很远的地方和你要预测的这个地方的相关性,就必须要这个网络的层次比较深,如果只有一层的话,那么根本抓不到很远地方的相关性。为什么要抓很远地方的相关性,因为当有大事发生的时候,一些人会坐地铁或者通过高速公路从很远的地方过来,根本不经过你想要预测的区域的周边。 一旦这个网络层次比较深,就会遇到问题,是什么问题?就是我们的训练会变得非常复杂、非常困难。为了保证训练效果好,可以提高训练精度,我们引入了这样一个残差网络结构。一方面为了能够捕捉距离不同区域之间的人流空间相关性,我们需要很深的卷积神经网络,可一旦卷积神经网络很深,我们训练的效果就会变得很差,另一方面我们还需要借助深度残差网络这个结构使我们的训练效果变得更好,这部分实际上是抓住了空间的属性。而前面说的那个结构就是时间属性。 (责任编辑:本港台直播) |