《深度学习:Java语言实现》一一1.3人工智能与深度学习

简介: 本节书摘来自华章出版社《深度学习:Java语言实现》一 书中的第1章,第1.3节,作者:[日]巣笼悠辅(Yusuke Sugomori) 著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3人工智能与深度学习
机器学习是人工智能第三波浪潮中碰撞出来的火花,作为一种数据挖掘方法,它既实用又强大;然而,即便采用了这种新的机器学习方法,要实现真正的人工智能似乎依旧遥遥无期。因为定义特征一直需要人为干预,这是阻挡机器学习实现人工智能的一面高墙。看起来第三次人工智能的浪潮也会无疾而终。然而,出人意料的是,这波浪潮并未消退,反而出现了另一波新的浪潮。触发这波新浪潮的就是深度学习。
随着深度学习的出现,至少在图像识别和语音识别领域,机器学习已经可以凭借自身的能力从输入数据中判断“哪些是特征值”,不再需要人工的干预。之前只能照本宣科地处理符号的机器现在也能够获得概念了。

人工智能浪潮及人工智能研究领域之间的对应关系图

从深度学习首次出现到现在已经历了漫长的时间,时间回到2006年,加拿大多伦多大学(Toronto University)的欣顿(Hinton)教授及同事们一起发表了关于深度学习的第一篇论文(https://wwwcstorontoedu/~hinton/absps/fastncpdf)。在这篇论文中,欣顿教授提出了一种名为深度置信网络(Deep Belief Net, DBN)的方法,它是对传统机器学习方法——神经网络的一种扩展。深度置信网络使用MNIST数据库进行测试,这是一种对图像识别方法精度和准确度进行比较的标准数据库。这个数据库中包含了70 000个28×28像素的手写字符图像数据,这些图像都是从0到9的数字(其中60 000个训练样本集,10 000个测试样本集)。
接着,他们构造了一个基于训练数据的预测模型,依据机器能否正确识别测试用例中书写的数字0到9来测量它的预测精度。虽然这篇论文显示,它的预测精度要远超传统的方法,然而当时它并未引起大家的注意,也许这是由于它对比的对象是机器学习中比较通用的方法。
这之后不久的2012年,整个人工智能研究领域都被一个方法震撼了。这一年的图像识别竞赛“Imagenet大规模视觉识别挑战赛(Imagnet Large Scale Visual Recognition Challenge, ILSVRC)”上,一种使用深度学习名为“超级视觉(SuperVision)”(严格地说,这只是他们的队名)的方法赢得了比赛,该方法是由欣顿教授和多伦多大学的同事一起合作开发的。它将其他的竞争者们远远地甩在了后面,准确率也相当惊人。这场竞赛中,机器会接受相应的任务去自动地判别图像中的信息,它是一只猫、一只狗、一只鸟,抑或是一条船等,诸如此类。训练数据集是10 000 000张图片,测试数据是150 000张图片。这项比赛中,每一个方法都在竞争最低的出错率(即最高的准确率)。
让我们看看下面这张表,它显示了此次竞赛的结果:

排名团队名错误率

1SuperVision015315
2SuperVision016422
3ISI026172
4ISI026602
5ISI026646
6ISI026952
7OXFORD_VGG026979
8XRCE/INRIA027058

你可以看到SuperVision队与第二名ISI队之间在出错率上的差异超过10%。第二名之后其后各队之间的差异都在01%以内。现在你知道SuperVision在准确率上是如何碾压其他队的了吧。更让人瞠目结舌的是,这是SuperVision队首次参加ILSVRC竞赛,换句话说,他们并非图像识别的专家。SuperVision(深度学习)出现之前,图像识别领域的普适方法是机器学习。并且,正如我们前面所介绍的,机器学习使用的特征值需要由人工进行设置或者设计。他们需要依据人类的直觉和经验挨个尝试设计特征,一遍又一遍地调整参数,才有可能在最终取得01%的准确率提升。深度学习出现之前,研究的热点和竞争都集中在谁能够发明更加高效的特征工程。因此,当深度学习突然横空出世,所有的研究人员都大吃一惊。
另一个重要事件将深度学习的浪潮推广到了全世界。这一事件也发生在2012年,与SuperVision在ILSVRC震惊世界的时间是同一年,那一年谷歌宣布使用自己的深度学习算法,采用YouTube视频作为学习数据,机器可以自动识别出视频中的猫。关于这个算法的细节可以通过http://googleblogblogspotcom/2012/06/usinglargescalebrainsimulationsforhtml了解。这个算法从YouTube的视频中提取了1000万个图像,使用这些图像作为输入数据。回想一下我们之前所说的,传统机器学习中人扮演着重要的角色,需要人为处理数据,从图像中提取出特征值。而使用深度学习的话,原始图像可以直接作为输入数据。这表明机器自身已经可以自动地从训练数据集中提取特征。上述的这个研究里,机器就学习了猫的概念(虽然只有猫的故事比较有名,实际的研究工作也针对人类的图像进行了处理,效果也很好。机器已经知道了什么是人类!)下面的这幅图片,介绍了研究中经由YouTube未打标签的视频训练后深度学习认为猫所具有的特征:

这两个重大事件深深地震撼了我们,引发了现在依旧蓬勃发展的深度学习浪潮。
谷歌推出能够识别猫的方法之后,又拓展构造了另一个实验,这个实验使一个机器试图利用深度学习进行绘画。这一方法被称作构梦派(Inceptionism,http://googleresearchblogspotch/2015/06/inceptionismgoingdeeperintoneuralhtml)
该文中描述,构梦派的网络是按如下方式学习的:
“识别出的对象,会越来越多”。即形成反馈环路:如果云看起来有一点点像鸟,网络识别则会使其更像鸟;进而,网络在下一层及后面层中对鸟识别得更明确,直到一个清晰鸟形象出现,而且看似无处不在。
机器学习中使用神经网络通常是为了检测模式,从而对图像进行识别,而“构梦派”的玩法却是反其道而行之。正如你从下面这些“构梦派”的例子中所感受到的,这些绘图看起来有些诡异,就像是梦魇的世界:

抑或,它们可以被看成是艺术品。这个可以让任何人尝试“构梦派”的工具现在已经在GitHub上开源,它的名字是Deep Dream(https://githubcom/google/deepdream)。实现的例子也可以在该页面找到。如果你知道如何编写Python程序,就可以试着把玩下这些例子。
好吧,似乎没有什么可以阻挡深度学习站上史无前例的高峰,不过我们还是有不少疑问,譬如,到底深度学习有哪些创新?哪些具体的方法极大地提升了它的预测精度?令人意外的是,实际上深度学习在算法上并没有太多的区别。正如我们在前面所提到的,深度学习是对神经网络的应用,而神经网络是一种机器学习算法,它模拟了人类大脑的结构。不管怎样,机器采用了它并因此改变了一切。这其中的代表是预训练(Pretraining)和带激活功能的弃联(Dropout)。这些也是实现的关键字,因此请记住它们。
首先,深度学习中的“深度”到底代表什么意思呢?你可能已经知道,人类的大脑是一种电路结构,这种结构相当复杂。它是由复杂电路多层堆叠而成。而另一方面,当神经网络算法首次出现时,它的结构非常简单。它近乎是一种人脑结构的简化版本,其网络也仅有很少几层。因此,它能识别的模式少得可怜。所以,几乎每个人都会猜想“如果我们像人脑那样将网络聚集在一起,让它的实现更加复杂,能不能取得更好的效果呢?”当然,这个方法我们也尝试过,然而,不幸的是,结果并不理想,这种方式的预测精度比将网络堆叠起来效果还差一些。事实上,我们碰到了各种在简单网络中不曾遭遇的问题。为什么会这样呢?人脑中依据你看到的东西,信号会进入到电路的不同部分。不同部分的电路受到刺激就会触发不同的模式,所以你能区分不同的事物。
为了复制这一机制,神经网络算法使用权重连接代替了之前网络之间的连接。这是一个重要的改进,不过很快就出了问题。如果网络比较简单,权重可以依据学习数据进行恰当的分配,网络可以很好地识别和区分这些模式。然而,一旦网络变得复杂,连接变得过于密集,这时就很难依靠权重进行区分了。简而言之,算法将无法恰当地划分模式。另外,神经网络中,网络在进行全网训练时,通过反馈错误机制可以构建一定的模型。同样,如果网络简单,反馈可以及时地得到反应,然而,如果网络有多层结构,这样的环境中发生问题,而错误在它被反馈到全网之前消失了——想象一下那个错误扩散开并稀释会带来怎样的影响。
如果网络使用复杂结构搭建,情况是不是会好些呢?遗憾的是,这样的尝试最终也以失败告终。算法自身的概念是好的,不过,以世界理解来看,它从任何的标准而言都不能被称为一个完美的算法。虽然深度学习成功地将网络多层化,即将网络变得“深”了,它成功的关键其实是每一层都参与到分阶段的学习中来。而之前的算法将整个多层网络作为一个巨大的神经网络,在这个单一的网络中进行学习,这最终导致了前面提到的问题。
因此,深度学习采用了让各层预先学习的方式。这就是著名的“预训练”。预训练中,学习从浅层顺次开始。之后,浅层学习得出的数据会作为下一层的输入数据。机器按照此方式,由浅层的初级特征逐步学习到深层的高级特征。譬如,学习什么是猫时,第一层是一个 轮廓、接下来的一层是眼睛和鼻子的形状、下一层是脸的图片、再接下来一层是脸的细节,以此类推。类似地,人类几乎也是采用同样的步骤进行学习,首先获取一个全局的印象,之后再深入到细节特征。因为每一层都在分阶段地学习,学习的错误反馈也可以在每一层上得到恰当的处理。这种设计改善了预测的精度。还有一种改进,每一层的学习都使用不同的方法,不过我们现在暂时不讨论,后面的内容会进行介绍。
我们之前描述过网络连接过于稠密的问题。避免这种密集问题的方法称之为dropout。使用dropout的网络通过随机断开神经单元之间连接的方式进行学习。dropout从物理上使得网络变得更加稀疏。哪些网络会被切断是随机决定的,因此每个学习步骤都会重新形成一个新的网络。如果只是看看,你可能会质疑这种方法能否工作,但是它的确改进了预测精度,最终的结果是增强了网络的鲁棒性。人脑的电路也会依据它看到的主题在不同的部分进行处理或回应。dropout似乎成功地模拟了这套机制。将dropout机制嵌入算法之后,网络权重的调整变得很有效了。
深度学习在不同的领域已经有很多成功的案例;然而,它也有其局限性。正如“深度学习”这个名字所体现的,这种方法的学习是非常“深”的。这意味着完成学习步骤要花费漫长的时间。这个过程中消耗的计算量也异常庞大的。实际上,前面我们提到谷歌对猫的识别学习就耗时三天,动用了一千多台计算机。反过来,虽然深度学习的想法本身使用之前的技术也能达成,却是很难实现的。如果你不能比较便利地使用具备了大规模处理能力和海量数据的机器,这一方法就不会实现。
正如我们不断重复提起的,深度学习仅仅是机器获取“类人(HumanLike)”知识的第一步。没人知道未来会出现什么样的创新。不过,我们可以预测计算机的处理能力在将来能达到怎样的程度。为了进行预测,我们使用了摩尔定律。支撑计算机处理的集成芯片的性能是由其上搭载的晶体管数目决定的。摩尔定律显示,集成电路上的晶体管数量大约每隔一年半的时间就会增加一倍。实际上,计算机中央处理器中的晶体管数量迄今一直遵循摩尔定律增长。我们可以做一个对比,与世界上第一台微处理器,即英特尔公司的4004处理器,它当时有1×103(1000)个晶体管,最近的2015版,即英特尔公司的第五代酷睿处理器拥有1×109(10亿)个晶体管,如果技术保持这样的进步速度,集成电路上晶体管的数量不久将会超过100亿,这比人类大脑中细胞的数目还要多。
依据摩尔定律,在未来的2045年或者更晚的时候,我们会到达“技术奇点”,那时人类将有能力对技术进行预测。彼时,机器很可能就已经具有自我递归的智能了。换句话说,在未来的三十年里,人工智能会逐渐成熟。那个时候的世界会变成怎样呢……

摩尔定律的历史

英特尔公司研发的处理器搭载的晶体管数目一直遵循摩尔定律稳定增长着。
闻名世界的学者斯蒂芬·霍金教授接受BBC的一次访谈(http://wwwbbccom/news/technology30290540)时说:
“全面人工智能的发展将宣告人类的终结!”
深度学习会成为“黑魔法”吗?事实上,技术的发展有时的确带来了灾难。实现人工智能的路依旧漫长,然而,我们在进行深度学习的工作时要保持警惕。

相关实践学习
基于函数计算实现AI推理
本场景基于函数计算建立一个TensorFlow Serverless AI推理平台。
相关文章
|
24天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
1天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
1天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
27 10
|
3天前
|
机器学习/深度学习 算法 PyTorch
fast.ai 深度学习笔记(三)(3)
fast.ai 深度学习笔记(三)(3)
|
3天前
|
机器学习/深度学习 PyTorch 算法框架/工具
fast.ai 深度学习笔记(三)(1)
fast.ai 深度学习笔记(三)(1)
|
4天前
|
机器学习/深度学习 固态存储 Python
|
4天前
|
机器学习/深度学习 算法框架/工具 PyTorch
|
机器学习/深度学习 自然语言处理 Web App开发
|
4天前
|
机器学习/深度学习 API 调度
|
机器学习/深度学习 计算机视觉 存储

热门文章

最新文章