机器学习简史

最近学习的重点不在机器学习上面,但是现代的学科就是这么奇妙,错综复杂,玩着玩着,你发现又回到了人工智能这一块。所以干脆好好整理下当下令很多人如痴如醉,但又不容易入门的机器学习。一来给大多数还没有入门的人一点宏观概念,二来让我自己以后找解决办法的时候更有头绪。故此文不是给想快速上手的工程师的菜单,更像一篇娓娓道来的武侠小说,看看人工智能世界的先驱们是如何开宗创派的。

一、从人工智能说起

机器学习属于人工智能的一块,先简要回顾一下。关于什么是“智能”,就问题多多了。这涉及到其它诸如意识(consciousness)、自我(self)、心灵(mind)(包括无意识的精神(unconscious_mind))等等问题。人唯一了解的智能是人本身的智能,这是普遍认同的观点。但是我们对我们自身智能的理解都非常有限,对构成人的智能的必要元素也了解有限,所以就很难定义什么是“人工”制造的“智能”了。因此人工智能的研究往往涉及对人的智能本身的研究。其它关于动物或其它人造系统的智能也普遍被认为是人工智能相关的研究课题。下图展示了人工智能的发展路线:

在20世纪40年代和50年代,来自不同领域(数学,心理学,工程学,经济学和政治学)的一批科学家开始探讨制造人工大脑的可能性。1956年,人工智能被确立为一门学科。

IBM 702:第一代AI研究者使用的电脑.

最初的人工智能研究是30年代末到50年代初的一系列科学进展交汇的产物。神经学研究发现大脑是由神经元组成的电子网络,其激励电平只存在“有”和“无”两种状态,不存在中间状态。维纳的控制论描述了电子网络的控制和稳定性。克劳德·香农提出的信息论则描述了数字信号(即高低电平代表的二进制信号)。图灵的计算理论证明数字信号足以描述任何形式的计算。这些密切相关的想法暗示了构建电子大脑的可能性。这一阶段的工作包括一些机器人的研发,例如W。Grey Walter的“乌龟(turtles)”,还有“约翰霍普金斯兽”(Johns Hopkins Beast)。这些机器并未使用计算机,数字电路和符号推理;控制它们的是纯粹的模拟电路。

Walter Pitts和Warren McCulloch分析了理想化的人工神经元网络,并且指出了它们进行简单逻辑运算的机制。他们是最早描述所谓“神经网络”的学者。马文·闵斯基是他们的 学生,当时是一名24岁的研究生。1951年他与Dean Edmonds一道建造了第一台神经网络机,称为SNARC。在接下来的五十年中,闵斯基是AI领域最重要的领导者和创新者之一。

1951 年,Christopher Strachey使用曼彻斯特大学的Ferranti Mark 1机器写出了一个西洋跳棋(checkers)程序;Dietrich Prinz则写出了一个国际象棋程序。[31]Arthur Samuel在五十年代中期和六十年代初开发的西洋棋程序的棋力已经可以挑战具有相当水平的业余爱好者。游戏AI一直被认为是评价AI进展的一种标准。

1950 年,图灵发表了一篇划时代的论文,文中预言了创造出具有真正智能的机器的可能性。由于注意到“智能”这一概念难以确切定义,他提出了著名的图灵测试:如果一台机器能够与人类展开对话(通过电传设备)而不能被辨别出其机器身份,那么称这台机器具有智能。这一简化使得图灵能够令人信服地说明“思考的机器”是可能的。论文中还回答了对这一假说的各种常见质疑。图灵测试是人工智能哲学方面第一个严肃的提案。

50年代中期,随着数字计算机的兴起,一些科学家直觉地感到可以进行数字操作的机器也应当可以进行符号操作,而符号操作可能是人类思维的本质。这是创造智能机器的一条新路。

1955年,Newell和(后来荣获诺贝尔奖的)Simon在J. C. Shaw的协助下开发了“逻辑理论家(Logic Theorist)”。这个程序能够证明《数学原理》中前52个定理中的38个,其中某些证明比原著更加新颖和精巧。Simon认为他们已经“解决了神秘的心/身问题,解释了物质构成的系统如何获得心灵的性质。”(这一断言的哲学立场后来被John Searle称为“强人工智能”,即机器可以像人一样具有思想。)

