人工智能python实现-深度学习局限性

9.2 深度学习的局限性
9.2.1 将机器学习模型拟人化的
9.2.2 局部泛化与极端泛化

9.2 深度学习的局限性

对于深度学习可以实现的应用,其可能性空间几乎是无限的。但是,对于当前的深度学习技术,许多应用是完全无法实现的,即使拥有大量人工标注的数据也无法实现。比如说,你可以收集一个数据集,其中包含数十万条(甚至上百万条)由产品经理编写的软件产品功能的英文说明,还包含由一个工程师团队开发的满足这些要求的相应源代码。即使有了这些数据,你也无法训练一个读取产品说明就能生成相应代码库的深度学习模型。这只是众多例子中的一个。一般来说,任何需要推理(比如编程或科学方法的应用)、长期规划和算法数据处理的东西,无论投入多少数据,深度学习模型都无法实现。即使是排序算法,用深度神经网络来学习也是非常困难的。

这是因为深度学习模型只是将一个向量空间映射到另一个向量空间的简单而又连续的几何变换链。它能做的只是将一个数据流形  X映射到另一个流形  Y,前提是从 X到  Y存在可学习的连续变换。深度学习模型可以被看作一种程序,但反过来说,大多数程序都不能被表示为深度学习模型。对于大多数任务而言,要么不存在相应的深度神经网络能够解决任务,要么即使存在这样的网络,它也可能是不可学习的(learnable)。后一种情况的原因可能是相应的几何变换过于复杂,也可能是没有合适的数据用于学习。

通过堆叠更多的层并使用更多训练数据来扩展当前的深度学习技术,只能在表面上缓解一些问题,无法解决更根本的问题,比如深度学习模型可以表示的内容非常有限,比如大多数你想要学习的程序都不能被表示为数据流形的连续几何变形。

9.2.1 将机器学习模型拟人化的风险

当代人工智能有一个实实在在的风险,那就是人们误解了深度学习模型的作用,并高估了它们的能力。人类的一个基本特征就是我们的心智理论:我们倾向于将意图、信念和知识投射到身边的事物上。在石头上画一个笑脸,石头就突然变得“快乐”了——在我们的意识中。将人类的这个特征应用于深度学习,举个例子,如果我们能够大致成功训练一个模型来生成描述图像的说明文字,我们就会相信这个模型能够“理解”图像内容和它生成的说明文字。然后,如果某张图像与训练数据中的那一类图像略有不同,并导致模型生成非常荒谬的说明文字,我们就会感到很惊讶(见图 9-1)。

图 9-1 基于深度学习的图像描述系统的失败案例

对抗样本尤其能够突出说明这一点。对抗样本是深度学习网络的输入样本,其目的在于欺骗模型对它们进行错误归类。比如你已经知道,在输入空间中进行梯度上升,可以生成能够让卷积神经网络某个过滤器激活最大化的输入,这正是第  5章介绍的过滤器可视化技术的基本原理,也是第 8章  DeepDream算法的基本原理。与此类似,通过梯度上升,你也可以对图像稍做修改,使其能够将某一类别的类别预测最大化。将长臂猿的梯度添加到一张熊猫照片中,我们可以让神经网络将这个熊猫归类为长臂猿(见图  9-2)。这既表明了这些模型的脆弱性,也表明这些模型从输入到输出的映射与人类感知之间的深刻差异。

图 9-2 一个对抗样本:图像中难以察觉的变化可能会完全改变模型对图像的分类

简而言之,深度学习模型并不理解它们的输入,至少不是人类所说的理解。我们自己对图像、声音和语言的理解是基于我们作为人类的感觉运动体验。机器学习模型无法获得这些体验,因此也就无法用与人类相似的方式来理解它们的输入。通过对输入模型的大量训练样本进行标记,我们可以让模型学会一个简单几何变换,这个变换在一组特定样本上将数据映射到人类概念,但这种映射只是我们头脑中原始模型的简化。我们头脑中的原始模型是从我们作为具身主体的体验发展而来的。机器学习模型就像是镜子中的模糊图像(见图 9-3)。

