DeepETA:优步如何利用深度学习预测到达时间

2022-02-13 15:20:32

在优步,神奇的客户体验取决于准确的到达时间预测(ETA)。我们使用ETA来计算票价、估计接送时间、将乘客与司机匹配、计划交付等等。传统的路由引擎通过将道路网络划分为图中加权边表示的小路段来计算ETA。他们使用最短路径算法在图中找到最佳路径,并将权重相加得出ETA。但我们都知道,地图不是地形:道路图只是一个模型,它不能完美地捕捉地面条件。此外,我们可能不知道特定的骑手和司机会选择哪条路线到达目的地。通过使用历史数据和实时信号,在道路图预测的基础上训练机器学习(ML)模型,我们可以改进ETA,更好地预测现实世界的结果。

几年来,优步使用梯度增强的决策树集合来改进ETA预测。ETA模型及其训练数据集随着每次发布而稳步增长。为了跟上这一增长,优步的Apache Spark™ 该团队对XGBoost进行了上游改进[1,2],以使模型不断深入,使其成为当时世界上最大、最深的XGBoost集成之一。最终,我们达到了一个点,即使用XGBoost增加数据集和模型大小变得不可行。为了继续扩展模型并提高准确性,我们决定探索深度学习,因为使用数据并行SGD可以相对轻松地扩展到大型数据集[3]。为了证明转向深度学习的合理性,我们需要克服三个主要挑战:

通用性:该模型必须提供Uber所有业务线(如移动和交付)的全球ETA预测。

为了应对这些挑战,优步人工智能与优步地图团队合作开展了一个名为DeepETA的项目,以开发一种用于全球ETA预测的低延迟深度神经网络体系结构。在这篇博文中,我们将带您了解帮助DeepETA成为优步新生产ETA模式的一些经验和设计选择。

在过去几年里,人们对将世界物理模型与深度学习相结合的系统越来越感兴趣。我们对优步的ETA预测采取了类似的方法。我们的物理模型是一个路由引擎,它使用地图数据和实时流量测量来预测ETA,作为沿两点之间最佳路径的分段遍历时间之和。然后,我们使用机器学习来预测路由引擎ETA和实际观测结果之间的残差。我们称这种混合方法为ETA后处理,DeepETA是后处理模型的一个例子。从实际角度来看,通过更新后处理模型来吸收新的数据源和适应快速变化的业务需求通常比重构路由引擎本身更容易。

为了能够预测ETA残差,后处理ML模型考虑了空间和时间特征,如请求的来源、目的地和时间,以及有关实时通信量和请求性质的信息,如图1所示,它是投递放弃还是乘坐共享拾取。这种后处理模式是优步最高的QPS(每秒查询数)模式。该模型需要快速,以免给ETA请求增加太多延迟,并且需要提高ETA的准确性,如通过不同数据段的平均绝对误差(MAE)测量的那样。

DeepETA团队测试并调整了7种不同的神经网络体系结构:MLP[4]、节点[5]、TabNet[6]、稀疏的专家组合[7]、超网络[8]、变压器[9]和线性变压器[10]。我们发现,具有自我关注的编码器-解码器架构提供了最佳的准确性。图2展示了我们设计的高层架构。此外,我们测试了不同的特征编码,发现离散化和嵌入模型的所有输入提供了显著的提升。

由于Transformer在自然语言处理和计算机视觉中的应用,许多人都熟悉Transformer体系结构,但Transformer如何应用于ETA预测等表格数据问题可能并不明显。变压器的定义性创新是自我关注机制。自我注意是一种序列对序列的操作,它接收向量序列,并产生一个重新加权的向量序列。有关详细信息,请参见《变压器》一文[9]。

在语言模型中,每个向量代表一个单词标记,但在DeepETA的情况下,每个向量代表一个单一的特征,例如旅行的起源或一天中的时间。通过显式计算成对点积的K*K注意矩阵,使用这些缩放点积的softmax重新加权特征,自我注意揭示了表格数据集中K个特征之间的成对交互。当自我注意层处理每个特征时,它会查看输入中的每个其他特征以寻找线索,并将该特征的表示输出为所有特征的加权和。这个过程如图3所示。通过这种方式,我们可以将对所有时间和空间特征的理解转化为当前正在处理的一个特征,并将重点放在重要的特征上。与语言模型相比,DeepETA中没有位置编码,因为特征的顺序无关紧要。

以从起点a到目的地B的旅行为例,自我关注层根据一天中的时间、起点和目的地来衡量特征的重要性,交通状况等。图4(由Tensor2Tensor[11]生成)显示了自我注意的可视化,8种颜色对应8个注意头,共享对应随机生成的注意权重。