1956年达特矛斯会议的组织者是Marvin Minsky,John McCarthy和另两位资深科学家Claude Shannon以及Nathan Rochester,后者来自IBM。会议提出的断言之一是“学习或者智能的任何其他特性的每一个方面都应能被精确地加以描述,使得机器可以对其进行模拟。”与会者包括Ray Solomonoff,Oliver Selfridge,Trenchard More,Arthur Samuel,Newell和Simon,他们中的每一位都将在AI研究的第一个十年中作出重要贡献。会上纽厄尔和西蒙讨论了“逻辑理论家”,而McCarthy则说服与会者接受“人工智能”一词作为本领域的名称。1956年达特矛斯会议上AI的名称和任务得以确定,同时出现了最初的成就和最早的一批研究者,因此这一事件被广泛承认为AI诞生的标志。

现如今AI世界已经枝繁叶茂,被认为最广泛的综合学科,也是未来最有希望的学科的之一。

涉及学科

  • 哲学和认知科学
  • 数学
  • 心理学
  • 计算机科学
  • 控制论
  • 决定论
  • 不确定性原理

研究范畴

  • 自然语言处理(NLP; Natural Language Processing)
  • 知识表现(Knowledge Representation)
  • 智能搜索(Intelligent Search)
  • 推理
  • 规划(Planning)
  • 机器学习(Machine Learning)
  • 增强式学习(Reinforcement Learning)
  • 知识获取
  • 感知问题
  • 模式识别
  • 逻辑程序设计
  • 软计算(Soft Computing)
  • 不精确和不确定的管理
  • 人工生命(Artificial Life)
  • 人工神经网络(Artificial Neural Network)
  • 复杂系统
  • 遗传算法
  • 资料挖掘(Data Mining)
  • 模糊控制

上面列举了一下维基上面的解释,可以说现代工程上的很多问题,都可以从上述研究范畴找到解决方案。可以想见,在未来人工智能发展会经历以下几个阶段:

★★★应用阶段(1980年至今):在这一阶段里,人工智能技术在军事、工业和医学等领域中的应用显示出了它具有明显的经济效益潜力。适合人们投资的这一新天地浮出了水面。

★★★融合阶段(2010—2020年):

★在某些城市,立法机关将主要采用人工智能专家系统来制定新的法律。

★人们可以用语言来操纵和控制智能化计算机、互联网、收音机、电视机和移动电话,远程医疗和远程保健等远程服务变得更为完善。

★智能化计算机和互联网在教育中扮演了重要角色,远程教育十分普及。

★随着信息技术、生物技术和纳米技术的发展,人工智能科学逐渐完善。

★许多植入了芯片的人体组成了人体通信网络(以后甚至可以不用植入任何芯片)。比如,将微型超级计算机植入人脑,人们就可通过植入的芯片直接进行通信。

★量子计算机和DNA计算机会有更大发展,能够提高智能化水平的新型材料会不断问世。

★抗病毒程序可以防止各种非自然因素引发灾难。(H7N9大家小心 :) )

★随着人工智能的加速发展,新制定的法律不仅可以用来更好地保护人类健康,而且能大幅度提高全社会的文明水准。比如,法律可以保护人们免受电磁烟雾的侵害,可以规范家用机器人的使用,可以更加有效地保护数据,可以禁止计算机合成技术在一些文化和艺术方面的应用(比如禁止合成电视名人),可以禁止编写具有自我保护意识的计算机程序。

★★★自我发展阶段(2020—2030年):

★智能化计算机和互联网既能自我修复,也能自行进行科学研究,还能自己生产产品。

★一些新型材料的出现,促使智能化向更高层次发展。

★用可植入芯片实现人类、计算机和鲸目动物之间的直接通信,在以后的发展中甚至不用植入芯片也可实现此项功能。