图 9-3 当前的机器学习模型:就像是镜子中的模糊影像

作为机器学习从业者,你一定要始终记住这一点,永远不要陷入这样一个陷阱,即相信神经网络能够理解它们所执行的任务——它们并不理解,至少不是用我们可以理解的方式。我们希望教神经网络学会某项任务,但它们是在一个不同的、更加狭窄的任务上进行训练,这个任务就是将训练输入逐点映射到训练目标。如果向神经网络展示与训练数据不一样的数据,它们可能会给出荒谬的结果。

9.2.2 局部泛化与极端泛化

深度学习模型从输入到输出的简单几何变形与人类思考和学习的方式之间存在根本性的区别。区别不仅在于人类是从具身体验中自我学习,而不是通过观察显式的训练样例来学习。除了学习过程不同,底层表示的性质也存在根本性的区别。

深度网络能够将即时刺激映射到即时反应(昆虫可能也是这样),但人类能做的比这远远更多。对于现状、对于我们自己、对于其他人,我们都使用一个复杂的抽象模型,并可以利用这些模型来预测各种可能的未来并执行长期规划。我们可以将已知的概念融合在一起,来表示之前从未体验过的事物,比如绘制一匹穿着牛仔裤的马,或者想象我们如果中了彩票会做什么。这种处理假想情况的能力,将我们的心智模型空间扩展到远远超出我们能够直接体验的范围,让我们能够进行抽象和推理,这种能力可以说是人类认知的决定性特征。我将其称为极端泛化,即只用很少的数据,甚至没有新数据,就可以适应从未体验过的新情况的能力。

这与深度网络的做法形成了鲜明对比,我将后者称为局部泛化,如图   9-4所示。深度网络执行从输入到输出的映射,如果新的输入与网络训练时所见到的输入稍有不同,这种映射就会立刻变得没有意义。比如,思考这样一个问题,想要学习让火箭登陆月球的正确的发射参数。如果使用深度网络来完成这个任务,并用监督学习或强化学习来训练网络,那么我们需要输入上千次、甚至上百万次发射试验,也就是说,我们需要为它提供输入空间的密集采样,以便它能够学到从输入空间到输出空间的可靠映射。相比之下,我们人类可以利用抽象能力提出物理模型(火箭科学),并且只用一次或几次试验就能得到让火箭登陆月球的精确解决方案。同样,如果你开发一个能够控制人体的深度网络,并且希望它学会在城市里安全行走,不会被汽车撞上,那么这个网络不得不在各种场景中死亡数千次,才能推断出汽车是危险的,并做出适当的躲避行为。将这个网络放到一个新城市,它将不得不重新学习已知的大部分知识。但人类不需要死亡就可以学会安全行为,这也要归功于我们对假想情景进行抽象建模的能力。

图 9-4 局部泛化与极端泛化

总之,尽管我们在机器感知方面取得了进展,但离达到人类水平的人工智能仍然很遥远。我们的模型只能进行局部泛化,只能适应与过去数据类似的新情况,而人类的认知能够进行极端泛化,能够快速适应全新情况并为长期的未来情况做出规划。

9.2.3 小结

我们应该记住以下内容:到目前为止,深度学习唯一的真正成功之处就是,给定大量的人工标注数据,它能够使用连续的几何变换将空间  X映射到空间  Y。做好这一点已经可以引起基本上所有行业的变革,但离达到人类水平的人工智能还有很长的路要走。

想要突破我们这里所讨论的一些局限性,并创造出能够与人类大脑匹敌的人工智能,我们需要抛弃简单的从输入到输出的映射,转而研究推理和抽象。对各种情况和概念进行抽象建模,一个合适的基础可能是计算机程序。我们之前说过,机器学习模型可以被定义为可学习的程序。目前我们能学习的程序只是所有程序一个狭小的特定子集。但如果我们能够以一种模块化的、可重复使用的方式来学习任何程序呢?下一节将会介绍深度学习的未来之路可能是什么样的。

作者:

喜欢围棋和编程。

 
发布于 分类 编程标签

发表评论

邮箱地址不会被公开。