三万字机器学习项目整理(基础到进阶)

yk坤帝 yk坤帝     2023-03-30     579

关键词:

如果你是学生、计算机领域的工作者,我强烈建议你学习、掌握机器学习,我不敢说它是最简单的(机器学习的确很简单),但是掌握机器学习一定是性价比最高的。

本文用浅显易懂的语言精准概括了机器学习的相关知识,内容全面,总结到位,剖析了机器学习的what,who,when, where, how,以及why等相关问题。从机器学习的概念,到机器学习的发展史,再到机器学习的各类算法,最后到机器学习的最新应用,十分详尽。适合小白快速了解机器学习。

你是否使用像Siri或Alexa这样的个人助理客户端?你是否依赖垃圾邮件过滤器来保持电子邮件收件箱的干净?你是否订阅了Netflix,并依赖它惊人的准确推荐来发现新的电影可看?如果你对这些问题说“是”,恭喜你!你已经很好地利用了机器学习!

虽然这听起来很复杂,需要大量的技术背景,但机器学习实际上是一个相当简单的概念。为了更好地理解它,让我们研究一下关于机器学习的what,who,when, where, how,以及why。

1.什么是机器学习?
One day ladies will take their computers for walks in the park and tell each other, “My little computer said such a funny thing this morning”.

—Alan Turing

在过去的几年里,人工智能(AI)一直是媒体大肆炒作的热点话题。机器学习、深度学习和人工智能都出现在不计其数的文章中,而这些文章通常都发表于非技术出版物。

我们的未来被描绘成拥有智能聊天机器人、自动驾驶汽车和虚拟助手,这一未来有时被渲染成可怕的景象,有时则被描绘为乌托邦,人类的工作将十分稀少,大部分经济活动都由机器人或人工智能体(AI agent)来完成。对于未来或当前的机器学习从业者来说,重要的是能够从噪声中识别出信号,从而在过度炒作的新闻稿中发现改变世界的重大进展。

我们的未来充满风险,而你可以在其中发挥积极的作用:读完本书后,你将会成为人工智能体的开发者之一。那么我们首先来回答下列问题:到目前为止,深度学习已经取得了哪些进展?深度学习有多重要?接下来我们要做什么?媒体炒作是否可信?

1.1 人工智能、机器学习与深度学习
首先,在提到人工智能时,我们需要明确定义所讨论的内容。什么是人工智能、机器学习与深度学习(见图1-1)?这三者之间有什么关系?

图1-1 人工智能、机器学习与深度学习

1.1.1 人工智能
人工智能诞生于20世纪50年代,当时计算机科学这一新兴领域的少数先驱开始提出疑问:计算机是否能够“思考”?我们今天仍在探索这一问题的答案。人工智能的简洁定义如下:努力将通常由人类完成的智力任务自动化。

因此,人工智能是一个综合性的领域,不仅包括机器学习与深度学习,还包括更多不涉及学习的方法。例如,早期的国际象棋程序仅包含程序员精心编写的硬编码规则,并不属于机器学习。在相当长的时间内,许多专家相信,只要程序员精心编写足够多的明确规则来处理知识,就可以实现与人类水平相当的人工智能。这一方法被称为符号主义人工智能(symbolic AI),从20世纪50年代到80年代末是人工智能的主流范式。在20世纪80年代的**专家系统(expert system)**热潮中,这一方法的热度达到了顶峰。

虽然符号主义人工智能适合用来解决定义明确的逻辑问题,比如下国际象棋,但它难以给出明确的规则来解决更加复杂、模糊的问题,比如图像分类、语音识别和语言翻译。于是出现了一种新的方法来替代符号主义人工智能,这就是机器学习(machine learning)。

1.1.2 机器学习
在维多利亚时代的英格兰,埃达•洛夫莱斯伯爵夫人是查尔斯•巴贝奇的好友兼合作者,后者发明了分析机(Analytical Engine),即第一台通用的机械式计算机。虽然分析机这一想法富有远见,并且相当超前,但它在19世纪三四十年代被设计出来时并没有打算用作通用计算机,因为当时还没有“通用计算”这一概念。

它的用途仅仅是利用机械操作将数学分析领域的某些计算自动化,因此得名“分析机”。1843年,埃达•洛夫莱斯伯爵夫人对这项发明评论道:“分析机谈不上能创造什么东西。它只能完成我们命令它做的任何事情……它的职责是帮助我们去实现我们已知的事情。”

随后,人工智能先驱阿兰•图灵在其1950年发表的具有里程碑意义的论文“计算机器和智能”a中,引用了上述评论并将其称为“洛夫莱斯伯爵夫人的异议”。图灵在这篇论文中介绍了图灵测试以及日后人工智能所包含的重要概念。在引述埃达•洛夫莱斯伯爵夫人的同时,图灵还思考了这样一个问题:通用计算机是否能够学习与创新?他得出的结论是“能”。

机器学习的概念就来自于图灵的这个问题:对于计算机而言,除了“我们命令它做的任何事情”之外,它能否自我学习执行特定任务的方法?计算机能否让我们大吃一惊?如果没有程序员精心编写的数据处理规则,计算机能否通过观察数据自动学会这些规则?

图灵的这个问题引出了一种新的编程范式。在经典的程序设计(即符号主义人工智能的范式)中,人们输入的是规则(即程序)和需要根据这些规则进行处理的数据,系统输出的是答案 (见图1-2)。利用机器学习,人们输入的是数据和从这些数据中预期得到的答案,系统输出的是规则。这些规则随后可应用于新的数据,并使计算机自主生成答案。

图1-2 机器学习:一种新的编程范式
机器学习系统是训练出来的,而不是明确地用程序编写出来的。将与某个任务相关的许多示例输入机器学习系统,它会在这些示例中找到统计结构,从而最终找到规则将任务自动化。举个例子,你想为度假照片添加标签,并且希望将这项任务自动化,那么你可以将许多人工打好标签的照片输入机器学习系统,系统将学会将照片与特定标签联系在一起的统计规则。

虽然机器学习在20世纪90年代才开始蓬勃发展,但它迅速成为人工智能最受欢迎且最成功的分支领域。这一发展的驱动力来自于速度更快的硬件与更大的数据集。机器学习与数理统计密切相关,但二者在几个重要方面有所不同。

