前言
深度学习已经得到了人工智能历史上前所未有的公众关注度和产业投资,但这并不是机器学习的第一次成功。可以这样说,当前工业界所使用的绝大部分机器学习算法都不是深度学习算法。深度学习不一定总是解决问题的正确工具:有时没有足够的数据,深度学习不适用;有时用其他算法可以更好地解决问题。我们简要回顾机器学习方法,并介绍这些方法的历史背景。这样我们可以将深度学习放入机器学习的大背景中,并更好地理解深度学习的起源以及它为什么如此重要。
1.概率模型
概率建模(probabilistic modeling)是统计学原理在数据分析中的应用。它是最早的机器学习形式之一,至今仍在广泛使用。其中最有名的算法之一就是朴素贝叶斯算法。朴素贝叶斯是一类基于应用贝叶斯定理的机器学习分类器,它假设输入数据的特征都是独立的。这是一个很强的假设,或者说“朴素的”假设,其名称正来源于此。这种数据分析方法比计算机出现得还要早,在其第一次被计算机实现(很可能追溯到20 世纪50 年代)的几十年前就已经靠人工计算来应用了。贝叶斯定理和统计学基础可以追溯到18 世纪,你学会了这两点就可以开始使用朴素贝叶斯分类器了。
另一个密切相关的模型是logistic 回归(logistic regression),它有时被认为是现代机器学习的“hello world”。不要被它的名称所误导——逻辑回归是一种分类算法,而不是回归算法。与朴素贝叶斯类似,逻辑回归的出现也比计算机早很长时间,但由于它既简单又通用,至今仍然很有用。面对一个数据集,数据科学家通常会首先尝试使用这个算法,以便初步熟悉手头的分类任务。
2.早期神经网络
神经网络早期的迭代方法已经完全被现代方法所取代,但仍有助于我们了解深度学习的起源。虽然人们早在20 世纪50 年代就将神经网络作为玩具模型,并对其核心思想进行研究,但这一方法在数十年后才被人们所使用。在很长一段时间内,一直没有训练大型神经网络的有效方法。这一点在20 世纪80 年代中期发生了变化,当时很多人都独立地重新发现了反向传播算法——一种利用梯度下降优化来训练一系列参数化运算链的方法(本书后面将给出这些概念的具体定义),并开始将其应用于神经网络。
贝尔实验室于1989 年第一次成功实现了神经网络的实践应用,当时Yann LeCun 将卷积神经网络的早期思想与反向传播算法相结合,并将其应用于手写数字分类问题,由此得到名为LeNet 的网络,在20 世纪90 年代被美国邮政署采用,用于自动读取信封上的邮政编码。
3.核方法
上节所述神经网络取得了第一次成功,并在20 世纪90 年代开始在研究人员中受到一定的重视,但一种新的机器学习方法在这时声名鹊起,很快就使人们将神经网络抛诸脑后。这种方法就是核方法(kernel method)。核方法是一组分类算法,其中最有名的就是支持向量机(SVM)。虽然Vladimir Vapnik 和Alexey Chervonenkis 早在1963 年就发表了较早版本的线性公式,但SVM 的现代公式由Vladimir Vapnik 和Corinna Cortes 于20 世纪90 年代
初在贝尔实验室提出,并发表于1995 年。
SVM 的目标是通过在属于两个不同类别的两组数据点之间找到良好决策边界来解决分类问题。决策边界可以看作一条直线或一个平面,将训练数据划分为两块空间,分别对应于两个类别。对于新数据点的分类,你只需判断它位于决策边界的哪一侧。
SVM 通过两步来寻找决策边界:
(1) 将数据映射到一个新的高维表示,这时决策边界可以用一个超平面来表示。
(2) 尽量让超平面与每个类别最近的数据点之间的距离最大化,从而计算出良好决策边界(分割超平面),这一步叫作间隔最大化。这样决策边界可以很好地推广到训练数据集之外的新样本。
将数据映射到高维表示从而使分类问题简化,这一技巧可能听起来很不错,但在实践中通常是难以计算的。这时就需要用到核技巧(kernel trick,核方法正是因这一核心思想而得名)。其基本思想是:要想在新的表示空间中找到良好的决策超平面,你不需要在新空间中直接计算点的坐标,只需要在新空间中计算点对之间的距离,而利用核函数(kernel function)可以高效地完成这种计算。核函数是一个在计算上能够实现的操作,将原始空间中的任意两点映射为这两点在目标表示空间中的距离,完全避免了对新表示进行直接计算。核函数通常是人为选择的,而不是从数据中学到的——对于SVM 来说,只有分割超平面是通过学习得到的。
SVM 刚刚出现时,在简单的分类问题上表现出了最好的性能。当时只有少数机器学习方法得到大量的理论支持,并且适合用于严肃的数学分析,因而非常易于理解和解释,SVM 就是其中之一。由于SVM 具有这些有用的性质,很长一段时间里它在实践中非常流行。但是,SVM 很难扩展到大型数据集,并且在图像分类等感知问题上的效果也不好。SVM是一种比较浅层的方法,因此要想将其应用于感知问题,首先需要手动提取出有用的表示(这叫作特征工程),这一步骤很难,而且不稳定。
4.决策树,随机森林
决策树(decision tree)是类似于流程图的结构,可以对输入数据点进行分类或根据给定输入来预测输出值。决策树的可视化和解释都很简单。在21 世纪前十年,从数据中学习得到的决策树开始引起研究人员的广泛关注。到了2010 年,决策树经常比核方法更受欢迎。
特别是随机森林(random forest)算法,它引入了一种健壮且实用的决策树学习方法,即首先构建许多决策树,然后将它们的输出集成在一起。随机森林适用于各种各样的问题——对于任何浅层的机器学习任务来说,它几乎总是第二好的算法。广受欢迎的机器学习竞赛网站Kaggle 在2010 年上线后,随机森林迅速成为平台上人们的最爱,直到2014 年才被梯度提升机所取代。与随机森林类似,梯度提升机(gradient boosting machine)也是将弱预测模型(通常是决策树)集成的机器学习技术。它使用了梯度提升方法,通过迭代地训练新模型来专门解决之前模型的弱点,从而改进任何机器学习模型的效果。将梯度提升技术应用于决策树时,得到的模型与随机森林具有相似的性质,但在绝大多数情况下效果都比随机森林要好。它可能是目前处理非感知数据最好的算法之一(如果非要加个“之一”的话)。和深度学习一样,它也是Kaggle 竞赛中最常用的技术之一。
5.回到神经网络
虽然神经网络几乎被整个科学界完全忽略,但仍有一些人在继续研究神经网络,并在2010年左右开始取得重大突破。这些人包括:多伦多大学Geoffrey Hinton 的小组、蒙特利尔大学的Yoshua Bengio、纽约大学的Yann LeCun 和瑞士的IDSIA。
2011 年,来自IDSIA 的Dan Ciresan 开始利用GPU 训练的深度神经网络赢得学术性的图像分类竞赛,这是现代深度学习第一次在实践中获得成功。但真正的转折性时刻出现在2012 年,当年Hinton 小组参加了每年一次的大规模图像分类挑战赛ImageNet。ImageNet 挑战赛在当时以困难著称,参赛者需要对140 万张高分辨率彩色图像进行训练,然后将其划分到1000 个不同的类别中。2011 年,获胜的模型基于经典的计算机视觉方法,其top-5 精度 只有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 的深度神经网络,因为它的性能更好,而且在大型数据集上易于训练。
原文:《python深度学习》弗朗索瓦•肖莱(François Chollet)
·END·