深度学习的天赐和诅咒:最大的优势也是最大的缺陷

2019-04-15 09:14:44 来源:未知
视觉问题中没有纯粹的“简单”和“复杂”

 

首先需要就视觉/计算机视觉做一点说明。原则上可以表述如下:给定一台摄像机拍摄的图像,计算机可以回答关于该图像内容的一些问题。 

 

简单的问题比如“图像中是否存在三角形”,“图像中是否存在人脸”;复杂的问题例如“是否有狗在图像中追逐猫”。这些对人类来说小儿科的问题看似有很多相似的地方,然而事实却证明这些问题的背后的复杂性存在巨大差异。

 

同样是让计算机回答“图中是否有XX”的问题,“图中是否有猫”显然要比“图中是否有红色”更难。你看,试图将视觉问题划分为“简单”或“复杂”将会陷入无止境的深渊。

 

这一点很重要。因为像我们人类这种高度视觉化的动物,以上问题都不是问题。但对计算机深度学习来说,确实非常复杂。

 

传统计算机视觉存在的问题

 

传统的计算机视觉就是使用一套算法,从图片里提取信息(通常表示为像素值数组)。比如去噪、增强和检测的算法,一些方法旨在寻找简单的几何图元,例如边缘检测、形态分析、霍夫变换、斑点检测、角点检测、各种图像阈值处理技术等。还有特征表示技术和变换,如定向梯度的直方图、Haar级联等可以用作机器学习分类器的前端以构建更复杂的检测器。

 

与流行的看法相反,上述工具结合在一起可以组成非常强大有效的特定物体探测器。人们可以构建面部检测器、汽车检测器、路牌检测器,并且它们很可能在精度和计算复杂性方面,优于这些特定对象的深度学习解决方案。 

 

 

 

但问题是,每个探测器都需要由有能力的人员从头开始构建,低效又昂贵,且不可扩展的。

 

因此,李上上那些很厉害的探测器只适用于必须高频场景,还需要证明前期投资的合理性。许多探测器都是专有的,一般公众无法使用。

 

优秀的面部探测器、车牌阅读器很多,但狗探测器却很少。没有一个心智正常的人会投入人力和物力去编写狗探测器或分类器,从图像中分类出一种狗,贵且不切实际。

 

这是传统视觉的死穴,却是深度学习的用武之地。

 

用一个聪明学生的故事来解释深度学习的本质

 

想象一下,你正在教授计算机视觉课程。在开始的几个讲座中,学生了解到丰富的技术(例如上面讨论的技术),接下来就是给学生布置一些任务。

 

先从一些简单的任务开始,例如通过询问图像中是否有圆形或正方形;接下来逐渐提高复杂度。学生每周都要编写计算机程序来解决下一个任务。而你来查看代码,并在某些示例上运行代码来检验效果。

 

这个学期,来了一个新生,他不跟周围人说话,也从不问问题。但当他提交第一个解决方案时,你会发现这是一堆难以理解的代码,跟你以前看到的代码都不同。

 

看起来他正在用一些随机看的过滤器对每个图像进行卷积,然后使用一些非常奇怪的逻辑,许多“if then else”语句具有大量搞不懂的参数来获得最终答案。你在样本上运行此代码,它居然完全正常!你心想,这个方法是在不同寻常难以理解,但管他呢,确实有效啊!

 

几周过去了,任务复杂度在不断提升,你越来越看不懂这个学生的代码,但就算是最复杂的任务,它的效果也令人惊讶。最后一个问题是在一组真实的图像中区分猫和狗。其他学生代码的准确率都没有超过65%,但新学员的代码能够达到95%!太不可思议了。

 

你对代码进行了逆向工程,结果发现他那堆复杂的代码,背后的逻辑其实非常简单:

 

  1. 检测是否有狗牌:如果有返回“狗”;没有返回“猫”

  2. 如果没有狗牌,检测图像的左侧部分是否比右侧部分更黄:如果是返回“狗”;不是返回“猫”

 

 

