简要介绍深度学习的发展历史

avatar
阿里巴巴 前端委员会智能化小组 @阿里巴巴

译/ 阿里淘系商家团队 - 革新

本文是技术图书“Deep Learning with Python, Second Edition”的翻译和补充。发布者:François Chollet(Keras作者,Google深度学习工程师)

前言

深度学习已经获得了AI历史上从未有过的公众关注和行业投资水平,但它并不是机器学习的第一种成功形式。平心而论,当今行业中使用的大多数机器学习算法都不是深度学习算法。深度学习并非总是解决问题合适的工具——有时没有足够的数据可用于深度学习,有时可以通过其他算法更好地解决问题。

如果深度学习是您与机器学习的第一次接触,那么您可能会遇到这样的情况,即只有深度学习的锤子,每个机器学习问题都像钉子一样被同一把锤子敲打。不落入此陷阱的唯一方法是熟悉其他方法,并在适当时使用适当的方案。

概率建模

概率建模是统计原理在数据分析中的应用。它是最早的机器学习形式之一,至今仍被广泛使用。此类别中最著名的算法之一是朴素贝叶斯算法。

朴素贝叶斯是一种基于贝叶斯定理的机器学习分类器,它假设输入数据中的特征都是独立的(一个强的或“朴素的”假设,即名称的来源)。这种形式的数据分析早于计算机的出现,并且在第一台计算机制造出来数十年之前就被手工应用(很可能可以追溯到1950年代)。贝叶斯定理和统计学的基础可以追溯到18世纪,而这些都是开始使用朴素贝叶斯分类器所需要的必要组成部分。

一个密切相关的模型是逻辑回归(logistic regression)(简称logreg),有时被认为是现代机器学习的“Hello World”。不要被它的名字所迷惑 —— logreg是一种分类算法,而不是回归算法。就像Naive Bayes一样,logreg在很早之前就已经过时了,但是由于其简单易用的特性,它在今天仍然有着自己的应用价值。通常,数据科学家会尝试对数据集进行此类操作以获得对手头分类任务的初级感知。

早期神经网络

虽然神经网络的现代变体已完全取代了它的早期迭代,但是了解深度学习是如何产生的,会对了解现代神经网络的结构很有帮助。尽管早在1950年就以非正式形式研究了神经网络的核心思想,但真正开始研究这种方法,则要到数十年以后才开始。长期以来,缺少的部分是训练大型神经网络的有效方法。这种情况在1980年代中期发生了变化,当时多个人独立地重新发现了反向传播算法 —— 一种使用梯度下降优化来训练参数化运算链的方法,并开始将其应用于神经网络。

神经网络的第一个成功的实际应用来自贝尔实验室(Bell Labs),1989年Yann LeCun结合了卷积神经网络和反向传播的早期思想,并将其应用于手写数字的分类问题。由此产生的被称为LeNet的网络在1990年代被美国邮政服务用于自动读取邮件信封上的邮政编码。

内核方法

在1990年代,得益于神经网络的初步成功,早期神经网络开始在研究人员中赢得一定的尊重;而在同时,一种新的机器学习方法逐渐成名,并迅速将神经网络推向了被遗忘的领域:内核方法。内核方法是一组分类算法,其中最著名的就是支持向量机(SVM)。 SVM的现代公式是由Vladimir Vapnik和Corinna Cortes在1990年代初期在贝尔实验室开发的,并于1995年发表,尽管较早的线性公式由Vapnik和Alexey Chervonenkis早于1963年发表。

image.png

SVM分两步进行以下工作:
1. 数据被映射到一个新的高维表示形式,其中决策边界可以表示为一个超平面(例如,如果数据是二维的,一个超平面将是一条直线)。
2. 通过尝试使超平面与每个类中最接近的数据点之间的距离最大化,可以计算出一个好的决策边界(分离超平面),这一步骤称为使裕度最大化。这使边界可以很好地推广到训练数据集之外的新样本。

