对话 Facebook 机器学习专家 Joaquin Quiñonero Candela

  • 黄晓雯

2016 年 3 月 22 日

话题:Facebook语言 & 开发架构机器学习

Writing Sessions是 Quora 推出的与各领域专家、学者对话的板块。从去年年初开始,该板块开展了一个机器学习系列,迄今已邀请了百度首席科学家Andrew Ng、《The Master Algorithm》作者Pedro Domingos、Quora 技术副总裁Xavier Amatriain等十多位该领域专家对热点问题进行解答。

近日,Quora 邀请了 Joaquin Quiñonero Candela与网友进行问答。Joaquin Quiñonero 先后在普朗克研究所 (Max Planck Institute in Tübingen)、柏林工业大学 (Technical University of Berlin) 和微软研究院担任研究员,之后进入 Bing 带领工程团队,目前是 Facebook 公司 Applied ML(AML) 团队的主管。本次对话共有 26 个问答,问题主要围绕 Facebook 在机器学习领域的实践、学术界与产业界的异同、机器学习实践中的经验教训、团队协作与人才招聘、如何平衡工作与生活等方面。InfoQ 精选以下 5 个问答,一同了解 Joaquin Quiñonero 的观点。

问题 1:Facebook 在机器学习领域做的最有趣的研究是什么?

我所在的 Applied ML 团队是 Facebook 的应用研究部门。我们进行核心机器学习 [core ML]、计算机视觉、计算摄影和语言处理方面的研究。我们与 AI Research(FAIR) 团队密切合作,他们推动该领域的理论发展,我们则在应用方面进行补充。我想介绍几个近期让我感到非常兴奋的研究。当然这不是一个完整的列表,同时这些研究是我们与 FAIR 团队、Core Data Science(CDS) 团队以及许多产品团队共同进行的。

计算机视觉领域,我们有一个系统用于处理上传到 Facebook 的每一张图片和每一段视频,每天大约处理十亿数据。我们会预测图片内容,这一技术有很多应用场景,例如为盲人生成图片说明、自动检测并删除冒犯性的内容、优化多媒体检索结果、自动产生视觉验证码。我们使用的深度卷积网络带有数十亿参数。这个模型的有趣之处在于特征的普遍性。最近,Connectivity Lab 和 CDS 团队利用这一功能来创建基于卫星图像的高分辨率人口密度图 (查看相关视频)。

还有一些我们正在进行的很有意思的研究,包括:使用多任务学习的通用视觉模型、表征学习 (相关文献)、使用 Elastic SGD 进行大规模分布式训练、用于视频的时空卷积网络 (相关文献)、用于构建更快更好的视觉模型的级联网络 [cascade of networks for faster and better vision models]、基于视频的物体识别 (相关文献)。

语言处理方面,我们一直致力于消除 Facebook 上的语言障碍。为此,我们每天大约翻译二十亿条帖文,提供超过 40 种语言、1800 多个语言方向。我们使用过一段时间 Bing 翻译,后来改用自己研发的翻译技术。目前我们正在评估深度学习用于翻译的效果,希望能利用神经网络获得更人性化的翻译结果。

核心机器学习方面,我们专注于研究大规模实时机器学习、人工智能算法,并将其运用在一些全世界规模最大的应用上。无论用户何时登录 Facebook,这些模型都在用于排序信息流中的故事 (每日约十亿登录用户,平均每位用户 1500 多条推送)、广告、搜索结果 (每天超过十亿次请求)、热门新闻、好友推荐,以及用户收到的通知、帖文下的评论。Core ML 团队设计了先进的基于深度学习的文本理解算法。这些算法已经集成到我们构建的机器学习平台上。每个在产品里使用机器学习的团队都在使用这个平台。有超过 20% 的 Facebook 工程师 (甚至有些人不是工程师) 在使用这个平台,可见机器学习在 Facebook 有多流行。现在我们的研究方向有基于深度学习模型的事件预测、分布式稀疏建模和深度学习、基于卷积网络和循环网络的文本理解表征学习、基于多任务学习的模型压缩。

问题 2:数据、算法、架构,哪个更重要?

首先要明确,在机器学习实践中,成功意味着最大化机器学习系统对实际应用的影响。例如通过机器学习系统预测广告与用户的相关性,从而最大化广告竞价总额。竞价与两个因素正相关:

  1. 预测准确度;

  2. 可以用准确度最高的预测器进行评估的广告数量 (通常,严格的延迟限制会促使在级联方法中使用准确度较低的预测器精简候选集来提升运算速度)。

我们需要在最大化准确度的同时最小化预测所需的计算工作量。