你把这个学生叫到办公室问他是怎么想的,他表示其实自己也不知道,他根本不明白猫和狗是什么,只知道通过什么方法将二者区分出来。这算作弊吗?从人类的角度来看,是的,他的出发点和你想的完全不同。

 

虽然其他学生使用原始数据集并没有得到特别突出的结果,但也不会出什么奇怪的错误。相比而言,新学生的方式虽然在使用当前数据集的时候,效果卓著,然而一旦稍微对数据集做一点改动,例如将狗牌贴在猫身上,结果就是完全错误的。

 

深度学习的天赐和诅咒

 

上面那个新学生的例子,其实很形象的表述了深度学习的特性。

 

深度学习是一种使用梯度反向传播的、特定优化技术来生成“程序”(也称为“神经网络”)的技术。上面学生的程序只是构建一组转换和条件,将正确的标签分配给数据集中的正确图像。而且总是在寻求解决问题最省力的方法,比如给定数据集里,狗的图片都在右上角有一道蓝色的光晕,那么深度学习就会立刻使用这作为区分猫狗的标准。

 

为了消除这些虚假的偏差,我们通常会向训练集添加更多数据、反向传播生成的“程序”可能非常大、非常复杂,具有数百万个参数和数千个条件检查,可以锁定到组合更精细偏见的组合。任何允许分配正确标签以统计优化目标函数的东西都会做,无论是否与任务的“语义精神”相关。 

 

深度网络能否最终锁定到“语义正确”先验的东西上?当然可以。但现在有大量证据表明,实际上并非五次。对抗性的例子表明,对图像的微小修改都可以导致错误的结果。对类似于先前训练的数据集的新样本的研究表明,超出原始数据集的泛化远比数据集中的泛化弱得多。

 

自动创建无人能想到的功能,是深度学习的最大优势,同时也是它的最大弱点、因为大多数时候,至少在语义上是存疑的。

 

深度学习在什么情况下好用,什么情况下不可用?

 

深度学习无疑是计算机视觉工具箱的一个有趣补充。现在可以相对容易地“训练”探测器来探测物体,还可以在一定程度通过调整探测器来使用更多算力。但同时也需要为深度网络的黑盒属性付出高昂的代价,我们无法确定他如何做出决定,而且跟我们认可的“语义精神”毫无关系。因此,在输入数据中出现的任何低级偏差都会导致检测器意外地失败,而且这些失效条件实际上无法表征。

 

因此在落地应用时,深度学习主要用于对错误不敏感、且能够保证输入不会与训练数据集有很大差异场景,例如图像搜索,可能是监视,自动零售以及几乎所有的“非关键任务”,95%的准确率非常够用了。

 

具有讽刺意味的是,大多数人坚信深度学习在无人驾驶汽车、自动机器人场景下的应用是一场革命,Piekniewski认为,只能将这种信念描述为“不幸”的误解。因为这些场景需要需要实时决策,容错率极低,经常会导致致命的结果,最近的研究显示基于深度神经的自动驾驶解决方案在现实生活中确实容易受到对抗性攻击。 

 

还有人对深度学习应用在医学和诊断中寄予厚望。然而,在这个领域,也有一些相关的发现,例如,在一个机构数据上训练的模型失败了,换一个机构数据却成功了,说明这些模型使用比许多研究人员所希望的更浅度的数据。

 

数据比我们想象的更浅。

 

深度学习 vs 传统计算机视觉

 

深度学习现在非常流行,但传统的计算机视觉也并非就失去价值。

 

传统计算机视觉仍然可以用来构建强大的探测器。这些手工做成的探测器可能无法在某些特定数据集指标上实现高性能,但可以保证依赖于输入的“语义相关”特征集,它的故障模式可以更好地表征和预期。 

 

深度学习提供统计上强大的探测器,而不需要昂贵的特征工程,尽管仍需要大量已标记的数据,外加大量GPU和现场的深度学习专家。而且,这些探测器会意外地失效,适用范围也不容易被(完全)表征。

 

所以,在容错率高的场景中,可以选择深度学习;在容错率低且计算复杂性更重要的场景中,经典机器视觉管道将在可预见的未来继续占据重要位置。

全部评论

X