在Facebook,有两个实验室领导着AI发展方向,一个是Yann LeCun领导的FAIR实验室,偏向AI的基础研究;另一个,就是AML实验室,偏向机器学习应用,负责将AI技术落地在Facebook各种产品。本月初,AML实验室负责人Joaquin Candela在@Scale大会上发表了一次演讲,他讲述了Facebook在规模化应用AI技术的方方面面,包括Facebook人工智能母体FB Learner Flow平台、图像处理引擎Lumos、文本理解、语音识别、视频风格变换等各领域的应用。

20170223 02 AI02

Facebook AML实验室负责人Joaquin Candela

以下是演讲文字版:

我在Facebook已经工作了五年,这是令人愉悦的经历。今天,我想要跟大家分享一下Facebook是如何设计AI来改善人们每天的生活。

每次你使用Facebook、Instagram和Messanger的时候,可能你没有意识到,你的使用体验已经是由AI技术做支撑了。

而实际上,我想强调的一点是,Facebook如果没有AI,那就会失去存在根基。

我们在AI上面加入了双倍的投资,帮助用户彼此之间联系更加紧密,及时得知最关心的消息和内容。我们AML团队,与FAIR团队及公司内其它产品团队紧密合作。

我们面临的一个挑战就是,我们的工作是在Facebook这么大的一个规模上进行的。这周三,Facebook发布了统计数据:我们每天支持了12亿用户。也就是说,每一天就有12亿人使用Facebook 。而其中的11亿用户,都是在手机上使用Facebook 的。所以手机的使用,占据主导地位。

如何规模化设计AI(design AI at scale)?

首先,我们需要回过头去,思考“工程”这件事情,好好思考“工程”对于Facebook的价值所在。其中有2个关键的价值:关注影响力(foucus on impact)和快速行动(move fast)。前者是指,要时刻清楚了解我目前所能解决的最重要的问题是什么。关于第二点,快速行动,Facebook对于“犯错”的容忍度极大,我们反复提醒自己,有时最危险的做法就是不去冒险,不去行动其实是非常冒险的一件事情。我们需要在Facebook这么大的体量上去快速行动。

20170223 02 AI03

这些价值观,启发了AML的战略,这个战略包括 3 大基本支柱:

20170223 02 AI04

推进最新技术,最大程度实现产品影响力。我们一直与FAIR实验室及产品团队合作,推进最新的技术。我们进入非常具体的问题领域,虽然我们可能起初并不知道如何去解决,但是我们知道,一旦我们攻克这个问题,其价值将异常巨大。

通过AI打造全新产品体验。当你在现今最前沿领域工作时,你往往会遇到别人从未想过的产品体验。待会后面,我会就此举一个具体的例子来说明。

使AI大众化。“规模化”是个大事情。对于Facebook来说,你需要不断地在平台、实验室和服务项目上进行创新,让整个公司都能用你的新技术。

设计FB Learner Flow平台五要素

很久之前,我还是一名Phd学生,当时致力于贝叶斯非参数法(bayesian nonparametric method),我在其中感受了一种类似于“巫师”的力量,当被给予一个任务时,比如在不同的域里做分类和递归任务,这种解决具体问题的感觉非常好。

之后,我去了工业界。我为此感到兴奋,因为工业界充满了亟待解决的诸多问题。但很快,我变得有点“被淹没”了,因为预测任务的类型、域的数量、训练数据的数量,这些比你所能想象的要庞大的多。

我意识到,巫师不知道如何“规模化”。当我在学术界的时候,关注点在于“准确度”,我能建造一个模型,以期比其它已经发表的研究成果,多出那么0.1%的AUC值。但是在工业界我发现,最重要的事情是“迭代速度”,是你每天可以运行多少次实验。因为,你无法忽视一个事实,那就是你所做的事情是融合各方利益的,如果你每周都可以将一个新的模型投入生产中(当然在我刚加入Facebook的时候这是很困难的一件事情),最终的成果是建立在一次又一次的尝试之上的。

如果你仔细想一想,你需要探索的参数、模型架构、输入值特征等如此庞大,实验的加速会产生非常非常大的影响。