不同于统计学,机器学习经常用于处理复杂的大型数据集(比如包含数百万张图像的数据集,每张图像又包含数万个像素),用经典的统计分析(比如贝叶斯分析)来处理这种数据集是不切实际的。因此,机器学习(尤其是深度学习)呈现出相对较少的数学理论(可能太少了),并且是以工程为导向的。这是一门需要上手实践的学科,想法更多地是靠实践来证明,而不是靠理论推导。

1.1.3 机器学习的范围
机器学习跟模式识别,统计学习,数据挖掘,计算机视觉,语音识别,自然语言处理等领域有着很深的联系。

从范围上来说,机器学习跟模式识别,统计学习,数据挖掘是类似的,同时,机器学习与其他领域的处理技术的结合,形成了计算机视觉、语音识别、自然语言处理等交叉学科。因此,一般说数据挖掘时,可以等同于说机器学习。同时,我们平常所说的机器学习应用,应该是通用的,不仅仅局限在结构化数据,还有图像,音频等应用。

在这节对机器学习这些相关领域的介绍有助于我们理清机器学习的应用场景与研究范围,更好的理解后面的算法与应用层次。

下图是机器学习所牵扯的一些相关范围的学科与研究领域。

1.模式识别
模式识别=机器学习。两者的主要区别在于前者是从工业界发展起来的概念,后者则主要源自计算机学科。在著名的《Pattern Recognition And Machine Learning》这本书中,Christopher M. Bishop在开头是这样说的“模式识别源自工业界,而机器学习来自于计算机学科。不过,它们中的活动可以被视为同一个领域的两个方面,同时在过去的10年间,它们都有了长足的发展”。

2.数据挖掘
数据挖掘=机器学习+数据库。这几年数据挖掘的概念实在是太耳熟能详。几乎等同于炒作。但凡说数据挖掘都会吹嘘数据挖掘如何如何,例如从数据中挖出金子,以及将废弃的数据转化为价值等等。但是,我尽管可能会挖出金子,但我也可能挖的是“石头”啊。这个说法的意思是,数据挖掘仅仅是一种思考方式,告诉我们应该尝试从数据中挖掘出知识,但不是每个数据都能挖掘出金子的,所以不要神话它。一个系统绝对不会因为上了一个数据挖掘模块就变得无所不能(这是IBM最喜欢吹嘘的),恰恰相反,一个拥有数据挖掘思维的人员才是关键,而且他还必须对数据有深刻的认识,这样才可能从数据中导出模式指引业务的改善。大部分数据挖掘中的算法是机器学习的算法在数据库中的优化。

3.统计学习
统计学习近似等于机器学习。统计学习是个与机器学习高度重叠的学科。因为机器学习中的大多数方法来自统计学,甚至可以认为,统计学的发展促进机器学习的繁荣昌盛。例如著名的支持向量机算法,就是源自统计学科。但是在某种程度上两者是有分别的,这个分别在于:统计学习者重点关注的是统计模型的发展与优化,偏数学,而机器学习者更关注的是能够解决问题,偏实践,因此机器学习研究者会重点研究学习算法在计算机上执行的效率与准确性的提升。

4.计算机视觉
计算机视觉=图像处理+机器学习。图像处理技术用于将图像处理为适合进入机器学习模型中的输入,机器学习则负责从图像中识别出相关的模式。计算机视觉相关的应用非常的多,例如百度识图、手写字符识别、车牌识别等等应用。这个领域是应用前景非常火热的,同时也是研究的热门方向。随着机器学习的新领域深度学习的发展,大大促进了计算机图像识别的效果,因此未来计算机视觉界的发展前景不可估量。

5.语音识别
语音识别=语音处理+机器学习。语音识别就是音频处理技术与机器学习的结合。语音识别技术一般不会单独使用,一般会结合自然语言处理的相关技术。目前的相关应用有苹果的语音助手siri等。

6.自然语言处理
自然语言处理=文本处理+机器学习。自然语言处理技术主要是让机器理解人类的语言的一门领域。在自然语言处理技术中,大量使用了编译原理相关的技术,例如词法分析,语法分析等等,除此之外,在理解这个层面,则使用了语义理解,机器学习等技术。作为唯一由人类自身创造的符号,自然语言处理一直是机器学习界不断研究的方向。按照百度机器学习专家余凯的说法“听与看,说白了就是阿猫和阿狗都会的,而只有语言才是人类独有的”。如何利用机器学习技术进行自然语言的的深度理解,一直是工业和学术界关注的焦点。

可以看出机器学习在众多领域的外延和应用。机器学习技术的发展促使了很多智能领域的进步,改善着我们的生活。

1.1.4 深度学习之“深度”
深度学习是机器学习的一个分支领域:它是从数据中学习表示的一种新方法,强调从连续的层(layer)中进行学习,这些层对应于越来越有意义的表示。“深度学习”中的“深度”指的并不是利用这种方法所获取的更深层次的理解,而是指一系列连续的表示层。数据模型中包含多少层,这被称为模型的深度(depth)。这一领域的其他名称包括分层表示学习(layered representations learning)和层级表示学习(hierarchical representations learning)**。

现代深度学习通常包含数十个甚至上百个连续的表示层,这些表示层全都是从训练数据中自动学习的。与此相反,其他机器学习方法的重点往往是仅仅学习一两层的数据表示,因此有时也被称为浅层学习(shallow learning)。

在深度学习中,这些分层表示几乎总是通过叫作神经网络(neural network)的模型来学习得到的。神经网络的结构是逐层堆叠。神经网络这一术语来自于神经生物学,然而,虽然深度学习的一些核心概念是从人们对大脑的理解中汲取部分灵感而形成的,但深度学习模型不是大脑模型。没有证据表明大脑的学习机制与现代深度学习模型所使用的相同。

你可能会读到一些流行科学的文章,宣称深度学习的工作原理与大脑相似或者是根据大脑的工作原理进行建模的,但事实并非如此。对于这一领域的新人来说,如果认为深度学习与神经生物学存在任何关系,那将使人困惑,只会起到反作用。你无须那种“就像我们的头脑一样”的神秘包装,最好也忘掉读过的深度学习与生物学之间的假想联系。就我们的目的而言,深度学习是从数据中学习表示的一种数学框架。

