大数据智能——互联网时代的机器学习和自然语言处理技术(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-26 00:49:11

点击下载

作者:刘知远

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

大数据智能——互联网时代的机器学习和自然语言处理技术

大数据智能——互联网时代的机器学习和自然语言处理技术试读:

前言

天才并不是自生自长在深林荒野里的怪物,是由可以使天才生长的民众产生、长育出来的,所以没有这种民众,就没有天才。——鲁迅

千淘万漉虽辛苦,吹尽狂沙始到金。——[唐]刘禹锡

大数据时代与人工智能

在进入21世纪前后,很多人预测这将会是怎样的世纪。有人说这将是生命科学的时代,也有人说这将是知识经济的时代,不一而足。现在15年过去了,随着互联网的高速发展,大量的事实强有力地告诉我们,这必将是大数据的时代,是智能信息处理的黄金时代。

自2012年美国奥巴马政府发布大数据研发倡议以来,关于大数据的研究与思考在全球蔚然成风,已经有很多专著面世,既有侧重趋势分析的,如舍恩伯格和库克耶的《大数据时代》(盛杨燕和周涛教授译),涂子沛的《大数据》和《数据之巅》,也有偏重技术讲解的,如莱斯科夫等人的《大数据》(王斌教授译)、张俊林的《大数据日知录》、杨巨龙的《大数据技术全解》,等等。相信随着大数据革命的不断深入推进,会有更多的专著出版。

前人已对大数据的内涵进行过很多探讨与总结,其中比较著名的是所谓的3V定义:大容量(Volume)、高速度(Velocity)和多形态(Variety)。3V的概念最早于2001年由麦塔集团(Meta Group)分析员道格·莱尼(Doug Laney)提出,后来被高德纳咨询公司(Gartner)正式用来描述大数据。此外还有很多研究者提出更多的V来描述大数据,例如真实性(Veracity),等等。既然有如此众多珠玉在前,我们推出这本书,当然希望讲一些不同的东西,这点不同的东西就是智能。

人工智能一直是研究者们非常感兴趣的话题,并且由于众多科幻电影或小说作品的影响而广为人知。1946年第一台电子计算机问世之后不久,英国著名学者图灵就发表了一篇重要论文(题名《计算机器与智能》Computing Machinery and Intelligence),探讨了创造具有智能的机器的可能性,并提出了著名的“图灵测试”,即如果一台机器与人类进行对话,能够不被分辨出其机器的身份,那么就可以认为这台机器具有了智能。自1956年达特茅斯研讨会正式提出了“人工智能”的研究提案以来,人们开始了至今长达半个多世纪的曲折探索。

我们且不去纠结“什么是智能”这样哲学层面的命题(有兴趣的读者可以参阅罗素和诺维格的《人工智能——一种现代方法》Artificial Intelligence:A Modern Approach以及杰夫·霍金斯的《智能时代》On Intelligence),而是先来谈谈人工智能与大数据有什么关系?要回答这个问题,我们来看一个人是如何获得智能的。一个呱呱坠地、只会哭泣的婴儿,最后长成思维健全的成人,至少要经历十几年与周围世界交互和学习的过程。从降临到这个世界的那一刻起,婴儿无时无刻不在通过眼睛、耳朵、鼻子、皮肤接收着这个世界的信息:图像、声音、味觉、触觉,等等。你有没有发现,无论从数据的规模、速度还是形态来看,这些信息无疑是典型的大数据。因此,人类习得语言、思维等智能的过程,就是从大数据学习的过程。智能不是无源之水,它并不是凭空从人脑中生长出来的。同样,人工智能希望让机器拥有智能,也需要以大数据作为学习的素材。可以说,大数据将是实现人工智能的重要支撑,而人工智能是大数据研究的重要目标之一。

但是,在人工智能研究早期人们并不这样认为。早在1957年,由于人工智能系统在简单实例上的优越性能,研究者们曾信心满怀地认为,10年内计算机将能成为国际象棋冠军,而通过简单的句法规则变换和词典单词替换就可以实现机器翻译。事实证明,人们远远低估了人类智能的复杂性。即使在国际象棋这样规则和目标极为简单清晰的任务上,直到40年后的1997年,由IBM推出的深蓝超级计算机才宣告打败人类世界冠军卡斯帕罗夫。而在机器翻译这样更加复杂的任务(人们甚至连优质翻译的标准都无法达成共识,并清晰地告诉机器)上,计算机至今还无法与人类翻译的水平相提并论。

当时的问题在于,人们远远低估了智能的深度和复杂度。智能是分不同层次的。对于简单的智能任务(如对有限句式的翻译等),我们当然可以简单制定几条规则就能完成。但是对于语言理解、逻辑推理等高级智能,简单方法就束手无策了。

生物界从简单的单细胞生物进化到人类的过程,也是智能不断进化的过程。最简单的单细胞生物草履虫,虽然没有神经系统,却已经能够根据外界信号和刺激进行反应,实现趋利避害,我们可以将其视作最简单的智能。而巴甫洛夫关于的狗的条件反射实验,则向我们证明了相对更高级的智能水平,可以根据两种外界信号(铃声与食物)的关联关系,实现简单的因果推理,也就是能根据铃声推断食物即将出现。人类智能则是智能的最高级形式,拥有了语言理解、逻辑推理与想象等独特的能力。我们可以发现,低级智能只需小规模的简单数据或规则的支持,而高级智能则需要大规模的复杂数据的支持。

同样重要的,高级智能还需要独特计算架构的支持。很显然,人脑结构就与狗等动物有着本质的不同,因此,即使将一只狗像婴儿一样抚育,也不能指望它能完全学会理解人类的语言,并像人一样思维。受到生物智能的启示,我们可以总结出如图0.1所示的基本结论,不同大小数据的处理,需要不同的计算框架,带来不同级别的智能。图0.1 不同规模的数据需要不同的计算架构,产生不同级别的智能

人工智能是否要完全照搬人类智能的工作原理,目前仍然争论不休。有人举例,虽然人们受到飞鸟的启发发明了飞机,但其飞行原理(空气动力学)却与飞鸟有本质不同;同样,生物界都在用双脚或四腿奔跑行走,人们却发明了轮子和汽车实现快速移动。然而不可否认,大自然无疑是我们最好的老师。人工智能固然不必完全复制人类智能,但是知己知彼,方能百战不殆。生物智能带来的启示已经在信息处理技术发展中得到了印证。谷歌研究员、美国工程院院士Jeff Dean曾对大数据作过类似结论:“对处理数据规模X的合理设计可能在10X或100X规模下就会变得不合理”(Right design at X may be very wrong at 10X or 100X.),也就是说,大数据处理也需要专门设计新颖的计算架构。而与人工智能密切相关的机器学习、自然语言处理、图像处理、语音处理等领域,近年来都在大规模数据的支持下取得了惊人进展。我们可以确信地说,大数据是人工智能发展的必由之路。

大数据智能如何成真

虽然大数据是实现人工智能的重要支持,但如何实现大数据智能,却并非显而易见。近年来随着计算机硬件、大数据处理技术和深度学习等领域取得了突破性进展,涌现出一批在技术上和商业上影响巨大的智能应用,这让人工智能发展道路日益清晰起来。

大数据的价值并非水落石出这样显而易见。我们认为,近年来人工智能的突破性进展,主要是在触手可及的人类社会大数据、高性能的计算能力以及合理的智能计算框架的支持下,方能披沙拣金实现大数据智能。

人类社会大数据触手可及。如前所述,这是大数据的时代,互联网的兴起,手机等便携设备的普及,让人类社会行为数据越来越多地汇聚到网上,触手可及。这让机器从这些大数据中自动学习成为可能。但是,大数据(如大气数据、地震数据等)并非现在才出现,只是在过去我们限于计算能力和计算框架,难以从中萃取精华。因此,大数据智能的实现还依赖以下两个方面的发展。(1)计算能力突飞猛进。受到摩尔定律的支配,近半个世纪以来,计算机的计算和存储能力一直在以令人目眩的速度提高。摩尔定律最早由英特尔(Intel)创始人之一戈登·摩尔提出,基本思想是:保持价格不变的情况下,集成电路上可容纳的元器件的数目大约每隔18到24个月就会增加一倍,性能也将随之提升一倍。也就是说,每一块钱能买到的计算机性能将每隔18到24个月提升一倍以上。虽然人们一直担心,随着微处理器器件尺寸变小,摩尔定律会受到量子效应影响而失效。但至少从已有发展历程来看,随着多核、多机并行等新框架的提出,计算机已经能够较好地支持大规模数据处理所需的计算能力。(2)计算架构返璞归真。近年来,深度学习在图像、语音和自然语言处理领域掀起了一场革命,在图像分类、语音识别等重要任务上取得了惊人的性能突破,在国际上催生了苹果Siri等语音助手的出现,在国内则涌现了科大讯飞、Face++等高科技公司。然而我们可能很难想象,深度学习的基础“人工神经网络”技术,此前曾长期处于无人问津的境地。在深度学习兴起以前,人工神经网络常被人诟病存在可解释性差、学习稳定性差、难以找到最优解等问题。然而,正是由于大规模数据和高性能计算能力的支持,才让以人工神经网络为代表的机器学习技术在大数据时代焕发出蓬勃生机。

人工智能的下一个里程碑

当下,以深度学习为代表的计算框架在很多具体任务上取得了巨大成绩。甚至有媒体和公众已经开始恐慌人工智能取代人类的可能性。然而,从理性来看,深度学习的处理能力和效率与人类大脑相比仍有巨大差距。因此,仅依靠大数据智能,并非孕育人工智能的终极之道。随着技术的进步和研究的深入,现有解决方案必然触及无法逾越的天花板,进入瓶颈期。

人脑拥有现有计算框架不可比拟的优势。例如,虽然人脑中信号传输速度要远低于计算机中的信号速度,但是人脑在很多智能任务上的处理效率则远高于计算机,例如在众多声音中快速识别出叫自己名字的声音,通过线条漫画认出名人,复杂数学问题的推导求解,快速阅读理解一篇文章,等等。可以想象,在计算速度受限的条件下,人脑一定拥有某种独特的计算框架,才能完成这些叹为观止的智能任务,可谓大自然的鬼斧神工。

那么人工智能的下一个里程碑是什么呢?我猜想可能是神经科学及其相关学科。一直以来,神经科学都在探索各种观测大脑活动的工具和方法,并作出了大量的实证和建模工作。随着光控基因技术(optogenetics)和药理基因技术(pharmacogenetics)等新技术的发展,人们拥有了在时间和空间上更加精确控制和监测大脑活动的能力,从而有望彻底发现人脑的神经机制。一旦人脑的神经机制被发现,有理由相信,人们可以迅速通过仿真等方式,在计算机中实现类似甚至更高效的计算框架,从而推动实现人工智能的最终目标。此外,量子计算、生物计算、新型芯片材料等领域的发展,都为我们展现出无限可能的未来。

当下,社会大数据、计算能力和计算框架三方面的发展融合产生出了大数据智能。我们相信更大规模数据、更强计算能力和更合理计算框架的推出,会不断推动人工智能向前发展。然而,正如前几年社会各界对物联网、云计算的追捧,最近社会对大数据和人工智能概念的炒作愈演愈烈,产生很多不切实际的幻想和泡沫。对于这个领域重新得到青睐,我们当然感到欣慰。但是,也不妨多一些谨慎和冷静。鉴古知今,回顾人工智能的曲折发展史(《人工智能——一种现代方法》中有详细介绍)我们看到,在过度的期望破灭之后,随之而来的往往就是严冬。现在大数据智能万众瞩目,我们不妨心中默念凛冬将至。

事物总是在不断自我否定中螺旋前进的,人工智能的探求之路也是如此。我们相信大数据是获得智能的必由之路,但现在的做法不见得就一定正确。多年之后,我们也许会用截然不同的办法处理大数据。然而这些都不重要,重要的在于一颗无论冷门热门都执着的心、坚持不懈的信念。就像现在深度学习领域的巨人Geoffrey Hinton、Yann LeCun等学者,在这之前坐了十几年的冷板凳,研究成果屡屡被拒。对于真正的学者,研究领域冷门热门也许都不重要,反而会成为对从业者的试金石——只有在寒冬中坚持下来的种子,才能等到春天绽放。

关于本书

这本书并不想在已经火得发紫的大数据火堆上再添一把柴。这本书希望从人工智能这个新的角度,总结大数据智能取得的成果,它的局限性以及未来可能的发展前景。

本书从大数据智能基础和应用两个方面展开介绍。

基础部分有三章:第1章以深度学习为例介绍大数据智能的计算框架,第2章以知识图谱为例介绍大数据智能的知识库;第3章介绍大数据的计算处理系统。

在大数据智能的应用部分,我们选择文本大数据作为主要场景进行介绍,主要原因在于,语言是人类智能的集中体现,语言理解也是人工智能的终极目标,图灵测试的设置是以语言作为媒介的。应用部分有五章:第4章介绍智能问答,第5章介绍主题模型,第6章介绍个性化与推荐,第7章介绍情感分析与意见挖掘,第8章介绍面向社会媒体内容的分析应用。这基本涵盖了文本大数据智能处理的主要应用场景。以后如有机会再版,还计划纳入文档摘要、计算广告学等主题。

大数据智能仍然是个高速发展的领域。可以想象这本书出版的时候,很多内容已显陈旧。为了让读者能够跟踪这个领域的最前沿进展,本书专门设置后记,为初学者追踪大数据智能的最新学术材料提供建议。

个人学识有限,深怕在自己不擅长的领域说出外行话甚至错误连篇。因此,我邀请熟识的同学朋友撰写他们所擅长的章节。除了前言、第2章、第8章和后记由我操刀外,我请同门师弟张开旭博士撰写第1章,清华大学计算机系统方向博士韩文弢撰写第3章,清华大学信息检索方向博士崔安颀撰写第4、7章,北京大学自然语言处理方向博士、现中国人民大学信息学院教师赵鑫撰写第5章,清华大学个性化推荐方向博士生张永锋同学撰写第6章。他们都在相关领域开展了多年研究工作,发表过高水平论文。最后,我对全书做了统稿和校对,北京邮电大学毕业的林颖同学在我们实验室实习期间帮助我做了大量的书稿整理工作。

致谢

本书能够出版,无疑得到了很多人的支持和帮助。

首先,感谢这本书的几位合作者张永锋、崔安颀、张开旭、赵鑫和韩文弢,他们的热情、无私与认真,让我相信这本书能够真的为读者提供及时有用的知识。

其次,感谢我的导师和领导清华计算机系的孙茂松教授,是他将我带入了这个精彩纷呈的研究领域,也是他为我提供了宽松的写作环境,能够让这本书顺利问世。

我还要感谢刘洋(清华大学)、付杰(新加坡国立大学)、来思惟(中科院自动化所)等同事、同学和好友,在本书撰写过程中提供了很多最新进展和热情帮助。特别感谢林颖同学所做的书稿整理和封面设计工作。

最后,我要特别感谢电子工业出版社副总编辑兼计算机分社社长郭立老师的热情邀请和大力支持,以及本书编辑、清华计算机系学长顾慧芳老师的不断激励和鼎力相助,让我鼓起勇气敢于接下这个选题,也能在我拖延症反复发作时耐心地等待,经过了两年多时间的酝酿、收集资料、研究分析以及整理撰写,终于变成了你手中的这本书。

欢迎交流

当今世界,大数据智能是一个涉及非常广泛、而且发展非常迅猛的领域,这个领域的研究成果将帮助人类加速认识世界、探索宇宙,也将极大地影响到人们日常生活的方方面面。因此,笔者想在从事学习和自然语言处理等基础技术和最新进展研究工作的同时撰写一本介绍这一领域的科普书籍,作为抛砖引玉,旨在为需要了解与学习大数据智能技术的朋友提供帮助,甚至加入到大数据智能分析这一充满惊奇和魅力的领域中来。

当然,笔者尽量以开放的态度梳理每个方向的相关成果和进展,然而大数据智能日新月异,而我们所知有限,难免有挂一漏万之憾。如有重要进展或成果没有被介绍到,绝非作者故意为之,敬请大家批评指正。我们欢迎读者对本书的任何反馈,无论是指出错误还是改进建议,请直接发邮件给我:liuzy@tsinghua.edu.cn。我们会专门开辟网站维护勘误清单,如果本书有机会再出下一版的话,也会尽量改正所有发现的错误。刘知远博士清华大学计算机科学与技术系 助理研究员2015年8月于北京清华园第1章深度学习——机器大脑的结构

为了实现高层抽象表征的复杂能力,我们需要深层结构。——[美]尤舒·本吉奥(Yoshua Bengio)1.1概述

深度学习(Deep Learning)是近年来兴起的机器学习范式,已经被谷歌、微软、百度等互联网巨头投入巨资进行相关研发,甚至提出“谷歌大脑”等大型项目计划。深度学习利用多层神经网络结构,从大数据中学习现实世界中各类事物能直接被用于计算机计算的表示形式(如图像中的事物、音频中的声音等),被认为是智能机器可能的“大脑结构”。

虽然没有像云计算、物联网等概念一样在普通大众中被炒得沸沸扬扬,但深度学习真的火了一把。不论在学术界还是在工业界,深度学习刮起了一阵不小的旋风。在语音识别、图像识别、自然语言处理等研究领域,掀起了一次深度学习的热潮。在某些老问题上,它摧枯拉朽,颠覆了使用多年的老方法;在另一些前沿问题中,它完全不同于先前的流行方法,却又实现了惊人的效果提升;更为重要的,它引起了对主流方法的反思,提供了一个全新的视角,在今后势必会催生出更多的研究成果。

深度学习的实用性也被工业界发现,它不但能够取代一些传统方法,还使得某些停留在概念阶段的应用更接近实用。本章将与读者一起探讨以下问题:深度学习是什么,它的哪些特点让人眼前一亮,它离终极神器还有多远,它给了我们哪些有意义的思考。

本章默认读者拥有最基本的计算机科学知识和微积分、线性代数和概率论知识,但不需要具有人工智能方面的知识。了解深度学习并不需要很有“深度”的知识,简单地说深度学习就是:使用多层神经网络来进行机器学习。

为了在一节中将深度学习的基本面貌展现出来,首先我们需要了解神经网络,它是一个带参数的函数,通过调整参数,可以拟合不同的函数。而机器学习就是一种让计算机自动调整函数参数以拟合想要的函数的过程。以上即为“Deep Learning”的“Learning”部分。

接着我们将介绍,多个这种带参数的函数可以进行嵌套,构成一个多层神经网络,能更好地拟合某些实际问题中需要的函数。但是可惜的是这个方法提出了几十年,学者们却没有找到在这种情况下有效地自动调整函数参数的算法。直到前些年逐层预训练的方法被提出,才使得这一方法能够达到较好的效果。以上即为“Deep Learning”的“Deep”部分。1.1.1 可以做酸奶的面包机——通用机器的概念

最近家里买了一台面包机,我觉得这个小机器非常有意思。在我看来,它在形式上非常像一个全自动洗衣机——只需要在开始的时候往一个缸体内加入原材料面粉、水(脏衣服)以及一些辅料如酵母、盐(洗衣液),然后选择模式如普通面包、法式面包等(快洗、大件衣服等),盖上盖子,按“开始”按钮。机器就开始按照编好的程序进行搅拌、加热等操作(洗衣机还会进水、放水)。最后在提示音之后打开盖子,就得到了我们想要的输出——面包(干净衣服)。当然,还可以根据需要只进行某部分操作,如只进行和面或发酵(只漂洗或甩干)。

而面包机有意思的特别之处是,它还可以用来做酸奶和醪糟(一种发酵的米酒),这是因为加热发酵过程对于制作面包、酸奶和醪糟是类似的。也就是说,一个可控温度的容器是一个通用的工具,给它不同的运行参数(时间、温度),它就可以实现不同的功能。在我读大学的时候,也听说生物系的同学用一种叫做“电热恒温培养箱”的实验仪器自制酸奶,这种机器做酸奶跟面包机相比就如同单反相机跟数码相机的区别吧,如图1.1所示。图1.1 可以制作面包、酸奶和醪糟的面包机

通过以上的叙述,我想说的是一个工具或者机器的参数,通常包含固定的和可调的两部分。一个通用性强的机器,调整其可调的参数,就可以实现不同的功能。这适用于面包机、洗衣机、电热恒温培养箱、照相机,等等。而我们的计算机其实也是一样的,它也可以看作一种参数高度可调的工具,所谓计算机的参数,就是某个程序的代码,运行不同的代码就可以实现不同的功能。

而本章将要介绍的深度学习所基于的人工神经网络(在之后若不加说明,神经网络均是指人工神经网络),也是一种参数高度可调的通用工具。它的本质是一个由一系列向量、矩阵运算构成的函数,函数的输入和输出就是这个工具的输入和输出,函数表达式中某些矩阵和向量的取值,就构成了这个工具可调的参数,而函数表达式形式本身,则是不可调的。

例如,函数y=f (x;a,b)=ax+b就可以被看作一个人工神经网络。其输入为x输出为y,可调整的参数为a和b。不同的参数,可以构成不同的函数以实现不同的功能。1.1.2 连接主义

我们再接着讨论一下神经网络这种通用机器的特点。

神经网络的理念是,给出一种通用的函数形式,它的计算步骤、方式均是固定的,其功能只由其中的参数取值决定。也就是说,其参数是一些实数向量和矩阵。所有参数构成的参数空间是一个无约束的高维欧氏空间。空间中任意一个点就是一组具体的参数取值,也就对应于一种实现具体功能的工具。

说得形而上一些,这是一种叫做连接主义的理念。可以与我们的人脑类比,连接主义认为人脑就是一种这样的通用机器,构成人脑的脑细胞所实现的功能很固定很简单,人之所以拥有智能,则是因为数量庞大的这样的简单单元以某种非常特殊的方式互相连接着。在之后的小节中我们会看到,人工神经网络可以看作是对人脑某种程度的模拟,人工神经网络中的函数相当于定义了某种特殊的脑细胞的连接方式,而函数中可调的参数则定义了在这种连接方式下这些连接的强度。

我们还能举出一些与连接主义不同的理念。

例如,我的中学化学老师一直挂在嘴边的一句话就是“结构决定2功能”。化合物的功能,是由其结构决定的。当我们写出HO时,它的化学性质已经确定了,诸如氧原子和氢原子的连接强度这样的信息是次要的。这与人工神经网络中连接权重决定功能是不一样的。

在人工智能领域,与连接主义对立的有“符号主义”。后者并不是将人的智能解释为脑细胞的某种连接方式,而是将其解释为人类与其他动物相比非常强的符号处理能力。例如人类的语言,就可以看作一个符号系统。符号系统的特点是其对象是离散的,例如细致分析每个人发“machine”的声音可能千差万别,但只要与其他单词能够区别,我们就把它当作同一个符号,而这个符号又对应着某种意义,比如“machine”的意义就是“能完成某种功能的工具或装置”。更为复杂的,对符号的处理还包括对符号串的处理以及对符号逻辑的处理。在我们已知的生物中,只有人类才掌握了如此强的符号处理能力。

那么,处理符号的函数与定义人工神经网络的函数的区别就很明显了。用来处理符号的函数的输入应该是符号性的,即离散的变量及其组合,不同的符号和它们的组合都有其背后对应的意义,而人工神经网络的输入通常是实数构成的向量或矩阵,每个分量不需要有抽象的意义。处理符号的函数会用到很多逻辑运算,而人工神经网络一般使用代数运算。处理符号的函数中可调整的参数会比较抽象,参数空间由符号的组合来表示(类似于我们中学学的排列组合),而人工神经网络中可调的参数也是一些实数构成的向量和矩阵,参数空间是欧氏空间。1.1.3 用机器设计机器

我们现在使用的所有计算机都等价于图灵机,Google 为纪念图灵推出的“图灵机”Doodle如图1.2所示,程序员设计出程序(机器的参数)并运行机器,计算机就可以完成不同的任务。而人工神经网络的野心并不是提出另一个计算框架,让人手工地在这个框架下调整神经网络的参数,然后构造不同功能的机器。它是想给出一种通用的算法,能够自动地找到一组参数的取值,让神经网络能够很好地完成给定任务。图1.2 Google为纪念图灵推出的“图灵机”Doodle

一言以蔽之,人工神经网络的目标是用机器设计机器。

这可是个能够让人心跳加速的口号。人类的祖先花了成百上千万年的进化,学会了制造工具,进入了石器时代。又花了几百万年的时间,学会了用机器制造机器,发生了工业革命。下一个里程碑就应该是用机器设计机器,注意这里不是指用机器辅助人类设计机器,如现在已经有的计算机辅助设计(CAD),而是指机器根据人的需求自己设计机器。

机器设计机器,在人工神经网络中,就是机器自动调整参数。更具体地,就是在一个高维欧氏参数空间中,找到一点,对应于一种机器,能够完成某种指定的任务。

在后面的章节中会介绍在人工神经网络中,是通过怎样的方式以及算法使得一个神经网络可以根据不同的问题自动地调整参数。1.1.4 深度网络

到目前为止,我们只介绍了一般的人工神经网络模型。对于深度学习,其使用的人工神经网络是一种多层前馈神经网络。用数学的语言描述,就是说神经网络所对应的函数是一个由多个函数嵌套而成的函数。例如:

函数f(x)由三个函数嵌套而成。三个函数各有自己的参数。

不过,以上所描述的仍旧是一个也许比大多数读者都要年长的模型。为何在近年它才再次火起来呢,因为虽然该模型被提出很久,但是学者们一直无法找到很好的方法用以调整各个层次函数中的参数。也就是说,只是由于解决了一个纯技术性的问题,使得这个老模型再次成为人们的焦点。

一个由嵌套函数构成的函数是非常复杂的,参数空间非常大且复杂,会很容易只能找到局部最优的解,而这样的解往往并不太好,从而使得这种模型的效果反而不如其他简单模型。近年,学者终于找到了第一种能够有效训练参数的方法,即逐层预训练并最后进行微调。所谓逐层预训练,就是用一种方法逐个训练。例如对于式f (x)321123=g(g(g(x;w);w);w)代表的神经网络,就是用不同的123方法逐个地分别确定参数w、w、w的值。最后再合在一起进行微调。而如何逐个学习各层的参数,其中的妙处我们将在后面的章节进行介绍。1.1.5 深度学习的用武之地

以上讨论了何为机器学习,以及神经网络这种特殊的实现机器学习目标的框架,而深度学习就是指一类特殊的神经网络。

深度学习作为一种机器学习模型,近年来在很多应用场合都取得了很好的成绩。以下按机器学习任务的应用类别来加以分别介绍。(1)分类。分类任务的输出为一个离散的量。例如在垃圾邮件自动过滤中,输入一封邮件,输出是或不是垃圾邮件。图像识别是一种具体的分类任务,其输入是一幅图片,输出为图片中物体的名字(一般是在一个有限的集合中找出一个)。Andrew Ng是这方面的牛人。他与Google建立的团队使用1000台机器,16000个CPU组成集群构成一个神经网络,对20000种物体的图片进行识别。相对于非深度学习的方法的准确率提高了70%。最近,Ng教授的团队继续用GPU取代CPU进行计算,使得可以用少得多的机器完成相同任务(Raina,et al.2009)。(2)结构分类。结构分类是一类特殊的分类问题,其输出不是一个简单的离散的量,而是由多个离散的量构成的结构。例如我们文字交流中使用的句子,即是由离散的量(汉字或单词)线性连接构成的。语音识别就是一个非常有用的结构分类问题,其输入是一段语言的录音,输出是语音对应的句子。供职于微软的邓力使用深度学习在语音识别方面取得了很大的进步。在一个大会上,微软演示了一个可以进行实时翻译的系统,演讲者用英文演讲,其语言被实时识别为英文文本,再被翻译为汉语,最后合成相应的汉语语音被播放出来,技惊四座。句法分析(Socher,et al.2013)、情感分析(Socher,et al.2012)、机器翻译(Devlin,et al.2014)都是深度学习在结构分类中应用的典型场景。(3)回归。回归是不同于分类的另一大类问题。它的输出不是离散的量,而是连续的实数。语言模型就是一个特殊的回归任务,对于一个句子,它给出这个句子产生的概率。常用句子的概率高于不常用的句子,正确的句子的概率高于错误的(例如不合语法的)句子。深度学习的鼻祖之一 Hinton 就曾用深度网络构造过高质量的语言模型(Mnih&Hinton 2009)。语言模型在语音识别、机器翻译、中文输入法中都起到很大的作用。1.2从人脑神经元到人工神经元

本部分将介绍学者们是如何从人脑神经元中得到灵感,并设计出一种与人脑神经元类似但又有简洁数学表示的计算单元人工神经元。1.2.1 生物神经元中的计算灵感

早在1771年,意大利的路易吉·伽伐尼就发现,如果用电火花刺激死青蛙的肌肉就能使其颤动(可怜的青蛙,不知道我们中学做的往被切除大脑的青蛙身上涂硫酸的实验是否也与这位科学家有关)。1848年,德国人Emil du Bois-Reymond发现了神经元受到激发而产生的动作电位。1906年意大利的卡米洛·高尔基和西班牙的圣地亚哥·拉蒙·卡哈尔由于神经系统的发现而共同获得了诺贝尔奖。

我们可以这样简单地描述一个生物神经元的工作机制。一个神经元就是一个可以接收、发射脉冲信号的细胞。在细胞的核心之外有树突与轴突,树突接收其他神经元的脉冲信号,而轴突将神经元的输出脉冲传递给其他神经元,一个神经元传递给不同神经元的输出是相同的。一个神经元的状态有两种——非激活和激活。非激活的神经元不输出脉冲,激活的神经元会输出脉冲。神经元激活与否由其接收的脉冲决定。

模拟人脑神经元的历史几乎跟现代计算机的历史一样久远。1943年,生理学家McCulloch和数学家Pitts提出了第一个神经网络的数学模型,其中神经元的模型,仍然适用于近几年开始流行的深度学习。冯·诺意曼在1955-1956间写过一个演讲稿,后来被商务出版社以《计算机与人脑》为题出版,编入汉译世界学术名著丛书,与《理想国》、《新工具》等书并列。在那个数字计算机和模拟计算机并存的年代,作者在诸多方面对计算机和人脑进行了比较。

根据McCulloch和Pitts的模型,可以将一个神经元看作一个计算单元,对输入进行线性组合,然后通过一个非线性的激活函数作为输12n出。用x,x,…x表示n个输入,用y表示输出,用f表示非线性的激活函数,则有

其中b是一个与输入无关的量。将以上模型表示为图形的结构即如图1.3所示。图1.3 神经元与神经元模型

在这里,x与y分别是输入与输出,它们可以是任意的实数。w和b是模型的参数,不同的参数会构成实现不同功能的模型。

事实上,在真正的人脑神经元中,输出与输入有更复杂的关系。1.2.2 激活函数

不同的激活函数适合不同的具体问题和神经网络参数学习算法。如果期望得到离散的输出,可以使用阶跃激活函数

如果期望得到连续的输出,可以使用一类被称为sigmoid的S形函数。一种在应用中使用得比较多的是Logistic函数:

注意,如果希望值域是(-1,1)而不是(0,1),激活函数还可以定义为双曲正切函数,它跟Logistic函数非常类似:

阶跃函数与logistic函数的对比可见图1.4。激活函数通常都是单调有界的。图1.4 阶跃函数与Logistic函数对比

此外,Logistic 函数处处连续可导,并且导数均大于0,这为之后的参数学习提供了方便。1.3参数学习

上一节我们介绍了人工神经网络如何脱胎于生物实体,成为一个纯粹的数学模型。这一节我们会看到这个数学模型又如何从一个理论模型,变为工程上可实际运用的工具。

这一节所考虑的问题是,在神经网络结构确定之后,如何确定其中的参数,即上一节中针对单个神经元的w以及b。为了描述得简洁,在本节中使用w表示所有需要确定的参数。1.3.1 模型的评价

首先我们要讨论如何评价模型参数的好坏,否则讨论“如何选择好的参数”这个问题就是没有意义的。这里介绍的是机器学习领域的一般方法。

一个好的神经网络,对于给定的输入,能够得到设计者期望的输出。设输入为x,输出为y,我们期望的输出为y*,可定义实际输出与期望输出的差别作为评价神经网络好坏的指标。例如可以将两个向量的距离的平方定义为这个差别

只考察单个样本还不够充分,通常需要考察一个样本的集合,例如有,定义损失函数为:

这样的用于评价参数好坏的样本集在机器学习中称为测试集。1.3.2 有监督学习

既然损失函数可以用来评价模型的好坏,那么让损失函数的值最小的那组参数就应该是最好的参数:

在数学上,这是一个无约束优化问题,即调整一组变量使得某个表达式最小(或最大),而对所调整的变量的取值没有限制。

但这里还有个问题,我们是否可以用测试集上的损失函数来调整参数呢?答案是否定的,这会产生严重的过拟合,即由于参数的学习是依赖于某个给定的样本及标准输出的集合,那么学习得到的模型就很有可能在这一集合上的损失很低,但在之外的集合上的损失就会偏高。那么如果用训练所用集合来评价模型,分数就会偏高。还有一个形象的比方是,考试是用来检验学生对知识的掌握,学生需要在考试之外也能运用知识。如果学生在学习时过分针对考试(甚至是知道考试的题目),那么可以想象这种应试的学习并不能保证学生在考试之外能够真正运用知识。

以上讨论了一大堆,解决方法其实并不复杂,即使用两个集合,一个是测试集,一个是训练集,参数的学习只针对训练集,找到使训练集损失尽量小的参数,然后在测试集上测试该组参数面对训练集之外的样本的表现。1.3.3 梯度下降法

解决以上的无约束优化问题,就成了纯粹的应用数学问题。梯度下降法是解决这一类问题的基本方法,也被普遍用于神经网络参数的优化。

梯度下降法是一种迭代的方法。首先任意选取一组参数,然后一次次地对这组参数进行微小的调整,不断使得新的参数的损失函数更小。

这个方法可以这样形象地理解,不妨设需要优化的参数只有两个,则参数空间是一个二维的平面。任意一组参数对应于一个损失函数值,这构成第三维。这个三维的空间形成一个曲面,如同高低不平的地形图,经纬度表示参数,高度表示损失函数的值。那么优化问题就是找到高度最低的经纬度。梯度下降法的思路是,首先任意选择一个地点,然后在当前点找到坡度最陡的方向(例如一个坡面南低北高,则南北方向坡度大,东西方向坡度小),沿着该方向向下坡方向迈出一小步,作为新的地点进行下次迭代。这样不断地进行迈步,就可以走到一个海拔较低的地方。

所谓的坡度在数学上就是微积分中的梯度,梯度下降算法的形式化描述是:

这里主要的计算是第3步,计算梯度。这要求损失函数对于参数可导。

梯度下降法是一个可以用来处理任何非约束优化问题的方法,但它却不能彻底解决该问题。它最大的不足是无法保证最终得到全局最优的结果,即最终的结果通常并不能保证使损失函数最小,而只能保证在最终结果附近,没有更好的结果。因为梯度下降算法在更新参数的过程中,只利用了参数附近的梯度,对于整个参数空间的趋势,它是没有考虑的。此外,如果真正尝试在计算机上实现梯度下降算法,会发现这个已经有理论缺陷的算法在实际使用中,有更多的问题限制了它的效果。例如,步长η的确定,如果太小,算法需要很长时间收敛,如果太大,又无法稳定到参数空间中的某一点。不同的设计会影响算法速度以及最终结果的好坏。但是到目前为止并没有理论上的好办法解决,因此步长的确定就从一个科学问题变成了工程问题。一种方法是让步长随着时间t的推移而变小,即在初期大步走,到后期小步挪。

下面这个例子展示了梯度下降算法(见图1.5)可能犯的错误。图1.5 梯度下降算法

优化的目标函数是

步长是1.2。迭代从点(0,-1)开始,箭头指示的是梯度下降的方向。

在以上的图中可以看到:(1)由于步长在开始时过小,图中开始时移动比较慢;(2)更新比较盲目,没有全局的信息,往往是曲线的;(3)后期步长过大,移动过快,在局部最优点周围震荡;(4)最终不能收敛到全局最优点。1.4多层前馈网络

在前面我们已经介绍了人脑的神经细胞,以及由此抽象出来的人工神经网络模型,并且介绍了自动训练模型参数(即根据具体问题确定神经网络中边的权重)的方法。人工神经元相互连接可以构成很多不同拓扑结构的神经网络。本节将介绍一种使用较为普遍的多层前馈网络,这也是深度学习中普遍使用的网络结构。1.4.1 多层前馈网络

人工神经网络可以用图表示,神经元是图的节点,神经元之间的联系是图中的有向边。神经元不同的连接方式就会形成不同拓扑结构的神经网络。目前神经网络的自动学习几乎只局限于神经网络边连接的权重,不会去自动学习网络拓扑结构。而不同拓扑结构的网络适用于不同类型的问题,设计神经网络结构这部分工作还需要设计者的参与。

如同从人脑神经细胞工作原理中得来灵感设计人工神经元,在设计人工神经元连接方式时,也值得参考人脑中神经细胞的连接方式。我们知道负责高层信息处理的脑细胞集中在大脑皮层。人脑大量的沟回增大皮层表面积,也使得人脑有更强的信息处理能力。如果细看皮层,可以发现其中的神经细胞的排列是很有规律的,大脑皮层细胞的示意图如图1.6所示。图1.6 大脑皮层细胞示意图

图1.6是一幅大脑皮层的示意图,可以看到皮层中的神经细胞是分层排列的,如同汉堡或三明治。同时,树突和轴突也是有方向性的,即电信号都是由内层神经元传向外层神经元的。

与这种人脑皮层神经细胞连接方式类似的人工神经网络就是多层前馈网络。它的示意图如图1.7所示:图1.7 多层前馈网络

信号由左至右向前单向传播,每一列神经元构成一层,因此被称为多层前馈网络。网络相邻两层的任意神经元之间都有连接,此外没有层间连接或者跨越多层的连接。网络的输入/输出数目和形式根据具体问题指定,网络层数和每层神经元的个数也是需要人为指定的。

一个多层前馈网络将单个的、功能有限的人工神经元组织成了一个整体的计算单元,类似于计算机中的一个函数或一段程序。但它与我们熟悉的计算机程序又有所不同。它的计算没有迭代,并且是并行的。这很类似人脑进行视觉信息处理的情况。人脑的视觉皮层(visual cortex)负责处理视觉信息,视网膜得到一个影像后,大脑并不会一个“像素” 一个“像素”地进行扫描并处理,然后分辨看到的到底是什么,而是通过一组神经细胞,同时对传回的信号进行并行处理。这也是为什么擅长于串行计算的CPU不适合处理视频信息,电脑的图像处理需要长于并行计算的GPU来完成。有意思的是这也适用于人工神经网络,使用GPU来模拟人工神经网络要比使用CPU高效得多。

让我们回到图1.6所示的神经网。在数学上,它可以写成嵌套函数。图中有三列箭头,分别将前一层的数据变为后一层的数据,对应123着三个函数,可用f 、f 、f 表示:

那么整个函数就表示为:1.4.2 后向传播算法计算梯度

至此我们已经将多层神经网络的结构介绍清楚了。其参数学习方法可以使用上节介绍的梯度下降算法,也就是要求这样的偏导数:

由于多层前馈网络对应的表达式是一个嵌套函数,并且函数的输入与输出都可能是向量,因此想要求出损失函数对于其中每个函数参数的导数,其方法并非那么直观。最初(几十年前),学者甚至绕过梯度下降算法,使用其他方法确定参数。直到计算此梯度的一般方法被提出,还被冠以一个单独的名字——“后向传播算法”。该算法使得可以使用梯度下降算法确定参数,因此更有效,被以里程碑的形式写入历史。这里我们不想细致介绍计算多层前馈神经网络中的每一个步骤,罗列每一个公式,这些内容读者在任何一本教材甚至许多网络文章中都可以找到(见延伸阅读部分)。在此我们只想说明后向传播算法所使用的数学原理,其实也就是每本微积分教材中会提到的计算导数的链式法则。2

让我们回忆一下如何计算y=(2x+1)的导数。我们学到的方法2是先将2x+1看作一个整体z=2x+1,然后分别计算z和2x+1的导数,然后相乘就可以了,即

上面公式的物理意义就更加明显了。我们想要计算即x变化一个微小量后,y的变化有多大。我们知道x会影响z,然后z再影响y。那么我们就可以先计算x的变化对z的影响有多大,然后计算z的变化对y的影响有多大,两者合起来(相乘)就可以得到x变化一个微小量后,y的变化有多大。甚至更为直观的解释是直接将上式右边理解为两个分式相乘,消去相同项后就得到右式(如果将公式中的 “d”换成“Δ”,这样说就更为严谨了)。最早使用链式法则可能可以追溯到莱布尼茨。

回到前述的神经网络中,如果我们要计算,实际上只需要将其分解为:2

第二项比较容易,根据函数f的表达式就可以求得。而第一项是另一个关于变量b梯度的梯度,也可以被分解:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载