所以,你必须建造一个“工厂”(就是后面要讲到的FB Learner Flow平台),成为一个巫师很酷,但是建造一个强大的“工厂”,让公司的每个人能够并行探索这个广阔的领域,将会让你以很稳定的节奏取得进步,不断地输出对产品的影响力。

当我们在设计一个“工厂”时,我们主要考虑五个方面的事情。

性能(performance)。我们必须加快速度,之前需要花几天时间进行的实验,现在要在一个小时内完成。这种速度的提升,对人们的心理状态会产生很大影响,当你工作到晚上回到家的时候,在这一天里你实际上已经完成了实验的一部分。而在之前,可能你一天里只能弄出一个模型,回家后可能就有点忘了,再过几天,这个模型可能会崩溃掉。

自动化(automation)。这非常重要,拖慢速度的永远都是人自己。比如,我曾经有一些系统,要进行转移到新的服务器等操作,但是运行不好,最后崩溃了,这浪费了我几天的时间。所以你必须将事情自动化。

重复使用(reusability)。这点非常重要,你必须得确保其中的工作内容,是可以一遍又一遍地使用。

成套系统(turnkey)。让整个系统变得容易使用,大部分工程师都是局限于一个小的领域,没有那么全面的知识和技术。

应用研究社群(applied research community)。对于建造研究社群这一点,我充满热情,我将会对此多谈一点,关于在整个公司内部打造“应用研究社群”的力量。

而我们建造的这个“工厂”确实是有效果的,而且效果很不错。

20170223 02 AI05

我们这个平台的建造工作,目前只进行了1%,也就是说,一切还是开始。整个Facebook公司使用这个平台的人数中,超过25%的人是该平台的活跃用户。而其中令人惊讶的是,如果你仔细观察这些工程师的背景,大部分人并不是AI或ML方面的专家。

另一件事就是,我们构建了一个非常强大的应用研究社群(applied research community)。我们为这个平台的“重复使用”性能感到兴奋,当一个工程师写了一个AI 工作流(workflow),可以被其它工程师拿过来接着使用。这有一个关于Instagram的例子。去年6月,Instagram开始对它的feed进行排序,几个工程师共同完成了这个功能,而这其中花费的时间之少令人惊讶。作为对比,Facebook的feed功能在前几年进行的,这在当时就是一个大工程,因为它是从无到有建立起来的。现在,Instagram的工程师,就可以进入一个公共的实验平台,找到其它产品类似功能实现时的工作流和模型。也就是说,工程师们可以借用前人的工作成果,“站在巨人的肩膀上”建立Instagram的feed功能,而且他们也能很快找到相关同事去请教。

其中有一个数据,我很骄傲。在过去的6个月时间里,这个平台的ML工作流的数量增长了6倍。

FB Learner Flow平台

FB Learner Flow平台是一个非常有弹性的环境,用于书写和执行AI工作流。生产力是最重要的事。其中有一件很酷的事情,那就是如果你要运行某个任务,FB Learner Flow将会把一整个流程都规划好,比如硬件用什么、如何规模化等等。

FB Learner Flow平台设计之初,就把“重复使用”的理念植入其中。如果你是一个Instagram工程师,想要训练和部署你的排序模型,FB Learner Flow就像是一个放满了工作流的图书馆库(library),你可以在当中搜索、索引、发现各种工作流,然后对此重复利用。你还可以进入到算法里,你可以看到不同参数下的各种学习曲线,最重要的是,你可以看到某个特定工作流的作者是谁,这是最重要的,因为这时你就知道找谁去请教问题了。

FB Learner Flow非常综合,这里有一个有趣的故事。有一次,我对团队成员说:“伙计们,你们在这个平台上运行PyTorch、Caffe和Caffe 2,我们试试Tensorflow怎么样?”。三天后,他们跟我说,我们试了一下Tensorflow,可以运行。所以它是兼容各种语言的,这很重要。

接下来我会讲解一些关于基于FB Learner Flow平台的一些系统,包括计算机视觉引擎、文本和语言理解系统、语音等方面的内容。

图像视频理解:Lumos平台

