本文是整个系列的第一篇文章,将会介绍深度学习的发展历史以及深度学习目前成熟的应用,同时也会介绍目前主流的深度学习工具,以及TensorFlow相比于其他工具的优势。
从计算机发明之初,人们就希望它能够帮助甚至代替人类完成重复性劳作。利用巨大的存储空间和超高的运算速度,计算机已经可以非常轻易地完成一些对于人类非常困难,但对计算机相对简单的问题。比如统计一本书中不同单词出现的次数,存储一个图书馆中所有的藏书或是计算非常复杂的数学公式都可以轻松通过计算机解决。然而,一些人类通过直觉可以很快解决的问题,目前却很难通过计算机解决。人工智能领域需要解决的问题就是让计算机能像人类一样,甚至超越人类完成类似图像识别、语音识别等问题。
计算机要像人类一样完成更多智能的工作需要够掌握人类的经验。比如我们需要判断一封邮件是否为垃圾邮件,会综合考虑邮件发出的地址、邮件的标题、邮件的内容以及邮件收件人的长度,等等。这是我们受到无数垃圾邮件骚扰之后总结出来的经验。这个经验很难以固定的方式表达出来,而且不同人对垃圾邮件的判断也会不一样。如何让计算机可以跟人类一样从历史的经验中获取新的知识呢?这就是机器学习需要解决的问题。
什么是机器学习?
卡内基梅隆大学(Carnegie Mellon University)的Tom Michael Mitchell教授在1997年出版的书籍Machine Learning中有对机器学习进行非常专业的定义,这个定义在学术界内被多次引用。在这本书中对机器学习的定义为“如果一个程序可以在任务T上,随着经验E的增加,效果P也可以随之增加,则我们称这个程序可以从经验中学习”。让我们通过垃圾邮件分类的问题来解释机器学习的定义。在垃圾邮件分类问题中,“一个程序”指的是需要用到的机器学习算法,比如逻辑回归算法;“任务T”是指区分垃圾邮件的任务;“经验E”为已经区分过是否为垃圾邮件的历史邮件,在监督式机器学习问题中,这也被称之为训练数据,也就是说对于机器学习而言,所谓的经验其实就是数据;“效果P”为机器学习算法在区分是否为垃圾邮件任务上的正确率。
在使用逻辑回归算法解决垃圾邮件分类问题时,我们会先从每一封邮件中抽取对分类结果可能有影响的因素,比如说上文提到的发邮件的地址、邮件的标题及收件人的长度,等等。每一个因素被称之为一个特征(feature)。逻辑回归算法可以从训练数据中计算出每个特征和预测结果的相关度。比如在垃圾邮件分类问题中,我们可能会发现如果一个邮件的收件人越多,那么邮件为垃圾邮件的概率也就越高。在对一封未知的邮件做判断时,逻辑回归算法会根据从这封邮件中抽取得到的每一个特征以及这些特征和垃圾邮件的相关度来判断这封邮件是否为垃圾邮件。
在大部分情况下,在训练数据达到一定数量之前,越多的训练数据可以使逻辑回归算法对未知邮件做出的判断越精准。也就是说逻辑回归算法可以根据训练数据(经验E)提高在垃圾邮件分类问题(任务T)上的正确率(效果P)。之所以说在大部分情况下,是因为逻辑回归算法的效果除了依赖于训练数据,也依赖于从数据中提取的特征。假设我们从邮件中抽取的特征只有邮件发送的时间,那么即使有再多的训练数据,逻辑回归算法也无法很好地利用。这是因为邮件发送的时间和邮件是否为垃圾邮件之间的关联不大,而逻辑回归算法无法从数据中习得更好的特征表达。这也是很多传统机器学习算法的一个共同的问题。
什么是深度学习?
对许多机器学习问题来说,特征提取不是一件简单的事情。在一些复杂问题上,要通过人工的方式设计有效的特征集合需要很多的时间和精力,有时甚至需要整个领域数十年的研究投入。例如,假设想从很多照片中识别汽车。现在已知的是汽车有轮子,所以希望在图片中抽取“图片中是否出现了轮子”这个特征。但实际上,要从图片的像素中描述一个轮子的模式是非常难的。虽然车轮的形状很简单,但在实际图片中,车轮上可能会有来自车身的阴影、金属车轴的反光,周围物品也可能会部分遮挡车轮。实际图片中各种不确定的因素让我们很难直接抽取这样的特征。
图1 传统机器学习和深度学习流程对比
深度学习解决的核心问题之一就是自动地将简单的特征组合成更加复杂的特征,并使用这些组合特征解决问题。深度学习是机器学习的一个分支,它除了可以学习特征和任务之间的关联以外,还能自动从简单特征中提取更加复杂的特征。图1中展示了深度学习和传统机器学习在流程上的差异。如图1所示,深度学习算法可以从数据中学习更加复杂的特征表达,使得最后一步权重学习变得更加简单且有效。在图2中,展示了通过深度学习解决图像分类问题的具体样例。深度学习可以一层一层地将简单特征逐步转化成更加复杂的特征,从而使得不同类别的图像更加可分。比如图2中展示了深度学习算法可以从图像的像素特征中逐渐组合出线条、边、角、简单形状、复杂形状等更加有效的复杂特征。
图2 深度学习在图像分类问题上的算法流程样例
人工智能、机器学习和深度学习的关系
总的来说,人工智能、机器学习和深度学习是非常相关的几个领域。图3总结了它们之间的关系。人工智能是一类非常广泛的问题,机器学习是解决这类问题的一个重要手段,深度学习则是机器学习的一个分支。在很多人工智能问题上,深度学习的方法突破了传统机器学习方法的瓶颈,推动了人工智能领域的发展。
图3 人工智能、机器学习以及深度学习之间的关系图
图4展示了“deep learning”(深度学习)这个词在最近十年谷歌搜索的热度趋势。从图中可以看出,从2012年之后,深度学习的热度呈指数上升,到2016年时,深度学习已经成为了谷歌上最热门的搜索词。深度学习这个词并不是最近才创造出来的,它基本就是深层神经网络的代名词。受到人类大脑结构的启发,神经网络的计算模型于1943年首次提出。之后感知机的发明使得神经网络成为真正可以从数据中“学习”的模型。但由于感知机的网络结构过于简单,导致无法解决线性不可分问题。再加上神经网络所需要的计算量太大,当时的计算机无法满足计算需求,使得神经网络的研究进入了第一个寒冬。
图4 “deep learning”最近十年在谷歌搜索的热度趋势。
到20世纪80年代,深层神经网络和反向传播算法的提出很好地解决了这些问题,让神经网络进入第二个快速发展期。不过,在这一时期中,以支持向量机为主的传统机器学习算法也在飞速发展。在90年代中期,在很多机器学习任务上,传统机器学习算法超越了神经网络的精确度,使得神经网络领域再次进入寒冬。直到2012年前后,随着云计算和海量数据的普及,神经网络以“深度学习”的名字再次进入大家的视野。2012年,深度学习算法AlexNet赢得图像分类比赛ILSVRC(ImageNet Large Scale Visual Recognition Challenge)冠军,深度学习从此开始受到学术界广泛的关注。
深度学习的应用
图5展示了历年ILSVRC比赛的情况,从图中可以看到,在深度学习被使用之前,传统计算机视觉的方法在ImageNet数据集上最低的Top5错误率为26%。从2010年到2011年,基于传统机器学习的算法并没有带来正确率的大幅提升。在2012年时,Geoffrey Everest Hinton教授的研究小组利用深度学习技术将ImageNet图像分类的错误率大幅下降到了16%。而且,从2012年到2015年间,通过对深度学习算法的不断研究,ImageNet图像分类的错误率以每年4%的速度递减。这说明深度学习完全打破了传统机器学习算法在图像分类上的瓶颈,让图像分类问题得到了更好的解决。如图5所示,到2015年时,深度学习算法的错误率为4%,已经成功超越了人工标注的错误率(5%),实现了计算机视觉研究领域的一个突破。
图5 历年ILSVRC图像分类比赛最佳算法的错误率
在技术革新的同时,工业界也将图像分类、物体识别应用于各种产品中了。在谷歌,图像分类、物体识别技术已经被广泛应用于谷歌无人驾驶车、YouTube、谷歌地图、谷歌图像搜索等产品中。谷歌通过图像处理技术可以归纳出图片中的主要内容并实现以图搜图的功能。这些技术在国内的百度、阿里、腾讯等科技公司也已经得到了广泛的应用。
在物体识别问题中,人脸识别是一类应用非常广泛的技术。它既可以应用于娱乐行业,也可以应用于安防、风控行业。在娱乐行业中,基于人脸识别的相机自动对焦、自动美颜基本已经成为每一款自拍软件的必备功能。在安防、风控领域,人脸识别应用更是大大提高了工作效率并节省了人力成本。比如在互联网金融行业,为了控制贷款风险,在用户注册或者贷款发放时需要验证本人信息。个人信息验证中一个很重要的步骤是验证用户提供的证件和用户是同一个人。通过人脸识别技术,这个过程可以被更加高效地实现。
深度学习在语音识别领域取得的成绩也是突破性的。2009年深度学习的概念被引入语音识别领域,并对该领域产生了巨大的影响。在短短几年时间内,深度学习的方法在TIMIT数据集上将基于传统的混合高斯模型(gaussian mixture model,GMM)的错误率从21.7%降低到了使用深度学习模型的17.9%。如此大的提高幅度很快引起了学术界和工业界的广泛关注。从2010年到2014年间,在语音识别领域的两大学术会议IEEE-ICASSP和Interspeech上,深度学习的文章呈现出逐年递增的趋势。在工业界,包括谷歌、苹果、微软、IBM、百度等在内的国内外大型IT公司提供的语音相关产品,比如谷歌的Google Now,苹果的Siri、微软的Xbox和Skype等,都是基于深度学习算法。
深度学习在自然语言处理领域的应用也同样广泛。在过去的几年中,深度学习已经在语言模型(language modeling)、机器翻译、词性标注(part-of-speech tagging)、实体识别(named entity recognition,NER)、情感分析(sentiment analysis)、广告推荐以及搜索排序等问题上取得了突出成就。在机器翻译问题上,根据谷歌的实验结果,在主要的语言对上,使用深度学习可以将机器翻译算法的质量提高55%到85%。表1对比了不同算法翻译同一句话的结果。从表中可以直观地看到深度学习算法带来翻译质量的提高。在2016年9月,谷歌正式上线了基于深度学习的中译英软件。现在在谷歌翻译产品中,所有从中文到英文的翻译请求都是由基于深度学习的翻译算法完成的。
表1 不同翻译算法的翻译效果对比表
中文原句 |
李克强此行将启动中加总理年度对话机制,与加拿大总理杜鲁多举行两国总理首次年度对话。 |
基于传统机器学习算法的翻译结果 |
Li Keqiang premier added this line to start the annual dialogue mechanism with the Canadian Prime Minister Trudeau two prime ministers held its first annual session. |
基于深度学习算法的翻译结果 | Li Keqiang will start the annual dialogue mechanism with Prime Minister Trudeau of Canada and hold the first annual dialogue between the two premiers. |
人工翻译结果 |
Li Keqiang will initiate the annual dialogue mechanism between premiers of China and Canada during this visit, and hold the first annual dialogue with Premier Trudeau of Canada. |
TensorFlow:来自Google的深度学习框架
要将深度学习更快且更便捷地应用于新的问题中,选择一款深度学习工具是必不可少的步骤。
TensorFlow是谷歌于2015年11月9日正式开源的计算框架。TensorFlow计算框架可以很好地支持深度学习的各种算法,但它的应用也不限于深度学习。
TensorFlow是由Jeff Dean领头的谷歌大脑团队基于谷歌内部第一代深度学习系统DistBelief改进而来的通用计算框架。DistBelief是谷歌2011年开发的内部深度学习工具,这个工具在谷歌内部已经获得了巨大的成功。
基于DistBelief的ImageNet图像分类系统Inception模型赢得了ImageNet2014年的比赛(ILSVRC)。通过DistBelief,谷歌在海量的非标注YouTube视屏中习得了“猫”的概念,并在谷歌图片中开创了图片搜索的功能。使用DistBelief训练的语音识别模型成功将语音识别的错误率降低了25%。在一次BBC采访中,当时的谷歌首席执行官Eric Schmidt表示这个提高比率相当于之前十年的总和。
虽然DistBelief已经被谷歌内部很多产品所使用,但是DistBelief过于依赖谷歌内部的系统架构,很难对外开源。为了将这样一个在谷歌内部已经获得了巨大成功的系统开源,谷歌大脑团队对DistBelief进行了改进,并于2015年11月正式公布了基于Apache 2.0开源协议的计算框架TensorFlow。相比DistBelief,TensorFlow的计算模型更加通用、计算速度更快、支持的计算平台更多、支持的深度学习算法更广而且系统的稳定性也更高。关于TensorFlow平台本身的技术细节可以参考谷歌的论文TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems。
如今在谷歌内部,TensorFlow已经得到了广泛的应用。在2015年10月26日,谷歌正式宣布通过TensorFlow实现的排序系统RankBrain上线。相比一些传统的排序算法,使用RankBrain的排序结果更能满足用户需求。在2015年彭博(Bloomberg)的报道中,谷歌透露了在谷歌上千种排序算法中,RankBrain是第三重要的排序算法。基于TensorFlow的系统RankBrain能在谷歌的核心网页搜索业务中占据如此重要的地位,可见TensorFlow在谷歌内部的重要性。包括网页搜索在内,TensorFlow已经被成功应用到了谷歌的各款产品之中。如今,在谷歌的语音搜索、广告、电商、图片、街景图、翻译、YouTube等众多产品之中都可以看到基于TensorFlow的系统。在经过半年的尝试和思考之后,谷歌的DeepMind团队也正式宣布其之后所有的研究都将使用TensorFlow作为实现深度学习算法的工具。
除了在谷歌内部大规模使用之外,TensorFlow也受到了工业界和学术界的广泛关注。在Google I/O 2016的大会上,Jeff Dean提到已经有1500多个GitHub的代码库中提到了TensorFlow,而只有5个是谷歌官方提供的。如今,包括优步(Uber)、Snapchat、Twitter、京东、小米等国内外科技公司也纷纷加入了使用TensorFlow的行列。正如谷歌在TensorFlow开源原因中所提到的一样,TensorFlow正在建立一个标准,使得学术界可以更方便地交流学术研究成果,工业界可以更快地将机器学习应用于生产之中。
其他已开源的深度学习工具
除了TensorFlow,目前还有一些主流的深度学习开源工具。笔者认为,不同的深度学习工具都在发展之中,比较当前的性能、功能固然是选择工具的一种方法,但更加重要的是比较不同工具的发展趋势。深度学习本身就是一个处于蓬勃发展阶段的领域,所以对深度学习工具的选择,笔者认为应该更加看重工具在开源社区的活跃程度。只有社区活跃度更高的工具,才有可能跟上深度学习本身的发展速度,从而在未来不会面临被淘汰的风险。
(a)不同深度学习工具社区流行度指标比较
(b)同深度学习工具社区参与度指标比较
图6 不同深度学习工具在GitHub上活跃程度对比图,图中数据获取的时间为2016年11月17日
图6对比了不同深度学习工具在GitHub上活跃程度的一些指标。图6(a)中比较了不同工具在GitHub上受关注的程度。从图中可以看出,无论是在获得的星数(star)还是在仓库被复制的次数上,TensorFlow都要远远超过其他的深度学习工具。如果说图6(a)只能代表不同深度学习工具在社区受关注程度,那么图6(b)对比了不同深度学习工具社区参与度。图6(b)中展示了不同深度学习工具在GitHub上最近一个月的活跃讨论贴和代码提交请求数量。活跃讨论帖越多,可以说明真正使用这个工具的人也就越多;提交代码请求数量越多,可以说明参与到开发这个工具的人也就越多。从图6(b)中可以看出,无论从哪个指标,TensorFlow都要远远超过其他深度学习工具。大量的活跃开发者再加上谷歌的全力支持,笔者相信TensorFlow在未来将有更大的潜力。
本文内容来自作者图书作品《TensorFlow:实战Google深度学习框架》。
作者介绍
郑泽宇,才云首席大数据科学家,前谷歌高级工程师。从 2013 年加入谷歌至今,郑泽宇作为主要技术人员参与并领导了多个大数据项目,拥有丰富机器学习、数据挖掘工业界及科研项目经验。2014 年,他提出产品聚类项目用于衔接谷歌购物和谷歌知识图谱(Knowledge Graph)数据,使得知识卡片形式的广告逐步取代传统的产品列表广告,开启了谷歌购物广告在搜索页面投递的新纪元。他于2013 年 5 月获得美国 Carnegie Mellon University(CMU)大学计算机硕士学位, 期间在顶级国际学术会议上发表数篇学术论文,并获得西贝尔奖学金。