首届TensorFlow开发者大会:值得关注的亮点都在这里
机器之心原创
作者:吴攀、李亚洲、微胖
当地时间 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 的报道:
基本概述和新闻
TensorFlow开源一周年:这可能是一份最完整的盘点
TensorFlow:最棒的深度学习加速器
终于来了,TensorFlow 新增官方 Windows 支持
谷歌开源平台TensorFlow向iOS开放
想揭开深度学习隐藏层的神秘面纱?试试Tensor Flow的神经网络游乐场
TensorFlow版本号升至1.0,正式版即将到来
谷歌召开首届TensorFlow开发者大会,正式发布TensorFlow 1.0
TensorFlow 生态系统:与多种开源框架的融合
谷歌TensorFlow的一份全面评估报告:好的坏的及令人讨厌的
对比深度学习十大框架:TensorFlow最流行但并不是最好
从TensorFlow到Theano:横向对比七大深度学习框架
TensorFlow工程设计主任Rajat Monga问答:计算能力是深度学习发展的主要瓶颈
DeepMind:Torch很好,但我们要去老板家的TensorFlow了
探秘谷歌人工智能实验室,TensorFlow在这里诞生
前沿研究
Google Brain论文:TensorFlow,一个大规模机器学习系统
DeepMind最新生成模型WaveNet,将机器合成语音水平与人类差距缩小50%(附论文)
谷歌翻译整合神经网络:机器翻译实现颠覆性突破(附论文)
谷歌增强型风格迁移新算法:实现基于单个网络的多种风格实时迁移(附论文)
应用实现与开源
Show and Tell:谷歌在 TensorFlow 上开源图像描述系统
谷歌开源新的 TensorFlow 代码,如何进行文本自动摘要
谷歌开放 TF-Slim:在 TensorFlow 中定义复杂模型的高层库
谷歌新开源「宽度&深度学习」框架:结合记忆和归纳实现更优推荐(附论文)
谷歌开放Inception-ResNet-v2:一种新的图像分类卷积神经网络模型
谷歌开源最精确自然语言解析器SyntaxNet的深度解读:一次关键进步以及一个重要工具
雅虎BigML团队开源大数据分布式深度学习框架TensorFlowOnSpark
谷歌发布深度学习库TensorFlow Fold,支持动态计算图
Wasserstein GAN 的 TensorFlow 实现
TensorFlow 生态系统:与多种开源框架的融合
DeepMind语音生成模型WaveNet的TensorFlow实现
OpenAI 的 PixelCNN++实现:基于 Python3 和 TensorFlow
DeepMind提出的可微神经计算机架构的TensorFlow实现
教程
谷歌官方指南:如何通过玩TensorFlow Playground来理解神经网络
没有博士学位,照样玩转TensorFlow深度学习
如何在 TensorFlow 中用深度学习修复图像?(附论文)
资源 | 数十种TensorFlow实现案例汇集:代码+笔记
10种深度学习算法的TensorFlow实现
机器学习敲门砖:任何人都能看懂的TensorFlow介绍