先考虑最大化预测准确度。机器学习系统通常有实验阶段,目的是设计和训练模型。我们发现最重要的是实验速度。一个团队在单位时间内进行的实验次数越多,他们在优化模型上就能取得更多进展。在 AML,我们奉行每周更新算法的准则,取得了很好的效果。为了能在一个特定应用上每周上线至少一个模型,我们需要执行几十次线上实验和成百上千次线下实验。优良的架构、平台和工具是机器学习实践的基础,它们都可以在最大化实验速度的同时最小化线上的预测开销。

让我们回到最初的问题。这三个元素按重要性从高到低的排序是:

  • 数据:获取尽可能多的数据并确保数据质量。根据我们的经验,数据噪音总是会通过意想不到和不寻常的方式产生。我最喜欢的一个案例是,有段时间在引入用户点击广告数据时经常会失败,因为我们假设用户点击数据会发送到存储该广告的数据中心,然而实际情况并非如此。一旦解决了这个 bug,团队关心的指标立刻有了极大的提升。

  • 特征工程:做大量特征工程。将你的数据提炼成有最大预测性的信号。尽量多地构建自动化工具 (在后台不间断运行的自动化特征选择可以最大限度地利用 CPU)。我必须要强调深度学习的出现多少改变了游戏规则:深度学习可以自动化学习表征 (例如特征),因此你可以提供原始数据。例如 DeepMind 研发的学习玩经典街机游戏的项目,该项目纯粹基于屏幕像素,没有做任何特征工程。通过自动化学习表征,深度学习也彻底改变了计算机视觉和语言处理。不过,使用机器学习的产品团队仍然能不断从特性工程中获益。

  • 算法:一旦你获得了良好的数据和工具,接下来要做的就是不断提升算法性能 (但要保证算法通用性)。在 Facebook,我们会定期上线性能有很大提升的模型。但需要注意的是,这只有在训练数据量增长且性能 (包括训练和线上预测用时) 没有降低很多的情况下才有意义,否则性能的降低会抵消精度提高带来的好处。我们通常会将复杂模型带来的准确度提升情况和预测时 CPU 功耗的增加程度进行比较。这意味着我们通常会使用能完成任务的 (在计算效率方面) 最简模型。

总结:在机器学习应用中,架构是基础。然后你应致力于获取尽可能高质量的数据、开发大量特征工程以及使用能完成任务的最简算法。

问题 3:在构建通用机器学习平台时有哪些经验教训?

构建通用机器学习平台是困难的。机器学习和人工智能不断在发展变化,这使得任何通用框架要不断接受考验,而有些很快就过时了。另外,在灵活性和规模之间、灵活性和可用性之间都存在冲突,如何权衡也是构建框架时需要考虑的。

我将分享一些我们在构建 Flow 系统时的经验教训。Flow 是一个通用机器学习管道系统。工程师们利用 Flow 构建机器学习管道,以训练深度学习模型、大规模罗杰斯特回归、决策树等模型。每周,所有这些模型都会经历数次从实验阶段进入生产环境的过程,并被几十个团队使用。

理解使用场景:有很多机器学习框架都过分强调了单一的使用场景。对于 Flow,我们认为主要有两类用户:一类搭建新管道,另一类提供数据以使用管道。我们确保能为这两种场景都提供良好的体验。

构建多层平台:优秀的平台应避免用户陷入全赢或全输的局面。一个优秀的平台应该提供多层抽象。最外层提供最好的体验,如果用户无法在最外层找到他们需要的,他们应该能进入下一层。

速度,速度,速度:对于产业界的机器学习研究,应该设计支持高速计算的抽象。因为平台处理的数据量往往很大,容易形成瓶颈降低研发速度。

可重用:任何时候,工程师在 Flow 里编写新管道,公司里其他人都可以重用。这意味着工程师的创新速度与过去相比有了指数级的增长。

做好重写的准备:如果这是平台的第一个版本,你要做好重写的准备,因为会有很多错误产生,设计时糟糕的理念也会慢慢浮现。先忍耐直到你认为重写的合适时机已经到来,同时要确保在此之前你已经探讨、研究过一个更好的架构是什么样的。

避免过早推广:在推广平台前确保你已经有 2 到 3 个具体的、影响度高的场景。如果过早推广,可能会错过关键点而进展缓慢。记住,如果这是你的第一个版本,无论如何你都会重写它,所以不要过早地推广。

算法无关:通常,机器学习平台会执行许多不同的机器学习算法。在 Flow 里,我们的宗旨是平台欢迎任何算法。我们支持并构建了大部分 Facebook 工程师都需要的一些算法,但平台也对其它算法开放。这帮助 Flow 在新算法出现时仍可以得到推广。

