《Deep Learning》by Ian Goodfellow,Yoshua Bengio,Aaron Courville
第一章
简介
发明家一直以来都梦想创造会思考的机器。这种渴望追溯到雅典时期。神话人物Pygmalion,Daedalus和Hephaestus被认为是伟大的发明家,而Galatea,Talos和Pandora被认为是人造生命。
当可编程计算机首次被构想出来,人们就在考虑它们是否能变的更智能,经历了一百年的时间。今天人工智能是一个蒸蒸日上的领域,有着很多的应用和活跃的研究方向。我们期望智能软件能够自动化完成例行任务,理解语音和图像,医疗诊断和提供基本的科学研究。
在人工智能领域的早期,能够快速的解决对人类而言一些困难的问题,但确是一些容易直接计算的问题,这些问题被描述成一系列的数学规则。人工智能真正的挑战是解决人类很容执行,但却很难描述的问题,例如我们能够直观、自然而言就能识别出一幅图片当中的文字或者脸;
这本书是关于解决一些直觉问题。解决方法是让电脑通过学习经验,在一个高层次概念的基础上理解这个世界,每个概念又和其他简单的概念相关联。这种通过经验获得的知识能够避免人为指定电脑所需要的知识。高层次的概念允许电脑根据简单的概念学习到更复杂的概念。如果我们画一幅图来看这些概念是如何建立的的话,这幅图会很深,有很多层。基于这个原因,我们称人工智能为深度学习。
早期人工智能(AI)的成功集中在相对枯燥和正式的环境中,并不需要对整个世界有更多的了解。例如IBM深蓝国际象棋系统打败了世界冠军Garry Kasparov,在1997年。国际象棋是一个简单的世界,仅包含64个位置和32个严格移动的棋子。设计一个成功国际象棋策略是一个巨大的任务,然而这个挑战并不是描述象棋集,而是移植到电脑中。国际象棋能够被描述为一些简短而复杂正式规则,很容易通过程序提供。
略带讽刺讲,一些抽象和正式的任务,对人类而言很困难,但对电脑来讲却很容易。电脑能够击败最出色的国际象棋选手,但仅仅能匹配一些人类认知物品或者演讲的能力。一个人每天的生活需要大量关于这个世界的知识。大部分的知识都是些主观或者直觉的知识,因此用一种正式的方式表达出来很困难。电脑为了表现的更智能,需要捕捉到很人类相同的知识。对人工智能关键的挑战之一就是如何把信息知识移植到电脑中。
几个关于语言的人工智能项目,通过硬编码了解这个世界。通过一些逻辑推演规则,能自动的解释几种语言的陈述。在人工智能里这被称作知识库方法。上面的项目中都没能取得巨大的成功。其中一个有名的项目Cyc。它是一种推演引擎和陈述数据库,用一种叫做CycL的语言。这些陈述被一个员工输入到数据中。这是一个巨大的过程。人们不断的挣扎着发明更复杂的规则以便能更好的描述这个世界。然而Cyc没能理解一个名叫Fred早上刮胡子的这个故事(Fred shaving in the morning)。Cyc的推演引擎在这个故事检测到矛盾。Cyc了解到人类没有电子部分,但Fred正在拿着一个电动剃须刀,会被认为“FredWhileShaving”还有一个电子部分。它因此会问当Fred刮胡子的时候是否仍然是个人。
依赖硬编码知识的系统面临的困难,可以启发得出,通过从原始数据中抽取去模式,人工智能需要具备获取知识的能力。这种能力被称作机器学习。机器学习允许电脑解决问题,涉及到真实世界的知识和做出主观决定。一个简单的机器学习算法逻辑回归能够推荐是否进行剖腹产。还有一个简单的机器学习算法朴素贝叶斯从垃圾邮件中分离出好的邮件。
以上简单的机器学习算法严重依赖数据表示。例如,当逻辑回归被用作推荐剖腹产中时,人工智能并没有直接的检测病人。相反,医生告诉系统几条相关的信息,例如疤痕子宫的出现或缺失。每一个病人信息的表示被称作一个特征。逻辑回归学习到每个特征是如何跟结果相关联的。然而,逻辑回归并不能影响特征定义的方式。如果将病人核磁共振的图像提供给逻辑回归算法,而不是医生的报告,逻辑回归将不会做出一个很好的预测。核磁共振中的每一个像素,都跟分娩中的并发症有着微弱的关联。
在计算自然甚至是每天的生活中,对数据表示的依赖是一种很常见的现象。如果数据集合是结构化和索引的,那么检索数据的操作将非常的快。人们很容易使用阿拉伯数字进行计算,但对罗马数字就需要多花些时间。数据表示的选择对机器学习算法的表现有着很大的影响。例如Fig. 1.1视觉的例子。
许多人解决工智能的任务是通过从任务中提取出特征,并将特征应用到机器学习算法中。例如,通过人的声道的大小,对说话者进行身份识别。能够提供强有力的线索来判断说话者是男人,女人或者是小孩。
然而,对于很多任务而言提取特征是很困难的。例如我们想检测一幅图片中的汽车。我们知道汽车有轮子,我们想用轮子作为汽车的一个特征。不幸的是,我们很难通过轮子的像素值来描述轮子长什么样。一个轮子可能有一种简单的几何形状,但也可能有很多复杂的情况,如还有阴影的轮子,还有光线很强金属轮子,或者在轮子的前面有遮挡物等等。
解决上面问题的一种思路是使用机器学习,不仅能够表示输出和表示之间的关系,而且能够发现表示自身。学习到表示要比人工设计的表示取得更好的效果。也能够使人工智能用更少的人工干预,做到更快的适应新任务。一个表示学习算法针对简单的任务,能够在几分钟内发现一系列特征,或者对一些复杂的任务需要几小时或者几个月。对于复杂的任务,人工设定的参数需要大量的人力物力,甚至需要花费整个社区研究员数十年的努力。
一个典型的表示学习算法的例子是自动编解码。一个自动编解码算法,是由将数据转化成不同表示的编码函数和一个将新的表示转换回原始格式的解码函数组成。
当我们设计特征或者算法时,我们的目标是分离出可解释观察数据的变量因子。在本文中,我们用因子(factors)表示分离原始数据的影响;这些因子是以乘积的形式展示。这些因子有时并不能被直接观察到。相反,他们或存在于未观察的物体以及未观察到对物理世界的影响。他们或者存在于人的思想的结构当中,这些思想能够提供简化的解释或者推演观察到的数据。他们称作概念或者抽象,帮助我们更好的理解数据中的变化。当分析一段录音,影响变量的因子包括说话者的年龄,性别,口音,以及他们说话的文字。当分析一幅汽车图片时,影响变量的因子包括汽车的位置,它的颜色,角度以及亮度。
在许多人工智能现实应用中,许多变量因子影响我们观察到的每一块数据。在一幅红色汽车的图片中,在晚上每个像素接近黑色。汽车的轮廓接近于观测的角度。许多应用需要我们将变量因子解放出来,并摒弃我们并不关心的因子。
在表示学习中,深度学习通过介绍其他简单表示来解决核心问题。深度学习允许电脑通过简单的概念构建复杂的概念。Fig1.2允许深度学习系统表示一幅人的图像的概念,通过结合简单边的概念,如角或者轮廓。
深度学习一个典型的模式是前馈深度网络或者多层感知机。多层感知机仅仅是将输入数据映射到输出的函数。这个函数由一些简单的函数组成。我们将每一个复杂函数的应用作为输入的一个新的表示。
对于数据学习到正确的表示,为深度学习提供了一种方法。而另一种方法,深度允许电脑学习到深层的计算步骤。当并行执行一系列指令后,每层的表示被认为是电脑的记忆状态。深度的网络能够执行序列化指令。后续的指令,能够回到早期的指令,这样序列化得到的指令就能产生更好的效果。根据这种深度学习观点,对每层的激励,并不是所有的信息都编码解释输入的变量因子。表示存储信息来帮助程序执行能更好的理解输入数据。这种状态信息可以类比与传统计算机中的计数器和指示器。虽然状态信息不能明确的跟输入的内容相关,但却能帮助模型组织处理过程。
有两种方式来衡量模型的深度。一种方式是基于评估架构序列化指令的个数。我们可以把最长路径的长度作为深度,通过流图描述如何在给定输入的情况下,计算每个模型的输出。根据语言的不同,两个相同的计算机程序有着不同的长度,相同的函数被画成一幅不同深度流程图,依赖于我们在每一步中使用的函数。Fig1.3显示出,不同语言的选择对同一个架构给出不同的测量。
另一种方式是使用深度概率模型,把描述彼此相关概念图的深度作为模型的深度,而不是计算图的深度。在这种情况下,计算流程图的深度需要计算每个概念的表示,这样就会比概念本身的图更深。这是因为系统对简单概念的理解,能够精确的提供关于复杂概念的信息。例如一个人工智能系统观察一张人脸图片,该图片有一只眼睛被遮蔽了,这个系统在初始的时候仅会看见一只眼睛。当检测到一张脸是存在的,它就能够推演出另一只眼睛也是存在的。这种情况下,概念图包括两层,一层是关于眼睛的,一层是关于脸的。但是如果在给定n次,我们想精确的评估每个概念,这时计算图包含2n层。
因为计算图的深度和概率图模型的深度,有时候这两个观点并不是很清楚。不同的人会选择不同的最小元素集合来构建他们的图,并不存在一个关于架构深度精确的值,同样,也不会就一个模型多深而被称为深度达成一致。然而,深度学习被作为学习模型,与传统的机器学习相比,将涉及到更多的关于学习函数和学习概念的组成。
概括的来讲,本书的主题,深度学习作为人工智能的一种方法。具体来讲,深度学习是机器学习的一种,这种技术允许电脑通过经验和数据进行提高。根据本书的作者,机器学习是构建一个复杂的真实世界的人工智能唯一可行的方法。通过学习把世界作为一种跟简单概念相关的嵌套复杂的概念,深度学习作为一种特别的机器学习可以具有更好的效果和灵活性,一些抽象的概念建立在简单抽象概念的基础上的。Fig1.4展示了人工智能不同概念之间的关系。Fig1.5给出了彼此工作的示意图。
网友评论