都说卷积神经网络是个好东西,但它有什么弊端呢?
图片来源:Mathworks
翻译 | 王赫
编辑 | Donna
2012年,三位深度学习的“巨人”Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hinton,联合发表了题为 “ImageNet Classification with Deep Convolutional Networks” 的论文。自此,卷积神经网络( CNNs )就成了一个万人追捧的工具,并使深度学习成为人工智能领域的一大热门。
不可否认,CNNs 在计算机视觉领域无疑是一手实力制胜牌,在许多类型的任务中也表现出了惊人的性能。然而,CNNs 是完美的吗?这就是我们能做到的最好吗?我想你从我的题目中也已经看出来了端倪,答案是 NO!
2014年12月4日,Geoffrey Hinton 在 MIT 上发表了一篇关于他的"胶囊网络"( capsule networks )项目的演讲。在报告中,他讨论了 CNNs 中的一些问题,以及为何池化( pooling )的表现非常糟糕。事实上,池化的表现可以用灾难来形容。
本文会先对CNNs和池化层做一个简单介绍,然后将讨论目前CNNs存在的问题。
▌卷积计算层
一个卷积计算层中有一组矩阵,它与上一层神经元输出的矩阵做卷积乘法操作。这样操作后可以得到一些基本的特征,如边缘、颜色或模式,也可以得到一些复杂的特征,如形状、鼻子或嘴。所以,卷积计算层中的这些矩阵也被称为过滤器( filters )或核( kernels ) 。
卷积运算的一个操作:
▌池化层
池化层的类型不止一种,有最大池化,平均池化等等。现今最常用的是最大池化,这是因为它对于有些任务来说可以实现平移不变性,此外还可以非常廉价(无参数)地实现降维输出。
事实上,最大池化操作起来非常简单,你只需要预定义一个过滤器(即一个窗口),并将这个窗口在输入数据矩阵上滑动,每次取窗口中的最大值作为输出值。
过滤器大小为2x2的最大池化
▌那么,问题到底出在哪儿?
反向传播
反向传播算法并不是一个深度学习中的高效算法,因为它对数据量的需求很大。
平移不变性
当我们说平移不变性时,我们意思是,稍微改变同一物体的朝向或位置,可能并不会激活那些识别该物体的神经元。
正如上图所示,假如一个神经元是用来识别一只猫的,其参数会随着猫的位置和转动的变化而变化。虽然数据扩增(data augmentation)在一定程度上解决了这个问题,但这个问题并没有得到彻底的解决。
池化层
池化层的存在会导致许多非常有价值的信息的丢失,同时也会忽略掉整体与部分之间的关联。比如,当我们使用脸部探测器时,我们必须把一些特征结合在一起(嘴,双眼,脸的轮廓和鼻子)才能识别这张脸。
CNN的判别方式是,如果这5个特征同时呈现的概率很高,那这就将是一张人脸。
用CNN判别上面两张图,输出的辨认结果很接近,但效果并不好。
▌结论
CNN很厉害,但它还是有两个非常危险的缺陷:平移不变性和池化层。不过,我们可以尝试通过数据扩增等方法来避免潜在的缺陷。
现在,胶囊网络等新的结构的出现正在给深度学习领域带来一场革命。未来,更多改进过的事物会诞生。
作者|Mahmoud Tarrasse
链接|https://medium.com/@mahmoudtarrasse/what-is-wrong-with-convolutional-neural-networks-75c2ba8fbd6f