在分类问题变得更简单的情况下,将数据映射到高维表示的技术听起来很不错,但在实践中,通常在计算消耗上很棘手。这就是内核技巧的来源(这也是为什么以内核方法命名的关键点)。要点是:要在新的表示空间中找到良好的决策超平面,您不必显式计算新空间中的点的坐标;您只需要计算该空间中成对的点之间的距离,就可以使用内核函数有效地完成。内核函数是一种轻量化的运算,它将初始空间中的任意两个点映射到目标表示空间中这些点之间的距离,从而完全绕开了新表示的显式计算。内核功能通常是手工制作的,而不是从数据中学习的。例如,在SVM的情况下,仅分离超平面这一项是通过学习得到的。

在它们被开发时,SVM在简单的分类问题上表现出了最先进的性能,并且是由广泛的理论支持并能进行认真的数学分析的为数不多的机器学习方法之一,使其易于理解和易于理解。由于这些有用的特性,SVM在很长一段时间内在该领域变得非常流行。

但是事实证明,SVM很难扩展到大型数据集,并且在诸如图像分类之类的感知问题上并未提供良好的结果。由于SVM是一种浅层方法,因此将SVM应用于感知问题需要首先手动提取有用的表示(称为特征工程的步骤),这既困难又脆弱。例如,如果您想使用SVM对手写数字进行分类,则不能从原始像素开始,您应该首先手动找到使问题更容易解决的有用表示法,例如像素直方图。但是,这种提取过程本身就有很高的成本。

决策树,随机森林和梯度增强机

决策树是类似于流程图的结构,可让您对输入数据点进行分类或预测给定输入的输出值。它们很容易可视化和解释。从数据中学到的决策树在2000年代开始受到广泛的研究兴趣,到了2010年,它们通常比内核方法更受青睐。

image.png

特别是,随机森林算法引入了一种强大的,实用的决策树学习方法,该方法涉及构建大量专门的决策树,然后将其输出进行汇总。随机森林适用于各种各样的问题-您可以说,对于任何浅层机器学习任务,随机森林几乎总是第二好的算法。当流行的机器学习竞赛网站Kaggle(kaggle.com)于2010年启动时,随机森林迅速成为该平台上的最受欢迎算法——直到2014年,梯度增强机开始接手。梯度增强机非常类似于随机森林,是一种基于集成弱预测模型(通常是决策树)的机器学习技术。它使用梯度提升,这是一种通过迭代训练专门解决先前模型的弱点的新模型来改善任何机器学习模型的方法。应用于决策树时,使用梯度增强技术可以使模型在大多数情况下严格胜过随机森林,同时具有相似的属性。它可能是当今处理非感知数据的最好的算法之一。除深度学习外,它是Kaggle比赛中最常用的技术之一。

回到神经网络

2010年前后,尽管整个科学界几乎都完全避开了神经网络,但仍在研究神经网络的许多人开始取得重要突破:多伦多大学的Geoffrey Hinton组,蒙特利尔大学的Yoshua Bengio组,纽约大学的Yann LeCun和瑞士的IDSIA。

2011年,来自IDSIA的Dan Ciresan开始通过GPU训练的深度神经网络赢得学术图像分类竞赛,这是现代深度学习的首次实践成功。但转折点出现在2012年,Hinton小组参加了每年一次的大规模图像分类挑战赛ImageNet(简称ImageNet大规模视觉识别挑战赛,简称ILSVRC)。当时,ImageNet的挑战非常困难,包括在对140万张图像进行训练后,将高分辨率彩色图像分为1,000种不同的类别。 2011年,基于经典的计算机视觉方法,获胜模型的前五名准确性仅为74.3%。然后,在2012年,由Alex Krizhevsky领导并在Geoffrey Hinton的建议下完成的团队实现了83.6%的前五名准确性,这是一个重大突破。此后,每年的竞争都由深度卷积神经网络主导。到2015年,获胜者的准确率达到96.4%,ImageNet上的分类任务被认为是一个完全解决的问题。

自2012年以来,深度卷积神经网络(convnet)已成为所有计算机视觉任务的首选算法;更一般而言,他们适用于所有感知类任务。在2015年之后的任何大型计算机视觉会议上,几乎不可能找到不涉及某种形式的卷积网络的演示。同时,深度学习还发现了许多其他类型的问题的应用,例如自然语言处理。它已在各种应用中完全取代了SVM和决策树。例如,多年来,欧洲核子研究组织欧洲核研究组织使用基于决策树的方法来分析大型强子对撞机(LHC)的ATLAS探测器的粒子数据。但由于CERN的更高性能和易于在大型数据集上进行训练的能力,最终将其转换为基于Keras的深度神经网络。

