深度学习与浅数据——数据能表示的问题 vs. 我们要解决的任务
2019年04月10日 由 sunlei 发表
407587
0
如今,许多人对深度学习着迷,因为它在许多领域,尤其是计算机视觉领域,提供了新的功能。然而,深度学习是一个黑匣子,大多数人都不知道它们是如何工作的(坦白地说,我们大多数在这个领域受过训练的科学家也不能确切地说出它们是如何工作的)。但深度学习的成功及其一系列令人惊讶的失败模式,给我们上了关于我们处理的数据的宝贵一课。
在这篇文章中,我将展示一个关于深度学习的视角,它是如何与经典的计算机视觉相联系的(它还远未消亡),以及在关键应用中依赖DL的潜在危险是什么。
视觉问题
首先,关于视觉/计算机视觉的问题,需要说一些事情。原则上可以这样表述:给定一张来自相机的图像,计算机可以回答关于该图像内容的问题。这些问题可以从“图像中有三角形吗”、“图像中有人脸吗”到更复杂的问题,例如“图像中有狗在追猫吗”。虽然这些问题中的许多看起来很相似,而且几乎所有的问题都是人类所能回答的琐碎问题,但事实证明,这些问题所描述的问题的复杂性存在巨大的差异。虽然回答“图像中是否有红圈”或“图像中有多少亮点”等问题相对容易,但其他看似简单的问题,如“图像中是否有猫”,可能更复杂。顺便说一下,我更认真地说。“简单”视觉问题和“复杂”视觉问题之间的分离似乎是无穷无尽的。
这一点很重要,因为对于人类——高度视觉化的动物来说——到目前为止我所说的几乎所有问题都是微不足道的。即使对孩子们来说,简单地陈述视觉问题也不难,即使是在深度的学习革命中,这些问题目前根本没有解决方案。
传统计算机视觉
传统的计算机视觉是一个广泛的算法集合,它允许从图像中提取信息(通常表示为像素值的数组)。有很多方法用于各种应用,如去噪,增强和检测各种对象。一些方法的目的是寻找简单的几何原语,如边缘检测,然后进行形态学分析,霍夫变换,斑点检测,角点检测,各种图像阈值化技术等。还有一些特征表示技术和变换,如方向梯度直方图、哈尔级联等,可以作为机器学习分类器的前端来构建更复杂的检测器。
与人们普遍的看法相反,上面讨论的工具结合在一起可以形成针对特定对象的非常强大和有效的检测器。我们可以构造一个人脸检测器,一个汽车检测器,一个路标检测器,它们很可能在精确度和计算复杂度上都优于这些特定对象的深度学习解决方案。但问题是,每个检测器都需要由有能力的人从头开始构建,这是低效、昂贵且不可扩展的。
因此,历史上那些伟大的探测器只适用于那些必须经常被检测到并且能够证明前期投资是合理的东西。这些探测器中有许多是专有的,不向公众开放。比如很棒的人脸检测器,车牌识别器等等。但是,没有一个头脑正常的人会花钱编写一个狗狗检测器或分类器,可以从图像中对狗的品种进行分类。这样做既昂贵又不切实际。这就是深度学习的用武之地。
一个学者的故事
假设您正在进行一节计算机视觉课程。在前几节课中,你要复习大量的技巧(如上面讨论的那些),然后剩下的时间留给学生做项目。这些项目表示为图像和任务的数据集(如上面类似的问题)。这些任务从简单的开始,比如问图像中是圆还是方形,一直到更复杂的任务,比如区分猫和狗。学生们每周编写计算机程序来解决下一个任务。您将检查代码并在一些示例上运行它,以查看它们的性能如何。
这学期有个新同学加入了你们班。他不怎么说话,也不爱社交。他从不问问题。当他提交他的第一个解决方案时,你有点困惑。它是一堆真正不可读的代码,与您所见过的任何代码都不一样。看起来他是在用一些随机的过滤器对每幅图像进行卷积,然后用一些非常奇怪的逻辑来得到最终的答案。在示例上运行这段代码,效果非常好。你对自己说:这当然是一个解决问题却不寻常的方法,但只要它有效,它就是好的。
几周过去了,更复杂的任务被分配出去了,你从这个家伙那里得到了越来越复杂的代码。你无法真正理解其中的任何内容,但它甚至在一些复杂的任务中也能很好地工作。
学期快结束的时候,老师会给学生们布置一项期末作业——用一组真实的图片来区分猫和狗。没有一个学生能在这个任务上准确率超过65%的,但是这个新学生给出了代码,并且它的性能提高了95%。你都吃了一惊。
此时,您将在接下来的几天中深入分析这些不可读的代码。你给它新的样本、你修改样本,试着找出影响程序决策的因素,对其进行逆向工程。最后,您会得到一个非常令人惊讶的结论:代码检测狗牌。如果它能够检测到一个标记(这是一个简单的银色椭球体),那么它就可以判断图像的下部是否是棕色的。如果是,则返回“cat”,否则返回“dog”。如果不能检测到标签,那么它将检查图像的左侧是否比右侧更黄。如果是,则返回“dog”,否则返回“cat”。你邀请学生到你的办公室,把你的研究结果呈给他。你问他是否认为他真的解决了问题?在长时间的沉默之后,他终于喃喃自语道,他解决了数据集显示的任务,他并不知道狗长什么样,也不知道它和猫有什么不同……
他作弊了吗?是的,很明显他正在解决的任务和你想要的任务没有任何关系。不,因为正如您通过数据集声明的任务,解决方案是有效的。其他学生的表现都不怎么样。然而,他们试图通过问题来解决任务,而不是通过原始数据集。他们的程序运行得并不好,但也没有犯奇怪的错误。当你把一个标签的图片粘贴到一张猫的照片上时,你可以很容易地让它发现一只狗。其他同学的程序不能被这个愚弄,但也不能对给出的数据处理得那么好。
深度学习的福与祸
深度学习是一种技术,它使用一种称为梯度反向传播的优化技术来生成“程序”(也称为“神经网络”),就像上面故事中学者学生编写的那些程序一样。这些“程序”和优化技术对世界一无所知,它所关心的只是构建一组转换和条件,这些转换和条件将为数据集中正确的图像分配正确的标签。如果有一些简便的技巧可用(比如数据集中所有狗的图片左上角都有蓝色色调),它会毫不犹豫地(按设计)使用它。
通过向训练集添加更多的数据,可以消除这些虚假的偏差,但是反向传播生成的“程序”可能非常大,非常复杂,有数百万个参数和数千个条件检查,因此它们可以锁定更细微偏差的组合。任何允许分配正确标签来统计优化目标函数的方法都可以,不管是否与任务的“语义精神”有关。
这些网络最终能抓住“语义正确”的先验吗?肯定是的。但是现在有大量的证据表明这并不是他们真正做的。相反的例子表明,对图像进行非常微小的、无法察觉的修改就可以完全摆脱结果。对类似于以前训练过的数据集的新样本的研究表明,原始数据集之外的泛化要比数据集内的泛化弱得多,因此表明网络所依赖的给定数据集具有特定的低层特性。在某些情况下,修改单个像素就足以抛出一个深度网络分类器。
在某种程度上,深度学习最大的优势——自动创建没有人会想到的特性的能力——同时也是它最大的弱点,因为至少可以说,这些特性中的大多数在语义上看起来“值得怀疑”。
什么时候有意义,什么时候没有意义?
深度学习对于计算机视觉工具箱来说无疑是一个有趣的补充。我们现在可以相对容易地“训练”探测器来探测那些昂贵且不切实际的物体。我们还可以在一定程度上扩展这些检测器,以使用更多的计算能力。但我们为之付出的代价是高昂的:我们不知道他们是如何做出决定的,而且我们也知道,分类的基础很可能与任务的“语义精神”无关。因此,只要输入数据违反训练集中的低水平偏差,检测器就会意外地失败。这些失效条件实际上是无法描述的。
因此,在实践中,深度学习对于那些错误不是很严重,并且保证输入不会与训练数据集有很大差异的应用程序非常有用。95%的性能就足够了。这包括图像搜索、监视、自动化零售(这是我在过去几个月一直在做的事情),以及几乎所有不是“关键任务”的东西,都可以在以后进行检查和纠正。具有讽刺意味的是,大多数人认为深度学习革命在应用程序空间实时决策,错误至关重要,导致致命的结果,如自动驾驶汽车,自主机器人(例如,最近的研究表明,基于深层神经网络的自主驾驶解决方案确实是容易受到对抗性攻击]。我只能把这种想法描述为一种“不幸的”误解。
一些人对深度学习在医学和诊断中的应用寄予厚望。然而,在这方面也有一些令人担忧的发现,例如,针对一个机构数据的模型未能很好地验证另一个机构数据。这再次印证了一种观点,即这些模型获取的数据要比许多研究人员所希望的要少得多。
数据比我们想象的要浅
令人惊讶的是,深度学习教会了我们一些关于视觉数据(通常是高维数据)非常有趣的东西:在某种程度上,它比我们过去认为的要“浅”得多。似乎有更多的方法来统计上分离标有高级人类类别的可视化数据集,而不是分离“语义正确”的此类数据集。换句话说,这组低水平的图像特征比我们想象的更具“统计意义”。这是深度学习的伟大发现。如何生成能够找到“语义上合理”的方法来分离可视数据集的模型的问题仍然是开放的,事实上,现在似乎比以前更难回答。
结论
深度学习已经成为计算机视觉工具箱的重要组成部分。但是传统的计算机视觉并没有走到那一步,仍然可以用来建造非常强大的探测器。这些手工制作的检测器在某些特定的数据集度量上可能无法达到如此高的性能,但是可以保证依赖于输入的“语义相关”特性集。因此,可以更好地描述和预测它们的破坏模式。深度学习提供了统计功能强大的检测器,而不需要花费功能工程的费用,不过仍然需要有大量的标记数据、大量的GPU和现场的深度学习专家。然而,这些强大的检测器将会意外地失败,它们的适用范围无法轻易地描述(或者更确切地说,根本无法描述)。在可以接受罕见但灾难性故障的应用程序中,深度学习可以很好地工作。对于在给定条件下保证性能加上计算复杂度更为重要的应用程序,经典的机器视觉管道将在未来许多年内使用。
附:关于人工智能的一句话
注意,上面的讨论都与“人工智能”中的AI无关。我对人工智能的看法是,它肯定不会通过“编程特征”或“逻辑推理”来解决,而是通过某种形式的连接主义结构与物理环境交互,并从中“学习”,就像我提出的预测视觉模型那样。我不认为像现在这样的深度学习与解决人工智能有任何关系。但我确实认为,将深度学习、特性工程和逻辑推理结合起来,可以在自动化的广阔领域中实现非常有趣和有用的技术能力。