Lumos的故事很有意思,它最初诞生于FAIR实验室,最初只是一个实验性的项目,当时有人提出,我们要不建一个可以理解所有Facebook上面图片的系统?这个项目开始的时候,看起来似乎不可能完成。后来这个项目的成员转来了AML,成了如今CV团队里的种子成员,接着我们跟FAIR实验室一起合作开发了新的Lumos平台。

20170223 02 AI06

在应用方面,Lumos如今每天都要对Facebook上的每张图片进行分析,处理的数量高达数十亿。要处理很多任务,比如:

为盲人描述图片

重现重要回忆

提供更好地图片和视频搜索结果

保护人们不受有害内容的侵扰

一件很酷的事情就是,我们有一个共享的训练库,Lumos上已经有超过一亿训练样本,并且这一数据还在增长。

去年,我们升级了Lumos的核心模型,不出意料,是的,更新成为了一个Deep Residual Network(Deep ResNet)。当我们启动新模型时,那感觉就像是,潮水升起,带着船只也升高。也就是说,Facebook公司内所有依赖Lumos的模型,一下子准确度都提高了。但是,有一个问题,从无到有训练这些模型,然后转移到新的架构里,是需要重新训练的,而这会花费很长时间。还有就是,有很多的任务需要这样的模型,如果我们用专用的ResNet为每一个应用工作,当你整个公司有数百个应用的时候,你很快就会无法忍耐计算量和数据集的局限。

现在这两个问题,我们都一次解决了。我们解决问题的方式,比较像是一个多层蛋糕。

20170223 02 AI07

现在,你有一个大型主模型(master model),这个模型是用你所有的数据来训练的,并且解决了数千个不同的预测任务。这个模型定期更新,随着你处理越来越多的任务,那么之后,当你处理一个新任务时,并不需要从头开始做。ResNet已经学习的特征是非常有用的,所以你的出发点可以换到更高一层,而不是从原始的像素开始。

但是,这当中有一个需要寻找“平衡点”(trade off)的过程,如果你在靠近输出层(output layer)的地方开始,那么就不需要重复训练每一层的模型,这样的结果是,你很快就可以得到的一个新任务模型,但是就会牺牲一些准确性。相反的,如果你不采用这种方法,而是在靠近输入层(input layer)的地方开始,输入层特征更加通用,但是你要接下来训练很多层模型,这会花费你很多的精力。

所以要知道最好的“平衡点”是什么。所以,我来跟大家展示,一个新的任务团队来使用Lumos的时候,会是一个怎样的体验,记住,“易用性”是里面最关键的地方。

比如,我们要建立一个全新的模型,来分辨出“人骑马”的图片。那么最一开始,我们需要什么呢,当然是训练数据。然后用一些关键词,比如“人”、“马”等,从Facebook和Instagram的公开照片里,检索出关键词的图片。

当我们得到这些图片时,一个很酷的事情就是Lumos平台会做一些类别排序,你能够快速检索到特定类别的图片,你可以为你所有的数据打上符合或不符合的标签,制作成训练集。然后你可以做一个我们称为“现场预览”(live preview),来看看它的运行状况如何,纠正一些错误。你所训练过的模型,Facebook的其他工程师在FBLearner Flow也可以重复利用。随着其他人对它的训练越来越多,这个模型也会变得越来越精确。

下面我跟大家展示另一个训练模型例子,你可以看到它被训练的效果很好。只要有了生产数据,这个模型就能在你的产品上运行起来。这意味着什么呢?这意味着只需要几分钟,我们就获得了一个新的模型,这个模型就有能力识别Facebook上发布的所有新照片。而我们每个人都可以在Facebook上用这个模型。就这么简单。

看它的一个成果,这是我女儿,她正在骑马。有趣的是,你可以在分类上看到“people riding on horse”,这说明Lumos起作用了。它识别出了horse,animal和people riding on horse。除此之外,它还有ranch(大牧场)标签,这说明之前有人让模型学习过“ranch”这个标签对应的是什么图形,同样道理,下面还有outdoor,nature和has person。

20170223 02 AI08

现在我知道它已经学会识别某些图片了,但这还不够。我还想知道它哪里有缺陷。