DeepETA模型嵌入了所有分类特征,并在嵌入之前对所有连续特征进行了Bucketize处理。在某种程度上,与直接使用连续特征相比,对连续特征进行bucketizing处理会带来更好的准确性。由于神经网络可以学习任何非线性不连续函数,所以bucketizing并不是绝对必要的,但具有bucketizing特征的网络可能具有优势,因为它不必花费任何参数预算学习来划分输入空间。与梯度增强的决策树神经网络论文[12]一样,我们发现使用分位数桶比等宽桶具有更好的精度。我们怀疑分位数桶的表现很好,因为它们最大化了熵:对于任何固定数量的桶,与任何其他bucketing方案相比,分位数桶传递的关于原始特征值的信息(以位为单位)最多。

后处理模型以纬度和经度的形式接收旅行的起点和终点。因为这些起点和终点对于预测ETA非常重要,所以DeepETA对它们的编码不同于其他连续特征。位置数据在全球分布非常不均匀,包含多个空间分辨率的信息。因此,我们根据纬度和经度将位置量化为多分辨率网格。随着分辨率的增加,不同网格单元的数量呈指数增长,每个网格单元中的平均数据量成比例减少。我们探讨了将这些网格映射到嵌入的三种不同策略:

精确索引,将每个网格单元映射到专用嵌入。这占用了最多的空间。

特性散列[16],它使用散列函数将每个网格单元映射到一个紧凑的存储单元范围中。与精确索引相比,存储箱的数量要小得多。

多特征散列,它通过使用独立的散列函数将每个网格单元映射到多个紧凑范围的容器来扩展特征散列。参见图5:

我们的实验表明,虽然与精确索引相比,特征散列节省了空间,但根据网格分辨率的不同,准确度相同或稍差。这可能是由于散列冲突导致一些信息丢失。与精确索引相比,多功能哈希提供了最佳的准确性和延迟,同时还节省了空间。这意味着网络能够组合来自多个独立散列存储桶的信息,以撤销单个存储桶冲突的负面影响。

DeepETA的服务延迟要求非常严格。虽然可以通过使用专用硬件或培训后优化来加速推理,但在本节中,我们将讨论帮助DeepETA最小化延迟的体系结构设计决策。

虽然基于变压器的编码器提供了最佳精度,但速度太慢,无法满足在线实时服务的延迟要求。原始的自我注意模型具有二次复杂性,因为它从K个输入计算K个注意矩阵。已经有多个研究工作将自我注意力计算线性化,例如线性变压器[10]、linformer[13]、performer[14]。经过实验,我们选择了线性变换器,它使用核技巧来避免计算注意矩阵。

为了说明时间复杂度,让我们使用以下示例:假设有K个维度为d的输入。原始转换器的时间复杂度为O(k2d),而线性转换器的时间复杂度为O(kd2)。如果我们有40个特征,都有8个维度,即K=40,d=8,K2 d=12800,而Kd 2=2560。很明显,只要K>;D

使DeepETA快速的另一个秘密是利用特征稀疏性。虽然该模型有数亿个参数,但任何一个预测都只涉及其中的一小部分,约为0.25%。我们是如何做到这一点的?

首先,模型本身相对较浅,只有几层。绝大多数参数都存在于嵌入的查找表中。通过将输入离散化并将其映射到嵌入,我们避免了计算任何未使用的嵌入表参数。

与其他替代实现相比,离散化输入在服务时间为我们提供了明显的速度优势。以图5所示的地理空间嵌入为例。要将纬度和经度映射到嵌入,DeepETA只需量化坐标并执行哈希查找,这需要O(1)个时间。相比之下,在树数据结构中存储嵌入需要O(logn)查找时间,而使用完全连接的层来学习相同的映射需要O(n2)查找时间。从这个角度来看,离散化和嵌入输入只是计算机科学中经典的空间与时间权衡的一个例子:通过以训练期间学习的大型嵌入表的形式预先计算部分答案,我们减少了服务时间所需的计算量。

DeepETA的设计目标之一是提供一个通用的ETA模型,服务于优步在全球的所有业务线。这可能是一个挑战,因为不同的业务线有不同的需求和不同的数据分布。整体模型结构如下图6所示。

一旦我们学会了有意义的特征表示,下一步就是解码它们并做出预测。在我们的例子中,解码器是一个具有分段偏差调整层的完全连接的神经网络。绝对误差的分布在送货旅行与乘车旅行、长途旅行与短途旅行、上下车旅行以及全球大型区域之间差异很大。添加偏差调整层来调整每个不同片段的原始预测,可以解释它们的自然变化,进而改善MAE。这种方法比简单地向模型中添加线段特征效果更好。我们实现偏差调整层而不是多任务解码器的原因是延迟限制。我们还采用了一些技巧来进一步提高预测精度,例如在输出端使用ReLU强制预测ETA为正;夹紧以减少极值的影响。

不同的业务用例需要不同类型的ETA点估计,并且在它们的数据中也会有不同比例的异常值。例如,我们希望估算票价计算的平均预计到达时间,但需要控制异常值的影响。其他用例可能需要ETA分布的特定分位数。为了适应这种多样性,DeepETA使用了一个参数化的损失函数,即不对称Huber损失,它对异常值具有鲁棒性,并且可以支持一系列常用的点估计。

