学界 | 胶囊网络是如何克服卷积神经网络的这些缺点的?

简介:

胶囊网络(CapsNet)是一种新的热门的神经网络架构。它可能对深度学习带来深远的影响,特别是对计算机视觉领域。等一下!计算机视觉不是差不多已经被解决了吗?我们不是已经看到了多种卷积神经网络(CNN)的神奇案例?它们不是已经在计算机视觉任务(例如分类、定位、物体检测、语义分割或实例分割,见图1)上实现超越人类的水平了吗?

20e6d54f56dce2c58f5e6b83fa9c4663fe2b5b2b

图1 一些主要的计算机视觉任务。当前,每种任务都需要一个不一样的CNN架构。比如分类里的ResNet,物体检测里的YOLO,实例分割里的Mask R-CNN等。图片由Aurélien Géron提供。

恩,是的。我们已经见到了很多神奇的CNN,但是,


8481c8f592b7f349aa84a1de5c171db681516edf它们需要非常多的图片进行训练(或重复使用了已用海量数据训练过的神经网络的一部分)。 而CapsNet使用少得多的训练数据就能泛化。
8481c8f592b7f349aa84a1de5c171db681516edf CNN们并不能很好地应对模糊性,但CapsNet可以。所以它能在非常拥挤的场景里也表现得很好(尽管它目前还需要解决背景图的问题)。
8481c8f592b7f349aa84a1de5c171db681516edf CNN会在池化层理丢失大量的信息,从而降低了空间分辨率(见图2),这就导致对于输入的微小变化,其输出几乎是不变的。在诸如语义分割这样的场景里,这会是一个问题,因为细节信息必须要在网络里被保留。现在,这一问题已经被通过在CNN里构建复杂的架构来恢复这些损失的信息所解决。 在CapNet里面,细节的姿态信息(比如对象的准确位置、旋转、厚度、倾斜度、尺寸等)会在网络里被保存下来,不用先丢失再恢复。输入上微小的变化会带来输出上的小变化,信息被保存。这被称为“等变的”。这就让 8481c8f592b7f349aa84a1de5c171db681516edf CapsNet能使用一个简单和统一的架构来应对不同的视觉任务。

最后,CNN需要额外的组件来自动识别每个小部分属于哪个物体(例如这条腿属于这只羊)。而CapsNet则可以给你这些部分的层级结构。

c80346fbb22f82defaca5990541a4365b7183258

图2 DeepLab2的图像分割管道,来自Liang-Chieh Chen等。注意这里面CNN的输出(右上角图)是非常得粗糙。这就需要一些额外的步骤来恢复丢失的细节。图片来自论文《DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs》,获作者友情授权使用。可以查看S. Chilamkurthy的这篇很棒的博文来了解语义分割的神经网络的架构有多么复杂多样。

CapsNet是在2011年在Geoffrey Hinton等人的一篇名为《Transforming Autoencoders》的论文中首次出现。但仅在几个月前(即2017年11月),Sara Sabour、Nicholas Frosst和Geoffrey Hinton发表了一篇名为《Dynamic Routing between Capsules》的论文,其中介绍了CapsNet架构。

该架构在MNIST(著名的手写数字图像数据集)上达到了最先进的性能,并且在MultiMNIST数据集(一种有重叠的不同数字组的手写数字的变体)上获得了比CNN好得多的结果。见图3。

4aeacee5987cdba6d84b8b67414cd585c2172891

图3 MultiMNIST图片(白色)和由CapsNet重构后的结果(红色和绿色)。“R”=重构后的结果;“L”=标注。例如,对第一个样例(左上角)的预测是准确的,重构的结果也对。但是在第五个例子里,预测(5,7)是错的,不是(5,0)。因此,5被正确地重构了,但是0没有。图片来自论文《Dynamic routing between capsules》,作者友情授权使用。

尽管有上述这些优点,但CapsNet还远未到完美的程度。首先,它们在更大的图片上(例如CIFAR10或ImageNet数据集里)还没有CNN的表现好。另外,CapsNet的计算量很大,同时它还不能区分靠的很近的相同的物体(这被称为“拥挤问题”,人类也有这个问题)。

但是这里的关键点是胶囊网络是非常有希望的,看起来只要做一些修改就能让胶囊网络充分释放它们的潜能。毕竟现代CNN在1998年就被发明了,但也要经过几次改进,直到2012年的ImageNet大赛上才达到业界领先水平。

那么,到底CapsNet是什么?

简而言之,一个胶囊网络是由胶囊而不是由神经元构成。一个胶囊是一小群神经元,它们可以学习在一个图片的一定区域内检查一个特定的对象(比如,一个矩形)。

它的输出是一个向量(例如,一个8维的向量)。每个向量的长度代表了物体是否存在的估计概率[1],它的方向(例如在8维空间里)记录了物体的姿态参数(比如,精确的位置、旋转等)。如果物体有稍微的变化(比如,移动、旋转、尺寸变化等),胶囊将也会输出一个长度相同但是方向稍微变化的向量。因此胶囊是等变的。