深度学习算法学到的表示是什么样的?我们来看一个多层网络(见图1-5)如何对数字图像进行变换,以便识别图像中所包含的数字。

如图1-6所示,这个网络将数字图像转换成与原始图像差别越来越大的表示,而其中关于最终结果的信息却越来越丰富。你可以将深度网络看作多级信息蒸馏操作:信息穿过连续的过滤器,其纯度越来越高(即对任务的帮助越来越大)。

这就是深度学习的技术定义:学习数据表示的多级方法。这个想法很简单,但事实证明,非常简单的机制如果具有足够大的规模,将会产生魔法般的效果。

1.1.5 用三张图理解深度学习的工作原理
现在你已经知道,机器学习是将输入(比如图像)映射到目标(比如标签“猫”),这一过程是通过观察许多输入和目标的示例来完成的。你还知道,深度神经网络通过一系列简单的数据变换(层)来实现这种输入到目标的映射,而这些数据变换都是通过观察示例学习到的。下面来具体看一下这种学习过程是如何发生的。

神经网络中每层对输入数据所做的具体操作保存在该层的权重(weight)中,其本质是一串数字。用术语来说,每层实现的变换由其权重来参数化(parameterize,见图1-7)。权重有时也被称为该层的参数(parameter)。

在这种语境下,学习的意思是为神经网络的所有层找到一组权重值,使得该网络能够将每个示例输入与其目标正确地一一对应。但重点来了:一个深度神经网络可能包含数千万个参数。找到所有参数的正确取值可能是一项非常艰巨的任务,特别是考虑到修改某个参数值将会影响其他所有参数的行为。

想要控制一件事物,首先需要能够观察它。想要控制神经网络的输出,就需要能够衡量该输出与预期值之间的距离。这是神经网络损失函数(loss function)的任务,该函数也叫目标函数(objective function)。损失函数的输入是网络预测值与真实目标值(即你希望网络输出的结果),然后计算一个距离值,衡量该网络在这个示例上的效果好坏(见图1-8)。

深度学习的基本技巧是利用这个距离值作为反馈信号来对权重值进行微调,以降低当前示例对应的损失值(见图1-9)。这种调节由优化器(optimizer)来完成,它实现了所谓的反向传播(backpropagation)算法,这是深度学习的核心算法。下一章中会详细地解释反向传播的工作原理。

一开始对神经网络的权重随机赋值,因此网络只是实现了一系列随机变换。其输出结果自然也和理想值相去甚远,相应地,损失值也很高。但随着网络处理的示例越来越多,权重值也在向正确的方向逐步微调,损失值也逐渐降低。这就是训练循环(training loop),将这种循环重复足够多的次数(通常对数千个示

例进行数十次迭代),得到的权重值可以使损失函数最小。具有最小损失的网络,其输出值与目标值尽可能地接近,这就是训练好的网络。再次强调,这是一个简单的机制,一旦具有足够大的规模,将会产生魔法般的效果。

1.1.6 深度学习已经取得的进展
虽然深度学习是机器学习一个相当有年头的分支领域,但在21世纪前十年才崛起。在随后的几年里,它在实践中取得了革命性进展,在视觉和听觉等感知问题上取得了令人瞩目的成果,而这些问题所涉及的技术,在人类看来是非常自然、非常直观的,但长期以来却一直是机器难以解决的。

特别要强调的是,深度学习已经取得了以下突破,它们都是机器学习历史上非常困难的领域:

‰ 接近人类水平的图像分类
‰ 接近人类水平的语音识别
‰ 接近人类水平的手写文字转录
‰ 更好的机器翻译
‰ 更好的文本到语音转换
‰ 数字助理,比如谷歌即时(Google Now)和亚马逊Alexa‰ 接近人类水平的自动驾驶
‰ 更好的广告定向投放,Google、百度、必应都在使用
‰ 更好的网络搜索结果
‰ 能够回答用自然语言提出的问题
‰ 在围棋上战胜人类
我们仍然在探索深度学习能力的边界。我们已经开始将其应用于机器感知和自然语言理解之外的各种问题,比如形式推理。如果能够成功的话,这可能预示着深度学习将能够协助人类进行科学研究、软件开发等活动。

1.1.7 不要相信短期炒作
虽然深度学习近年来取得了令人瞩目的成就,但人们对这一领域在未来十年间能够取得的成就似乎期望过高。虽然一些改变世界的应用(比如自动驾驶汽车)已经触手可及,但更多的应用可能在长时间内仍然难以实现,比如可信的对话系统、达到人类水平的跨任意语言的机器翻译、达到人类水平的自然语言理解。

我们尤其不应该把达到人类水平的通用智能(human-level general intelligence)的讨论太当回事。在短期内期望过高的风险是,一旦技术上没有实现,那么研究投资将会停止,而这会导致在很长一段时间内进展缓慢。

这种事曾经发生过。人们曾对人工智能极度乐观,随后是失望与怀疑,进而导致资金匮乏。这种循环发生过两次,最早始于20世纪60年代的符号主义人工智能。在早期的那些年里,人们激动地预测着人工智能的未来。马文•闵斯基是符号主义人工智能方法最有名的先驱和支持者之一,他在1967年宣称:“在一代人的时间内……将基本解决创造‘人工智能’的问题。”三年后的1970年,他做出了更为精确的定量预测:“在三到八年的时间里,我们将拥有一台具有人类平均智能的机器。”

在2021年,这一目标看起来仍然十分遥远,遥远到我们无法预测需要多长时间才能实现。但在20世纪60年代和70年代初,一些专家却相信这一目标近在咫尺(正如今天许多人所认为的那样)。几年之后,由于这些过高的期望未能实现,研究人员和政府资金均转向其他领域,这标志着第一次人工智能冬天(AI winter)的开始(这一说法来自“核冬天”,因为当时是冷战高峰之后不久)。

这并不是人工智能的最后一个冬天。20世纪80年代,一种新的符号主义人工智能——专家系统(expert system)——开始在大公司中受到追捧。最初的几个成功案例引发了一轮投资热潮,进而全球企业都开始设立人工智能部门来开发专家系统。1985年前后,各家公司每年在这项技术上的花费超过10亿美元。但到了20世纪90年代初,这些系统的维护费用变得很高,难以扩展,并且应用范围有限,人们逐渐对其失去兴趣。于是开始了第二次人工智能冬天。