不对称Huber损失有两个参数delta和omega,分别控制对异常值的鲁棒性程度和不对称程度。通过改变增量(如图7所示),平方误差和绝对误差可以平滑地插值,后者对异常值不那么敏感。通过改变ω,你可以控制预测不足与预测过高的相对成本,这在迟到一分钟比提前一分钟更糟糕的情况下很有用。这些参数不仅可以模拟其他常用的回归损失函数,还可以定制模型生成的点估计,以满足不同的业务目标。

我们利用Uber的ML平台——米开朗基罗[15]的Canvas框架来训练和部署模型。我们原型化的确切架构基本上如图8所示。一旦模型被训练并部署到米开朗基罗,我们需要为用户提供这些预测,以便实时预测埃塔。高级架构如下图9所示:Uber消费者的请求通过各种服务路由到uRoute服务。uRoute服务充当所有路由查找的前端。它向路由引擎发出生成路由线和ETA的请求。它使用此ETA和其他模型功能向米开朗基罗在线预测服务发出请求,以从DeepETA模型获得预测。定期设置自动再培训工作流,以对模型进行再培训和验证。

我们已经将这个DeepETA模型投入生产,用于全球四轮ETA预测。DeepETA模型的推出使得培训和服务大规模深度学习模型成为可能,而且效率更高。与XGBoost方法相比,该模型能更好地预测ETA。DePETA对生产中的度量提供了即时的改进,并建立了一个可以用于多个消费者用例的模型基础。

DeepETA使ETA团队能够探索不同的模型体系结构,并输出可为每个消费者定制的多个ETA。通过查看建模过程的各个方面,包括数据集、功能、转换、模型体系结构、培训算法、损失函数和工具/基础设施改进,正在进行更多的工作,以进一步扩大其可提供的准确性改进。在未来,该团队将探索增强功能,例如持续、增量培训,这将使ETA能够在更新鲜的数据上接受培训。

DeepETA是Uber AI的产品<>;地图伙伴关系。我们要感谢以下帮助实现这一目标的人:

软件工程师:Michael Albada、Apurva Bhandari、Aditya Bhave、Tanmay Binaykiya、Chongxio Cao、Sashikanth Chandrasekaran、Eric Chen、Hao Jiang、Vladimir Kuzmin、Michael Mallory、Michael Mui、Sean Po、Rich Porter、Vivek Sah、Raajay Viswanathan、Joseph Wang、Peng Zhang

阿帕奇星火™ 火花™ 是Apache软件基金会在美国和/或其他国家的商标。Apache软件基金会不认可使用这些标记。

波波夫、谢尔盖、斯坦尼斯拉夫·莫罗佐夫和阿尔特姆·巴本科。“用于表格数据深度学习的神经不经意决策集成。”arXiv预印本arXiv:1909.06312(2019)。

阿尔克、塞尔坎·O.和托马斯·普菲斯特。“Tabnet:专注的可解释表格学习。”arXiv(2020年)。

沙泽尔、诺姆、阿扎莉亚·米尔霍塞尼、克兹兹托夫·马齐亚兹、安迪·戴维斯、库克·勒、杰弗里·辛顿和杰夫·迪恩。“异常庞大的神经网络:专家层的稀疏混合。”arXiv预印本arXiv:1701.06538(2017)。

哈,大卫,安德鲁·戴和库克·V·勒。“超级网络。”arXiv预印本arXiv:1609.09106(2016)。

瓦斯瓦尼、阿什什、诺姆·沙泽尔、尼基·帕尔玛、雅各布·乌兹科雷特、利昂·琼斯、艾丹·N·戈麦斯、乌卡斯·凯泽和伊利亚·波洛苏金。“注意力是你所需要的。”神经信息处理系统的进展,第5998-6008页。2017

卡萨罗普洛斯、安杰洛斯、阿波罗夫·维亚斯、尼古拉斯·帕帕斯和弗朗索瓦·弗莱雷特。“变压器是RNN:具有线性注意的快速自回归变压器。”在国际机器学习会议上,第5156-5165页。PMLR,2020年。

Vaswani、Ashish、Samy Bengio、Eugene Brevdo、Francois Chollet、Aidan N. Gomez、Stephan Gouws、Lyon等。“神经机器翻译的张量张量”。arXiv预印本arXiv:1803.07416(2018)。

萨伯里亚人、穆罕默德、巴勃罗·德尔加多和伊夫·雷蒙德。“梯度增强的决策树神经网络。”arXiv预印本arXiv:1910.09340(2019)。

王、思农、贝琳达·Z·李、马甸·卡萨、韩芳和马浩。“Linformer:线性复杂的自我关注。”arXiv预印本arXiv:2006.04768(2020)。

Choromanski、Krzysztof、Valerii Likhosherstov、David Dohan、Song Xingyou、Andreea Gane、Tamas Sarlos、Peter Hawkins等,“重新思考演员的注意力。”arXiv预印本arXiv:2009.14794(2020)。

Weinberger,Kilian等人,“用于大规模多任务学习的特征哈希。”第26届国际机器学习年会论文集。2009