《Deep Learning》译文 第一章 前言 (上)

来源:互联网 发布:苹果5蜂窝数据打不开 编辑:程序博客网 时间:2024/04/28 20:52

转载请注明出处!

        由谷歌大脑团队科学家Ian Goodfellow,Yoshua Bengio and Aaron Courville撰写的《Deep Learning》已经发布(官网传送门),目前尚未出版,仅以html的形式挂在了网站上。

       之前主要是通过少量论文,Andrew NG的视频和一些博客去了解深度学习的,因此对于机器学习或深度学习的认识比较浅显与零散,鉴于以后可能还得靠这些东西吃饭,所以需要借助《Deep Learning》这本相对权威的书来系统的学习学习;做此译文,一是因为毕设刚刚撸完有了自由支配的时间,另一个是因为我觉得这是一件还算有意义的事情,其次是想借此督促自己把这本书看下去 :)   由于本人水平有限,论述不合适或者有误的地方还请大家以原文为主:)     打算认真学习的朋友们一定要以官网原版为主。


特别感谢王运豪,他对本译文的建议和批改使得此译文更符合国人的阅读习惯!最终,我有选择的采纳了一些。


=================================我是华丽的分割线==================================


第一章

前言(上)


       发明家们一直梦想着创造可以思考的机器,而这种愿望至少可以追溯到古希腊时期。在那个时期,人们可能把神话中的人物Pygmalion(皮格马利翁),Daedalus(代达罗斯),Hephaestus(火神赫菲斯托斯)看作是传奇发明家;把Galatea(海洋女神),Talos(毁灭者,暴风之神),Pandora(潘多拉,第一个来到人间的女神)视为人造生命。

       当人们第一次设想制造可编程计算机时,就开始好奇它们是否能变得智能,而可编程计算机在100多年之后才问世(Lovelace,1842,被视为第一位给计算机写程序的人)。今天,人工智能(AI)是一个含有诸多实际应用和活跃研究主题的热门领域。我们希望智能软件能够自动完成日常劳动,理解语言或图像,进行医学诊断,并且能帮助人们进行基础的科学研究。

       在人工智能发展的早期,AI迅速地解决了那些对于人类来说很困难但是对计算机来说相对直接的问题,这些问题的共性是其可以明确的被一系列公式和数学规则所定义。但是后来发现,AI面临的真正挑战是如何解决那些对于人类很容易处理但是却难以被正式描述的问题,而处理这些问题对于人类来说就像理解语言或者识别出一幅图像中的人脸一样,几乎是自动的,光凭直觉就能解决。

       本书探讨的是解决上述问题的方法。这类方法使得计算机通过建立分层概念(concepts)从经验中学习并理解真实环境;而每一个概念由与其相关的、更简单的概念所定义。从经验中获取知识,避免了人为指定计算机所需要的知识。有层级结构的概念系统使得计算机能够从相对简单的概念中学到更为复杂的概念。如果我们画一幅图来表示这些概念是如何相互关联的,那么这幅图通常会比较深,而且是多层的;因此,我们将这种实现AI的方法叫做深度学习。

       早期许多成功的AI系统大都应用在相对单一和有条理的环境中,并且不要求计算机对真实环境有认识,例如在1997年,IBM的深蓝国际象棋系统打败了世界冠军Garry Kasparov(卡斯帕罗夫),我们可以认为国际象棋是一个简单的世界,其中,32个棋子只能在64个棋格中按照严格的规则移动。找到一个成功的下棋策略的确是一个巨大的成就,但是对于计算机来说,描述下棋的位置和移动的方向并不是一件困难的事情,因为国际象棋可以被简要地描述为一系列完整的、有条理的、可以由程序员提前定义的规则。

       有些嘲讽的是,那些对于人类很难解决的、抽象的、有规则的任务对于计算机来说恰恰是比较容易的。计算机很早就能够击败人类最好的棋手,但是直到最近才能在物体识别和语音理解等方面和人类的平均水平相匹敌。人的正常生活离不开对于真实世界庞大的认知量,而这些认知大都是主观的、本能的,因此难以通过正式的方式将其明确地表达出来,而计算机需要被赋予这些认知来使其自身更加智能。AI面临的关键挑战之一就是如何使计算机获取这些认知。

       一些AI项目曾试图将知识以硬编码的方式写入专门语言之中,计算机使用逻辑推理的规则去理解以特定语言为载体的陈述语句,这类方式被称为“知识库”方法,在历史上并没有取得重大的成就。Cyc(Lenat and Guha,1989)是这类方式中最有名的项目之一,Cyc是一个推理引擎,CycL是Cyc项目专有的知识表示语言,人类员工将这些知识语句以CycL语句的形式组成一个巨大的数据库,这个项目中的科学家试图设计足够复杂的规则来获取尽可能高的准确率;即使如此,结果仍然差强人意,例如:Cyc未能正确理解《Fred在清早剃胡子》的故事,Cyc认为这个事件中出现了矛盾:它知道人类没有电动的部分,但是由于Fred当时拿着电动剃须刀,这使它相信“Fred正在剃胡子”是一个包含电动部分的实体,因此,它怀疑当Fred用电动剃刀刮胡子的时候,他是否仍然属于人类。

       上述硬编码知识系统的失败表明AI系统需要从原始数据中提取模式,并且拥有自己获取知识的能力,这种能力现在被称作“机器学习”。机器学习的引入使得计算机能够处理与真实世界相关的问题,并且做出一些主观性的决策。一个名为“logistic回归”的简单的机器学习算法可以用于决定是否建议孕妇进行剖腹产(Mor-Yosef et al.,1990)。一个名为“朴素贝叶斯”的简单机器学习算法能够从合法邮件中分离出垃圾邮件。

       这些简单机器学习算法的表现严重依赖于输入数据的表现形式。每个参数可以被认为是一个特征。比如,当logistic回归被用来预测是否进行剖腹产时,AI系统并不会直接的检测孕妇,而是通过医生给这个系统一些相关的参数,比如,血压,病史等。如果将孕妇的核磁共振结果输入给logistic回归,那么它不能得出有意义的预测结果。Logistic回归学习的是这些输入参数如何映射到多变的结果中,但是它不能决定特征定义的方式。

        在计算机科学甚至是日常生活中,人们对表示形式的依赖是一个普遍的现象。在计算机科学中,对搜索操作来说,如果被搜索对象是结构化的并且有恰当的索引,那么搜索过程会迅捷许多;人们能够很容易的完成阿拉伯数字形式的算术,但是对于罗马数字形式的算术则会消耗更多时间。因此,表达形式对机器学习算法的效果表现出的巨大影响也就不足为奇了图1.1展示了一个直观的例子。