是什么使深度学习与众不同

深度学习之所以迅速发展,其主要原因是它在许多问题上提供了更好的性能。但这不是唯一的原因。深度学习还使解决问题变得更加容易,因为它可以完全自动化机器学习工作流程中最关键的步骤:特征工程。

先前的机器学习技术(浅层学习)通常仅通过简单的转换(例如高维非线性投影(SVM)或决策树)将输入数据转换为一个或两个连续的表示空间。但是,通常无法通过此类技术获得复杂问题所需的精确表示。因此,人类必须竭尽全力使初始输入数据更适合通过这些方法进行处理:他们必须手动为数据设计良好的表示层。这称为特征工程。深度学习则完全自动化了这一步骤:通过深度学习,您可以一次学习所有功能,而不必自己进行设计。这极大地简化了机器学习工作流程,通常用一个简单,端到端的深度学习模型替换复杂的多级管道。

您可能会问,如果问题的症结在于要有多个连续的表示层,是否可以重复应用浅层方法来模仿深度学习的效果?在实践中,浅层学习方法的连续应用回报迅速减少,因为三层模型中的最佳第一表示层不是一层或两层模型中的最佳第一层。深度学习具有革命性的意义在于,它允许模型同时学习所有表示层,而不必连续学习。通过联合特征学习,每当模型调整其内部特征之一时,依赖于该模型的所有其他特征都会自动适应更改,而无需人工干预。一切都由一个反馈信号进行监控:模型中的每一个变化都为最终目标服务。这比贪婪地堆叠浅层模型要强大得多,因为它允许将复杂的抽象表示分解为较长的一系列中间空间(层)来学习。每个空间仅是对前一个空间的简单转换。

这是深度学习如何从数据中学习的两个基本特征:逐步、逐层地开发越来越复杂的表示形式,以及联合学习这些中间增量表示层,每一层都进行更新以同时遵循上一层的代表性需求和下一层的需求。总之,这两个特性使深度学习比以前的机器学习方法更加成功。

现代机器学习鸟瞰

了解机器学习算法和工具的当前状况的一个好方法是查看Kaggle上的机器学习竞赛。由于竞争激烈的环境(有些比赛有成千上万的参赛者和数百万美元的奖金),并且涉及到各种各样的机器学习问题,故而Kaggle提供了一种现实的方法来评估什么有效和什么无效。那么,哪种算法可以可靠地赢得比赛呢?最佳团队使用哪些工具?

在2019年初,Kaggle进行了一项调查,询问自2017年以来在所有竞赛中名列前五名的团队:他们在竞赛中使用了哪种主要软件工具。事实证明,成绩优异的团队倾向于使用深度学习方法(最经常通过Keras库)或梯度增强树(最经常通过LightGBM或XGBoost库)。

image.png

也不仅仅是比赛。 Kaggle还对全球的机器学习和数据科学专业人员进行了年度调查。这项调查有成千上万的受访者,是我们了解行业状况的最可靠来源之一。

image.png

从2016年到2020年,整个机器学习和数据科学行业一直被这两种方法所主导:深度学习和梯度增强树。具体来说,梯度提升树用于结构化数据可用的问题,而深度学习用于感知问题(例如图像分类)。

梯度增强树的用户倾向于使用Scikit-Learn,XGBoost或LightGBM。同时,大多数深度学习的从业者经常将Keras与父级框架TensorFlow结合使用。这些工具的共同点是它们都是Python库:Python是迄今为止机器学习和数据科学中使用最广泛的语言。

为了成功地在现在的项目中应用机器学习,您应该熟悉这两种技术:梯度增强树,用于浅层学习问题;和深度学习,以解决感性问题。从技术上讲,这意味着您需要熟悉Scikit-Learn,XGBoost和Keras(目前在Kaggle竞赛中占主导地位的三个库)。

引用

以上内容来自未正式出版的《Deep Learning with Python - François Chollet》

未来

如果有同学喜欢这个系列,请点赞并支持。如果需求明显,会在未来更新系列文章,帮助大家一起享受机器学习。