和常规神经网络很类似,CapsNet也是由多层构成(见图4)。处于最底层的胶囊被称为向量胶囊:它们每个都只用图片的一小部分区域作为输入(称为感知域),然后试图去探测某个特殊的模式(例如,一个矩形)是否存在,以及姿态如何。在更高层的胶囊(称为路由胶囊)则是探测更大和更复杂的物体,比如船等。

deec4e1ab9be504e7d40d5fbf4fa651490c8ad3f

图4 一个两层的CapsNet。在本例里,向量胶囊层有两个5x5胶囊的特征图。其中第二个胶囊层有两组3x3胶囊的特征图。每个胶囊输出一个向量。每个箭头代表不同的胶囊的输出。蓝色的箭头代表那些检测三角形的胶囊的输出;黑色箭头代表试图检测矩形的胶囊的输出。图片由Aurélien Géron提供。

向量胶囊层是用几个常规卷积层实现。例如在这篇论文里,他们使用两个卷积层输出256个包含标量的6×6特征图。然后把这个输出变形成32个包含8维向量的6×6特征图。最后,他们使用一个新奇的压缩函数来确保这些向量的长度都是在0到1(来代表概率)之间。就这样,它们就产生了向量胶囊的输出。

下一层的胶囊也试图去检测物体和它们的姿态,但是它们的工作机制很不一样。它们使用的是一种叫按一致性路由的算法。这里是CapsNet的主要魅力所在。先让我们看一个例子。

假设我们只有两个向量胶囊:一个识别矩形的胶囊和一个识别三角形的胶囊,而且假定他们都能检测到相应的形状。矩形和三角形可以是房子或是船的一部分(见图5)。根据矩形的姿态,它们都是稍微向右旋转了一点,那么房子和船也都会向右旋转了一点。

根据三角形的姿态,这个房子几乎完全是上下颠倒的,而船则是稍微向右旋转了一点。注意在这里,整体的形状和整体与部分的关系都是在训练中学习的。现在可以看到矩形和三角形在船上的姿态是一致的,而在房子上的姿态则非常不一致。因此,很有可能这里的矩形和三角形是同一条船上的一部分,而房子上则不是。

782e2cf4cda6c7288367bd69de926fc8868cbf45

图5 按一致性路由。第一步——基于对象的部分是否存在和姿态来预测对象是否存在及其姿态,接着查看预测间的一致性。图片由Aurélien Géron提供。

因为我们现在已经很有信心地知道矩形和三角形是船的一部分,所以把矩形和三角形的输出更多指向船的胶囊而更少指向房子的胶囊就顺理成章了。用这个方法,船的胶囊将会获得更多的有用输入信号,而房子的胶囊则接收更少的噪音。对每一个连接,按一致性路由算法会维护一个路由权重(见图6):它对于一致的会增加权重,而对于不一致的则降低权重。

f76a65175c9070734c9c70af7f293b19f17d966f

图6 按一致性路由。第二步——更新路由权重。图片由Aurélien Géron提供。


这个按一致性路由算法会涉及到一些循环:一致性检测和路由权重更新(值得注意的是,这一步骤会在每次预测时发生,不只是一次,也不只是在训练时)。这一算法对于拥挤的场景特别有用。例如图7里的场景是比较模糊的,因为你能看到中间有一个上下颠倒的房子,但这样会让上面的三角形和下面的矩形无法得到解释。

按一致性路由算法更有可能收敛到一个更好的解释:下面是一条船,而上面是一个房子。这样模糊性就“可以被解释了”:下面的矩形最好是被看成一条船的一部分,同时这样也解释了下面的三角形。一旦下面的两个部分被解释好了,剩下的部分就很容易地被解释成一个房子。

a12e1a8519a358b93d9d1f39583211590de5748c

图7 按一致性路由可以分解拥挤的场景,例如这里的图片。因为它可能会被错误地解释为中间是一个上下颠倒的房子和两个无法解释的部分。相反的,下面的矩形会被路由给船,而这也就把下面的三角形带进了船。一旦这个船被解释清楚,那么就能很容易地解释上面的两个部分是一个房子了。图片由Aurélien Géron提供。

就是这些!你现在知道CapsNet背后的关键原理了!如果你想了解更多的细节,可以查看我的两个关于CapsNet的视频(一个是关于它的架构,另外一个是如何实现它)和带有我的注释的这个用TensorFlow实现的胶囊网络(Jupyter Notebook文件)。请随意对视频和GitHub上的文件进行评论,或是通过我的Twitter账号@aureliengeron联络我。希望你觉得这个博文对你有帮助。

[1] 这是由S. Sabour、N. Frosst和G. Hinton发表的论文《Dynamic routing with capsules》里提出的最初的架构。但是在文章发表后他们又提出了一个更通用的架构。其中物体出现的概率以及姿态参数都在输出向量里按不同的方式编码了。不过核心的观点还是没有改变。

