机器之心原创
参与:吴攀、QW
一年一度的谷歌开发者大会 Google I/O 在山景城成功举行,在首日的Keynote 中,谷歌宣布了一系列新的硬件、应用、基础研究等。而作为 AI First 的开发者大会,Google I/O 也自然安排了许多有关机器学习开发的内容,比如《教程 | 如何使用谷歌 Mobile Vision API 开发手机应用》。当然毋庸置疑,TensorFlow 也是本届 I/O 大会的关键核心之一。当地时间 18 日下午,谷歌 TensorFlow 开发者支持 Josh Gordon 带来了一场主题为《开源 TensorFlow 模型(Open Source TensorFlow Models)》的 Session,介绍了一些最流行的 TensorFlow 模型,并鼓励了开源。机器之心在本文中对这一 Session 进行了整理介绍,其中部分内容也提供了机器之心文章的参考链接,希望能为你的扩展阅读提供帮助。
演讲主题:你知道你可以使用 TensorFlow 来描述图像、理解文本和生成艺术作品吗?来这个演讲,你体验到 TensorFlow 在计算机视觉、自然语言处理和计算机艺术生成上的最新项目。我将分享每个领域内我最偏爱的项目、展示你可以在家尝试的实时演示以及分享你可以进一步学习的教育资源。这个演讲不需要特定的机器学习背景。
在进入正题之前,Gordon 先谈了谈他对可复现的研究(reproducible research)的看法。他说我们现在理所当然地认为我们可以使用深度学习做到很多事情。在 2005 年的时候,他用了 6 个月时间试图使用神经网络来做基本的图像分类——识别分辨细胞是否感染了疾病。虽然那时候已经有很多不错的软件库可用了,但他们仍然还是要手动编写许多神经网络代码。最后,六个月时间过去了,这些优秀工程师打造的网络才开始在二元分类任务上表现得足够好一点。
而今天,你再也不需要这么苦恼了。今天,一个优秀的 Python 开发者加一点 TensorFlow 背景知识,并且愿意使用开源的模型,那么仅需要几天时间就能实现远远超过之前 6 个月所能达到的效果。当然,这要归功于大学、公司、开发者等慷慨的分享,这也已经为我们的社会带来了很大的价值。
Gordon 举了一个例子说明。他说过去 8 个月有三种新的医学图像应用都依赖于一种被称为 Inception 的深度学习神经网络模型,这些应用都实现了非常卓越的表现,有望在人类的生命健康方面提供方便实用的帮助。机器之心对这三种应用都进行过深度报道,参阅:
重磅 | 谷歌研发人工智能眼科医生:用深度学习诊断预防失明
学界 | 斯坦福 Nature 论文宣布新突破:深度学习皮肤癌诊断达专家水平
业界 | 谷歌使用深度学习帮助病理学家检测癌症,算法得分高达 89%
既然深度学习这么有用?那么深度学习是怎么工作的呢?首先我们先来看看一个可以将图像分类为「猫」或「狗」的模型。通过这个模型,我们可以看到深度学习与 Gordon 在 2005 年的工作有什么不同。
Gordon 解释说,在 2005 年时,为了开发图像分类器,他编写了 Python 代码来提取图像的特征。首先他需要构思这个图像分类器需要怎样的特征(比如:线、形状、颜色),甚至还可能需要 OpenCV 这样的库来做人脸检测。
而使用深度学习时,可以直接为模型输入原始像素,让模型自己去寻找分类所需的特征。「深度学习」之所以被称为「深度」,是因为它具有多个层,数据在这些层中进行处理,最后得到分类结果,更多介绍可参阅《入门 | 智能时代每个人都应该了解:什么是深度学习?》
TensorFlow 是由谷歌设计的一个深度学习框架,拥有很多优点,包括快速灵活可扩展的开源机器学习库、可用于研究和生产、可以运行在 CPU、GPU、TPU、安卓、iOS 和树莓派等硬件和系统上。
Gordon 将在这个演讲中为我们主要解读以下 4 个重要研究:
当然,一直关注深度学习研究前沿的机器之心也已经对这些研究进行过完整报道:
业界 | 谷歌开放 Inception-ResNet-v2:一种新的图像分类卷积神经网络模型
业界 | 谷歌发布语言处理框架 SyntaxNet 升级版,识别率提高 25%
业界 | 谷歌 SyntaxNet 模型大升级,为 40 种语言带来文本分割和词态分析功能
深度 | 谷歌增强型风格迁移新算法:实现基于单个网络的多种风格实时迁移(附论文)
此外,Gordon 还提到了一些其它使用 TensorFlow 实现的研究成果;
你想的没错,机器之心依然报道过这些研究:
业界 | 谷歌发布神经音频合成器 NSynth:专注于启迪音乐创作
资源 | 谷歌官方开源 tf-seq2seq:一种通用编码器-解码器框架
重磅|谷歌开源最精确自然语言解析器 SyntaxNet 的深度解读:一次关键进步以及一个重要工具
业界 | Show and Tell:谷歌在 TensorFlow 上开源图像描述系统
业界 | 谷歌开源新的 TensorFlow 代码,如何进行文本自动摘要
谷歌的这些研究中有一些仍然是当前最佳的,但他们仍然开源了相关的代码,任何人都可以免费尝试复现这些结果。那谷歌为什么还要开源呢?毕竟有的研究是非常具有商业价值的。Gordon 说:「一个重要的理由是可以激励别人继续推进你的想法。」同时,这也能帮助降低开发者的进入门槛,能让更多人参与进来。
要实现可复现的(reproducible)开源,你需要共享你的代码和数据集。代码方面,要做到可复现,你应该共享你所有的代码,包括训练、推理和验证的代码。数据集方面,你应该说明你所用的数据集,你对数据集的处理方式等等。最好能提供一个试用数据集(toy dataset),让人们可以轻松验证你的模型。
预训练的检查点(pretrained checkpoint)也很重要。pretrained checkpoint 是为了保存模型训练过程中一些列状态,这样其他研究者就可以完全复制之前的研究过程,从而避免被随机化(在深度学习中极为常见)等其他因素干扰。
Gordon 还谈到了 Docker。很多时候,你的开发环境需要大量的依赖包。通过共享一个 Docker 容器,你可以让其他人快速尝试你的想法。
开发深度学习模型,当然可以选择自己写代码。在 TensorFlow 中,你可以轻松编写代码,实现模型。这里给出了两个示例:
这段代码使用 Keras + TensorFlow 的组合。Keras 是用来构建神经网络的 API,它具有简单高效的特性,允许初学者轻松地建立神经网络模型;同时,Keras 也可以使用 TensorFlow 作为运行的后端,极大地加速了开发与训练的过程。
转载请注明出处。