我们可能正在见证人工智能炒作与让人失望的第三次循环,而且我们仍处于极度乐观的阶段。最好的做法是降低我们的短期期望,确保对这一技术领域不太了解的人能够清楚地知道深度学习能做什么、不能做什么。

1.1.8 人工智能的未来
虽然我们对人工智能的短期期望可能不切实际,但长远来看前景是光明的。我们才刚刚开始将深度学习应用于许多重要的问题,从医疗诊断到数字助手,在这些问题上深度学习都发挥了变革性作用。过去五年里,人工智能研究一直在以惊人的速度发展,这在很大程度上是由于人工智能短短的历史中前所未见的资金投入,但到目前为止,这些进展却很少能够转化为改变世界的产品和流程。

深度学习的大多数研究成果尚未得到应用,至少尚未应用到它在各行各业中能够解决的所有问题上。你的医生和会计师都还没有使用人工智能。你在日常生活中可能也不会用到人工智能。当然,你可以向智能手机提出简单的问题并得到合理的回答,也可以在亚马逊网站上得到相当有用的产品推荐,还可以在谷歌相册(Google Photos)网站搜索“生日”并立刻找到上个月你女儿生日聚会的照片。与过去相比,这些技术已大不相同,但这些工具仍然只是日常生活的陪衬。人工智能仍需进一步转变为我们工作、思考和生活的核心。

眼下,我们似乎很难相信人工智能会对世界产生巨大影响,因为它还没有被广泛地部署应用——正如1995年,我们也难以相信互联网在未来会产生的影响。当时,大多数人都没有认识到互联网与他们的关系,以及互联网将如何改变他们的生活。今天的深度学习和人工智能也是如此。但不要怀疑:人工智能即将到来。在不远的未来,人工智能将会成为你的助手,甚至成为你的朋友。它会回答你的问题,帮助你教育孩子,并关注你的健康。它还会将生活用品送到你家门口,并开车将你从A地送到B地。它还会是你与日益复杂的、信息密集的世界之间的接口。更为重要的是,人工智能将会帮助科学家在所有科学领域(从基因学到数学)取得突破性进展,从而帮助人类整体向前发展。

在这个过程中,我们可能会经历一些挫折,也可能会遇到新的人工智能冬天,正如互联网行业那样,在1998—1999年被过度炒作,进而在21世纪初遭遇破产,并导致投资停止。但我们最终会实现上述目标。人工智能最终将应用到我们社会和日常生活的几乎所有方面,正如今天的互联网一样。

不要相信短期的炒作,但一定要相信长期的愿景。人工智能可能需要一段时间才能充分发挥其潜力。这一潜力的范围大到难以想象,但人工智能终将到来,它将以一种奇妙的方式改变我们的世界。

1.2 深度学习之前:机器学习简史
深度学习已经得到了人工智能历史上前所未有的公众关注度和产业投资,但这并不是机器学习的第一次成功。可以这样说,当前工业界所使用的绝大部分机器学习算法都不是深度学习算法。深度学习不一定总是解决问题的正确工具:有时没有足够的数据,深度学习不适用;有时用其他算法可以更好地解决问题。如果你第一次接触的机器学习就是深度学习,那你可能会发现手中握着一把深度学习“锤子”,而所有机器学习问题看起来都像是“钉子”。为了避免陷入这个误区,唯一的方法就是熟悉其他机器学习方法并在适当的时候进行实践。

关于经典机器学习方法的详细讨论已经超出了本书范围,但我们将简要回顾这些方法,并介绍这些方法的历史背景。这样我们可以将深度学习放入机器学习的大背景中,并更好地理解深度学习的起源以及它为什么如此重要。

1.2.1 概率建模
概率建模(probabilistic modeling)是统计学原理在数据分析中的应用。它是最早的机器学习形式之一,至今仍在广泛使用。其中最有名的算法之一就是朴素贝叶斯算法。

朴素贝叶斯是一类基于应用贝叶斯定理的机器学习分类器,它假设输入数据的特征都是独立的。这是一个很强的假设,或者说“朴素的”假设,其名称正来源于此。这种数据分析方法比计算机出现得还要早,在其第一次被计算机实现(很可能追溯到20世纪50年代)的几十年前就已经靠人工计算来应用了。贝叶斯定理和统计学基础可以追溯到18世纪,你学会了这两点就可以开始使用朴素贝叶斯分类器了。

另一个密切相关的模型是logistic回归(logistic regression,简称logreg),它有时被认为是现代机器学习的“hello world”。不要被它的名称所误导——logreg是一种分类算法,而不是回归算法。与朴素贝叶斯类似,logreg的出现也比计算机早很长时间,但由于它既简单又通用,至今仍然很有用。面对一个数据集,数据科学家通常会首先尝试使用这个算法,以便初步熟悉手头的分类任务。

1.2.2 早期神经网络
神经网络早期的迭代方法已经完全被本章所介绍的现代方法所取代,但仍有助于我们了解深度学习的起源。虽然人们早在20世纪50年代就将神经网络作为玩具项目,并对其核心思想进行研究,但这一方法在数十年后才被人们所使用。在很长一段时间内,一直没有训练大型神经网络的有效方法。这一点在20世纪80年代中期发生了变化,当时很多人都独立地重新发现了反向传播算法——一种利用梯度下降优化来训练一系列参数化运算链的方法(本文后面将给出这些概念的具体定义),并开始将其应用于神经网络。

贝尔实验室于1989年第一次成功实现了神经网络的实践应用,当时Yann LeCun将卷积神经网络的早期思想与反向传播算法相结合,并将其应用于手写数字分类问题,由此得到名为LeNet的网络,在20世纪90年代被美国邮政署采用,用于自动读取信封上的邮政编码。

1.2.3 核方法
上节所述神经网络取得了第一次成功,并在20世纪90年代开始在研究人员中受到一定的重视,但一种新的机器学习方法在这时声名鹊起,很快就使人们将神经网络抛诸脑后。这种方法就是核方法(kernel method)。核方法是一组分类算法,其中最有名的就是支持向量机(SVM,support vector machine)。虽然Vladimir Vapnik和Alexey Chervonenkis早在1963年就发表了较早版本的线性公式a,但SVM的现代公式由Vladimir Vapnik和Corinna Cortes于20世纪90年代初在贝尔实验室提出,并发表于1995年。

