作者 | Haldar

译者 | 陆离

出品 | AI科技大本营(ID: rgznai100)

此前,AI科技大本营发布了关于希望通过介绍的研究成果为读者提供一些有用的帮助和指引。

模型中的生态系统

本文要讨论的机器学习现实应用,是关于根据用户预约的可能性来预订客房的模型。当用户在Airbnb网站上搜索的时候,这样的模型有助于搜索排名。新模型是通过A/B测试框架来进行在线测试,并将其性能与前几个版本进行比较。

正确的时机

最开始,Airbnb搜索排名是通过人工手动操作来完成的。

用梯度增强决策树(Gradient Boosted Decision Tree ,GBDT)模型取代手动操作的评分功能,是Airbnb历史上最大的一次关于客房预订应用的改进。

这种方法还有许多成功的迭代要继续进行,但最终性能达到饱和了,而且很难再更进一步进行提升,这就到了尝试全面改造系统的时候了。

值得关注的是,Airbnb团队已经拥有了在机器学习、数据管道和在线控制实验平台等方面的丰富经验。在此基础上,他们向神经网络迈出了第一步。

值得这么做吗?

Airbnb已经从一个梯度增强决策树(GBDT)模型作为起点逐步地向深度神经网络发展。总的来说,这一转变是“Airbnb的最具影响力的机器学习应用之一”。下面的图表显示随着时间的推移,在主要的离线指标、标准化折扣累积收益(NDCG)以及使用已部署模型实现的在线预订收益等方面的改善。

当然,在实际过程中,也经历了许多的弯路和失败的尝试:“现实中充满的失败尝试数量超过了成功的次数……”

别当英雄

Andrej Karpathy对模型架构有一个建议:别当英雄。好吧,我们可不是这样开始的…...

但在经历了几次失败的尝试之后,第一个部署到实际应用中的神经网络模型是一个简单的模型,它只有一个隐藏层,并带有32个完全连接的ReUL激活函数。与之前的GBDT模型相比,它在预订功能方面的表现一般。不过,这并不是无谓的尝试:

实践的价值在于,对于实际应用,它验证了整个神经网络管道已经做好了准备,并且能够提供客户出行方面的服务。

一开始别当英雄

我们会采纳Kapathy的建议:不要在一开始就成为英雄。

预订收益的第一个重大突破是将神经网络与Lambdarank的思想相结合起来。然而最初的神经网络使用了与GDBT模型相同的一些特性,“lambdarank为我们提供了一种直接优化NDCG神经网络的方法。”

Lambdarank模型使用了成对的{booked, not-booked}实例作为训练的输入,并通过交换成对的分类而导致的NDCG差异来衡量每一对的损失。最终的结果是预定的列表趋向于向搜索结果的顶端移动。

利用所有能利用的

本文所述的成功经历是基于神经网络模型,但也有其它的模型正处于研究之中。在某些情况下,这些模型的最终表现是类似的,但排名靠前的却大不相同。因此,在下一次迭代中尝试了将神经网络方法的优点与GBDT模型和因子分解机模型的特征结合在一起来作为额外的输入。

这些模型确实提高了预订率,但同时也付出了代价。

摒弃复杂性

在我们最后一次的飞跃中,能够通过简单地将训练数据缩放10倍并移动到具有2个隐藏层的深度神经网络来降低所有的复杂性。

但与之前的版本相比,它的宽度相对较大:一个具有195个特征的输入层,为第一个隐藏层提供带有127个完全连接的ReLUs,而第二个隐藏层提供带有83个完全连接的ReLUs。

给模型“喂”数据

伴随着模型架构的快速发展,这些模型中的特性也相应地发生了变化。

第一次尝试训练神经网络时,我们简单地将用于训练GBDT模型的所有特性都输入到神经网络中,但结果很差。

第一个改进来自于对特征标准化的应用(GDBT对精确的数值不是特别敏感,但神经网络是比较敏感的)。这在很大程度上将特征映射到在{-1,1}里的中值为0的小范围取值中。

下一个比较大的改进来自于保证这些特性的分布是平滑的。争取平滑分布有助于发现错误、支持标准化、突出一些特征工程可能有用的领域,以及发现一个模型有可能缺失了一些其它的功能。

准确回答深度神经网络擅长标准化的原因是一个十分复杂的前沿研究课题。同时,我们的专业知识是基于这样的观察而得到的:在为我们的应用而构建的深度神经网络中,各层的输出在其分布的过程中变得越来越平滑……来自较低层的平滑分布确保了上层能够正确地“插入”不可见值的过程。将这种能力一直延伸到输入层,我们尽最大努力确保输入的特性具有一个平滑的分布。

调整模型

神经网络带来了巨大的超参数空间。而最后,simple在Airbnb的表现最好。

对于应用,我们发现很难通过Adam的默认设置来提高它的性能……在LazyAdamOptimizer之下,扫除了学习率的问题,我们只是选择了一个固定的大小为200的批量,这似乎适用于当前的模型。

理解模型

随着向深度神经网络的转移,其中一件事变得更加的困难,那就是了解模型实际在做什么以及为什么这么做的原因。在尝试使用各种策略后,最适合Airbnb的是一个名为TopBot的自研发工具,一款自上而下的分析器。TopBot将排名靠前的列表中的特征值分布图与排名靠后的进行对比,这个对比突出显示了模型如何在不同取值的范围内来使用这些特征。

例如,在下面的图表中显示模型对价格的敏感度,但也显示了这个版本的模型并没有像预期的那样进行审查。