★制定“机器人法”等新的法律来约束机器人的行为,使人们不受机器人的侵害。

★高水准的智能化技术可以使火星表面环境适合人类居住和发展。

升华阶段(2030—2040年):

★信息化的世界进一步发展成全息模式的世界。(参见Ingress——现实虚拟化游戏

★人工智能系统可从环境中采集全息信息,身处某地的人们可以更容易地了解和知晓其他地方的情况。

★人们对一些目前无法解释的自然现象会有更清楚的认识和更完善的解释,并将这些全新的知识应用在医疗、保健和安全等领域。

★人工智能可以模仿人类的智能,因此会出现有关法律来规范这些行为。

二、机器学习的由来

从人工智能的角度我们不难发现,当今机器学习世界的很多方法都是从其中延伸出来的。但同时,它也自己独特的一面。机器学习是近20多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。因为学习算法中涉及了大量的统计学理论,机器学习与统计推断学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。很多推论问题属于无程序可循难度,所以部分的机器学习研究是开发容易处理的近似算法。

机器学习可以分成下面几种类别:

  • 监督学习从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求是包括输入和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见的监督学习算法包括回归分析和统计分类。
  • 无监督学习与监督学习相比,训练集没有人为标注的结果。常见的无监督学习算法有聚类。
  • 半监督学习介于监督学习与无监督学习之间。
  • 增强学习通过观察来学习做成如何的动作。每个动作都会对环境有所影响,学习对象根据观察到的周围环境的反馈来做出判断。

机 器学习是人工智能研究发展到一定阶段的必然产物。从 20 世纪50 年代到 70 年代初,人工智能研究处于“推理期”,人们认为只要给机器赋予逻辑推理能力,机器就能具有智能。这一阶段的代表性工作主要有 A. Newell 和 H. Simon 的“逻辑理论家”程序以及此后的“通用问题求解”程序等,这些工作在当时取得了令人振奋的成果。例如,“逻辑理论家”程序在 1952 年证明了著名数学家罗素和怀特海的名著《数学原理》中的 38 条定理,在 1963 年证明了全部的 52 条定理,而且定理 2.85甚至比罗素和怀特海证明得更巧妙。A. Newell和 H. Simon因此获得了 1975 年图灵奖。然而,随着研究向前发展,人们逐渐认识到,仅具有逻辑推理能力是远远实现不了人工智能的。E.A. Feigenbaum等人认为,要使机器具有智能,就必须设法使机器拥有知识。在他们的倡导下,20 世纪 70 年代中期开始,人工智能进入了“知识期”。在这一时期,大量专家系统问世,在很多领域做出了巨大贡献。E.A. Feigenbaum 作为“知识工程”之父在 1994 年获得了图灵奖。但是,专家系统面临“知识工程瓶颈”,简单地说,就是由人来把知识总结出来再教给计算机是相当困难的。于是,一些学者想到,如果机器自己 能够学习知识该多好!实际上,图灵在 1950 年提出图灵测试的文章中,就已经提到了机器学习的可能,而 20 世纪 50年代其实已经开始有机器学习相关的研究工作,主要集中在基于神经网络的连接主义学习方面,代表性工作主要有 F. Rosenblatt 的感知机、B. Widrow 的 Adaline 等。在 20 世纪 6、70 年代,多种学习技术得到了初步发展,例如以决策理论为基础的统计学习技术以及强化学习技术等,代表性工作主要有 A.L. Samuel 的跳棋程序以及 N.J. Nilson 的“学习机器”等,20 多年后红极一时的统计学习理论的一些重要结果也是在这个时期取得的。在这一时期,基于逻辑或图结构表示的符号学习技术也开始出现,代表性工作有 P. Winston的“结构学习系统”、R.S. Michalski等人的“基于逻辑的归纳学习系统”、E.B. Hunt 等人的“概念学习系统”等。

1980 年夏天,在美国卡内基梅隆大学举行了第一届机器学习研讨会;同年,《策略分析与信息系统》连出三期机器学习专辑;1983 年,Tioga出版社出版了R.S. Michalski、J.G. Carbonell和T.M. Mitchell主编的《机器学习:一种人工智能途径》, 书中汇集了 20 位学者撰写的 16 篇文章,对当时的机器学习研究工作进行了总结,产生了很大反响;1986 年,《Machine Learning》创刊;1989 年,《Artificial Intelligence》出版了机器学习专辑,刊发了一些当时比较活跃的研究工作,其内容后来出现在J.G. Carbonell主编、MIT出版社 1990 年出版的《机器学习:风范与方法》一书中。总的来看,20 世纪 80 年代是机器学习成为一个独立的学科领域并开始快速发展、各种机器学习技术百花齐放的时期。R.S. Michalski等人中把机器学习研究划分成“从例子中学习”、“在问题求解和规划中学习”、“通过观察和发现学习”、“从指令中学习”等范畴;而 E.A. Feigenbaum在著

名的《人工智能手册》中,则把机器学习技术划分为四大类,即“机械学习”、“示教学习”、“类比学习”、“归纳学习”。

1.机械学习也称为“死记硬背式学习”,就是把外界输入的信息全部记下来,在需要的时候原封不动地取出来使用,这实际上没有进行真正的学习;

2.示教学习和类比学习实际上类似于R.S. Michalski等人所说的“从指令中学习”和“通过观察和发现学习”;

3.归纳学习类似于“从例子中学习”,即从训练例中归纳出学习结果。20 世纪80 年代以来,被研究得最多、应用最广的是“从例子中学习”(也就是广义的归纳学习),它涵盖了监督学习(例如分类、回归)、非监督学习(例如聚类)等众多内容。

下 面我们对这方面主流技术的演进做一个简单的回顾。在 20 世纪 90 年代中期之前,“从例子中学习”的一大主流技术是归纳逻辑程序设计(Inductive Logic Programming),这实际上是机器学习和逻辑程序设计的交叉。它使用 1 阶逻辑来进行知识表示,通过修改和扩充逻辑表达式(例如Prolog表达式)来完成对数据的归纳。这一技术占据主流地位与整个人工智能领域的发展历程是分 不开的。如前所述,人工智能在 20 世纪 50 年代到 80 年代经历了“推理期”和“知识期”,在“推理期”中 人们基于逻辑知识表示、通过演绎技术获得了很多成果,而在知识期中人们基于逻辑知识表示、通过领域知识获取来实现专家系统,因此,逻辑知识表示很自然地受 到青睐,而归纳逻辑程序设计技术也自然成为机器学习的一大主流。归纳逻辑程序设计技术的一大优点是它具有很强的知识表示能力,可以较容易地表示出复杂数据 和复杂的数据关系。尤为重要的是,领域知识通常可以方便地写成逻辑表达式,因此,归纳逻辑程序设计技术不仅可以方便地利用领域知识指导学习,还可以通过学 习对领域知识进行精化和增强,甚至可以从数据中学习出领域知识。事实上,机器学习在 20 世纪80 年代正是被视为“解决知识工程瓶颈问题的关键”而走到人工智能主舞台的聚光灯下的,归纳逻辑程序设计的一些良好特性对此无疑居功至伟。S.H. Muggleton主编的书对 90年代中期之前归纳逻辑程序设计方面的研究工作做了总结。然而,归纳逻辑程序设计技术也有其局限,最严重的问题是由于其表示能力很强,学习过程所面临的 假设空间太大,对规模稍大的问题就很难进行有效的学习,只能解决一些“玩具问题”。因此,在 90 年代中期后,归纳程序设计技术方面的研究相对陷入了低谷。

20 世纪 90 年代中期之前,“从例子中学习”的另一大主流技术是基于神经网络的连接主义学习。连接主义学习技术在 20 世纪 50 年代曾经历了一个大发展时期,但因为早期的很多人工智能研究者对符号表示有特别的偏爱,例如H. Simon曾说人工智能就是研究“对智能行为的符号化建模”, 因此当时连接主义的研究并没有被纳入主流人工智能的范畴。同时,连接主义学习自身也遇到了极大的问题,M. Minsky和S. Papert在1969 年指出,(当时的)神经网络只能用于线性分类,对哪怕“异或”这么简单的问题都做不了。于是,连接主义学习在此后近 15 年的时间内陷入了停滞期。直到1983 年,J.J. Hopfield利用神经网络求解TSP问题获得了成功,才使得连接主义重新受到人们的关注。1986 年,D.E. Rumelhart和J.L. McClelland主编了著名的《并行分布处理—认知微结构的探索》一书,对PDP小组的研究工作进行了总结,轰动 一时。特别是D.E. Rumelhart、G.E. Hinton和R.J. Williams重新发明了著名的BP算法,产生了非常大的影响。该算法可以说是最成功的神经网络学习算法,在当时迅速成为最流行的算法,并在很多应用中 都取得了极大的成功。与归纳逻辑程序设计技术相比,连接主义学习技术基于“属性-值”的表示形式(也就是用一个特征向量来表示一个事物;这实际上是命题逻 辑表示形式),学习过程所面临的假设空间远小于归纳逻辑程序设计所面临的空间,而且由于有BP这样有效的学习算法,使得它可以解决很多实际问题。事实上, 即使在今天,BP仍然是在实际工程应用中被用得最多、最成功的算法之一。然而,连接主义学习技术也有其局限,一个常被人诟病的问题是其“试错性”。简单地 说,在此类技术中有大量的经验参数需要设置,例如神经网络的隐层结点数、学习率等,夸张一点说,参数设置上差之毫厘,学习结果可能谬以千里。在实际工程应 用中,人们可以通过调试来确定较好的参数设置,但对机器学习研究者来说,对此显然是难以满意的。

20 世纪 90 年代中期,统计学习粉墨登场并迅速独占鳌头。其实早在 20世纪 6、70年代就已经有统计学习方面的研究工作,统计学习理论[9]在那个时期也已经打下了基础,例如V.N. Vapnik早在1963 年就提出了“支持向量”的概念,他和A.J. Chervonenkis在 1968 年提出了VC维,在 1974年提出了结构风险最小化原则等,但直到 90 年代中期统计学习才开始成为机器学习的主流技术。这一方面是由于有效的支持向量机算法在 90 年代才由B.E. Boser、I. Guyon和V.N. Vapnik提出,而其优越的性能也是到 90 年代中期才在T. Joachims等人对文本分类的研究中显现出来;另一方面,正是在连接主义学习技术的局限性凸显出来之后,人们才把目光转向了统计学习。事实上统计学习 与连接主义学习有着密切的联系,例如RBF神经网络其实就是一种很常用的支持向量机。在支持向量机被普遍接受后,支持向量机中用到的核(kernel)技 巧被人们用到了机器学习的几乎每一个角落中,“核方法”也逐渐成为机器学习的一种基本技巧。但其实这并不是一种新技术,例如Mercer定理是在 1909年发表的,核技巧也早已被很多人使用过,即使只考虑机器学习领域,至少T. Poggio在 1975 年就使用过多项式核。如果仔细审视统计学习理论,就可以发现其中的绝大多数想法在以往机器学习的研究中都出现过,例如结构风险最小化原则实际上就是对以往 机器学习研究中经常用到的最小描述长度原则的另一个说法。但是,统计学习理论把这些有用的片段整合在同一个理论框架之下,从而为人们研制出泛化能力f有理 论保证的算法奠定了基础,与连接主义学习的“试错法”相比,这是一个极大的进步。然而,统计学习也有其局限,例如,虽然理论上来说,通过把原始空间利用核 技巧转化到一个新的特征空间,再困难的问题也可以容易地得到解决,但如何选择合适的核映射,却仍然有浓重的经验色彩。另一方面,统计学习技术与连接主义学 习技术一样是基于“属性-值”表示形式,难以有效地表示出复杂数据和复杂的数据关系,不仅难以利用领域知识,而且学习结果还具有“黑箱性”。此外,传统的 统计学习技术往往因为要确保统计性质或简化问题而做出一些假设,但很多假设在真实世界其实是难以成立的。如何克服上述缺陷,正是很多学者正在关注的问题。

科 学和真理必然是建立在争论和证明之上。机器学习世界也分了多个门派。所谓的machine learning community,现在至少包含了两个有着完全不同的文化、完全不同的价值观的群体,称为machine learning “communities”也许更合适一些。

第一个community,是把机器学习看作人工智能分支的一个群体,这群人的主体是计算机科学家。

现 在的“机器学习研究者”可能很少有人读过1983年出的“Machine Learning: An Artificial Intelligence Approach”这本书。这本书的出版标志着机器学习成为人工智能中一个独立的领域。它其实是一部集早期机器学习研究之大成的文集,收罗了若干先贤(例 如Herbert Simon,那位把诺贝尔奖、图灵奖以及各种各样和他相关的奖几乎拿遍了的科学天才)的大作,主编是Ryszard S. Michalski(此君已去世多年了,他可算是机器学习的奠基人之一)、Jaime G. Carbonell(此君曾是Springer的LNAI的总编)、Tom Mitchell(此君是CMU机器学习系首任系主任、著名教材的作者,机器学习界没人不知道他吧)。Machine Learning杂志的创刊,正是这群人努力的结果。这本书值得一读。虽然技术手段早就日新月异了,但有一些深刻的思想现在并没有过时。各个学科领域总有 不少东西,换了新装之后又粉墨登场,现在热火朝天的transfer learning,其实就是learning by analogy的升级版。

人 工智能的研究从以“推理”为重点到以“知识”为重点,再到以“学习”为重点,是有一条自然、清晰的脉络。人工智能出身的机器学习研究者,绝大部分 是把机器学习作为实现人工智能的一个途径,正如1983年的书名那样。他们关注的是人工智能中的问题,希望以机器学习为手段,但具体采用什么样的学习手 段,是基于统计的、代数的、还是逻辑的、几何的,他们并不care。

这群人可能对统计学习目前dominating的地位未必满意。靠统计 学习是不可能解决人工智能中大部分问题的,如果统计学习压制了对其他手段的研 究,可能不是好事。这群人往往也不care在文章里show自己的数学水平,甚至可能是以简化表达自己的思想为荣。人工智能问题不是数学问题,甚至未必是 依靠数学能够解决的问题。人工智能中许多事情的难处,往往在于我们不知道困难的本质在哪里,不知道“问题”在哪里。一旦“问题”清楚了,解决起来可能并不 困难。

第二个community,是把机器学习看作“应用统计学”的一个群体,这群人的主体是统计学家。

和纯数学相比,统计学不太“干净”,不少数学家甚至拒绝承认统计学是数学。但如果和人工智能相比,统计学就太干净了,统计学研究的问题是清楚的,不象人工智能那样,连问题到底在哪里都不知道。在相当长时间里,统计学家和机器学习一直保持着距离。

慢 慢地,不少统计学家逐渐意识到,统计学本来就该面向应用,而机器学习天生就是一个很好的切入点。因为机器学习虽然用到各种各样的数学,但要分析大 量数据中蕴涵的规律,统计学是必不可少的。统计学出身的机器学习研究者,绝大部分是把机器学习当作应用统计学。他们关注的是如何把统计学中的理论和方法变 成可以在计算机上有效实现的算法,至于这样的算法对人工智能中的什么问题有用,他们并不care。

这群人可能对人工智能毫无兴趣,在他们眼中,机器学习就是统计学习,是统计学比较偏向应用的一个分支,充其量是统计学与计算机科学的交叉。这群人对统计学习之外的学习手段往往是排斥的,这很自然,基于代数的、逻辑的、几何的学习,很难纳入统计学的范畴。

两 个群体的文化和价值观完全不同。第一个群体认为好的工作,第二个群体可能觉得没有技术含量,但第一个群体可能恰恰认为,简单的才好,正因为很好地 抓住了问题本质,所以问题变得容易解决。第二个群体欣赏的工作,第一个群体可能觉得是故弄玄虚,看不出他想解决什么人工智能问题,根本就不是在搞人工智 能、搞计算机,但别人本来也没说自己是在“搞人工智能”、“搞计算机”,本来就不是在为人工智能做研究。

三、SVM与Deep Learning之争

现如今在机器学习世界最火爆的可以算是统计学习,而在统计学习领域最热门非deep learning和SVM(support vector machine)莫属了。

神经网络(Neural Network)与支持向量机(Support Vector Machines,SVM)是统计学习的代表方法。

可以认为神经网络与支持向量机都源自于感知机(Perceptron)。感知机是由Rosenblatt发明的线性分类模型(1958年)。感知机对线性分类有效,但现实中的分类问题通常是非线性的。

神 经网络与支持向量机(包含核方法)都是非线性分类模型。1986年,Rummelhart与McClelland发明了神经网络的学习算法Back Propagation。后来,Vapnik等人于1992年提出了支持向量机。神经网络是多层(通常是三层)的非线性模型,支持向量机利用核技巧把非线 性问题转换成线性问题。

神经网络与支持向量机一直处于“竞争”关系。

Scholkopf是Vapnik的大弟子,支持向量机 与核方法研究的领军人物。据Scholkopf说,Vapnik当初发明支持向量机就是想’干掉’神经网络(He wanted to kill Neural Network)。支持向量机确实很有效,一段时间支持向量机一派占了上风。

近年来,神经网络一派的大师Hinton又提出 了神经网络的Deep Learning算法(2006年),使神经网络的能力大大提高,可与支持向量机一比。Deep Learning假设神经网络是多层的,首先用Restricted Boltzmann Machine(非监督学习)学习网络的结构,然后再通过Back Propagation(监督学习)学习网络的权值。关于Deep Learning的命名,Hinton曾开玩笑地说: I want to call SVM shallow learning. (注:shallow 有肤浅的意思)。其实Deep Learning本身的意思是深层学习,因为它假设神经网络有多层。

(1)Deep Learning

deep learning本身算是machine learning的一个分支,简单可以理解为neural network的发展。大约二三十年前,neural network曾经是ML领域特别火热的一个方向,但是后来确慢慢淡出了,原因包括以下几个方面:

1,比较容易过训练,参数比较难tune;

2,训练速度比较慢,在层次比较少(小于等于3)的情况下效果并不比其它方法更优;

所以中间有大约20多年的时间,神经网络被关注很少,这段时间基本上是svm和boosting算法的天下。但是,一个痴心的老先生hinton,他坚持了下来,并最终(和其它人一起bengio、yann. lecun等)提成了一个实际可行的deep learning框架。

deep learning与传统的神经网络之间有相同的地方也有很多不同。

二 者的相同在于deep learning采用了神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点 之间相互无连接,每一层可以看作是一个logistic regression模型;这种分层结构,是比较接近人类大脑的结构的。

而为了克 服神经网络训练中的问题,DL采用了与神经网络很不同的训练机制。传统神经网络中,采用的是back propagation的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和label之间的 差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)。而deep learning整体上是一个layer-wise的训练机制。这样做的原因是因为,如果采用back propagation的机制,对于一个deep network(7层以上),残差传播到最前面的层已经变得太小,出现所谓的gradient diffusion。