SVM的目标是通过在属于两个不同类别的两组数据点之间找到良好决策边界(decisionboundary,见图1-10)来解决分类问题。决策边界可以看作一条直线或一个平面,将训练数据划分为两块空间,分别对应于两个类别。对于新数据点的分类,你只需判断它位于决策边界的哪一侧。

SVM通过两步来寻找决策边界。

(1) 将数据映射到一个新的高维表示,这时决策边界可以用一个超平面来表示(如果数据像图1-10那样是二维的,那么超平面就是一条直线)。

​ (2) 尽量让超平面与每个类别最近的数据点之间的距离最大化,从而计算出良好决策边界(分割超平面),这一步叫作间隔最大化(maximizing the margin)。这样决策边界可以很好地推广到训练数据集之外的新样本。

将数据映射到高维表示从而使分类问题简化,这一技巧可能听起来很不错,但在实践中通常是难以计算的。这时就需要用到核技巧(kernel trick,核方法正是因这一核心思想而得名)。其基本思想是:要想在新的表示空间中找到良好的决策超平面,你不需要在新空间中直接计算点的坐标,只需要在新空间中计算点对之间的距离,而利用核函数(kernel function)可以高效地完成这种计算。核函数是一个在计算上能够实现的操作,将原始空间中的任意两点映射为这两点在目标表示空间中的距离,完全避免了对新表示进行直接计算。核函数通常是人为选择的,而不是从数据中学到的——对于SVM来说,只有分割超平面是通过学习得到的。

SVM刚刚出现时,在简单的分类问题上表现出了最好的性能。当时只有少数机器学习方法得到大量的理论支持,并且适合用于严肃的数学分析,因而非常易于理解和解释,SVM就是其中之一。由于SVM具有这些有用的性质,很长一段时间里它在实践中非常流行。

但是,SVM很难扩展到大型数据集,并且在图像分类等感知问题上的效果也不好。SVM是一种比较浅层的方法,因此要想将其应用于感知问题,首先需要手动提取出有用的表示(这叫作特征工程),这一步骤很难,而且不稳定。

1.2.4 决策树、随机森林与梯度提升机
决策树(decision tree)是类似于流程图的结构,可以对输入数据点进行分类或根据给定输入来预测输出值(见图1-11)。决策树的可视化和解释都很简单。在21世纪前十年,从数据中学习得到的决策树开始引起研究人员的广泛关注。到了2010年,决策树经常比核方法更受欢迎。

特别是随机森林(random forest)算法,它引入了一种健壮且实用的决策树学习方法,即首先构建许多决策树,然后将它们的输出集成在一起。随机森林适用于各种各样的问题——对于任何浅层的机器学习任务来说,它几乎总是第二好的算法。广受欢迎的机器学习竞赛网站Kaggle在2010年上线后,随机森林迅速成为平台上人们的最爱,直到2014年才被梯度提升机所取代。与随机森林类似,梯度提升机(gradient boosting machine)也是将弱预测模型(通常是决策树)集成的机器学习技术。它使用了梯度提升方法,通过迭代地训练新模型来专门解决之前模型的弱点,从而改进任何机器学习模型的效果。将梯度提升技术应用于决策树时,得到的模型与随机森林具有相似的性质,但在绝大多数情况下效果都比随机森林要好。它可能是目前处理非感知数据最好的算法之一(如果非要加个“之一”的话)。和深度学习一样,它也是Kaggle竞赛中最常用的技术之一。

1.2.5 回到神经网络
虽然神经网络几乎被整个科学界完全忽略,但仍有一些人在继续研究神经网络,并在2010年左右开始取得重大突破。这些人包括:多伦多大学Geoffrey Hinton的小组、蒙特利尔大学的Yoshua Bengio、纽约大学的Yann LeCun和瑞士的IDSIA。

2011年,来自IDSIA的Dan Ciresan开始利用GPU训练的深度神经网络赢得学术性的图像分类竞赛,这是现代深度学习第一次在实践中获得成功。但真正的转折性时刻出现在2012年,当年Hinton小组参加了每年一次的大规模图像分类挑战赛ImageNet。ImageNet挑战赛在当时以困难著称,参赛者需要对140万张高分辨率彩色图像进行训练,然后将其划分到1000个不同的类别中。2011年,获胜的模型基于经典的计算机视觉方法,其top-5精度a只有74.3%。到了2012年,由Alex Krizhevsky带领并由Geoffrey Hinton提供建议的小组,实现了83.6%的top-5精度——这是一项重大突破。此后,这项竞赛每年都由深度卷积神经网络所主导。到了2015年,获胜者的精度达到了96.4%,此时ImageNet的分类任务被认为是一个已经完全解决的问题。

自2012年以来,深度卷积神经网络(convnet)已成为所有计算机视觉任务的首选算法。更一般地说,它在所有感知任务上都有效。在2015年和2016年的主要计算机视觉会议上,几乎所有演讲都与convnet有关。与此同时,深度学习也在许多其他类型的问题上得到应用,比如自然语言处理。它已经在大量应用中完全取代了SVM与决策树。举个例子,欧洲核子研究中心(CERN)多年来一直使用基于决策树的方法来分析来自大型强子对撞机(LHC)ATLAS探测器的粒子数据,但CERN最终转向基于Keras的深度神经网络,因为它的性能更好,而且在大型数据集上易于训练。

1.2.6 深度学习有何不同
深度学习发展得如此迅速,主要原因在于它在很多问题上都表现出更好的性能。但这并不是唯一的原因。深度学习还让解决问题变得更加简单,因为它将特征工程完全自动化,而这曾经是机器学习工作流程中最关键的一步。

先前的机器学习技术(浅层学习)仅包含将输入数据变换到一两个连续的表示空间,通常使用简单的变换,比如高维非线性投影(SVM)或决策树。但这些技术通常无法得到复杂问题所需要的精确表示。因此,人们必须竭尽全力让初始输入数据更适合用这些方法处理,也必须手动为数据设计好的表示层。这叫作特征工程。与此相反,深度学习完全将这个步骤自动化:利用深度学习,你可以一次性学习所有特征,而无须自己手动设计。这极大地简化了机器学习工作流程,通常将复杂的多阶段流程替换为一个简单的、端到端的深度学习模型。