然后我就想,这里有没有“sitting on chair”的模型。接下来我看到了Lumos呈现出来的这张人坐在椅子上的图片。在这张图片的分类里有people sitting,face, table,indoor,restaurant indoor等几个标签,这都很好。但并没有chair这个标签,这很不可思议。不过不用担心,我已经知道怎么修补这个缺陷了。只需要训练这个模型几分钟,它就学会要在有chair的图片里加上“chair”这个标签了。

20170223 02 AI09

下面我给大家展示两个其他研发团队是如何应用Lumos平台的。

  • 图片搜索。

现在,纯粹的以图搜图技术已经投入应用了。大家中场休息的时候可以用自己的手机试一下,点击搜索引擎上的photo指令,用图片搜索图片。

我记得有一次我过生日的时候,我们没点生日蛋糕,而是由我自己亲手做了派拉(Paila,一种拉美菜)。我把和派拉的合照发布在了网上,但是上面并没有出现任何关于这道菜的描述,但是当我再次搜索派拉图片的时候,我看到了下面结果:

20170223 02 AI10

看,我的照片在搜索结果中,Lumos再次成功运行。这个过程很简单并且效果还可以,不过我们要求的是精益求精。

所以图片搜索的原理是什么呢?简单来说,搜索图片原理的关键之处就在于“概念”,即你搜索的内容和图片显示内容之间有共同的概念。搜索图片就是让Lumos对图片的预测和对搜索内容的预测匹配起来。

下面这张图片,看起来像是中央公园(central park)。

20170223 02 AI11

从图片中可以提取出的概念有sky,cloud,city,park,grass,foliage和skyscraper等。

而在查询(query)部分,我们用理解引擎把实体central park和要查询文本“central park”联系起来。因此,查询机制从“central park”中提取出来的概念有location,park,place,attraction等等。现在,你有了两组概念,接下来的事情就是寻找其中的关联度。而你所做的,就是输入查询“central park”,最后得的到底是不是你想要的图片,它们的概念匹配到底对不对。是的,它再一次成功运行了。

而接下来,我们为什么不能用这种方法做更多事呢?

我们希望用这种方法解决更多问题,因为它有很强的交互性(interactive)。我们上面说的认为挑选出来以训练分类器的概念,其实事实上照片不知道它对应的是哪一部分。所以更好的办法就是直接把图像和查询内容共同嵌入在共同潜在空间(common latent spaces)中,用减少排序损失(ranking loss)的方法进一步提高图片搜索的精确度。

20170223 02 AI12

你的团队可以用这种方法训练分类器,看它的匹配性能强不强。在这个图中你看到query出现了两次,这表示这个研究团队在选择更合适的排序损失。他们会给同一个查询内容,然后看哪个带有标签的知识更匹配你要查的内容,以确保你的嵌入的排序损失达到最小化。而结果表明,用这种方法进行图片搜索,匹配度的确高了很多。

20170223 02 AI13

  • 自动转换文本

去年4月,我们公司上线了自动转换文本(automatic alternative text,AAT)技术。用该技术,Facebook可以通过图像识别认出用户发布的图片中包含的信息并读出来,帮助盲人“看到”网站上的图片。我们周围的盲人有好几亿,所以解决帮盲人阅读网络上的图片这个问题迫在眉睫。

20170223 02 AI14

Facebook从这三张图中看到得分别是:左图——披萨、食物,中图——树、天空、户外、右图——两个人、微笑、太阳镜、户外、水。

而右图除了有实物“两个人”,还包含有人的动作“微笑”。我们发现Facebook可以读出这里面有人,可以读出来人在做什么。而对该技术的研发团队来说,他们想做的就是希望告诉盲人“图片中的对象在做什么”,这和仅告诉他们“图片里面有什么”,有相当大的区别。

大家可以看下面一个例子:

20170223 02 AI15

Facebook用语音描述了一张图片,“说”:Image may contain one person ,on stage and playing music al instrument(该图片可能包含了一个在舞台上弹乐器的人)。

而它聪明的地方在于,它并没有给出像one person,person on stage,person are playing musical instrument这样的描述。所以这是Facebook在进行自然语言处理(NLP)时,为了呈现出描述更符合自然语言所涉及到的另一个技术点。

