这篇文章改编自我的著作《Python深度学习》(Manning 出版社)第九章第二节。
它是关于深度学习当前局限性及其未来的两篇系列文章的一部分。
这篇文章的目标读者是已经具备丰富深度学习经验的人(例如,已经阅读过本书第 1 章到第 8 章的人)。我们假设读者已经具备大量的先验知识。
深度学习:几何视角
深度学习最令人惊讶的地方在于它的简单性。十年前,没有人预料到我们能够通过使用简单的参数化模型并使用梯度下降进行训练,在机器感知问题上取得如此惊人的成果。现在,事实证明,你所需要的只是用梯度下降法在足够多的样本上训练足够大的参数化模型。正如费曼曾经谈到宇宙时所说的那样,“它并不复杂,它只是数量巨大”。
在深度学习中,一切都是向量,也就是说,一切都是几何空间中的一个点。模型输入(可以是文本、图像等)和目标首先被“向量化”,即转换为初始输入向量空间和目标向量空间。深度学习模型中的每一层都对经过它的数据进行一个简单的几何变换。模型的层链共同构成一个非常复杂的几何变换,分解成一系列简单的变换。这种复杂的变换试图将输入空间映射到目标空间,一次一个点。这种变换由层的权重参数化,这些权重根据模型当前的性能进行迭代更新。这种几何变换的一个关键特征是它必须是可微的,这是我们能够通过梯度下降学习其参数的必要条件。直观地说,这意味着从输入到输出的几何变形必须是平滑和连续的,这是一个重要的约束。
将这种复杂的几何变换应用于输入数据的整个过程可以在三维空间中可视化,想象一个人试图展开一个纸团:揉皱的纸团是模型开始处理的输入数据的流形。人对纸团进行的每一次移动都类似于一层进行的一次简单的几何变换。整个展开手势序列就是整个模型的复杂变换。深度学习模型是用于展开高维数据复杂流形的数学机器。
这就是深度学习的魔力:将意义转化为向量,转化为几何空间,然后逐步学习将一个空间映射到另一个空间的复杂几何变换。你所需要的只是具有足够高维度的空间,以便捕获原始数据中发现的全部关系范围。
深度学习的局限性
可以用这种简单策略实现的应用空间几乎是无限的。然而,还有更多的应用是当前深度学习技术完全无法实现的,即使有大量的人工标注数据也是如此。例如,假设你可以收集数十万甚至数百万个软件产品功能的英语描述的数据集,这些描述是由产品经理编写的,以及由工程师团队开发的相应源代码以满足这些需求。即使有这些数据,你也不能训练一个深度学习模型,使其简单地读取产品描述并生成相应的代码库。这只是众多例子中的一个。总的来说,任何需要推理的事情(如编程或应用科学方法)、长期规划和类似算法的数据操作,都是深度学习模型无法实现的,无论你向它们提供多少数据。即使是用深度神经网络学习排序算法也是极其困难的。
这是因为深度学习模型“仅仅”是将一个向量空间映射到另一个向量空间的一系列简单、连续的几何变换。它所能做的就是将一个数据流形 X 映射到另一个流形 Y,假设存在一个从 X 到 Y 的可学习的连续变换,并且可以获得 X:Y 的密集采样作为训练数据。因此,即使深度学习模型可以解释为一种程序,但反过来,大多数程序都不能表示为深度学习模型,因为对于大多数任务而言,要么不存在解决该任务的相应大小的深度神经网络,要么即使存在,它也可能不可学习,即相应的几何变换可能过于复杂,或者可能没有适当的数据来学习它。
通过堆叠更多层和使用更多训练数据来扩展当前的深度学习技术只能表面上缓解其中的一些问题。它不能解决更根本的问题,即深度学习模型在它们可以表示的内容方面非常有限,而且人们可能希望学习的大多数程序都不能表示为数据流形的连续几何变形。
将机器学习模型拟人化的风险
当代人工智能的一个非常现实的风险是误解深度学习模型的作用,高估它们的能力。人类思维的一个基本特征是我们的“心理理论”,即我们倾向于将意图、信念和知识投射到周围的事物上。在一块石头上画一张笑脸,突然之间就让它“快乐”起来——在我们的脑海里。应用于深度学习,这意味着当我们能够在某种程度上成功地训练一个模型来生成描述图片的字幕时,我们就会倾向于认为该模型“理解”了图片的内容,以及它生成的字幕。然后,当任何与训练数据中存在的图像类型略有不同的东西导致模型开始生成完全荒谬的字幕时,我们就会感到非常惊讶。
特别是,“对抗性样本”突出了这一点,它们是深度学习网络的输入样本,旨在欺骗模型对它们进行错误分类。你已经知道,可以在输入空间中进行梯度上升,以生成最大化某个卷积网络滤波器激活的输入,例如,这是我们在第 5 章(注:《Python深度学习》)中介绍的滤波器可视化技术的基础,也是第 8 章中介绍的 Deep Dream 算法的基础。同样,通过梯度上升,可以稍微修改图像,以便最大化给定类别的类别预测。通过拍摄一张熊猫的照片并向其中添加一个“长臂猿”梯度,我们可以让神经网络将这只熊猫分类为长臂猿。这证明了这些模型的脆弱性,以及它们执行的输入-输出映射与我们人类感知之间的深刻差异。
简而言之,深度学习模型对它们的输入没有任何理解,至少在任何人类意义上都没有。我们自己对图像、声音和语言的理解,是基于我们作为人类(作为具身的地上生物)的感觉运动经验。机器学习模型无法获得此类经验,因此无法以任何与人类相关的方式“理解”它们的输入。通过注释大量的训练样本并将其输入到我们的模型中,我们让他们学习一个几何变换,将数据映射到这组特定样本上的人类概念,但这种映射只是我们脑海中原始模型的简单草图,是我们作为具身主体从经验中发展出来的模型,它就像一面镜子中模糊的图像。
作为一名机器学习从业者,始终要牢记这一点,永远不要陷入相信神经网络理解它们所执行的任务的陷阱——它们不理解,至少不是以对我们有意义的方式理解。它们接受的训练是在一个与我们想要教给它们的完全不同的、范围狭窄的任务上:仅仅是将训练输入映射到训练目标,逐点进行。向它们展示任何偏离其训练数据的东西,它们就会以最荒谬的方式崩溃。
局部泛化与极限泛化
深度学习模型所做的从输入到输出的直接几何变形,与人类思考和学习的方式之间,似乎存在着根本的差异。这不仅仅是人类通过具身经验自行学习,而不是被呈现出明确的训练样本的事实。除了不同的学习过程之外,底层表征的性质也存在着根本的差异。
人类的能力远远超过了将即时刺激映射到即时反应,就像深度网络或昆虫那样。他们维护着关于自身当前状况、自身、其他人的复杂、抽象模型,并可以使用这些模型来预测不同的未来可能性并进行长期规划。他们能够将已知概念融合在一起,以表示他们以前从未经历过的事物,例如,描绘一匹穿着牛仔裤的马,或者想象如果他们中了彩票会做什么。这种处理假设的能力,将我们的心智模型空间扩展到远远超出我们能够直接体验的范围,一句话,进行抽象和推理的能力,可以说是人类认知的决定性特征。我称之为“极限泛化”:一种适应新颖、从未经历过的情况的能力,使用很少的数据甚至根本不使用新数据。
这与深度网络所做的形成了鲜明的对比,我将其称为“局部泛化”:如果新的输入与其在训练时看到的有任何轻微差异,深度网络执行的从输入到输出的映射就会很快失去意义。例如,考虑学习适当的发射参数以使火箭降落在月球上的问题。如果你要使用深度网络来完成这项任务,无论是使用监督学习还是强化学习进行训练,你都需要向其提供数千甚至数百万次发射试验,也就是说,你需要将其暴露在输入空间的密集采样中,以便学习从输入空间到输出空间的可靠映射。相比之下,人类可以利用他们的抽象能力想出物理模型(火箭科学)并推导出一个精确的解决方案,只需一次或几次试验就能让火箭登上月球。同样,如果你开发了一个控制人体的深度网络,并希望它学会安全地在城市中行走而不会被汽车撞到,那么该网络将不得不在各种情况下死亡数千次,直到它能够推断出汽车和危险,并形成适当的躲避行为。进入一个新的城市,网络将不得不重新学习它所知道的大部分内容。另一方面,人类能够在不必死亡一次的情况下学会安全的行为,这再次要归功于他们对假设情况的抽象建模能力。
简而言之,尽管我们在机器感知方面取得了进展,但我们距离人类水平的人工智能还有很长的路要走:我们的模型只能执行局部泛化,适应必须与过去数据非常接近的新情况,而人类认知能够进行极限泛化,快速适应全新的情况,或对非常长期的未来情况进行规划。
要点
以下是你应该记住的内容:迄今为止,深度学习唯一真正的成功是能够使用连续的几何变换将空间 X 映射到空间 Y,这需要大量的人工标注数据。做好这件事对几乎每个行业来说都是一个改变游戏规则的人,但这距离人类水平的人工智能还有很长的路要走。
为了克服这些限制并开始与人脑竞争,我们需要摆脱简单的输入到输出的映射,转向*推理*和*抽象*。计算机程序可能是对各种情况和概念进行抽象建模的合适基础。我们之前说过(注:在《Python深度学习》一书中),机器学习模型可以定义为“可学习的程序”;目前我们只能学习属于所有可能程序中非常狭窄和特定子集的程序。但是,如果我们能够以模块化和可重用的方式学习*任何*程序呢?让我们在下一篇文章中看看未来的道路会是什么样子。
您可以在此处阅读第二部分:深度学习的未来。
@fchollet,2017年5月