来源:谷歌开发者
摘要:5 月 ,TensorFlow 中国研发负责人、Google 搜索架构技术总监李双峰受邀参与北京大学“人工智能前沿与产业趋势”系列座谈会,分享了深度学习的发展与应用、TensorFlow 从研究到实践的相关内容。
5 月 ,TensorFlow 中国研发负责人、Google 搜索架构技术总监李双峰受邀参与北京大学“人工智能前沿与产业趋势”系列座谈会,分享了深度学习的发展与应用、TensorFlow 从研究到实践的相关内容。
感谢作为北京大学“人工智能前沿与产业趋势”系列座谈会合作媒体的量子位旗下公众号“吃瓜社”俞晶翔、张康对活动的记录,演讲嘉宾李双峰也参与本文的联合撰写和修改。
主讲嘉宾:李双峰,TensorFlow 中国研发负责人、Google 搜索架构技术总监。Google 中国最早期的工程师之一,目前在 Google 领导了涉及人工智能、搜索架构和移动应用领域的多个项目。他负责 TensorFlow 中国研发团队,并总体推动 TensorFlow 在中国的发展。
用深度学习解决最具挑战性的问题
深度学习带来机器学习的革命。我们看到“深度学习”这个词在搜索中的热度近年来快速提升。
在 arXiv 上的机器学习论文数量急剧增长,增长速度居然赶上了摩尔定律。
深度学习不仅仅能够解决图像识别的问题,它拥有非常强大的学习能力。把深度神经网络比喻成一个函数,这个函数非常强大,可以处理多种输入和输出,而深度学习算法可以自动学习这个函数。
如果输入一张照片,输出一个图像的标签,比如说是"狮子",这是一个图片分类的问题。
如果输入是一段音频,输出是一段文字,这就是语音识别的问题。
如果输入是英文,输出是法文,这就是机器翻译的问题。
更进一步:输入一张图片,输出文字的描述,这就是看图说话的问题。
用相似的简单方法,解决多个问题,这是产业界特别喜欢的东西,因为他们大大减少了工程方面的复杂度。
深度学习并不是全新的东西,但为什么在过去的几年当中带来了极大的突破?
我们看到两条线:一条是基于深度神经网络的解决方案,一条是基于其他机器学习方法。在八九十年代之前,神经网络就已经出现了,不过那个时候受限于计算能力,模型的规模比较小,所以它的表现不如一些经过优化过的其他机器学习方法,这样就很难解决真实的大规模问题。
随着计算能力的增加,可以看到深度学习解决问题的精度,已经超过了其他机器学习方法。
以图片识别问题为例,在 2011 年的时候,它的错误率是 26%,而人只有 5%,所以这个时候离实用有非常大的距离。到 2016 年为止,它的错误率已经减少到了 3% 左右,深度学习在该领域呈现出非常惊人的能力,这就是为什么深度学习在图像识别领域吸引了产业界的大量关注。
我们看看深度学习如何帮助解决工程界的重大挑战。
2008 年美国工程院发布了 21 世纪的一系列重大挑战,其中包括:便宜的太阳能、药物工程优化、虚拟现实、和个性化学习等等。
交通是一个面临重大挑战的问题。Google 的母公司 Alphabet 旗下有一家公司叫 Waymo,专注于自动驾驶。他们已经做了大量的真实道路测试,以及模拟环境的测试。他们的车能够识别路上各种移动的对象,以及交通灯。
过去十年中,Google 在机器翻译领域的工作在业界领先,但是之前都是基于短语统计的方式 ,质量提升遇到了瓶颈。
过去两年,Google 推出了基于神经网络的机器翻译技术(GNMT),大大提高了翻译质量。在多个语言的质量评估上,平均质量提高 50% 到 80% 以上,这超过了过去十年的工作。在若干语言的翻译上,机器翻译已经接近人类水平。这是促进人类沟通和交流的一个重要突破。
更重要的是,Google 不仅把该技术的论文发表,而且开放了基于 TensorFlow 的源代码。开发者使用这些代码非常简单,一两百行代码就可以做一些类似于 GNMT 的基于神经网络的机器翻译系统。
另外一个意义是在工程上。从工程的角度来说,希望用尽量简单的方案,去解决复杂问题;而不是为每一种语言对的翻译都设计不同的系统和模型。从这个角度来说,基于神经网络机器翻译能够带来明显优势。
医疗是 Google AI 研究投入的一个重要方向,因为我们认为医疗领域是 AI 应用一个非常重要的场景,也对造福人类具有深远意义。
比如AI检测眼科疾病:左边是正常的视网膜照片,右边是糖尿病可能导致的视网膜病变照片,它可能会导致糖尿病患者失明。
我们在一个权威的美国医学杂志上发表的研究表明:AI 识别这些有病变的视网膜照片的精度,水平超过了眼科医生的平均水平。
图像识别是一类问题,包括刚才提到的视网膜照片监测问题,还有 X 光拍片的识别。
下一步看看科学的发展。
不过,有没有一些工具,能够帮助加速科学发现的进程呢?
TensorFlow 的目标是成为人人可用的机器学习平台,能够帮助机器学习的研究者、开发者,去表达自己的想法,去进行探索性研究,去建立自己的系统,去实现基于具体场景的AI应用和产品。有了通用的平台,才能更好的促进行业交流,推动行业创新。Google 内部大规模使用 TensorFlow 来做研究和产品,而业界可以基于 Google 的实践和经验。
今天,我们现在做机器学习的解决方案,需要机器学习方面的专家,需要数据,也需要很多的计算。
解决方案 = 机器学习专家 + 数据 + 计算
机器学习专家需要很多时间来培养,我们开始思考,能不能让更多的计算能力来解决人才的缺口问题?那么:
解决方案 = 数据 + 100倍的计算
我们使用强化学习的方式来搜索神经网络结构:以一定概率产生一些模型,训练若干小时,然后对生成的几个模型在测试集上做评估,并利用模型的损失作为强化学习的信号,促进下一次迭代时选择更好的模型。
这张图是通过神经网络搜索找到的模型结构,模型结构看起来很复杂,让人很难以理解,它并没有人类设计的模型那么有层次化,并不直观。不过实际测试的效果却非常好,差不多比目前人类所找到的模型都要好。
而通过 AutoML 所得到的新模型,比人类的多年研究成果都要好。在同样精度的情况下可以做到计算量更小一点,而在同样的计算量下精度更好。Google 通过 AutoML 学习到的模型也公布了,叫做 NASNet。
另一方面,我们发现神经网络运算主要是矩阵运算,这样就可以设计一些特别的硬件来加速矩阵运算。
比如 Google 针对深度学习,特别设计了新的硬件 TPU。第一代 TPU 只能做一些推理的工作,第二代就既能推理又能训练,而今年 5 月份 Google I/O 推出的第三代 TPU,计算速度比第二代又快了 8 倍,计算能力不断地在提升。
我们也把 TPU 的能力通过 Google 云平台开放出来,给产业界和学术界使用。
总结上面所讲的,深度神经网络和机器学习已经带来了非常大的突破。我们可以考虑如何用深度神经网络,帮助解决世界上的一些重大挑战。
第二部分,我们来谈谈基于 TensorFlow 的应用。
AI 领域一个很重大的突破,就是 AlphaGo 战胜人类顶尖围棋选手,之前大家普遍认为这还需要多年。DeepMind 的 AlphaGo 也是基于 TensorFlow 实现的,早期版本使用了大量的 TPU,需要大量的计算。
初始版本的 AlphaGo 需要人类的经验,比如以历史上的围棋棋谱作为输入,但是最后的 AlphaGo Zero 并不需要人类经验就能自我学习。
天文学家利用基于 TensorFlow 的深度学习技术,在太空的大量信号中搜索到类似地球的行星,叫做 Kepler-90i,这个是迄今为止发现的第八个。
农业方面,荷兰的养殖场监测奶牛的行为和身体数据,使用 TensorFlow 来分析奶牛健康状况,比如是否运动,是否生病等等。
巴西亚马逊丛林的护林人员,使用 TensorFlow 来识别丛林中的声音,来判断是否有盗伐者。
在非洲,开发者使用 TensorFlow 制作出判断植物是否生病的手机应用,只要对植物进行拍照,就能进行鉴定。
Google 开源了基于 TensorFlow 的 Magenta 项目,一个功能是能够自动生成音乐,你输入一个音符,程序能够建议下一个音符。
在艺术和文化领域,你可以拍一个照片,程序能找出和你相似的艺术照片。
谷歌翻译可以在没有联网的情况下实时进行翻译。有这样一个上面印有“Milk”的包装盒,你只要打开谷歌翻译并用手机对准它,谷歌翻译就能自动识别文字,自动翻译出“牛奶”,并把翻译的结果贴在原来这个照片上。这样的例子对于出国旅游者非常实用。
Google 的大量产品使用了 TensorFlow。比如在语音方面,包括语言的识别和合成,像 DeepMind 发布的语音合成算法 WaveNet,合成的效果非常好。对人机对话,Google I/O 发布了 AI 打电话预定的 Demo,叫做 Google Duplex。
在视觉方面,Google Photos 能自动把所有照片做分析,识别里面的人和物体,自动得到一些标签,你可以直接搜索这些照片,不再需要手动加标签。还有 Google 的 Pixel 系列手机,拍照模式中,自动把前景突出一些,背景模糊化处理。
这就是机器学习带来的产品的突破。
在机器人领域,可以使用 TensorFlow 让四脚机器人学习如何站立和平衡。
最后,还能使用 TensorFlow 来帮助 Google 数据中心做能耗优化。当机器学习控制的开关开启后,能耗明显降低,而一旦关闭,能耗快速上升。
第三部分,讲一讲 TensorFlow 的一些基础知识。
机器学习越来越复杂,构造的网络也越来越复杂,作为研究者,如何管理这种复杂度是一个很大的挑战。比如 Inception v3 模型,有 2500 万个参数。
TensorFlow 是一个开源的软件平台,它的目标是促进人人可用的机器学习,推动机器学习的发展。
一方面,TensorFlow 希望快速地帮助大家去尝试一些新的想法,进行前沿探索。另一方面,也希望非常灵活,既能满足研究的需求,也能满足产业界做大规模产品的需求。面对多元的需求,怎么让大家能够用同一个框架来表达自己的想法,这是 TensorFlow 的重要设计目标。
一开始设计人员就把这些因素都考虑进去,最重要的原因是,TensorFlow 实际上是配合 Google 内部的产品需求设计的,经历过 Google 大量产品和团队的大规模考验。在它开放之前还有一个内部版本叫做 DisBelief,我们总结了DisBelief 的经验,做了新的版本,并且在大量的项目中经过真实的验证,也根据产品的真实需求在做一些新的特性。
TensorFlow 提供了一个完整的机器学习工具集。下面我们来整体看看 TensorFlow 的架构。
TensorFlow 有一个分布式执行引擎,可以让 TensorFlow 程序运行在不同硬件平台上,比如 CPU、GPU、TPU,移动端的一些硬件如 Android 和 iOS,以及各种异构的一些硬件。
TensorFlow 非常灵活,既有一些高层 API,简单易用,也有一些底层 API,方便构造一些复杂的神经网络,比如,你可以基于一些基本的算子去定义网络。
Keras 是一个定义神经网络的高层 API,在社区中很流行,TensorFlow 对 Keras 有非常好的支持。
进一步,我们也封装了 Estimator 系列 API,你可以定制训练和评估函数,这些 Estimator 可以高效地分布式执行,和 TensorBoard 以及 TensorFlow Serving 有很好的集成。
最上层,有一些预定好的 Estimator,开箱即用。
TensorFlow 提供了全面的工具链,比如 TensorBoard 可以让你非常容易去展示 Embedding,多层次呈现复杂的模型结构,以及展示机器学习过程中的性能数据。
它支持很多移动平台,比如 iOS,Android,以及树莓派等嵌入式平台。
支持的语言包括 Python,C++,Java,Go,R 等语言。最近,我们也发布了 JavaScript 和 Swift 的支持。
下面讲一下 TensorFlow 的 API。
TensorFlow 可以帮助用户定义计算图,图代表了计算,图的每个节点代表了某个计算或者状态,而计算可以运行在任何设备上。数据随着图的边流动。而图可以用不同的程序语言比如 Python 来定义,并且这个计算图可以被编译和优化。通过这样的设计,可以把图的定义和实际计算过程分离开来。
tf.layers 是另一类 API,可以对应到神经网络的层的概念,比如一个 CNN 网络,你有多个 CONV 层和多个 MAX POOLING 层,每一层都有一个对应的 tf.layers.* 函数,方便你把多层组织起来。这些封装好的层包含了一些最佳工程实践。
进一步,tf.keras 是社区中非常流行的 API。比如你想构造一个能够自动去理解视频,并且回答问题的玩具程序。你可以问:这个女孩在做什么?程序回答:打包。问:这个女孩穿什么颜色的 T-shirt?程序回答:黑色。
你可能会构造一个网络来实现:左边是视频处理逻辑,使用 InceptionV3 来识别照片,然后加上 TimeDistributed 层来处理视频信息,之上是 LSTM 层;右边是 Embedding 来处理输入的问题,然后加上 LSTM,之后把两个网络合并起来,再加上两层的 Dense。这就可以实现一个具有一定智能的程序,是不是很神奇?
使用 tf.keras,你用几十行程序就可以完成核心的代码逻辑,比如 InceptionV3 的使用你只需要一行代码。
进一步,除了前面讲的静态图的方式,我们还有动态图的支持,叫做即刻执行(Eager Execution)。它可以减少一些冗余的代码,让你的程序更加简单,同时立即报错。
而即刻执行的优点是让你快速迭代,方便 debug。
好消息是,在 TensorFlow 当中,即刻执行和静态图执行可以非常容易的进行转换,平衡了效率和易用性。
第四部分,我们来谈谈关于 TensorFlow 的高级知识。
TensorFlow Lite 是为移动或嵌入式设备特别设计的轻量级机器学习库,它更小,也更快。我们提供了工具,很方便的把 TensorFlow 模型转换成 TensorFlow Lite 格式的模型,然后在移动端,提供了 TensorFlow Lite 解释器去执行这些模型。
在 Android 上,我们利用了 Android 的 NN API,利用硬件加速。TensorFlow Lite 也对 iOS 有很好的支持。
TensorFlow.js 是最新公布的基于 JavaScript 的 TensorFlow 支持库,它可以利用浏览器特性比如 WebGL 来加速计算。这意味着更进一步让 TensorFlow 程序可以运行在不同的环境当中,让 AI 无处不在。
TensorFlow 的分布式执行对于大规模的模型非常重要。TensorFlow 可以很方便地实现数据并行工。举个例子:你可以写一个 Cluster 的描述文件,分配哪些是计算资源“worker”,哪些是参数的服务器“ps”,这样可以在我们定义图的时候可以把这些计算分配在不同的设备上,进行分布式的执行。
为了更好的促进模型共享,我们发布了 TensorFlow Hub (TF Hub)。例如,一个人设计机器学习模型,他可以从 GitHub 中找到不同的模型,进行组合,从而形成更强大的能力。
另外一个是关于提高机器学习的技巧,叫 tf.data。举个例子,在 CPU 上,训练速度是很大的限制,但当我们加上 GPU后,训练速度就得到了极大的提升,但是 CPU 输入变成了一个瓶颈。数据需要做一些转换使得可以加载,进行训练。
更进一步,和 TensorFlow 训练相关的 Packages/Features 还有很多,例如 Estimators, Feature Engineering, XLA, TensorFlow Serving 等等,这些可以在很多行业上都可以得到方便的应用。
当构建一个真实的端到端的机器学习系统时,除了上面讨论的核心机器学习算法之外,还有大量相关系统需要构建,比如数据的获取,数据的分析,模型部署,机器学习资源管理等等问题。
谷歌内部有一个大规模的系统 TFX (TensorFlow Extended) ,它是基于 TensorFlow 的大规模部署的机器学习平台,相关论文已经发表在 2017 年的 KDD。
最后,谈谈 TensorFlow 在中国的发展。
基本上,我们看到中国领先的技术公司大都在使用 TensorFlow,来解决多种多样的问题,比如:广告推荐、点击预测,OCR,语音识别,自然语言理解等等。包括很多家知名公司,像京东,小米,网易,搜狗,360,新浪,联想等等;也包括很多的创业公司,比如知乎,出门问问,云知声,Kika,流利说等等。
京东使用 TensorFlow 来进行包装的 OCR,应用到了图像,语音和广告等多个领域,并建立了高效的内部机器学习平台。
小米使用 TensorFlow,并借助 Kubernetes 来管理集群,建立分布式学习系统,来帮助小米内部和生态链业务。
网易使用了TensorFlow Lite 来做文档扫描应用,并用 TensorFlow 来做机器翻译。
360 使用了 TensorFlow 来进行短视频的分析,也建立了相关内部机器学习平台。
还有一些研究机构,比如清华大学的朱军老师,将贝叶斯网络和深度学习结合起来,开源了基于 TensorFlow 的系统,叫“珠算”。
另一个例子也是来自清华大学,开源了一些基于 TensorFlow 的知识图谱工具。
在中国,TensorFlow 社区活动非常丰富。比如,这是三月底在谷歌北京办公室举办的 TensorFlow 开发者峰会北京分会场活动,凌晨 1 点,Jeff Dean 和 TensorFlow 中国开发者视频互动的场景:
另外还有我们在重庆的活动,支持教育部产学合作协同育人项目,有上百位大学老师参加,我们希望培训更多大学老师来教机器学习等。
更多官方中文文档,可以访问:
https://tensorflow.google.cn/
不久前,我们还开源了 Google 内部使用的两天机器学习速成课程(MLCC),过去几年大量 Google 工程师学习了该课程。大家可以访问:
https://developers.google.cn/machine-learning/crash-course/
另外,推荐 TensorFlow 微信公众号,大家可以在微信上搜索“TensorFlow”找到。
你也可以加入 TensorFlow 中文社区,和业界一起来学习和探讨 TensorFlow 技术,访问:
https://www.tensorflowers.cn
TensorFlow 社区的基本理念是:开放,透明,参与。
在这个开放的社区里,不管是初学者,研究者还是产业界开发者,每个人都可以分享自己的问题,发布自己的代码、数据和教程,帮助其他社区成员,组织线下技术小组聚会等等。更一步,可以申请成为谷歌开发者专家(GDE)荣誉称号。
我们公开了 Tensorlow 开发路线图,大家可以在下面网站找到:
https://tensorflow.google.cn/community/roadmap
另外,也可以加入相关兴趣小组,给 Tensorlow 提出发展建议。
总结而言,我觉得有以下几个方向:
1.快。我们持续不断地进行优化,更好的分布式执行,针对各种新的硬件进行优化,以及在移动端更快的执行,等等。
2.简单、可用性。追求效率,容易上手。一方面我们让高层 API 更好用,让 Keras API 和 Eager Execution 更好用。另一方面,我们提供更多的工具集,以及参考模型,便于开箱即用。
3.移动性。移动方面我们发布了 TensorFlow Lite,它所能支持的模型和性能在不断提升当中。我们也发布了 TensorFlow.js,进一步促进了无处不在的 AI。
4.完整性。我们发布了 TensorFlow Hub,希望促进模型共享和重用。另一方面,Google 内部大规模产品环境中所使用的TFX系统也在开源当中。我们希望进一步减少开发者构建端到端的完整的机器学习系统所遇到的挑战。
5.推动机器学习的发展,共享,加速研究。我们很期待通过 TensorFlow 社区,大家一起协作,去解决世界上最难的问题,比如医疗等造福人类的重大问题。
首先这是 TensorFlow 的设计目标,让尽可能多的人能用上深度学习技术,尝试新的研究想法,做产品,解决难题。
这样一方面可以推动深度学习技术的发展,加快很多方面的 AI 应用。而这些 AI 应用,更需要拥有广阔背景的众多开发者来一起推动。
另一方面,从简单地用到一些模型,到比较专业的深度优化,还是有不少距离。如果你只是达到平均水平,付出可以比较少,但要达到更高水平的突破,还需要很多的经验。
我个人的感受是,加入了深度学习,确实带来了很大的突破。像机器翻译,语音,自然对话,图片翻译,搜索排序,广告预估等等,Google 的众多产品都有深度学习的深刻影响。
个人认为:无人驾驶领域,医疗诊断方面,还有,比如语言对话方面,让人充满期待。我个人更期待AI能推动人类重大问题上的发展,比如农业,环境,教育,跨语言的自由交流等等方面,希望可以借助 TensorFlow 获取突破的契机。
研究是基于真实的问题,而产品化紧密协作,把研究成果落实到产品上去,并且获得真实世界的大量反馈,这是一个快速迭代的过程。研究和产品是比较紧密的结合过程,可以由真实问题的驱动去寻找解决方案。某种意义上,Google 的工程师,混合了研究和产品的角色,既要研究问题,也要实现产品。
未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。
未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(城市)云脑技术和企业图谱,为提升企业,行业与城市的智能水平服务。
如果您对实验室的研究感兴趣,欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”