进行图片搜索时我们同时用到了两项技术,一个是平台上的文本理解技术,另一个是计算机视觉技术,即Lumos。

深度语义识别产品: Deep Text

而我们接下来讲的是基于文本理解技术的另一个产品Deep Text。

20170223 02 AI16

就像做计算机视觉技术一样,Deep Text所需要处理的数据量之大和大数据对系统的要求之高,是难以想象的。每天在Facebook上发布的翻译帖子高达40亿条。语言对文字内容的依赖程度非常强,因此想要精确地分析短语语义,尤其是用一种语言来解释在另一种语言中原本不存在的现成说法。在这里我跟大家讲一个关于语言翻译的笑话,来说明语言真的非常难以理解。笑话是这样的,说有一个人要进行中俄互译,英译俄的英语原句本来是是“Out of sight,out of mind(看不见了,也就忘了)”,而再把译成的俄语反译为英语的时候,句子则变成了“invisible idiot(看不见的傻子)”

20170223 02 AI17

Deep Text的一些应用

  • 用于销售

人们使用Facebook的范围,已经大大超出我们的想像,比如用它买卖产品,如下图所示。

20170223 02 AI18

你希望人们能用母语在上面发布信息,你需要发现他发布的信息中蕴含有销售意向,并且把帖子归类为销售帖,让你能更快完成交易。

  • 用于移动聊天工具

Deep Text另一个核心应用是在移动聊天工具上。比如你和一个朋友说“hey,我想搭个便车”, Deep Text就能识别出“需要坐车”,或者你发“我不需要搭便车”,那么它就不会出现任何提示,但你发“让我们打车去那吧”,“我喜欢骑驴”,“打个的士”,“打个出租车”, “但是我需要打个的”,它都会出现“需要坐车”的提示。

20170223 02 AI19

  • 用于社交推荐

还有一个是用在社交推荐上。如果有人在上面发帖子,请朋友推荐个餐厅、美容院之类的,Deep Text就能自动把朋友们的选择推荐给你,并在地图上标出实体所处的地理位置。

20170223 02 AI20

语音识别

20170223 02 AI21

我们平均每天转录约100万个视频文件,为其自动加字幕。这个功能对网站来说大有益处。很多地方性团体或企业都有网站,而用了我们这个功能之后,他们网页的流量也会随之增加。

除此之外,我们还做了一件非常棒的事——大开脑洞,把自动语音识别技术用在社交VR上,这个产品就是Social VR avatar。如果Social VR avatar发现有一个人正在说话,那么它不仅能较准确地还原出说话人讲的内容,还能把他的动作,神情等都在虚拟任务上精确还原出来。

视频风格变换

最后,我要介绍一下Facebook另一个超级炫酷的摄像功能。

20170223 02 AI22

它好玩的地方是,在你录像的同时,相机可以为你的录像内容实时添加你喜欢的艺术滤镜。我们研究这个功能的时候发现它实时添加滤镜的速度太慢了。一开始它处理一帧需要花十几秒,但如果让它在手机上实时添加滤镜的话,我们要求它一秒钟可以处理数十帧。在这里顺便提一下,作为参考,其他同类可以实时添加滤镜的应用都是在GPU服务器上跑的。这就是我们研究的时候遇到的困难。不过后来我们找到了更好的算法模型,在和FAIR实验室同仁的共同努力下,解决了这个问题。

给大家展示下面三个视频中。第一段视频是研发团队在骑自行车,你可以看到视频时加过滤镜的,并且是当时实时加上去的;第二个视频录的是美国某个城市的公交车;第三个视频是一个很有趣的小应用,用户的手移动时,手机上的小颗粒的状态也会随之有变化。

所以,我今天想和大家讲的关键点就在于,我们想设计能在生活中广泛应用的AI应用。让乡镇也能用上我们的应用是我们要实现的大目标。为了实现这个目标,我们需要让整个公司都更强大起来,我们需要专注于研发更多令人拍手称赞的平台,专注于产品的可用性,专注于建立更优秀的研究团体。

我的演讲就到这里,谢谢大家。