你可能会问,如果问题的关键在于有多个连续表示层,那么能否重复应用浅层方法,以实现和深度学习类似的效果?在实践中,如果连续应用浅层学习方法,其收益会随着层数增加迅速降低,因为三层模型中最优的第一表示层并不是单层或双层模型中最优的第一表示层。深度学习的变革性在于,模型可以在同一时间共同学习所有表示层,而不是依次连续学习(这被称为贪婪学习)。通过共同的特征学习,一旦模型修改某个内部特征,所有依赖于该特征的其他特征都会相应地自动调节适应,无须人为干预。一切都由单一反馈信号来监督:模型中的每一处变化都是为了最终目标服务。这种方法比贪婪地叠加浅层模型更加强大,因为它可以通过将复杂、抽象的表示拆解为很多个中间空间(层)来学习这些表示,每个中间空间仅仅是前一个空间的简单变换。

深度学习从数据中进行学习时有两个基本特征:第一,通过渐进的、逐层的方式形成越来越复杂的表示;第二,对中间这些渐进的表示共同进行学习,每一层的变化都需要同时考虑上下两层的需要。总之,这两个特征使得深度学习比先前的机器学习方法更加成功。

1.2.7 机器学习现状
要想了解机器学习算法和工具的现状,一个好方法是看一下Kaggle上的机器学习竞赛。Kaggle上的竞争非常激烈(有些比赛有数千名参赛者,并提供数百万美元的奖金),而且涵盖了各种类型的机器学习问题,所以它提供了一种现实方法来评判哪种方法有效、哪种方法无效。那么哪种算法能够可靠地赢得竞赛呢?顶级参赛者都使用哪些工具?

在2016年和2017年,Kaggle上主要有两大方法:梯度提升机和深度学习。具体而言,梯度提升机用于处理结构化数据的问题,而深度学习则用于图像分类等感知问题。使用前一种方法的人几乎都使用优秀的XGBoost库,它同时支持数据科学最流行的两种语言:Python和R。使用深度学习的Kaggle参赛者则大多使用Keras库,因为它易于使用,非常灵活,并且支持Python。

要想在如今的应用机器学习中取得成功,你应该熟悉这两种技术:梯度提升机,用于浅层学习问题;深度学习,用于感知问题。用术语来说,你需要熟悉XGBoost和Keras,它们是目前主宰Kaggle竞赛的两个库。有了本书,你已经向这个目标迈出了一大步。

1.3 为什么是深度学习,为什么是现在
深度学习用于计算机视觉的两个关键思想,即卷积神经网络和反向传播,在1989年就已经为人们所知。长短期记忆(LSTM,long short-term memory)算法是深度学习处理时间序列的 基础,它在1997年就被开发出来了,而且此后几乎没有发生变化。那么为什么深度学习在2012年之后才开始取得成功?这二十年间发生了什么变化?

总的来说,三种技术力量在推动着机器学习的进步:

‰ 硬件
‰ 数据集和基准
‰ 算法上的改进
由于这一领域是靠实验结果而不是理论指导的,所以只有当合适的数据和硬件可用于尝试新想法时(或者将旧想法的规模扩大,事实往往也是如此),才可能出现算法上的改进。机器学习不是数学或物理学,靠一支笔和一张纸就能实现重大进展。它是一门工程科学。

在20世纪90年代和21世纪前十年,真正的瓶颈在于数据和硬件。但在这段时间内发生了下面这些事情:互联网高速发展,并且针对游戏市场的需求开发出了高性能图形芯片。

1.3.1 硬件
从1990年到2010年,非定制CPU的速度提高了约5000倍。因此,现在可以在笔记本电脑上运行小型深度学习模型,但在25年前是无法实现的。

但是,对于计算机视觉或语音识别所使用的典型深度学习模型,所需要的计算能力要比笔记本电脑的计算能力高几个数量级。在20世纪前十年里,NVIDIA和AMD等公司投资数十亿美元来开发快速的大规模并行芯片(图形处理器,GPU),以便为越来越逼真的视频游戏提供图形显示支持。这些芯片是廉价的、单一用途的超级计算机,用于在屏幕上实时渲染复杂的3D场景。这些投资为科学界带来了好处。2007年,NVIDIA推出了CUDA,作为其GPU系列的编程接口。少量GPU开始在各种高度并行化的应用中替代大量CPU集群,并且最早应用于物理建模。深度神经网络主要由许多小矩阵乘法组成,它也是高度并行化的。2011年前后,一些研究人员开始编写神经网络的CUDA实现,而Dan Ciresana和Alex Krizhevskyb属于第一批人。

这样,游戏市场资助了用于下一代人工智能应用的超级计算。有时候,大事件都是从游戏开始的。今天,NVIDIA TITAN X(一款游戏GPU,在2015年底售价1000美元)可以实现单精度6.6 TFLOPS的峰值,即每秒进行6.6万亿次float32运算。这比一台现代笔记本电脑的速度要快约350倍。使用一块TITAN X显卡,只需几天就可以训练出几年前赢得ILSVRC竞赛的ImageNet模型。与此同时,大公司还在包含数百个GPU的集群上训练深度学习模型,这种类型的GPU是专门针对深度学习的需求开发的,比如NVIDIA Tesla K80。如果没有现代GPU,这种集群的超级计算能力是不可能实现的。

此外,深度学习行业已经开始超越GPU,开始投资于日益专业化的高效芯片来进行深度学习。2016年,Google在其年度I/O大会上展示了张量处理器(TPU)项目,它是一种新的芯片设计,其开发目的完全是为了运行深度神经网络。据报道,它的速度比最好的GPU还要快10倍,而且能效更高。

1.3.2 数据
人工智能有时被称为新的工业革命。如果深度学习是这场革命的蒸汽机,那么数据就是煤炭,即驱动智能机器的原材料,没有煤炭一切皆不可能。就数据而言,除了过去20年里存储硬件的指数级增长(遵循摩尔定律),最大的变革来自于互联网的兴起,它使得收集与分发用于机器学习的超大型数据集变得可行。如今,大公司使用的图像数据集、视频数据集和自然语言数据集,如果没有互联网的话根本无法收集。例如,Flickr网站上用户生成的图像标签一直是计算机视觉的数据宝库。YouTube视频也是一座宝库。维基百科则是自然语言处理的关键数据集。