图1.1不同表达方式的例子:假设我们想在散点图中通过画一条直线将其分成两类,在左边的笛卡尔坐标系中几乎

是不可能的,而在右边的极坐标系中却十分容易。

       通过设计合适的特征并应用简单机器学习算法可以解决许多AI任务。比如:对说话者声道大小的估计是识别说话者的一个有效特征,因而它可以为判断说话者是男人、女人或者儿童提供重要的线索。

       但是对很多任务来说,我们很难知道需要提取怎样的特征。比如:当我们希望写一个程序去检测图像中的汽车时,我们知道汽车是有轮子的,因此我们可能倾向于使用车轮作为一个特征,不幸的是,在像素级别上确切的描述一只车轮是困难的,虽然一只轮子拥有相对简单的几何形状,但是它的图像可能会因为其他因素变得复杂,这些因素可能包括:不均匀的光照,汽车的保险杠或者一个遮挡住轮子的物体等等。

       而机器学习不仅可以用来学习从特征到输出结果的映射函数,还可以学习如何更好地表达特征,这种方法被称为“表征学习”,它可以解决上述存在的问题。使用学习到的表征常常能得到比人工设计的更好的结果。这种方法使得AI系统能够在极少的人类介入的情形下快速适应新的任务。表征学习算法能够快速的发现合适的特征集合,对于简单的任务可能需要几分钟,复杂的任务可能需要几小时或若干月;而解决复杂任务时,人工设计特征通常会花费更多的时间与精力,可能需要花费整个研发团队数十年的时间。

  表征学习算法的一个经典例子是:自动编码机,它由编码和解码两部分组成,编码部分完成从输入数据到表征的转换,解码部分完成从表征到原始输入的逆转换。自动编码机的训练目标一方面是在编码-解码过程中保存尽可能多的信息,另一方面是希望学到的表征拥有好的属性,不同种类的自动编码机有不同的属性需求。

       当我们设计特征或者算法完成表征学习时,我们需要分离出解释已知数据变化的因子。在本文中,我们使用“因子”来简单的表示被分离开的影响源,这些因子不是通过乘法融合的,它们通常难以被直观地量化。实际上,这些因子可能以尚未发现的对象或者物理学中的作用力的形式存在,它们可以被看作是有助于我们理解庞杂数据的抽象概念。例如:当分析演讲录音时,变化因子包括:说话者的年龄、性别、口音和他们正在说的话;当分析一张图片中的汽车时,变化因子包括,汽车的位置、颜色和太阳光的角度与亮度。

       许多AI应用中的主要困难来源于变化因子只能描述观察数据的一小部分。比如:图片中的红色汽车在夜晚看起来会和黑色汽车很相近;汽车轮廓的形状随着观察角度而变化。许多应用需要我们松弛变化因子并且摒弃不关心的部分。

       当然,从行数据中提取高层次的、抽象的特征是十分困难的。许多变化因子,比如说话者的口音,需要使用十分复杂的接近人类理解层次的方法才能定义。一旦获取表征的难度不亚于解决原始问题的难度时,表征学习的用武之地就寥寥无几了。

       深度学习引入了层级表征来解决表征学习中的上述关键问题,层级表征使得计算机可以从相对简单的概念中学习到复杂的、高层的概念。图1.2展示了深度学习如何从角点、边缘这些简单概念中学习到能够识别图片中的人的高层语义概念。

