作者:(印)迪帕延·德夫(Dipayan Dev)
出版社:人民邮电出版社
格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT
Hadoop深度学习试读:
前言
本书将教你如何使用Hadoop在深度神经网络中部署大型数据集,以实现最佳性能。
从了解什么是深度学习以及与深度神经网络相关的各种模型开始,本书将向你展示如何配置用于深度学习的Hadoop环境。
本书内容
第1章,深度学习介绍。深度学习在过去十年间已深入人心,由于功能增强了,其发展速度甚至超过了机器学习。这一章首先介绍了人工智能的现实应用、相关的挑战,以及深度学习为何能够有效地解决这些问题。通过解决一些主要的机器学习问题(如维度诅咒、梯度消失等),深入阐释了深度学习。为了后续各章内容的学习,后半部分讨论了各种类型的深度学习网络。该章主要适用于想了解深度学习的基础知识,但不需要深入了解各个深度神经网络细节的读者。
第2章,大规模数据的分布式深度学习。大数据和深度学习无疑是近段时间最热门的两大技术趋势。两者关系密切,过去几年中都呈现出了巨大的发展。这一章首先介绍了如何将深度学习技术用于大量非结构化的数据,并从中提取宝贵的隐藏信息。Google、Facebook、苹果等知名技术公司正在深度学习项目中使用这种大规模数据,以更智能的方式训练一些优秀的深度神经网络。然而,深度神经网络在处理大数据时遇到了一些挑战。这一章将详细说明这些挑战。后半部分介绍了Hadoop,并探讨了如何使用Hadoop的YARN及其迭代Map-Reduce来实现深度学习模型。接着介绍了深度学习中一个流行的开源分布式框架:Deeplearning4j,并解释了其各种组件。
第3章,卷积神经网络。卷积神经网络是一种深度神经网络,广泛应用于顶尖技术产业的各种深度学习项目中。卷积神经网络在图像识别、视频识别、自然语言处理等各个领域都有广泛的应用。卷积是一种特殊的数学运算,是卷积神经网络的重要组成部分。为了学习卷积神经网络,这一章首先用现实生活中的一个示例说明了卷积的概念。接下来,通过对网络的每个组成部分进行说明,深入阐释了卷积神经网络。为了提高网络性能,卷积神经网络具有三个最重要的参数:稀疏连接、参数共享和平移不变性。这一章对这些概念进行了解释,以便更好地理解卷积神经网络。卷积神经网络还有一些关键的超参数,这些超参数有助于确定网络输出图像的维度。这一章还详细讨论了这些超参数之间的数学关系。后半部分重点介绍分布式卷积神经网络,并展示了如何使用Hadoop和Deeplearning4j来实现分布式卷积神经网络。
第4章,循环神经网络。循环神经网络是一种特殊的神经网络,可作用于长向量序列,以产生不同的向量序列。近年来,它们已成为可变长序列建模中极受欢迎的选择。循环神经网络已经成功应用于语音识别、在线手写识别、语言建模等领域。通过提供一些必要的数学关系和可视化表征,这一章详细阐释了循环神经网络的各种概念。循环神经网络拥有自己的“内存”来存储中间隐藏层的输出。“记忆”是循环神经网络的核心部分,这一章用合适的框图对其进行了讨论。此外,为了克服单向循环神经网络的局限性,这一章引入了双向循环神经网络的概念。随后,为了解决第1章中提到的梯度消失问题,讨论了循环神经网络中被称为“长短期记忆”的一个特殊单元。最后,使用Deeplearning4j在Hadoop中实现分布式深度循环神经网络。
第5章,受限玻尔兹曼机。这一章涵盖了第3章和第4章中讨论过的两种模型,并说明了它们是判别模型,还探讨了名为“受限玻尔兹曼机”的生成模型。在给定隐藏参数时,受限玻尔兹曼机能够随机生成可见的数值。该章首先介绍了“基于能量的模型”这一概念,并阐释了受限玻尔兹曼机和它的关系。此外,还讨论了一种被称为“卷积受限玻尔兹曼机”的特殊受限玻尔兹曼机,它是卷积和受限玻尔兹曼机的组合,有助于提取高维图像的特征。
这一章的后半部分介绍了深度信念网络,这是一种被广泛使用的、由几个受限玻尔兹曼机组成的多层网络。此外,还讨论了如何使用Hadoop在分布式环境中实现深度信念网络。最后讨论了如何使用Deeplearning4j实现受限玻尔兹曼机以及分布式深度信念网络。
第6章,自动编码器。这一章引入了一种称为“自动编码器”的生成模型,这种模型通常用于降维、特征学习或提取。该章首先解释了自动编码器的基本概念及其通用框图。自动编码器的核心结构基本上可分为编码器和解码器两部分。编码器将输入映射到隐藏层,而解码器将隐藏层映射到输出层。基础自动编码器的主要作用是将输入层的某些方面复制到输出层。这一章接着讨论了稀疏自动编码器,它基于隐藏层的分布式稀疏表征。随后深入介绍了包含多个编码器和解码器的深度自动编码器的概念,并提供了适当的示例和框图。该章后半部分对降噪自动编码器和堆叠式降噪自动编码器进行了说明。最后展示了如何使用Deeplearning4j在Hadoop中实现堆叠式降噪自动编码器和深度自动编码器。
第7章,用Hadoop玩转深度学习。这一章主要介绍分布式环境中三种最常用的机器学习应用的设计。该章讨论了如何使用Hadoop进行大规模的视频处理、图像处理和自然语言处理,阐释了如何在Hadoop分布式文件系统中部署大型视频和图像数据集,并使用Map-Reduce算法进行处理。对于自然语言处理,该章最后对其设计和实现进行了深入的说明。
阅读背景
我们希望本书的所有读者都具有一定的计算机科学背景。本书主要讨论不同的深度神经网络,以及其基于Deeplearning4j的设计和应用。为了更好地学习本书中的内容,你最好已掌握机器学习、线性代数、概率论、分布式系统和Hadoop的基础知识。为了使用Hadoop实现深度神经网络,本书广泛应用了Deeplearning4j。运行Deeplearning4j所需的知识可以参考以下链接:https://deeplearning4j.org/quickstart。
读者对象
如果你是想学习如何在Hadoop上进行深度学习的数据科学家,那么本书很适合你。对机器学习的基本概念与Hadoop有一定的了解,将有助于你充分利用本书。
排版约定
在本书中,你会发现一些不同的文本样式。以下举例说明它们的含义。
嵌入代码、数据库表名、用户输入等用等宽字体表示,例如:“.build()函数用于构建层。”
代码块的样式如下所示:public static final String DATA_URL = "http://ai.stanford.edu/~amaas/data/sentiment/*";
当我们希望你注意代码块中的特定部分时,相关行或项目将以粗体显示:MultiLayerNetwork model = new MultiLayerNetwork(getConfiguration());Model.init();
新术语和重要内容会以黑体字显示。 此图标表示警告或重要事项。
此图标表示提示和技巧。
读者反馈
我们非常欢迎读者的积极反馈。如果你对本书有任何想法或看法,请及时反馈给我们,这将有助于我们出版充分满足读者需求的图书。 一般性反馈请发送至电子邮箱feedback@packtpub.com,并在邮件主题中注明书名。如果你擅长某个领域,并有意编写图书或是贡献一份力量,可以参考我们的作者指南:http://www.packtpub.com/authors。
客户支持
你现在已经是Packt的尊贵读者了。为了让你的购买物超所值,我们还为你准备了以下内容。下载示例代码
你可以使用自己的账户从http://www.packtpub.com下载所有已购Packt图书的示例代码文件。如果你是从其他途径购买的本书,那么可以访问http://www.packtpub.com/support并注册,我们将通过电子邮件向你发送文件。
可以通过以下步骤下载示例代码文件。
(1) 使用电子邮件和密码登录或注册我们的网站。
(2) 将鼠标光标移到网站上方的SUPPORT标签。
(3) 单击Code Downloads & Errata按钮。
(4) 在搜索框中输入书名。
(5) 选择想要下载代码文件的图书。
(6) 从下拉菜单中选择购书途径。
(7) 单击Code Download按钮。
下载文件后,确保使用以下软件的最新版来解压文件:● WinRAR / 7-Zip(Windows)● Zipeg / iZip / UnRarX(Mac)● 7-Zip / PeaZip(Linux)
也可以在GitHub上获取本书的代码包,具体网址为https://github.com/PacktPublishing/Deep-Learning-with-Hadoop。另外,https://github.com/PacktPublishing上还有其他图书的代码包和视频,你可以自行下载。下载本书的彩色图片
我们还提供了一份PDF文件,其中包含了书中的截屏和图表等彩色图片,以帮助你更好地理解输出的变化。下载网址为https://www.packtpub.com/sites/default/files/downloads/DeepLearningwithHadoop_ColorImages.pdf。勘误
虽然我们已尽力确保书中的内容正确无误,但出错仍旧在所难免。如果在书中发现错误,不管是文本还是代码,希望你能够告知我们,我们将不胜感激。这样一来,你可以让其他读者免受挫败,也可以帮助我们改进本书的后续版本。如果发现任何错误,请访问http://www.packtpub.com/submit-errata,选择本书,单击Errata 1Submission Form链接,并输入详细说明。经过核实后,你提交的勘误内容将上传到官方网站或添加到现有的勘误表中。1中文版勘误可以在http://www.ituring.com.cn/book/1940中查看和提交。——编者注
访问https://www.packtpub.com/books/content/support,在搜索框中输入书名后就可以在勘误(Errata)部分查看已经提交的勘误信息。盗版
任何媒体都会面临版权内容在互联网上的盗版问题,Packt也不例外。Packt非常重视版权保护。如果你在互联网上发现了我们作品的非法复制版,不管该复制版以何种形式存在,请立即提供相关网址或网站名称,以便我们寻求补救。
请将可疑盗版材料的链接发至copyright@packtpub.com。
维护作者的权益就是在维护我们继续为你带来价值的能力,感谢你对此作出的努力。问题
如果你对本书内容存有任何疑虑,可以通过questions@packtpub.com联系我们,我们将尽最大努力解决问题。第 1 章深度学习介绍“到目前为止,人工智能的最大危险是人们过早地断定
了他们了解人工智能。”——Eliezer Yudkowsky
你是否想过,为什么即使是最顶尖的选手也很难在国际象棋比赛中战胜计算机?Facebook如何在数亿张照片中识别出你的脸?你的手机如何识别你的声音并从数百个联系人中呼叫正确的人?
本书的主要目标就是处理这些查询,并提供详细的解决方案。本书可供多种读者阅读使用,但我们的目标读者主要有两类。第一类是学习深度学习和人工智能的本科生或研究生,第二类是对大数据、深度学习和统计建模有一定了解,但想快速了解如何将深度学习应用于大数据领域以及如何将大数据技术应用于深度学习领域的软件工程师。
本章将介绍深度学习的基本概念、术语、特性和主要挑战,主要是为读者打好基础。本章还提出了不同深度网络算法的分类,这些算法在最近十年被研究者广泛采用。本章涉及的主题如下:● 开始深度学习之旅● 深度学习的术语● 深度学习——一场人工智能的革命● 深度学习网络的分类
自人类文明诞生以来,人们总是梦想着建造人工机器或机器人,它们可以像人类一样运作和工作。从希腊神话人物到古印度史诗,历史中有许多这样的示例,它们清楚地表明了人们的兴趣和意向:创造并拥有人工生命。
在计算机时代的初期,人们就想知道计算机将来能否变得像人类一样聪明。后来,自动化机器开始变得不可或缺,即便在医学领域也是如此。随着这种需求和人们对这一领域的不断研究,人工智能(Artificial Intelligence,AI)已经是一种呈蓬勃发展之势的技术,在多个领域,如图像处理、视频处理以及许多其他医学工具,都得到了应用。
虽然人工智能解决了很多日常问题,但没有人知道编码人工智能系统的具体规则。比较直观的几个问题如下所示。● Google搜索,它在理解你输入或说出的内容方面做得很好。● 像上文提到的,Facebook在识别人脸方面也做得不错,从而可
以理解用户的兴趣所在。
此外,随着各种其他领域的整合,如概率论、线性代数、统计学、机器学习和深度学习等,人工智能在研究领域备受青睐。
人工智能早期取得成功的一个关键原因是,它主要解决的是基本问题,而计算机在解决这些问题时不需要使用大量的知识。例如,1997年,IBM的深蓝计算机击败了国际象棋世界冠军Garry [1]Kasparov。虽然这一成就在当时是很了不起的,但用国际象棋的有限规则来训练计算机绝对不算是一个繁重的任务。用固定且数量有限的规则来训练系统称为计算机的硬编码知识。许多人工智能项目都经历了用传统语言来描述世界不同领域的硬编码知识的阶段。随着时间的推移,这种硬编码知识似乎不再适用于处理拥有大量数据的系统。而且,数据遵循的规则数量也在不断地改变。因此,遵循这一系统的大多数项目并没有达到预期的高度。
要想克服这种硬编码知识所面临的困难,这些人工智能系统需要以某种方式从提供的原始数据中概括出模型和规则,而无需外部灌输。系统做这件事的熟练程度被称为机器学习。日常生活中有各种各样成功的机器学习实现,以下是几个最常见且最重要的实现。● 垃圾邮件检测:对于收件箱中的电子邮件,模型可以检测是将该
电子邮件放在垃圾箱还是收件箱中。普通的朴素贝叶斯模型就可
以区分这样的电子邮件。● 信用卡欺诈检测:模型可以检测在特定时间间隔内执行的多个交
易是否是由最初的客户执行的。● 最受欢迎的机器学习模型之一是Mor-Yosef等人在1990年提出
的,该模型使用了逻辑回归,可以对患者是否需要剖腹产给出建
议。
这样的模型有很多,它们是借助机器学习技术实现的,如图1-1所示。
图1-1 不同类型的表征示例。假设需要训练机器来检测糖豆之间的空隙。图中右侧的糖豆稀疏,人工智能系统可以很容易就确定空隙。图中左侧的糖豆非常紧凑,找到空隙对机器来说是一个非常困难的任务(图像来自USC-SIPI图像数据库)
机器学习系统的性能主要取决于向系统提供的数据,这称为数据表征。与表征相关的所有信息称为数据的特征。例如,如果使用逻辑回归来检测患者是否患有脑肿瘤,那么人工智能系统不会尝试直接诊断患者。相反,相关医生需要将该患者的常见症状输入系统,接着人工智能系统会将输入的信息与用于训练系统的以往信息相匹配。
基于系统的预测分析,人工智能系统会对疾病做出诊断。虽然逻辑回归可以基于给定的特征来学习和决策,但它不能影响或修改特征的定义方式。逻辑回归是一种回归模型,基于自变量的因变量的可能值是有限的,这一点与线性回归不同。因此,如果提供给模型的是剖腹产患者的报告而不是脑肿瘤患者的报告,那么它肯定不能预测出正确的结果,因为给定的特征与训练的数据不匹配。
机器学习系统对数据表征的依赖对我们来说并非是未知的。事实上,大多数计算机理论都是基于数据表征而表现得更好。例如,模式设计会对数据库的质量产生影响。任何数据库查询的执行,哪怕是在百万甚至千万行的数据上查询,只要表格被正确索引,那么速度就会变得极快。因此,人工智能系统对数据表征的依赖也没什么可让人大惊小怪的。
日常生活中也有很多这样的示例,其中数据表征决定了我们的效率。从20人中找到一个人明显比从500人中找到一个人容易。图1-1就是两种类型的数据表征的可视化表示。
因此,如果向人工智能系统传递适当的特征数据,那么即便是最困难的问题也可以得到解决。然而,以正确的方式收集并传递系统期望的数据对于程序员来说是一大难题。
在许多实际场景中,提取特征可能是一件繁琐的事情。因此,数据的表征方式决定了系统智能的主要因素。 如果特征不恰当,那么从人和猫的组合中找到猫将会是
非常复杂的任务。我们都知道猫有尾巴,因此可能会想要将
有尾部作为突出特征。然而,鉴于尾巴有不同的形状和大小,
通常很难用像素值来准确地描述尾部。此外,尾巴有时可能
会与人的手部混淆。另外,一些物体的重叠可能会导致看不
到猫尾巴的存在,使得图像更加复杂。
从上述讨论可以得出一个确切的结论:人工智能系统的成功主要取决于输入数据的表征方式。除此之外,不同的表征还能捕获与保留能够解释数据差异性的那些隐藏因素(解释性因素)。
表征学习是解决这些特定问题时广泛使用的一种流行学习方法。表征学习可以定义为根据数据当前层的表征来推断下一层数据的表征。在理想情况下,所有的表征学习算法都有一个优势:它捕获隐藏的因素,而这一子集可能适用于每个特定的子任务。图1-2中给出了简单的说明,如下所示。
图1-2 表征学习的简单说明。中间层能够发现解释性因素(蓝色方框中的隐藏层)。有些因素解释了每个任务的目标,有些因素则解释了任务的输入
然而,从大量原始数据中提取高级数据和特征需要人类级别的理解力,这就有了局限。以下就是这样的示例。● 区分年龄相仿的两个婴儿的哭声。● 识别猫眼在白天与黑夜的图像。因为猫眼在夜间会发光,所以完
成这项工作并不轻松。
在所有这些极端情况中,表征学习并没有异常的表现,而是展现出了威慑行为。
深度学习是机器学习的一个子领域。通过构建多层次的表征或从一系列简单的表征和特征中学习一个具有层次结构的特征集,深度学[2,8]习能够解决表征学习的主要问题。
图1-3 通过识别各种组合(如轮廓、角,可以用边缘来定义),此图展示了深度学习系统如何显示人的图像。图片的转载获得了Ian Goodfellow、Yoshua Bengio和Aaron Courville的许可,来源于The MIT Press出版的Deep Learning一书
图1-3对深度学习模型进行了说明。就像将一系列不同的像素值构成一幅图像一样,用计算机解码这些原始的非结构化的输入数据通常是一件很繁琐的事。在理想情况下,转换像素值来识别图像的映射函数是很难实现的。此外,为这类映射直接训练计算机几乎是不可能的。为了应对这些类型的任务,深度学习会创建连接至期望输出的一系列映射子集,以解决这类难题。映射的每个子集对应于模型的一个层。输入层包含了可以观察的变量,因此处于可见层。我们可以从给定的输入中逐层提取数据的抽象特征。因为这些抽象的值在给定数据中是不可用或不可见的,所以这些层称为隐藏层。
在图1-3的第一隐藏层中,通过对相邻像素进行比较学习,可以轻易地识别出边缘。第二隐藏层可以将角和轮廓从第一隐藏层的边缘中区分开来。基于描述角和轮廓的第二隐藏层,第三隐藏层可以识别特定对象的不同部分,最终可以从第三隐藏层中检测出图中存在的不同对象。[2]
深度学习由Hinton等人于2006年提出;Bengio等人在2007年将其用于解决MNIST数字分类问题。最近几年,深度学习经历了从数字识别向自然图像的物体识别的重大转变。除此之外,Krizhevsky等人在2012年使用了ImageNet数据集,这实现了深度学习领域的一个重大突破。
本书的范围仅限于深度学习。因此,在进入主题之前,需要先明确与深度学习有关的概念。
在过去的10年间,许多学者从不同角度对深度学习进行了定义,但目前还没有一个统一的定论。以下是被广泛接受的两种定义。● GitHub:深度学习是机器学习研究的一个新领域,其目的是让机
器学习更接近其原始目标之一——人工智能。深度学习是学习
多层次的表征和抽象的一种方法,有助于理解图像、声音和文本
等数据。● 维基百科:深度学习是机器学习的一个分支,它基于一组算法,
通过线性或非线性的转换,尝试使用具有多个处理层的深度图来
对数据中的高级抽象进行建模。
上述定义表明,也可以认为深度学习是一类特殊的机器学习。深度学习具有从各种简单特征中学习复杂表征的能力,这使其在数据科学领域获得了广泛的应用。为了进一步了解深度学习,我们列出了本书后面将经常使用的一些术语。接下来将给出各种术语和深度学习使用的重要网络,以帮助你奠定深度学习的基础。1.1 开始深度学习之旅
开始本书的深度学习之旅前,你应当了解机器学习的所有术语和基本概念。如果已经充分了解了机器学习及其相关术语,那么你可以忽略本节,直接跳转到1.2节开始阅读。热衷于数据科学,同时想要彻底学习机器学习的读者,可以阅读Machine Learning(Tom M. [5]Mitchell,1997)和Machine Learning: A Probabilistic [6]Perspective(2012)这两本书。 注意,神经网络并不会产生奇迹,但合理地使用它们可
以产生一些惊人的效果。1.1.1 深度前馈网络
神经网络可以是循环的或前馈的。前馈网络在其网络图中并没有任何循环结构。具有多层次的网络称为深度网络。简单来说,任何具有两层或更多(隐藏)层的神经网络被定义为深度前馈网络或前馈神经网络。图1-4显示了深度前馈神经网络的一般形式。
图1-4 浅层前馈网络和深度前馈网络
深度前馈网络的工作原理是,随着深度的增加,网络可以执行更多的顺序指令。顺序指令可以提供很大的威力,因为它们可以指向较早的指令。
前馈网络的目的是对某个函数f 进行通用化。例如,分类器y=f(x)将输入值x 映射到类别y。深度前馈网络将该映射关系修改为y = f(x; α),并学习参数α 的值,从而得到最适合的函数值。 图1-4是深度前馈网络的简单表示,它展示了深度前馈网络与传统神经网络的架构差异。 注意,深度神经网络是具有多个隐藏层的前馈网络。1.1.2 各种学习算法
数据集被认为是学习过程的基石。数据集可以定义为相互关联的数据的集合,该集合由多个独立的实体组成,但也可以根据使用场景将该集合当作单个实体。数据集的各个数据元素称为数据点。
图1-5是从社交网络分析中收集到的各种数据点的可视化表示。
图1-5 社会网络分析的分散数据点(图片来源于维基百科)● 未标记的数据:这部分数据由人为生成的对象组成,这些对象可
以从周围环境中轻松获取,如X射线、日志文件数据、新闻文章、
演讲、视频、推文等。● 已标记的数据:这部分数据是通过将一组未标记的数据进行标准
化而得到的。这类数据通常是格式化的、已分类的、已标签化的,
并且易于人类理解,以便进行进一步的处理。
从最高层面来看,机器学习技术可以根据不同的学习过程分为监督学习和无监督学习。1. 无监督学习
在无监督学习算法中,给定的输入数据集没有期望的输出。在分
析数据集时,系统从其经验中学习有意义的属性和特征。在深度
学习中,系统通常会尝试从数据点的整体概率分布中学习。到目
前为止,执行聚类的无监督学习算法有多种类型。简单地说,聚
类将具有相似数据类型的多个数据点放入同一个簇中。但是,通
过这种学习,其最终输出不会提供任何反馈,也就是说,不会有
任何老师来纠正你的错误。图1-6展示了无监督聚类。
图1-6 简单的无监督聚类
Google News是无监督聚类算法在现实生活中的一个实际应用。
在Google News中打开某个主题时,将显示重定向到多个页面的
超链接。每一个主题都可以看作是指向各个独立链接的超链接集
群。2. 监督学习
与无监督学习不同,监督学习中的期望输出与每一步经验相关
联。系统被赋予一个数据集,同时它已经知道了期望的输出是什
么,并了解每个相关层的输入和输出间的正确关系。这种学习类
型通常用于分类问题。
监督学习的可视化说明如图1-7所示。
图1-7 基于监督学习的数据分类
监督学习的现实示例包括面部检测、面部识别等。
虽然监督学习和无监督学习看起来不同,但它们往往通过各种方
式联系在一起。因此,这两种学习方法之间的细微差异往往是模
糊的。
可以使用以下的数学表达式来表达前面的陈述。
概率的一般乘积法则表明,对n个数据集()来说,其联合
概率分布如下所示:
这个分布表明,无监督问题可以转换为t 个监督问题来解决。除
此之外,p(k | n)的条件概率是个监督问题,可以通过使用无监督
学习算法求得p(n, k)的联合概率来解决。
虽然这两类问题不能完全地独立,但它们有助于基于执行的操作
来区分机器学习和深度学习算法。通常来说,簇的形成、基于相
似性识别人群密度等称为无监督学习,而结构化的输出、回归、
分类等问题称为监督学习。3. 半监督学习
顾名思义,这种类型的学习在训练期间同时使用已标记和未标记
的数据。这是一类在训练过程中使用大量未标记数据的监督学习。
例如,半监督学习可以用于深度信念网络(稍后解释),这是一
种深度网络,网络中的一部分层用于学习数据的结构(无监督学
习),有一层用于学习如何对数据进行分类(监督学习)。
在半监督学习中,给定n 或p(k | n)的概率,使用未标记的数据
p(n)与已标记的数据p(n, k)来预测k 的概率。
如图1-8所示,顶部显示了模型用于区分白色和黑色圆圈的决策
边界,底部则显示了模型所包含的另一个决策边界。在该数据集
中,除了不同类别的两个圆圈外,还附有一组未标记的数据(灰
色圆圈)。这个训练过程可视为创建集群,接着用已标记的数据
进行标记,从而将模型的决策边界从高密度数据区域移走。
图1-8 大量未标记数据对半监督学习技术的影响(图片来源于
维基百科)[7]
你可以通过Chapelle等人的著作获取更多有关半监督学习方法
的信息。
因为已经对人工智能、机器学习和表征学习有了基本的了解,所
以你现在可以将学习的重心放在深度学习上。
从前面提到的定义可以看出,深度学习具有两大特点,如下所示。● 通过后续抽象层的连续知识传递,对特征的表征进行无监督学习和监督学习的一种方式。● 由处理非线性信息的多个抽象阶段组成的一个模型。1.2 深度学习的相关术语● 深度神经网络(DNN)。可以将深度神经网络定义为具有多个隐
藏层的多层感知器。各层的所有权值彼此完全连接,并接收来自
上一层的连接。可以通过监督学习或无监督学习对权值进行初始
化。● 循环神经网络(RNN)。循环神经网络是一种专门用于从时间序
列或语音、视频等序列数据中学习的深度学习网络。循环神经网
络的主要概念是,需要为下一个状态保留前一个状态的观察结
果。近年来,循环神经网络在深度学习中的热门话题是长短期记
忆。[9,10,11]● 深度信念网络(DBN)。这种类型的网络可定义为具有可
见层和多个(隐藏)潜在变量层的概率生成模型。每个隐藏层通
过学习在下层神经元间建立统计关系。网络层次越高,其关系就
越复杂。可以使用逐层贪婪训练法对这种类型的网络进行有效的
训练,以自下而上的方式依次训练所有隐藏层。● 玻尔兹曼机(BM)。玻尔兹曼机可定义为一种对称连接的、神
经元状的网络,它能够随机决定保持开启或关闭。玻尔兹曼机通
常具有简单的学习算法,因而可以从训练数据集中发现代表复杂
规律的许多有趣的特征。● 受限玻尔兹曼机(RBM)。受限玻尔兹曼机是一种生成式随机人
工神经网络,是一种特殊的玻尔兹曼机。这类网络具有在数据集
合上学习概率分布的能力。受限玻尔兹曼机由一层显元和一层隐
元组成,但是连接只会存在于显元与隐元之间。● 卷积神经网络(CNN)。卷积神经网络是神经网络的一部分,各
层彼此稀疏地连接,并连接至输入层。后续层的每个神经元仅负
责输入的一部分。深度卷积神经网络在位置识别、图像分类、人
脸识别等领域取得了一些无与伦比的成绩。● 深度自动编码器。深度自动编码器是一种具有多个隐藏层的自动
编码器。这类网络可以作为一堆单层自动编码器来进行预训练。
模型训练过程通常很困难:首先需要训练第一个隐藏层来重构输
入数据,接着用输入数据来训练下一个隐藏层,以重构前一个隐
藏层的状态,以此类推。● 梯度下降(GD)。这是在机器学习中广泛使用的一种优化算
法,可用于确定函数(f)的系数,它降低了整个代价函数。梯
度下降主要用于不可能通过分析(如线性代数)来计算所需参数
时。
在梯度下降中,模型的权值随着训练数据集的每次迭代逐步更
新。
代价函数J (w)及平方误差之和如下所示:
以一定的步长与反向梯度计算权值更新的量级与方向,具体公式
如下所示:
在前面的等式中,η是网络的学习速率。每轮迭代后,权值按照
以下规则逐步更新:
for one or more epochs,
for each weight i,
w:= w + Δwii
end
end
在此示例中,。
使用梯度下降进行优化的流行示例是逻辑回归和线性回归。● 随机梯度下降(Stochastic Gradient Descent,SGD)。在大量数
据集上运行的各种深度学习算法都基于一种名为“随机梯度下
降”的优化算法。梯度下降仅在小数据集上表现良好。然而,在
大规模数据集的情况下,这种方法的开销非常大。在梯度下降中,
遍历整个训练数据集需要更新权值一次,因此,随着数据的不断
增加,整个算法会越来越慢。权值只能以非常缓慢的速度更新,
因此,算法收敛到全局最优成本所需的时间就延长了。
因此,为了处理这种大规模的数据集,开始采用一种演化后的梯度下降算法:随机梯度下降法。与梯度下降不同,权值在训练数据集的每次迭代后更新,而不是遍历整个数据集后更新。until cost minimum is reached for each training sample j: for each weight i w:= w + Δwii end endend
在此示例中,。
近几年来,深度学习得到了广泛的普及,成为许多应用学科的研究领域的交汇点,如模式识别、神经网络、图形建模、机器学习和信号处理等。
深度学习如此流行的其他原因可以归结为以下几条。● 近年来,GPU(Graphical Processing Units,图形处理器)的能
力急剧提升。● 用于模型训练的数据集的数据大小显著增加。● 机器学习、数据科学和信息处理方面的近期研究已经取得了一些
实质性的进展。
本章剩余部分将对所有这几点进行详细说明。1.3 深度学习——一场人工智能革命
本书不会探讨深度学习的悠久历史。但为了认识并理解这个领域,还是需要了解一些基本的背景知识。
我们已经在前文中简单地介绍了深度学习在人工智能领域的地位。本节将详细介绍机器学习和深度学习的异同,并讨论这两个主题在过去十多年间的发展趋势。“深度学习的海浪已拍打计算语言学的海岸多年,但
2015年似乎是海啸全力袭击主要的自然语言处理会议的一
年。”——Christopher D. Manning博士,2015年12月
深度学习在人工智能领域的影响力正迅速扩大,其惊人的实证结果令许多研究人员震惊。机器学习和深度学习代表了两种不同的思想学派。可以将机器学习视为人工智能最根本的方法,而深度学习则是新的、拥有巨大潜力的、同时还添加了其他功能的学科。
然而,机器学习往往并不能完全解决人工智能的许多关键问题,如语音识别、对象识别等。
随着随机变量数目的不断增加,在处理高维数据的计算时,传统算法的性能受到了很大的挑战。此外,在传统机器学习方法中实现泛化的过程并不足以在高维空间中学习复杂的义务,因为后者通常会使得模型训练的计算成本更高。机器学习基本算法的“崩溃”推动了深度学习的发展,其目的就是克服上述障碍。
大量的研究人员和数据科学家都认为,随着时间的推移,深度学习将成为人工智能的主要部分,并终将替代机器学习算法。为了证明这一点,我们研究了这两个领域当前的Google趋势,并得出以下结论。● 机器学习曲线在近十年一直处于增长趋势。虽然深度学习出现较
晚,但仔细观察其趋势可以发现,与机器学习相比,深度学习的
增长速度更快。
图1-9和图1-10展示的都是Google趋势的可视化。
图1-9 深度学习十年前还处于初始阶段,而机器学习在研究者社区中已是一个热门话题
图1-10 近来,深度学习日益流行,并试图达到机器学习的水平深度学习的动机[12,13,14]
机器学习算法面临的最大问题之一就是维度的诅咒。维度的诅咒是指,当数据集中的维数很高时,某些学习算法可能表现不佳。我们将在下一节中探讨深度学习是如何引入新特性来解决这个问题的。机器学习算法还有许多其他相关问题,在处理这些问题时,深度架构与传统架构相比有显著的优势。本节会将明显的挑战作为单独的话题进行讨论。1. 维度的诅咒
维度的诅咒可以定义为在高维空间(数千甚至更高的维度)分析
和组织数据的过程中产生的一种现象。当数据集的维数很高时,
机器学习问题就会面临极大的困难。以下是高维数据难以处理的
原因。● 随着维度的增加,特征的数量将呈指数级增长,最终会导致噪声的增加。● 无法在标准实践中获得足够多的观察值来泛化数据集。
对维度诅咒的简单解释就是组合爆炸。根据组合爆炸理论,大量
变量的集合可以构建巨大的组合。例如,n个二进制变量的可能n
组合数是O(2)个。因此,在高维空间中,配置项数几乎是不可
数的,并远远大于样本数量,而且大多数配置项都不会有与自身
相关联的训练样本。图1-11展示了一个类似现象的图示,以便你
更好地理解。
图1-11 随着维数从一增加到三,随机变量的数量呈指数级增长(图片来源于Nicolas Chapados的文章“Data Mining Algorithms
for Actuarial Ratemaking”,已获得转载许可)
因此,这种情况对任何机器学习模型来说都是棘手的,因为训练
是极其困难的。休斯效应[15]指出:“在训练样本数量固定的情况下,预测能力随着维度的增加而降低。”
因此,随着解释变量数目的增加,模型能够达到的精度迅速下降。
为了应对这种情况,我们需要将输入系统的样本数据集的大小增
加到与场景相符合的程度。然而,由于数据的复杂性也在增加,
其维数几乎可以达到1000。对于这种情况,即使拥有数亿图像
的数据集也是不够用的。
通过自身的深层网络配置,深度学习在一定程度上解决了这个问
题。这主要归结于以下原因。● 现在,研究人员能够在输入训练样本之前重新定义网络结构,并以此来管理模型的复杂性。● 深度卷积网络侧重于数据的高级特征,而忽略底层信息,这进一步降低了特征的维度。
虽然深度学习网络已经提出了处理维度诅咒的一些可行解决方
案,但还不足以完全解决问题。在最近的超深层神经网络的研究
中,微软提出了一个150层的网络,从而使得参数空间变得更大
了。该研究小组甚至进行了深度几乎达到1000层的深层网络的
研究。但由于模型的过拟合,其最终效果并不理想。 机器学习中的过拟合:过度训练模型,进而对其性能产生负面影响,这种现象称为模型的过拟合。当模型学习了训练数据集的随机波动和不需要的噪声时,这种情况就会发生。这些现象会产生不好的后果:模型在新的数据集中表现较差,并对其泛化能力产生不利影响。机器学习中的欠拟合:这是指模型在当前数据集和新数据集中都表现较差。这类模型是不适合的,在数据集上表现不佳。
在图1-11的一维示例(顶部)中,因为只有10个感兴趣的区域,
所以学习算法进行正确的概括并不是一项艰巨的任务。然而,在
更高维度的三维示例(底部)中,模型需要跟踪所有(10×10×
10=1000个)感兴趣的区域,这要复杂得多(对模型而言,这几
乎是一个不可能完成的任务)。这就是维度诅咒中最简单的一个
示例。2. 梯度消失问题[16]
梯度消失问题是在训练人工神经网络时发现的一种障碍,它
出现在基于梯度的方法中,如反向传播。在理想情况下,这一难
题使得网络上一层的学习和训练变得非常困难。当深度神经网络
的层数大幅增加时,这种情况会变得更加糟糕。
通过梯度的负值乘以小标量值(0~1),梯度下降算法可以更新
权值。
重复计算,直到:
在上述等式中,重复计算梯度直到其值为零。理想情况下,通常
会设置一些超参数来控制模型的最大迭代次数。如果迭代次数过
高,训练的持续时间也会更长。另一方面,如果对于某个深度神
经网络来说,迭代次数变得难以察觉,那么肯定会得到不准确的
结果。
在梯度消失问题中,与前层的参数相比,网络输出的梯度会变得
极小,从而导致每次迭代的权值不会有任何显著的变化。因此,
即使前层的参数值发生了大幅变化,这对整体输出也不会有显著
的影响。这个问题会使得深度神经网络的训练变得不可行,让模
型的预测能力变得不理想。这种现象就称为梯度消失问题。这会
导致一些长代价函数,如图1-12所示。
图1-12 平坦的梯度与长代价函数的图像
图1-13还显示了具有大梯度的一个示例,其中梯度下降可以快速
收敛。
图1-13 具有大梯度的代价函数的图像;梯度下降可以更加快速
地收敛
梯度消失问题是深度学习成功路上的重大挑战,但现在由于各种
技术的出现,一定程度上克服了这个问题。1997年提出的长短
期记忆网络是解决这个问题的重大突破之一,详细介绍参见第4
章。另外,一些研究人员试图使用不同的技术来解决这个问题,
其中包括特征生成、激活函数等。3. 分布式表征
几乎所有的深度网络都基于分布式表征这一概念,后者是深度学
习算法成功背后的理论优势的核心。在深度学习的背景下,分布
式表征是多尺度的,并与理论化学和物理学的多尺度建模密切相
关。分布式表征背后的基本思想是,感知特征是多个因素共同作
用的结果,这些因素组合在一起以产生期望的结果。日常生活中
的示例可能是人类的大脑,它使用分布式表征来辨别周围的物
体。
人工神经网络将以这类表征方式构建,以便拥有代表模型所需要
的众多特征和层次。该模型用相互依赖的多个层来描述数据(如
语音、视频或图像),其中每个层负责描述不同尺度级别的数据。
通过这种方式,表征将分布在多个层上,涉及不同的尺度。因此,
这种表征称为分布式表征。 分布式表征本质上是密集的。两种类型的表征之间遵循多对多的关系。一方面,可以使用多个神经元来表示一个概念;另一方面,一个神经元描绘了多个概念。
使用非分布式表征的传统聚类算法(如最近邻算法、决策树或高
斯混合)都需要O(N)个参数来区分O(N)个输入区域。在某个时
间点,人们几乎不相信有任何其他算法能够表现得比这更好。然
而,稀疏编码、受限玻尔兹曼机、多层神经网络等深度网络可以k
用O(N)个参数来区分O(2)个输入区域(其中k表示稀疏表征中非
零元素的总数,在其他非稀疏受限玻尔兹曼机和密集表征中
试读结束[说明:试读内容隐藏了图片]