如果有一个数据集是深度学习兴起的催化剂的话,那么一定是ImageNet数据集。它包含140万张图像,这些图像已经被人工划分为1000个图像类别(每张图像对应1个类别)。但ImageNet的特殊之处不仅在于其数量之大,还在于与它相关的年度竞赛a。

正如Kaggle自2010年以来所展示的那样,公开竞赛是激励研究人员和工程师挑战极限的极好方法。研究人员通过竞争来挑战共同基准,这极大地促进了近期深度学习的兴起。

1.3.3 算法
除了硬件和数据之外,直到20世纪前十年的末期,我们仍没有可靠的方法来训练非常深的神经网络。因此,神经网络仍然很浅,仅使用一两个表示层,无法超越更为精确的浅层方法,比如SVM和随机森林。关键问题在于通过多层叠加的梯度传播。随着层数的增加,用于训练神经网络的反馈信号会逐渐消失。

这一情况在2009—2010年左右发生了变化,当时出现了几个很简单但很重要的算法改进,可以实现更好的梯度传播。

‰ 更好的神经层激活函数(activation function)。
‰ 更好的权重初始化方案(weight-initialization scheme),一开始使用逐层预训练的方法,不过这种方法很快就被放弃了。
‰ 更好的优化方案(optimization scheme),比如RMSProp和Adam。
只有这些改进可以训练10层以上的模型时,深度学习才开始大放异彩。

最后,在2014年、2015年和2016年,人们发现了更先进的有助于梯度传播的方法,比如批标准化、残差连接和深度可分离卷积。今天,我们可以从头开始训练上千层的模型。

1.3.4 新的投资热潮
随着深度学习于2012—2013年在计算机视觉领域成为新的最优算法,并最终在所有感知任务上都成为最优算法,业界领导者开始注意到它。接下来就是逐步升温的业界投资热潮,远远超出了人工智能历史上曾经出现过的任何投资。

2011年,就在深度学习大放异彩之前,在人工智能方面的风险投资总额大约为1900万美元,几乎全都投给了浅层机器学习方法的实际应用。到了2014年,这一数字已经涨到了惊人的3.94亿美元。这三年里创办了数十家创业公司,试图从深度学习炒作中获利。与此同时,Google、Facebook、百度、微软等大型科技公司已经在内部研究部门进行投资,其金额很可能已经超过了风险投资的现金流。其中只有少数金额被公之于众:2013年,Google收购了深度学习创业公司DeepMind,报道称收购价格为5亿美元,这是历史上对人工智能公司的最高收购价格。2014年,百度在硅谷启动了深度学习研究中心,为该项目投资3亿美元。2016年,深度学习硬件创业公司Nervana Systems被英特尔收购,收购价格逾4亿美元。

机器学习,特别是深度学习,已成为这些科技巨头产品战略的核心。2015年末,Google首席执行官Sundar Pichai表示:“机器学习这一具有变革意义的核心技术将促使我们重新思考做所有事情的方式。我们用心将其应用于所有产品,无论是搜索、广告、YouTube还是Google Play。我们尚处于早期阶段,但你将会看到我们系统性地将机器学习应用于所有这些领域。”

由于这波投资热潮,短短五年间从事深度学习的人数从几千人涨到数万人,研究进展也达到了惊人的速度。目前没有迹象表明这种趋势会在短期内放缓。

1.3.5 深度学习的大众化
有许多新面孔进入深度学习领域,而主要的驱动因素之一是该领域所使用工具集的大众化。在早期,从事深度学习需要精通C++和CUDA,而它们只有少数人才能掌握。如今,具有基本的Python脚本技能,就可以从事高级的深度学习研究。这主要得益于Theano及随后的TensorFlow的开发,以及Keras等用户友好型库的兴起。Theano和TensorFlow是两个符号式的张量运算的Python框架,都支持自动求微分,这极大地简化了新模型的实现过程。Keras等用户友好型库则使深度学习变得像操纵乐高积木一样简单。Keras在2015年初发布,并且很快就成为大量创业公司、研究生和研究人员转向该领域的首选深度学习解决方案。

1.3.6 这种趋势会持续吗
深度神经网络成为企业投资和研究人员纷纷选择的正确方法,它究竟有何特别之处?换句话说,深度学习是否只是难以持续的昙花一现?20年后我们是否仍在使用深度神经网络?

深度学习有几个重要的性质,证明了它确实是人工智能的革命,并且能长盛不衰。20年后我们可能不再使用神经网络,但我们那时所使用的工具都是直接来自于现代深度学习及其核心概念。这些重要的性质可大致分为以下三类。

‰ 简单。深度学习不需要特征工程,它将复杂的、不稳定的、工程量很大的流程替换为简单的、端到端的可训练模型,这些模型通常只用到五六种不同的张量运算。
‰ 可扩展。深度学习非常适合在GPU或TPU上并行计算,因此可以充分利用摩尔定律。此外,深度学习模型通过对小批量数据进行迭代来训练,因此可以在任意大小的数据集上进行训练。(唯一的瓶颈是可用的并行计算能力,而由于摩尔定律,这一限制会越来越小。)
‰ 多功能与可复用。与之前的许多机器学习方法不同,深度学习模型无须从头开始就可以在附加数据上进行训练,因此可用于连续在线学习,这对于大型生产模型而言是非常重要的特性。此外,训练好的深度学习模型可用于其他用途,因此是可以重复使用的。举个例子,可以将一个对图像分类进行训练的深度学习模型应用于视频处理流程。这样我们可以将以前的工作重新投入到日益复杂和强大的模型中。这也使得深度学习可以适用于较小的数据集。
深度学习数年来一直备受关注,我们还没有发现其能力的界限。每过一个月,我们都会学到新的用例和工程改进,从而突破先前的局限。在一次科学革命之后,科学发展的速度通常会遵循一条S形曲线:首先是一个快速发展时期,接着随着研究人员受到严重限制而逐渐稳定下来,然后进一步的改进又逐渐增多。深度学习在2017年似乎处于这条S形曲线的前半部分,在未来几年将会取得更多进展。

希望对你有所帮助,后续会更新机器学习项目整理!!!

三万字<java基础到就业>springmvc必读(建议收藏)

