当地时间 2 月 15 日,谷歌在加州山景城召开了第一届年度 TensorFlow 开发者大会(TensorFlow Developer Summit 2017),这可算得上是 TensorFlow 开发者、支持者与爱好者的第一次盛会,谷歌也在此次会议上发布了开发者期待已久的 TensorFlow 1.0。
经过一年多的发展,TensorFlow 得到了越来越多开发者的认可,也成为了 GitHub 上最受欢迎的框架之一。从发布以来,TensorFlow 一直在不断完善和增加新功能,比如分布式 TensorFlow、Windows 系统支持等,直到最近 TensorFlow 1.0 正式版的诞生。
TensorFlow 的版本更迭
但除了这个我们早就已经预计到的重磅消息之外,这个首届 TensorFlow 开发者大会上还有什么值得开发者关注的亮点呢?机器之心在此根据本次大会上的演讲对会上值得关注的内容进行了梳理,并按框架对比、产品和应用、移动端与嵌入式 TensorFlow、资源分别进行了总结,希望能对 TensorFlow 开发者能有所帮助。
框架对比
自开源以来,TensorFlow 经过一年多的发展已经成为了 GitHub 上最流行的框架。如同 Jeff Dean 下图中演示那样,短短一年时间,TensorFlow 已经超越 scikit-learn、Caffe 等框架,已在 GitHub 获得了最多的 Star 量。
有大量的人在为 TensorFlow 作出贡献,并用其进行各种有趣的尝试。
此外,Jeff Dean 在 Keynote 中介绍说,TensorFlow 现在已经支持 Python、C++、Java、R、Haskell、Go 在内的多种语言。
框架之间的对比也成为了机器学习社区所关注的一个话题。之前机器之心编译的一篇文章中,数据科学公司 Silicon Valley Data Science 的数据工程师 Matt Rubashkin(UC Berkeley 博士)对深度学习的 7 种流行框架进行了横向对比,其中包括语言支持、速度、兼容 Keras 在内的 8 项衡量标准,结果如下:
在本次开发者大会上,谷歌专门也设置了两场演讲凸显 TensorFlow 的优势:XLA 以及 Keras 与 TensorFlow 的融合。
速度是高效的机器学习框架的一切。在这次大会中,Chris Leary 与 Todd Wang 讲解了通过 XLA(加速线性代数)方法减少训练和推断时间的方式。他们介绍了 TensorFlow 如何使用 XLA、JIT、AOT 以及其它编译技术来最小化执行时间和最大化计算资源。
兼容 Keras:Keras 是成长最快的深度学习框架之一。在此次大会上,Keras 的主要作者 Francois Chollet 用视频 QA 案例演示了如何在 TensorFlow 中使用 Keras。
产品与应用
经过一年飞速的发展,TensorFlow 也逐渐得到了业界的认可,许多企业、公司都在基于 TensorFlow 开发自己的产品或将 TensorFlow 整合到自己的产品中去。其中包括 Airbnb、Uber、Twitter、英特尔和高通等等,当然也还有去年宣布从 Torch 转向 TensorFlow 的 DeepMind。
而谷歌自己当然更是在产品开发上给予了 TensorFlow 所有可以提供的支持。据谷歌工程开发主管 Megan Kacholia 介绍,TensorFlow 目前已经在以下十几种产品中得到了应用,其中包括谷歌翻译、Google Play、YouTube 和 Gmail 等。
谷歌也不吝于分享自己在 TensorFlow 产品应用方面的经验。Google Research 的软件工程师 Jonathan Hseu 在一个演讲中介绍了 TensorFlow 生态系统(参考:《资源 | TensorFlow 生态系统:与多种开源框架的融合》),谈到了 TensorFlow 和产品基础设施的整合方式,并介绍了从数据准备到模型训练到产品应用整个过程。
在数据准备阶段,主要处理过程是:从各个数据源获取数据→执行预处理→导出一个 TensorFLow 支持的文件格式。在这个阶段用的比较多的工具是 Apache Spark、Hadoop MapReduce 和 Apache Beam。
在模型训练阶段,可以选择本地训练(自己的本地机器或远程虚拟机)或分布式训练(速度更快,但需要合适的基础设施)。
然后就是将训练好的模型导出投入到产品中,Hseu 在这里推荐了 TensorFlow Serving 和 In-Process TensorFlow。
而在这些阶段的语言支持上,Python 的支持当然是最好的。
接下来,Google Research 的软件工程师 Noah Fiedel 就做了关于 TensorFlow Serving(serving 是指将训练好的模型应用到生产中的过程)的演讲。Fiedel 介绍说,serving 的目标是实现在线的、低延迟的应用,能将多个模型应用到单一一个流程中,可以随时间加载一个模型的多个版本,可以实时计算成本变化以满足产品需求(通过 CloudML、Docker & K8s 自动扩展),在训练时间通过 mini-batching 提高效率(除非有异步的要求)。而 TensorFlow Serving 就是一个专为生产环境设计的,用于机器学习模型的灵活高性能 serving 平台:https://tensorflow.github.io/serving
还在演讲后面介绍一种新技术 SavedModel,这是一种用于 TensorFlow 模型的通用的序列化格式(universal serialization format),已经包含在了 TensorFlow 1.0 中,其有两个重要功能:支持多个 MetaGraph(同时共享变量和 asset)和 SignatureDef。
其中 SignatureDef 定义了由 TensorFlow graph 所支持的计算的签名。
此外还有 Multi-headed Inference 和 Sequence Models 技术:
分布式 TensorFlow 也是一个值得关注的亮点,Google Research 的软件工程师 Derek Murray 带来了一个自底向上的关于分布式 TensorFlow 的介绍,并展示了所有可以用来利用这种力量的工具。我们为什么要使用分布式 TensorFlow 呢?随着技术和方法的不断发展,深度学习系统的规模也变得越来越大,对计算资源的要求也随之增长。为了应对这个问题,我们可以将计算分配给不同的 GPU 集群而并行地进行计算,从而减少计算时间。
我们需要分布式 TensorFlow 的情况是模型非常大的时候,比如谷歌的「宽度&深度」模型 和超大规模模型,现有的单个硬件可能无法将它装进去进行计算。
超大规模有多达 680 亿个参数
在具体的应用方面,Google Research 的软件工程师 Heng-Tze Cheng 介绍了用 TensorFlow 实现「宽度&深度学习」——将记忆(memorization)和归纳(generalization)结合到一起。参阅《深度 | 谷歌新开源「宽度&深度学习」框架:结合记忆和归纳实现更优推荐 》,该网络已经在 Google Play 上得到了应用。
TensorFlow 的高级 API,你需要 10 行代码就能实现一个这种类型的网络模型。
Google Research 的产品经理 Lily Peng 以视网膜成像为例介绍了 TensorFlow 在医疗领域的应用。机器之心之前已经有过介绍了《重磅 | 谷歌研发人工智能眼科医生:用深度学习诊断预防失明》。在谈到 TensorFlow 所发挥的作用时,Peng 介绍说 TensorFlow 的优点包括:快速的原型构建、支持大规模实验并且可以根据实际的应用所收集到的数据和标签重新训练模型。
此外,不久之前得以上 Nature 封面的癌症方面的研究也应用到了 TensorFlow。斯坦福大学的研究人员训练了一个可以诊断皮肤癌的算法。在论文中,他们展示了使用一个单一的深度卷积神经网络进行皮肤病变分类的过程,该网络仅使用像素和疾病标签作为输入,直接从图像中端到端地训练出来。测试结果显示深度卷积神经网络在这两个任务上的表现都达到了所有测试的专家的水平,证明了该人工智能的皮肤癌鉴定水平达到了媲美皮肤科医生的水平。配备该深度神经网络的移动设备可以让皮肤科医生的诊断拓展到临床之外。
在此次开发者大会上,论文的合作者之一 Brett Kuprel 讲解了如何使用 TensorFlow 进行癌症图像分类,这是受到学界、业界极大关注的应用之一。
此外,谷歌研究科学家 Doug Eck 介绍了基于 TensorFlow 的音乐和艺术生成项目 Project Magenta。机器之心之前也曾深度介绍过该项目《深度 | 人工智能改变 MIDI 创作:谷歌 Magenta 项目是如何教神经网络编写音乐的?》。Eck 在演讲中谈到了选择 TensorFlow 的原因:可以使用能操作一切(MIDI、音频)的 Python,灵活且高速的图像、音频、视频 I/O、有很好用的 TensorBoard 和非常好的开发者社区。
最后要提及的是谷歌收购的 DeepMind 团队在去年从 Torch 转向 TensorFlow 之后,也在积极地将其用到各种应用上。在大会的一场演讲中,来自 DeepMind 应用团队的 Daniel Visentin 就提到了 DeepMind 将它们的人工智能技术应用到谷歌的数据中心上,从而寻找帮助谷歌降低能源费用的方法。而这种方法的开发就得益于围绕 TensorFlow 开发的一些更高水平的库。
移动端与嵌入式 TensorFlow
服务器端的大规模机器学习应用,Google 当仁不让(当然,Facebook、Twitter、Linkedin、Netflix、Amazon 等也有自己的看家本领)。但是,移动计算市场对机器学习的需求极其强劲,谷歌自然不会放弃这块巨大的蛋糕。
Pete Warden 带来了主题为「移动端与嵌入式 TensorFlow」的演讲。首先,对 TensorFlow 生态系统做了基本介绍,接着就移动端实现 TensorFlow 以及一些问题解决(当然,也是 TensorFlow 的优点)做了简单讲解。
目前,TensorFlow 支持的平台包括安卓、iOS 以及树莓派。
TensorFlow 还与许多芯片制造商,比如 英特尔、ARM 、Movidius 等密切合作,确保 TensorFlow 在一大堆不同硬件上运行更快更流畅。
简单介绍 TensorFlow 的生态环境后,Pete Warden 利用介绍了安卓系统、iOS 以及树莓派的 TensorFlow 实现,还给出了应用实例。
安卓应用程序用的是 Java,怎么办?答案在上面。
在 TF 实现中,通常会遇到一些问题,比如
为此,你可能需要知道 TensorFlow 的打造原理,比如,TensorFlow 的组件巨多,根本不存在一个把这些内容都列出来的单一文件。这时,你需尝试有效操作办法:
接下来,管理模型大小和速度问题,TensorFlow 有不少办法压缩模型大小。其中,最关键的步骤就是量子化权重。
最后介绍了管理二进制文件大小。
TensorFlow 资源汇集
Ashish Agarwal 在本次开发者大会上介绍了机器学习工具包,他谈到 TensorFlow 虽然是一个非常强大的框架,然而也一直以来都缺乏可以即时使用的解决方案。常用的机器学习工具包括:
Agarwal 介绍了了一个旨在解决这一问题的算法工具包,并表示这个工具包是 TensorFlow 中的高性能、分布式、可扩展的机器学习算法实现,可以直接拿来使用,比如下面这个联合实现 k-均值和 DNN 的案例:
最后机器之心在下面梳理了我们关于 TensorFlow 的报道:
基本概述和新闻
前沿研究
应用实现与开源
教程