统一接口:算法多样性是非常有益的。也就是说,一个将这些算法连接起来的统一的管道系统是非常强大的。假设你开发了一个算法,用于广告排名和搜索结果排序时非常有效。然后你只需在 Flow 里用标准接口实现一次算法执行器,广告排名和搜索结果排序管道都可以使用这个执行器。之后算法改进了,你只需进行很少的改动,就可以在所有使用该算法执行器的管道上试验和部署新算法。这使得我们的应用研究人员可以在整个公司快速扩大他们的影响力。

问题 4:学术界和产业界有哪些区别?

产业界和学术界有很多相似之处也存在很多差异。过去十年我都在产业界,所以我的观点受产业界影响更深。但我仍然和学术界保持紧密联系,我喜欢发表团队研究成果,热衷于组织和参加学术研讨会议。

数据:通常产业界会比学术界获得更多数据。互联网正在慢慢缩小这种差异,但差距依然巨大。这意味着,有时学术界使用的数据集并不能代表产业界面临的问题。但另一方面,在学术界,很多想法产生自较小的数据集,这有助于快速迭代新想法。

工具和架构:产业界拥有更多资源可用于构建工具。在产业界,你更容易与工程师和架构专家合作,他们可以帮助你为你的研究打造坚实的基础。这些性能稳定的工具能让你更快取得进展。

速度:在时间就是金钱的产业界,速度相当重要。产业界的工程师和研究员通常会优先考虑产品开发的速度和频率,因为我们的目标是最大化一段时期内产品的总体影响。更快的迭代也有助于探索新想法并忽略没有前景的方向。

目标驱动:产业界的研究是目标驱动的。我们的重点是实现业务的影响力,不断朝着公司的使命投入和推动相关研究。产业界通常会关注实践中创新和投资的规模、成本、边界情况处理和用户体验等方面。需要重点指出的是,学术界在基础研究上扮演了重要的角色。因为产业界传统上更看重短期效益,因此很多有重大变革意义的突破已经、并将持续在学术界产生。

简单性:在学术界,发表的论文和研究成果是衡量成功的主要标准。发表论文可以以结构化的方式验证新想法,但也会因为鼓励创新而忽略了有很好实践效果的想法。产业界宁可简单一些,因为处理大规模的复杂系统是很大的开销。

我们不应对事物抱有非黑即白的看法。在产业界有很多优秀的研究员,同样在学术界也有很多杰出的工程师,他们使得各领域产生突破成为可能。理想的情况是产业界和学术界一起努力,集二者之所长,共同推动该领域进步。

问题 5:招聘时你看重什么?

我看重技术实力和性格。我寻找的同事应具有以下特征:

  • 任务驱动 在研发过程中会遇到很多困难、意想不到的阻碍,会出现没有人能胜任的工作。而任务驱动型的人会凭借决心、激情、智谋和应变能力,不惜一切代价来完成项目。

  • 轻松面对不确定性 在进行巨大变革的同时也要承担技术风险。通往成功的道路总是充满未知的挑战,团队成员不应对此感到不适应。优秀的人能够散发出自信,帮助周围的工程师——尤其是资历尚欠的那些——去轻松面对不确定性。这样的人也能在前进的过程中做出正确的假设和判断。一个不完美的计划胜过没有计划。

  • 无私且乐于合作 人很难不自我,但面对足够有挑战的任务时,人们会倾向于帮助周围的人一起获得成功。我相信,无私源自于明白靠一己之力无法取得更大成功的成熟,和无需挣扎于获得短期认同感的自信。

  • 机器学习骇客 对于 AML 团队,曾经将 AI 或 ML 应用于解决真实世界问题的人,正是我在寻找的人才。我喜欢雇佣实现过多种算法的人,因为他们具有一种直觉,认为简单优于花哨。

  • 强大的技术背景 对于研究员,有强大的科研文献发表记录,最好还在 Github 等开源社区分享过代码,这会是候选者巨大的优势。

Joaquin Quiñonero 还分享了他进入机器学习领域的经历,以及他在平衡工作、家庭方面的心得。Joaquin Quiñonero 还是一名长跑爱好者,每周晨跑 50 多英里,“跑步有助于清空思绪,有点像冥想,让我可以以非常冷静沉着的状态开始新的一天”。

请访问Quora查看完整的问答记录。Quora 的机器学习系列后续还将邀请更多专家、学者,查看日程安排了解该系列最新动向,也可访问链接回顾往期对话


感谢杜小芳对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

Facebook语言 & 开发架构机器学习