《深度学习: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)时说:
“全面人工智能的发展将宣告人类的终结!”
深度学习会成为“黑魔法”吗?事实上,技术的发展有时的确带来了灾难。实现人工智能的路依旧漫长,然而,我们在进行深度学习的工作时要保持警惕。

相关文章
|
8月前
|
JSON Java API
【干货满满】分享京东API接口到手价,用Java语言实现
本示例使用 Java 调用京东开放平台商品价格及优惠信息 API,通过商品详情和促销接口获取到手价(含优惠券、满减等),包含签名生成、HTTP 请求及响应解析逻辑,适用于比价工具、电商系统集成等场景。
|
6月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
416 18
|
12月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
391 5
|
6月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
247 4
|
11月前
|
机器学习/深度学习 人工智能 供应链
从概念到商业价值:AI、机器学习与深度学习全景指南
在这个科技飞速发展的时代🚀,人工智能正以惊人的速度渗透到我们的生活和工作中👀。但面对铺天盖地的AI术语和概念,很多人感到困惑不已😣。"AI"、"机器学习"、"深度学习"和"神经网络"到底有什么区别?它们如何相互关联?如何利用这些技术提升工作效率和创造价值?
583 0
|
7月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
293 15
|
9月前
|
机器学习/深度学习 人工智能 PyTorch
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
本文以 MNIST 手写数字识别为切入点,介绍了深度学习的基本原理与实现流程,帮助读者建立起对神经网络建模过程的系统性理解。
825 15
AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
AI 基础知识从 0.3 到 0.4——如何选对深度学习模型?
本系列文章从机器学习基础出发,逐步深入至深度学习与Transformer模型,探讨AI关键技术原理及应用。内容涵盖模型架构解析、典型模型对比、预训练与微调策略,并结合Hugging Face平台进行实战演示,适合初学者与开发者系统学习AI核心知识。
669 15
|
9月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
404 14
|
8月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
607 0

热门文章

最新文章