深度学习:简单而有局限性的求解方式
作者:Francois Chollet 2017-07-25 11:22:06
移动开发
机器学习 在人工智能,特别是深度学习破解了一个又一个难题,在很多任务上达到超过人类认知水平的今天,我们距离真正的人工智能仍很遥远。本文摘自作者出版的新书《Deep Learning with Python》第九章第二节,其中简要介绍了深度学习的原理、强大能力、以及无处不在的局限性。
深度学习:几何视角
关于深度学习最令人吃惊的事实莫过于它的简单程度。10 年前,没人想到我们会使用简单的梯度下降参数模型在机器认知领域取得如此卓越的成绩。现在,只需要在足够多的样本上用梯度下降方法训练出足够大的参数模型即可。正如费曼曾经说的:「宇宙并不复杂,它只是由若干个宇宙组成而已。」
在深度学习领域,一切都只是向量,即一切都是几何空间中的点。模型输入(可以是文本、图像等)和目标都要首先进行向量化,即转换成原始输入向量空间和目标向量空间。深度学习模型的每一层对其中的数据进行简单的几何变换。多个层就形成一个非常复杂的几何变换,可以被拆解成多个简单的几何变换。这一复杂的几何变换尝试在输入空间和目标空间之间建立映射关系,一次对应一个点。该变换通过各层的权重被参数化,并根据该模型当前的运行状况迭代更新。该几何变换的关键特征是它必须可微,以使我们能够通过梯度下降学习它的参数。直观来看,这意味着从输入到输出的几何变形必须持续连贯,这也是一个很大的约束。
将该几何变换应用到输入数据中的整个过程可以通过想象人抚平纸球实现 3D 可视化:弄皱的纸球代表模型开始时的大量输入数据,人在纸球上的每一个动作相当于每一层做出的简单的几何变换。全部的抚平动作就是整个模型的复杂几何变换。深度学习模型就是抚平复杂大量的高维数据的数学机器。
这就是深度学习的魔力:将意义转换成向量和几何空间,然后逐渐学习复杂的几何变换,把一个空间与另一个空间建立映射关系。你只需要足够高维的空间来获取原始数据中所有关系。
深度学习的局限
这一简单策略可以应用的空间近乎无限。但是,更多的应用完全无法使用当前的深度学习技术,即使拥有海量人工标注数据。例如,你可以收集一个数据集,包含几十万甚至几百万软件特征英文说明和工程师团队为满足这些要求开发的对应源代码。但即使有了这些数据,你仍然无法训练一个深度学习模型,使之读取产品说明之后即可输出对应的代码库。这只是无数例子中的一个。一般来说,要求推理的所有事物,如编程、应用科学方法进行长期规划,以及与算法类似的数据操作,都不适合使用深度学习模型,不管你有多少数据。即使是用深度神经网络学习排序算法也非常困难。
这是因为深度学习模型「只是」一串简单、持续、将一个向量空间映射到另一个向量空间的几何变换。假设从 X 到 Y 的转换是持续且可学习的,X:Y 的大量样本可用作训练数据,那么该几何变换只能将一个数据流形 X 映射到另一个数据流形 Y。因此,即使一个深度学习模型可以被理解为一种程序(反过来大部分程序不能说是深度学习模型),对于大多数任务而言,要么没有合适规模的深度神经网络,要么即使有,该网络也是不可学习的,即对应的几何变换可能过于复杂,或无法获取合适的数据来学习该网络。
通过叠加更多层、使用更多训练数据来提升当前的深度学习技术治标不治本,无法解决深度学习模型的一个更基本的问题,即深度学习模型能够表示的范围非常局限,多数你希望可以学习的程序都不能被表达为对数据流形持续的几何变形。
机器学习模型拟人化的风险
当前 AI 发展中一个非常真实的风险是对深度学习模型的误解和对其能力的高估。人类思想的基本特征是「心智理论」(theory of mind),即我们能够理解周围人意图、信仰和知识的能力。在石头上画笑脸立刻就可以让我们的大脑觉得「快乐」。如果将其引申到深度学习领域,这意味着当我们成功地训练出一个给图片添加说明的模型,我们倾向于相信该模型「理解」图片内容和它生成的内容。之后,当输入的图片与训练数据中的图片类型稍有不同,我们将惊讶地发现该模型输出的图片说明非常离谱。
这种情况在使用对抗实例时尤甚。对抗实例指设计出用来混淆深度学习网络的输入实例。你已经意识到,在输入空间进行梯度下降有可能生成使 convnet 筛选器活性最大化的输入样本。类似地,通过梯度下降,你可以稍微修改图像以使对给定类别的分类预测最大化。给熊猫拍一张照片,并添加梯度「长臂猿」,然后我们就可以得到一个把这只熊猫当作长臂猿的神经网络。这说明了模型的脆弱性,以及模型运行的输入-输出映射和人类的认知存在巨大不同。
简而言之,深度学习模型完全不理解输入样本,至少不具备人类的认知能力。我们对图像、声音和语言的理解来自于我们作为人类的感觉动作经验(sensorimotor experience)。机器学习模型无法获取此类经验,因此无法以人类的方式「理解」输入样本。标注大量训练实例并输入到模型中,模型将学会把数据映射到人类对该特定样本集的概念的几何变换,但是该映射只是对我们头脑中原始模型过分简单化的表达,是从我们的经验中开发出来的具身智能体,像真人在镜子里面模糊的影子。
作为一名机器学习实践者,我经常提醒自己不要跌进神经网络理解其所执行任务的陷阱。它们不能理解,至少理解的方式与人类不同。它们训练的基础与我们想要教给它们的任务不同,且更加狭窄:将训练中的输入样本点对点地映射到目标样本。一旦给它们任何与训练数据不同的数据,它们就会输出荒谬的结果。
局部泛化 VS 极端泛化
深度学习模型中从输入到输出的直接几何变形与人类的思考和学习方式存在根本区别。这种区别不在于人类通过具身化的经验自学,而非经过明确的训练样本的训练而习得。除了不同的学习流程以外,二者的底层表示也存在本质区别。
人类的能力远远不止将直接刺激映射到直接反应,像深度网络或一只昆虫做到的那样。人类对自己或他人的当前处境有一个复杂、抽象的模型,这些模型可用于预测未来不同的可能性并执行长期规划。他们能够整合已知概念,来呈现他们从未体验过的事情,比如画一匹穿着牛仔的马,或者想象中彩票后的行为。这种处理假设的能力将我们的心理模型空间扩展到远超我们可以直接体验的范畴,也就是说,抽象化和推理可以说是人类认知的定义性特征。我将其称为「极端泛化」:一种使用非常少的数据甚至不使用数据来适应全新的、之前从未体验过的情形的能力。
这与深度神经网络的模式存在巨大不同,后者我称之为「局部泛化」:一旦新的输入与模型训练时遇到的数据稍有不同,深度网络执行的从输入到输出的映射很快就会停止。比如,学习合适的发射参数使火箭顺利登月。如果你使用深度网络应对该任务,那么不管使用监督学习还是强化学习来训练,你仍然需要进行数千次甚至几百万次发射试验,即你需要给模型的输入空间提供大量样本,来学习可靠的输入空间与输出空间的映射。与之相反的是,人类能够使用自己抽象能力创造物理模型——火箭科学,经过一次或几次试验之后即可获得精确解。类似地,如果你开发一个深度网络来控制人类身体,想让它学会在不撞车的情况下安全穿过城市,那么该网络在推断出车辆很危险并培养出合适的躲避行为之前,会死无数次。当它进入一个新城市时,它必须重新学习它已经了解的大部分数据。然而,人类能够在一次都不死的情况下学习安全行为,同样地,这多亏了他们对假设情形的抽象建模能力。
总之,尽管我们在机器认知领域取得很大进步,但是人类水准的 AI 离我们仍然非常遥远:我们的模型只能执行局部泛化,适应与以往数据非常接近的新情形,而人类认知能够进行极端泛化,快速适应全新情况,或者对很久以后的事情进行规划。
结语
你应该记住:深度学习目前唯一真正的成功是具备在拥有大量人类标注数据的情况下,使用持续的几何变换在 X 空间与 Y 空间之间建立映射的能力。把这件事做好就可以从根本上变革每个行业,但是我们离人类水准的 AI 仍有很大距离。
要想解决这些局限,使 AI 可以与人类大脑竞争,我们需要将目光从直接的输入-输出映射上移开,去关注推理和抽象。适合多种情况和概念的抽象建模基质可能就是计算机程序的抽象建模能力。我们之前说过机器学习模型是「会学习的程序」;现在我们所了解的程序仅是所有程序的非常狭窄的特定子集。但是,如果我们能够用一种模块化和可重用的方式学习任何程序,又会怎么样呢?这或许就是未来 AI 的发展方向。