deep learning训练过程具体如下
1,采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是feature learning过程):具体的,先用无标定数据训练第一层,训练时可以采用 auto-encoder来 学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的 模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别 得到各层的参数;这里面需要重点理解 auto-encoder以及sparse的机制的原理和作用。可以参考 这篇文章

2, 基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL 的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deep learning效果好很大程度上归功于第一步的feature learning过程。

总之,deep learning能够得到更好地表示数据的feature,同时由于模型的层次、参数很多,capacity足够,因此,模型有能力表示大规模数据,所以 对于图像、语音这种特征不明显(需要手工设计且很多没有直观物理含义)的问题,能够在大规模训练数据上取得更好的效果。此外,从模式识别特征和分类器的角 度,deep learning框架将feature和分类器结合到一个框架中,用数据去学习feature,在使用中减少了手工设计feature的巨大工作量(这是 目前工业界工程师付出努力最多的方面),因此,不仅仅效果可以更好,而且,使用起来也有很多方便之处,因此,是十分值得关注的一套框架,每个做ML的人都 应该关注了解一下。

关于deep learning的更多知识和总结,大家可以参考前面的文章。机器学习前沿热点–Deep Learning

(2)SVM 
SVM方法是 通过一个非线性映射p,把样本空间映射到一个高维乃至无穷维的特征空间中(Hilbert空间),使得在原来的样本空间中非线性可分的问题转化为在特征空 间中的线性可分的问题.简单地说,就是升维和线性化.升维,就是把样本向高维空间做映射,一般情况下这会增加计算的复杂性,甚至会引起“维数灾难”,因而 人们很少问津.但是作为分类、回归等问题来说,很可能在低维样本空间无法线性处理的样本集,在高维特征空间中却可以通过一个线性超平面实现线性划分(或回 归).一般的升维都会带来计算的复杂化,SVM方法巧妙地解决了这个难题:应用核函数的展开定理,就不需要知道非线性映射的显式表达式;由于是在高维特征 空间中建立线性学习机,所以与线性模型相比,不但几乎不增加计算的复杂性,而且在某种程度上避免了“维数灾难”.这一切要归功于核函数的展开和计算理论.
选择不同的 核函数,可以生成不同的SVM,常用的核函数有以下4种:

⑴线性核函数K(x,y)=x·y;

⑵多项式核函数K(x,y)=[(x·y)+1]d;

⑶径向基函数K(x,y)=exp(-|x-y|^2/d^2)

⑷二层神经网络核函数K(x,y)=tanh(a(x·y)+b).

SVM有如下主要几个特点:

(1)非线性映射是SVM方法的理论基础,SVM利用内积核函数代替向高维空间的非线性映射;

(2)对特征空间划分的最优超平面是SVM的目标,最大化分类边际的思想是SVM方法的核心;

(3)支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量。

(4)SVM 是一种有坚实理论基础的新颖的小样本学习方法。它基本上不涉及概率测度及大数定律等,因此不同于现有的统计方法。从本质上看,它避开了从归纳到演绎的传统过程,实现了高效的从训练样本到预报样本的“转导推理”,大大简化了通常的分类和回归等问题。

(5)SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。维基百科上面有关维数灾难的介绍请见此

(6)少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。这种“鲁棒”性主要体现在:

①增、删非支持向量样本对模型没有影响;

②支持向量样本集具有一定的鲁棒性;

③有些成功的应用中,SVM 方法对核的选取不敏感

两个不足:

(1) SVM算法对大规模训练样本难以实施

由 于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存 和运算时间。针对以上问题的主要改进有有J.Platt的SMO算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、张学工的 CSVM以及O.L.Mangasarian等的SOR算法

(2) 用SVM解决多分类问题存在困难

经典的支持向量机算法只 给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组 合模式和SVM决策树;再就是通过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。如:与粗 集理论结合,形成一种优势互补的多类问题的组合分类器。

ps:其实整个机器学习的算法与数学上的运筹学,凸规划等知识密不可分,如果想真的想彻底掌握算法中的数学原理,建议有时间的朋友可以看看这本书Convex Optimization – Boyd and Vandenberghe,如果已经看过的朋友也欢迎将你的感受写下来,发表到十一城,大家一起学习!

参考链接:

http://zh.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E7%9A%84%E5%8E%86%E5%8F%B2

http://jssfxzx.blog.163.com/blog/static/6071057200692634829141/

http://zh.wikipedia.org/wiki/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0

http://hi.baidu.com/giqguarzqdbadpq/item/8d41e5160121a3ff65eabf8d

http://blog.sina.com.cn/s/blog_7ad48fee0100vz2f.html

http://baike.baidu.com/view/960509.htm

文献:

机器学习与数据挖掘-周志华-南京大学计算机软件新技术国家重点实验室

神经网络与支持向量机的故事-李航

本文转载自:十一城elevencitys.com

猜你喜欢

转载自blog.csdn.net/stark_summer/article/details/50364666