雷锋网按:本文为谷歌大脑资深工程师陈智峰博士在才云科技举办的“Kubernetes Meetup 中国 2017”活动中的分享,首发于Caicloud(微信号:Caicloud2015),雷锋网获授权转载。
陈智峰博士现为谷歌大脑资深工程师,拥有 12 年谷歌工作经验,自 2014 年以来,他参与设计并实现了被广泛应用于重要谷歌产品的新一代谷歌大脑机器学习开源系统 TensorFlow,并成功将 TensorFlow 用于谷歌翻译之中,巨幅提高了谷歌翻译的准确率。谷歌大脑是专注于深度学习的人工智能的研究开发团队。
陈智峰此次的演讲通过介绍过去一年中谷歌大脑在基础研究、系统开发和产品应用各方面的进展,与参会者探讨了人工智能发展的前景和可能的方向。
以下是 Google 陈智峰带来的《谷歌大脑近期工作进展介绍》演讲内容:
大家好,很高兴跟大家分享谷歌大脑在过去一年的进展以及我的一些工作心得。
2014 年,Jeff Dean 带领开发 TensorFlow(以下简写成“TF”),当时希望 TF 能够支持更多容器,运用到更多领域,供更多开发研究人员使用。
2015 年下半年,谷歌开源 TF,整个团队觉得这个项目做得不错,于是在上面添加了更多性能,比如自动 differentiation,control flow 等,另外还增加了很多 operation。
最初,我们只是增加乘法、加法等一些简单的数据运算。去年,我们又添加了一些相对复杂的算法,很多矩行分解的支持,完善文档,增加教材式的文档。
过去一年,我们也做了很多支持更多平台的工作。到目前为止,TF 在 Github 上已经有 500 多个贡献者,绝大多数都是 Google 以外的人,现在有超过 1 万多的 commits,据统计下载量超过一百万,在学校也很受欢迎。如果你去 Github 上找,你会发现很多以 TF 为基础的 repository。
还有就是发布的一些基础架构软件,以及现成的模型,这些基本上都放在 models 下面(如下图所示),任何人都可以下载文件,做一些图像处理工作,以及自然语言处理,文本语法分析。
TF 主要目的是把深度学习的好处带给大家,让大家都享受深度学习带来的好处。TF 不光是在单机上跑起来,我们也增加了对 mobile device 的支持,大概下半年的时候,iOS 上也可以跑 TF。大概 4 月份的时候,我们会发布分布式版本,所以不仅可以在单机上跑 TF,也可以在 AWS 上运行起来。我们还做了一些跟开源生态圈集成的事情,例如支持像 HDFS、Spark、Windows 以及其它的操作系统。
目前,TF 也可以通过不同的前端语言进行使用:Python,Java 等等。
TF 1.0 里面增加了稳定性和实用性,还会增加一个叫 XLA 的部分,可以把代码直接编译成机器码。
但是,有人也会疑惑,做这些东西会对现实有什么影响吗?Alpha Go 再厉害,它也只是个游戏。同时,我们团队的成员也会疑惑 TF 到底会给现实世界带来什么影响?
那么接下来我们就来说一下 TF 带来的现实影响,同时也给大家介绍一下 TF 的学习架构。
说到 TF 的用途,最热门就是图像识别方向。
2011 年,机器进行图像识别的错误率为 26%,人工识别的错误率为 5%。到 2016 年,图片识别的错误率降低到了 3%。
再讲一个 TF 运用在医疗方向的例子。
目前全球有 4 亿患者患糖尿病造成的视网膜病变,诊断过程很长。在印度、非洲等一些医疗设施相对不那么先进的地方,病症诊断专业度不够。谷歌大脑有个团队,增加视网膜图片扫描工具,专门用于扫描照片。让人高兴的是,现在已经可以通过图像识别技术来对病人进行诊断,而且准确率比医务人员能达到的还要高。
再回过头来说,TF 对现实世界的具体影响。
比如,斯坦福的另外一个研究,基本上是用同样的方法来诊断皮肤癌。首先在医院拍一张照片,然后通过图像识别,来诊断是否皮肤癌。
TF 对现实世界的影响还表现在自然语言识别领域。
微软在 11 月的时候宣布,在类似语音识别领域,机器做得比人好。10 月份的时候,Google 宣布,他们能大幅提高机器翻译效果。
这张图就是神经机器翻译的图。现在输入一个英文的句子,假设句子中有四个单词,然后这个模型就可以对句子进行分析,句子中每个词表示一个向量,每个向量都会经过一个很复杂的数学模块,最后就可以得出四个项目,这四个项目通过计算延到右边这个大的模块里面,然后模块再翻译成中文,最后一个字一个字地输出成中文。右边图中每一个小盒子都代表了一个很复杂的数值计算,每个小盒子都有几百万的运算要求,产生一个词都需要上亿的运算。
早在 2014 年,就有很多学校在做类似研究。研究小组从头到尾写一个模型,这个模型难以描述,训练起来非常困难,且计算量大。就单单一个模型来说,代码其实很简单,但可能需要一个月的时间来进行训练,于是需要转到 TF 模型。
TF 的一个好处就是支持分布式,它可以有很多参数、计算机服务器,能够充分利用资源。相比用 C++,用 TensorFlow 代码量会少很多。
单个语种的翻译,预测是 2-3 周的时间,每种语言大约超过 1 亿个模型的训练。Google 内部要支持 100 多种语言,每种语言之间都要实现互相翻译。所以如果要实现所有模型,非常耗时间。一般来讲,Google 进行翻译,原理就是把不同语言先翻译成英语,再将这些语言翻译成其它语言。所以真实翻译效果会差很多,而且成本也高。
所以有人就想了一个项目,叫做 Multilingual models。
Multilingual models 的思路非常简单,用上述的数学模型即可。但是当你训练这个模型的时候,要给它看不同语言的翻译,英文到日文的,英文到韩文的,同时也要给它看日文到英文的,韩文到英文的。而这个时候,你的模型是不会增大的,它只是阅读了不同语言的语料。
训练这个模型的时候,一开始,我们只是抱着试一试的心态。但是在生产应用中我们惊喜地发现,这个模型不光能翻译日文到英文,还可以直接翻译韩文到日文,以及日文到韩文!之前我们完全没有想到会有这样的翻译效果。
在其它应用场景里面,也会有一些类似的现象。
回到刚才,Google 在做翻译的时候,会把不同语言翻译成英文,再把英文翻译成你想要的语言,这样的话,对于所有自然语言来讲,英文就是表达的中介语言。
上图讲述的就是,表述同一个意思的不同语言的句子,map 到一个二维空间上,然后发现很多语言都有共性远远大于它们之间存在的差异性。
比如说同样一句话,不管是日语还是韩语,它表达的意思都在上图 b 这个圈里,这是一个比较有趣的现象。
通过“机器训练”这个模型,聚集到一起,达到提高翻译水平的效果。
然后 Google Brain 不光是做 TF,内部还要很大一部分人在做很前沿的研究。
其实不管是图像识别还是 sequence modeling,其实它的核心概念都可以追溯到十几二十年前。
图像识别的核心可以追溯到 1999 年乃至更之前,机器翻译则可以追溯到 1997 年的 LSTM 甚至更早,一直到 GPU 出现,令这些模型计算更快,模型的效果才显现出来。
当然,现在的技术不能解决所有的问题,有些思路还在被探索开发。
刚才讲的谷歌翻译模型,它们对于人的大脑来说是十分小的。Google 的翻译大概是 2 亿 5 千万个参数。但是人大概有 100 倍乃至 1000 倍的神经元。所以 Google Brain 认为,如果你给它更大的模型,更多的数据,那么效果肯定会更好。当然,一种 idea 如何集成为一个更大的模型其实还是受很多信息的限制的。
我们可以有很多很多专家,比如说 2000 个专家,每个专家的特长领域都不同,如果我有问题的话,我要先去找哪个专家呢?我会一步一步来解决我的问题。然后具体呢,大家可以看一下,是一个highlight point。
比如我刚才讲的谷歌翻译的模型,现在发布的版本大概是 2 亿 5 千万个参数。比如里面有 2000 个 Export,这个模型翻译的效果比我们现在发布的模型要好很多。虽然现在你可以建一个 10 倍大(乃至 100 倍)的模型,当然也会有很多问题,这只是一个设想,就是说如果机器越多,模型越多,那么效果就会越逼近人的智能。
大家有兴趣可以看下这些论文,不光是 Google Brain,很多实验室也在往这个方向努力。
另外一个比较有趣的现象就是:learning to learn。如果你看过去几年里深度学习的“套路”,比如你要解决一个人工智能问题,然后用深度学习的方法,必须要有三个要素:在这个领域有专长的专家;有大量的数据;以及很强的计算能力。对于很多公司来讲,数据和计算能力可以购买。但是由于这个领域比较新,所以深度学习领域专家是比较少的。
那么遇到的问题就是,能否找到专家的替代,或者说减少对这些专家的依赖?
Google 有两个研究人员,他们写了一篇论文,基本就是说,你构造一个机器学习模型,就像是大家平常写一个程序一样,类似于某个机器在玩游戏的过程,终极目标就是:解决遇到的问题。
比如下一盘棋,那么目标就是赢这盘棋。但是策略是什么呢?这时候,你可以随机生成很多很多这样的程序,这些程序里面,有的运行得好,有的运行得不好,你可以给不同的程序打分,对高分程序进行强化学习,指导搜索过程,找到更好的模型。
这个说的就是,参数越多,表达能力就越强。
图中最后四行是程序搜索出来的模型,这个模型在这个测试中,错误率可以降低到 3.84%,去年最低的结果是 3.74%。
所以将来大家遇到问题,比如说你在下棋,你想赢,你就搜索一个方案,这些方案要比你手动去设置模型要有效。整个机器学习领域非常快,几年后这个方向或许就会有大的突破。
大家会觉得图像识别模型已经有了,为什么还要去生成这样的一个模型?你不光可以通过程序生成这样一个图像识别模型。
比如你公司里有很多数据库,你可以 想象能不能产生一个meta program,这个 meta program 通过机器学习的方法产生 database 的 program。
深度学习非常依赖计算能力,深度学习模型涉及到很多数值运算。它有个比较大的特点:对述数值运算监控能力很高。核爆炸模拟的时候,要精确到 32 位甚至更高;但是在机器学习模型里面,你会发现其实不需要精确到 32 位;16 位甚至 8 位就可以解决问题。
去年,谷歌内部在做 TPU 芯片,它就是 8 位或者 16 位的,而且价钱要比 CPU 或者 GPU 要便宜很多,低耗能,结构上也要简单很多,速度也有提高。现在硅谷也在做这方面的事情,所以我觉得这两年这方面将会有很大的突破。
最后给大家总结一下:大家可以感受到,这两年人工智能(特别是深度学习)的发展非常快,在各个应用领域都表现非凡,相信未来还有更多领域会用到它,期待它的表现。