心得和体会

转向深度学习不仅仅是改变模型的内部结构,也要改变它的规模。“因此,它需要重新考虑围绕这一模式的整个体系。”

那么我们还向其他人推荐深度学习吗?那将会是一个诚心诚意的“Yes”,而这不仅仅是因为这个模型的在线表现很强劲。其中一部分是与深度学习如何改变我们未来的研究路线有关。早期的重点主要放在了特征工程上,但是在转向深度学习后,尝试通过对特征执行更好的数学计算已经失去了意义。这让我们可以在更高的层次上研究问题,比如,我们如何改进优化目标,是否准确地表示了所有的用户?

两年过去了,Airbnb的团队才刚刚起步……

原文链接:

https://blog.acolyer.org/2019/10/09/applying-deep-learning-to-airbnb-search/

(*本文为 AI科技大本营编译文章,载请微信联系 1092722531

精彩推荐

2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。

即日起,限量 5 折票开售,数量有限,扫码购买,先到先得!

推荐阅读

你点的每个“在看”,我都认真当成了AI

从0到1,Airbnb的深度学习实践经验总结相关推荐

  1. 深度学习实践经验汇总

    写在前面: 本文原载于how-to-start-a-deep-learning-project,并且在机器之心上有翻译(如何从零开始构建深度学习项目?这里有一份详细的教程). 忽略中英文的标题,因为这 ...

  2. TensorFlow损失函数(loss function) 2017-08-14 11:32 125人阅读 评论(0) 收藏 举报 分类: 深度学习及TensorFlow实现(10) 版权声明:

    TensorFlow损失函数(loss function) 2017-08-14 11:32 125人阅读 评论(0) 收藏 举报  分类: 深度学习及TensorFlow实现(10)  版权声明:本 ...

  3. 0基础极速入门!深度学习高层API最强官方课程

    近年来,随着深度学习技术的飞速发展,基于深度学习方法的前沿研究与应用实践在学术界与工业界大放异彩. 但是,对零基础的技术小白而言,深度学习并不是一个友好的领域.晦涩的理论.冗长的代码.复杂的调试.鱼龙 ...

  4. PyTorch深度学习实践

    根据学习情况随时更新. 2020.08.14更新完成. 参考课程-刘二大人<PyTorch深度学习实践> 文章目录 (一)课程概述 (二)线性模型 (三)梯度下降算法 (四)反向传播 (五 ...

  5. 收藏 | 深度学习调试经验

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨土豆@知乎 来源丨https://zhuanlan.z ...

  6. 【PyTorch】深度学习实践之CNN高级篇——实现复杂网络

    本文目录 1. 串行的网络结构 2. GoogLeNet 2.1 结构分析 2.2 代码实现 2.3 结果 3. ResNet 3.1 网络分析 3.2 代码实现 3.3 结果 课后练习1:阅读并实现 ...

  7. 【Pytorch深度学习实践】B站up刘二大人之SoftmaxClassifier-代码理解与实现(8/9)

    这是刘二大人系列课程笔记的倒数第二个博客了,介绍的是多分类器的原理和代码实现,下一个笔记就是basicCNN和advancedCNN了: 写在前面: 这节课的内容,主要是两个部分的修改: 一是数据集: ...

  8. 【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)

    从有代码的课程开始讨论 [Pytorch深度学习实践]B站up刘二大人之LinearModel -代码理解与实现(1/9) [Pytorch深度学习实践]B站up刘二大人之 Gradient Desc ...

  9. 《PyTorch 深度学习实践》第10讲 卷积神经网络(基础篇)

    文章目录 1 卷积层 1.1 torch.nn.Conv2d相关参数 1.2 填充:padding 1.3 步长:stride 2 最大池化层 3 手写数字识别 该专栏内容为对该视频的学习记录:[&l ...

最新文章

  1. mysql 主从 网络异常_mysql主从常见异常问题解决
  2. python3语法错误-Python3 错误和异常
  3. Ajax请求,跨域小坑
  4. 参数注入:使用java配置参数的方法,springboot的方法
  5. 2d的公式_用深度学习实现 2D 到 3D 的转换
  6. windows 取色器_这款 Windows 10 官方「外挂」让你取色更便捷
  7. lower_bound()和upper_bound()
  8. A - Giga Tower
  9. java的ArrayList分析
  10. eclipse优化记录
  11. SQL Server行列转换
  12. google账号已停用(已解决)
  13. 谈谈 DNS 原理及“域名劫持”和“域名欺骗/域名污染”
  14. java发送邮件连接超时,Java邮件超时和连接超时处理
  15. 白苹果修复_苹果手机突然屏幕变白怎么办
  16. h5调起app的方法;app调起vue中的某个方法
  17. 2021年 证券 考试 答案 后续培训 投资 基金 合规 政策 从业人员
  18. 互联网公司招聘--阿里巴巴--运营岗--2015年笔试题
  19. C# 委托及各种写法
  20. 解决IDEA的项目管理文件报红

热门文章

  1. css去掉a标签点击后的虚线框
  2. zabbix   微信报警( python 2.x )
  3. 翻译:AKKA笔记 - Actor消息 -1(二)
  4. windows 切换 默认 jdk 版本
  5. 1 sec on Large Judge (java): https://github.com/l...
  6. DIV限制宽度,字符断行,避免变形
  7. SharePoint Server 2007 页面模型
  8. 解决Ubuntu环境下不能QT不能输入中文
  9. echarts相关设置
  10. ReentrantLock实现原理分析