图1.2:一个深度学习模型的介绍

   

       前馈深度网络或多层感知机(MLP)是深度学习模型的典型例子。一个多层感知机就是一个把输入值映射到输出值的数学函数,只不过这个函数是由许多相对简单的函数组合得到的。我们可以认为不同的数学函数提供了不同的输入表征。

       深度学习的一个观点是从数据中学习合适的表征,另一个观点是“深度”使得计算机能学习到一种分步的计算过程。表征的每一层都可以被认为是并行地执行指令集后的计算机的记忆状态。网络越深,能够被有序执行的指令集就越多,因为后续的指令可以参考早期指令执行的结果,所以有序的指令集可以表现出强大的能力。依据深度学习的这些观点,我们并不需要使用某一层中的所有信息去编码、去解释输入的因子。表征会存储有利于算法执行、对输入有意义的状态信息,在传统计算机程序中,状态信息可以类比于计数器或者指针,它与输入内容没有直接的关系,但是可以帮助深度学习模型组织其自身的处理过程。

       主要有两种方式来描述模型的深度。第一种是统计在测试一遍网络的过程中必须被执行的序列指令的数量。我们可以将其类比于走一遍流程图所需要的最长路径,只不过这个流程图描述的是模型从输入到输出的计算步骤。就像两个使用不同语言编写的等价程序拥有不同的长度一样,对于同一个函数,其在流程图中的长度取决于我们把哪些步骤看作是独立的。图1.3描述了同一个结构在不同的选择下呈现出的不同形式。

图1.3:介绍将输入映射到输出的计算图

     

       第二种描述模型深度的方式是把关联图的深度视为模型深度,这种关联图描述的是概念之间的关联方式。在这种方式中,描述计算步骤的流程图的深度往往比概念图要深,这是因为系统能够通过更复杂的概念来修正相对简单的概念;比如,当AI系统观察图像中一只眼被挡住的人脸时,在初始阶段它可能仅看到一只眼,当检测到图像中的人脸时,它就能够推算出另一只眼的存在;在这个例子中,概念图仅包括两层,一层用于识别眼睛,另一层用于识别人脸,但是其计算图包括了2n层(当对每层概念的估计需要额外n次时)。

       对于应该使用哪种方式(流程图的深度还是关联图的深度)来描述模型的深度是没有定论的,同样,一个模型究竟要有多少层才能算作“深”也是没有定论的。可以肯定的是,相比于传统的机器学习,深度学习可被认为是一种含有大量计算的函数学习和概念学习的模型。

       总之,本书的主题:深度学习,是一个实现人工智能的方法。具体地说,它在机器学习的范畴之内,是一种使计算机系统可以从经验与数据中提升的技术。本书的作者认为,机器学习是在复杂的,真实的环境下实现人工智能的唯一可行方法。深度学习是机器学习中很强大很灵活的一种方法,因为它学习的是如何将真实环境中的任务以嵌套的层级概念表达出来,通过这些嵌套的概念,它可以将底层的表征不断抽象为含有语义的更高层的特征。












2 0
原创粉丝点击