a285e2dd7bb5fc54b68724cfdca2a7c41e41fee3

Aurélien Géron

Aurélien Géron是一名机器学习咨询师,还是O’Reilly图书《Hands-on Machine Learning with Scikit-Learn and TensorFlow》的作者。他在谷歌时,曾在2013到2016年间领导了YouTube的视频分类团队。

Géron在2002到2012年创立了Wifirst公司并担任CTO。在法国,Wifirst是一家领先的无线服务供应商。在2001年,Géron创立了Polyconseil并担任CTO。这家公司现在管理着共享电汽车服务Autolib。在此之前,他作为软件工程师在多个领域工作,包括金融、防务、医疗保健等。


原文发布时间为:2018-03-16

本文作者:Aurélien Géron

本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“大数据文摘”微信公众号

相关文章
|
18天前
|
机器学习/深度学习 计算机视觉 Python
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力本文提出了一种简单且高效的卷积神经网络(ConvNets)注意力模块——SimAM。与现有模块不同,SimAM通过优化能量函数推断特征图的3D注意力权重,无需添加额外参数。SimAM基于空间抑制理论设计,通过简单的解决方案实现高效计算,提升卷积神经网络的表征能力。代码已在Pytorch-SimAM开源。
【YOLOv11改进 - 注意力机制】SimAM:轻量级注意力机制,解锁卷积神经网络新潜力
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
本文旨在通过深入浅出的方式,为读者揭示卷积神经网络(CNN)的神秘面纱,并展示其在图像识别领域的实际应用。我们将从CNN的基本概念出发,逐步深入到网络结构、工作原理以及训练过程,最后通过一个实际的代码示例,带领读者体验CNN的强大功能。无论你是深度学习的初学者,还是希望进一步了解CNN的专业人士,这篇文章都将为你提供有价值的信息和启发。
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络:从理论到实践
【10月更文挑战第35天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力成为科技界的宠儿。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,在图像识别和视频分析等领域展现出了惊人的潜力。本文将深入浅出地介绍CNN的工作原理,并结合实际代码示例,带领读者从零开始构建一个简单的CNN模型,探索其在图像分类任务中的应用。通过本文,读者不仅能够理解CNN背后的数学原理,还能学会如何利用现代深度学习框架实现自己的CNN模型。
|
11天前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第36天】探索卷积神经网络(CNN)的神秘面纱,揭示其在图像识别领域的威力。本文将带你了解CNN的核心概念,并通过实际代码示例,展示如何构建和训练一个简单的CNN模型。无论你是深度学习的初学者还是希望深化理解,这篇文章都将为你提供有价值的见解。
|
12天前
|
机器学习/深度学习 人工智能 自动驾驶
深入解析深度学习中的卷积神经网络(CNN)
深入解析深度学习中的卷积神经网络(CNN)
29 0
|
15天前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第32天】本文将介绍深度学习中的一个重要分支——卷积神经网络(CNN),以及其在图像识别领域的应用。我们将通过一个简单的代码示例,展示如何使用Python和TensorFlow库构建一个基本的CNN模型,并对其进行训练和测试。
|
21天前
|
机器学习/深度学习 自然语言处理 TensorFlow
深度学习中的卷积神经网络(CNN)及其应用
【10月更文挑战第26天】在这篇文章中,我们将深入探讨卷积神经网络(CNN)的基本原理、结构和应用。CNN是深度学习领域的一个重要分支,广泛应用于图像识别、语音处理等领域。我们将通过代码示例和实际应用案例,帮助读者更好地理解CNN的概念和应用。
|
1月前
|
机器学习/深度学习 人工智能 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【10月更文挑战第7天】本文将深入探讨卷积神经网络(CNN)的基本原理,以及它如何在图像识别领域中大放异彩。我们将从CNN的核心组件出发,逐步解析其工作原理,并通过一个实际的代码示例,展示如何利用Python和深度学习框架实现一个简单的图像分类模型。文章旨在为初学者提供一个清晰的入门路径,同时为有经验的开发者提供一些深入理解的视角。
|
12天前
|
机器学习/深度学习 计算机视觉 网络架构
为什么卷积现在不火了:CNN研究热度降温的深层原因分析
纵观近年的顶会论文和研究热点,我们不得不承认一个现实:CNN相关的研究论文正在减少,曾经的"主角"似乎正逐渐淡出研究者的视野。
45 11
为什么卷积现在不火了:CNN研究热度降温的深层原因分析
|
26天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其应用
【10月更文挑战第21天】本文旨在深入探讨深度学习领域的核心组成部分——卷积神经网络(CNN)。通过分析CNN的基本结构、工作原理以及在图像识别、语音处理等领域的广泛应用,我们不仅能够理解其背后的技术原理,还能把握其在现实世界问题解决中的强大能力。文章将用浅显的语言和生动的例子带领读者一步步走进CNN的世界,揭示这一技术如何改变我们的生活和工作方式。

热门文章

最新文章

下一篇
无影云桌面