有粉丝朋友去培训机构了,花了两三万,结果了?也没学多少东西。好多培训机构都在盗我的项目,可惜我时间有限,没时间追究他们。其实培训机构的东西就那样,谈不上不好,只是多个学习的氛围... 查看详情

三万字<java基础到就业>springmvc必读(建议收藏)

有粉丝朋友去培训机构了,花了两三万,结果了?也没学多少东西。好多培训机构都在盗我的项目,可惜我时间有限,没时间追究他们。其实培训机构的东西就那样,谈不上不好,只是多个学习的氛围... 查看详情

游戏开发宝藏unity学习路线,三万字大纲,从基础到大神(面试题大纲|知识图谱|unity游戏开发工程师)(代码片段)

一、前言嗨,大家好,我是新发。有不少同学私信和评论让我讲讲Unity的学习顺序,说不知道怎么系统地去学,遇到很多问题不知道如何去处理。嗯,那我就根据我自己的成长过程,写一下Unity的学习路线... 查看详情

游戏开发宝藏unity学习路线,三万字大纲,从基础到大神(面试题大纲|知识图谱|unity游戏开发工程师)(代码片段)

一、前言嗨,大家好,我是新发。有不少同学私信和评论让我讲讲Unity的学习顺序,说不知道怎么系统地去学,遇到很多问题不知道如何去处理。嗯,那我就根据我自己的成长过程,写一下Unity的学习路线... 查看详情

三万字,spark学习笔记

Spark基础Spark特性Spark使用简练优雅的Scala语言编写,基于Scala提供了交互式编程体验,同时提供多种方便易用的API。Spark遵循“一个软件栈满足不同应用场景”的设计理念,逐渐形成了一套完整的生态系统(包括Spar... 查看详情

(☞゚ヮ゚)☞精品c语言整理☜(゚ヮ゚☜)女盆友缠着你让你教她写代码怎么办?安排,三万字博文带你走遍c语言,从此不再害怕编程(代码片段)

大家好,我🏁🏁Aaron,对于学习编程的hxd们都有一个困扰,女朋友想了解你在干嘛却完全不懂代码怎么办,本文整理了C语言入门到进阶全知识点的概述以及基本用法,从此让你和女朋友一起幸福快乐... 查看详情

三万字,spark学习笔记(代码片段)

Spark基础Spark特性Spark使用简练优雅的Scala语言编写,基于Scala提供了交互式编程体验,同时提供多种方便易用的API。Spark遵循“一个软件栈满足不同应用场景”的设计理念,逐渐形成了一套完整的生态系统(包括Spar... 查看详情

三万字!dubbozookeeper学习笔记!秒杀面试官!——双非上岸阿里巴巴系列(代码片段)

东北某不知名双非本科,四面成功上岸阿里巴巴,在这里把自己整理的笔记分享出来,欢迎大家阅读。恰个饭——>《阿里巴巴Java开发手册》,业界普遍遵循的开发规范本博客内容持续维护,如有改进之处&#x... 查看详情

三万字!dubbozookeeper学习笔记!秒杀面试官!——双非上岸阿里巴巴系列(代码片段)

东北某不知名双非本科,四面成功上岸阿里巴巴,在这里把自己整理的笔记分享出来,欢迎大家阅读。恰个饭——>《阿里巴巴Java开发手册》,业界普遍遵循的开发规范本博客内容持续维护,如有改进之处&#x... 查看详情

游戏开发指路unity学习路线,三万字大纲(面试题大纲|知识图谱|unity游戏开发工程师)(代码片段)

文章目录一、前言二、我的大学三、Unity学前1、C#基础1.1、数据类型1.2、变量1.3、常量1.4、运算符1.5、判断1.6、循环1.7、数组1.8、枚举1.9、字符串1.10、命名空间1.11、类1.12、结构体1.13、接口1.14、方法1.15、封装1.16、继承1.17、多... 查看详情

从0开始入门python一个半月的三万字学习笔记汇总!!!(代码片段)

python学习DAY01-DAY04基础操作DAY05-DAY09基本模块常用pip源(1)阿里云http://mirrors.aliyun.com/pypi/simple/(2)豆瓣http://pypi.douban.com/simple/(3)清华大学https://pypi.tuna.tsinghua.e 查看详情

经验分享:适合c++学习的开源项目(基础到进阶实战)

俗话说:万事开头难,学习编程也是一样。在我粉丝学习群里,经常遇到有小伙伴询问编程语言如何入门方面的问题,如:我要学习某一门编程语言,有什么开源项目可以推荐吗?我是某编程语言的新... 查看详情

麦子深度学习之-机器学习算法高级进阶

麦子深度学习之-机器学习算法高级进阶随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教... 查看详情

整理了将近三万字,超硬核bio,nio,aio,netty超越99%io文章(面试题+综合案例+练习题)(代码片段)

Java面试题IO篇所有题目均来自互联网,整合不易希望大家沉下心来,认真学习。一键三连加关注就是对博主最大的支持!菜鸟教程地址:https://www.runoob.com/java/java-files-io.html文章目录Java面试题IO篇前言BIO、NIO、AIO、... 查看详情

熬夜爆肝!c++核心进阶知识点汇总整理万字干货预警建议收藏(代码片段)

...有没有都弄懂了?是否基础入门了?前几天已经整理过C++基础入门知识点,没看过的可以看看喔!熬夜爆肝!C++基础入门大合集【万字干货预警建议收藏】今天继续整 查看详情

学习笔记js进阶语法一dom基础

内容整理自《从0到1Javascript快速上手》下半部分-进阶语法篇 getElementById()和getElementsByTagName()区别:1、 getElementById()获取的是一个元素,而getElementsByTagName()获取的是多个元素,即“类数组”(也成伪数组)... 查看详情

三万字,100题!linux知识汇总!

...学最好的别人,做最好的我们 这篇文章主要介绍了三万字,100题!Linux知识汇总!以及相关的经验技巧,文章约160077字,浏览量243,点赞数7,值得参考!导读:本文整理了最新的Linux面试题... 查看详情

40个web前端实战项目,练完即可就业,从入门到进阶,基础到框架,html_css附视频+源码

当下前端开发可以说是一个比较火的职业,所以学习的人比较多,不管是培训还是自学都是希望通过前端可以找到一份好的工作,但是很多自学的朋友在自学过程中有些盲目,不仅大大降低了学习的效率,而... 查看详情