摘要: 胶囊网络是如何克服卷积神经网络的一些缺点,包括需要更少的训练数据,保存图像细节,处理模糊性的呢?看完本文你就知道了!
胶囊网络 (CapsNets) 是一种可能会对深度学习产生深远影响的热门新型神经网络结构,特别是在计算机视觉领域。那么问题来了:计算机视觉相关问题不是已经解决了吗 ? 我们不是都已经见过卷积神经网络 (CNNs) 在各种计算机视觉任务 ( 如分类、定位、目标检测、语义分割或实例分割 ) 中达到超人水平的例子吗 ?( 如图 1)
图1:为一些主要的计算机视觉任务。如今,这些任务都需要一个非常不同的卷积神经网络(CNN)架构,例如用于分类的残差网络(ResNet)、用于目标检测的目标检测系统(YOLO)、用于实例分割的Mask R-CNN等等。
我们已经了解了卷积神经网络,但是:卷积神经网络要在大量的图像上进行训练(或者它们重复使用了神经网络的一部分),而胶囊网络可以很好地推广使用更少的训练数据。
卷积神经网络不能很好地处理模糊性,胶囊网络却可以,甚至可以在拥挤的场景中处理的很好。
卷积神经网络在池化层中丢失了大量信息,降低了空间分辨率(参见图2),因此当输入发生微小的变化,输出基本不变,这是一个在整个网络中必须保留详细信息的问题,例如在语义分割中。如今,这个问题通过围绕CNNs构建复杂的体系结构来解决,来恢复一些丢失的信息。通过胶囊网络,详细的姿态信息(如精确的目标位置、旋转、厚度、倾斜、大小等)将在整个网络中被保存,而不是丢失了之后再恢复,输入的小变化导致输出的小变化——信息被保存,这就是所谓的“等变化(equivariance)”。因此,胶囊网络可以在不同的视觉任务中使用相同简单一致的架构。
最后,卷积神经网络需要额外的组件来自动识别部件属于哪个目标(例如,这条腿属于这只羊),而胶囊网络为你免费提供部件层次。
图2:Liang-Chieh Chen等人提出的关于图像分割的DeepLab2管道,CNN(右上角)的输出非常粗糙,需要添加额外的步骤来恢复一些丢失的细节。
2011 年, Geoffrey Hinton 等人在一篇名为《变换自动编码器》的论文中首次引入胶囊网络。在几个月前 ,2017 年 11 月 ,Sara Sabour 、 Nicholas Frosst 和 Geoffrey Hinton 发表了一篇名为《胶囊间的动态路由》的论文 , 该论文介绍了一个在 MNIST( 著名的手写数字图像数据集 ) 上达到最先进性能的胶囊网络架构 , 并且在 MultiMNIST( 一种不同数字重叠对的变体 ) 上得到了比卷积神经网络更好的结果,如参见图 3 。
图3:MultiMNIST图像集(白色)和由胶囊网络的重建(红色 绿色)。“R”为重建;“L”为标签。例如,第一个示例(左上角)的预测是正确的,重构也是正确的,但在第五个例子中,预测是错误的:是(5,7)而不是(5,0),因此,5是正确的重构,0不是。
虽然胶囊网络有这些优点,但离完美还有很大的距离。首先,就目前而言,它们在大型图像(如CIFAR10或ImageNet)上的性能不如卷积神经网络。此外,它们的计算量非常大,而且当两个检测目标离得很近的时候,胶囊网络无法检测到同一类型的两个物体(这被称为“拥挤问题”,而且已经证明人类也存在这种问题)。但是关键的想法是非常好的,胶囊网络只需要做一些调整就能充分发挥它们的潜力。毕竟,现在的卷积神经网络是在1998年被发明出来的,但它们经过几次调整之后才在2012年的ImageNet上,超越了目前的技术水平。
那么,胶囊网络到底是什么?简而言之,胶囊网络是由胶囊组成的,而不是神经元。胶囊是一组神经元,它会学习检测给定区域(例如一个矩形)图像的特定目标,它输出一个向量(例如一个八维向量),向量的长度代表目标存在的概率估计[1],而且它对姿态参数(例如精确的位置,旋转,等等)定向编码(例如8D空间)。如果对象有轻微的变化(例如移位、旋转、改变大小等),那么胶囊将输出相同长度但方向略有不同的向量,因此,胶囊是等变化的。
就像常规的神经网络,胶囊网络在多个层中构建(见图4)。胶囊在最低层被称为基本胶囊:每个胶囊把接收的一个小区域的图像作为输入(称为感受野),它试图检测一个特定部分的姿势和存在,例如一个矩形。更高层的胶囊被称为路由胶囊,能检测到更大更复杂的物体,如船只。
图4:一个两层的胶囊网络。在这个例子中,基本胶囊层有两个5×5胶囊的映射,而第二胶囊层有两个3×3胶囊的映射。每个胶囊输出一个向量。每个箭头表示不同胶囊的输出。蓝色箭头表示胶囊检测三角形的输出,黑色箭头表示检测矩形的输出,以此类推。
基本胶囊层使用一些常规的卷积层实现。例如,在本文中,它们使用两个输出256个包含标量的6x6特征映射的卷积层。它们重塑这个输出,得到32个包含8维向量的6x6映射。最后,使用一个新的压缩函数来确保这些向量的长度在0到1之间(表示概率),得到基本胶囊的输出。
下一层的胶囊工作原理非常不同,它们使用了一种名为“路由协议”(routing by agreement)的算法来试图检测物体及其姿态,这就是胶囊网络的神奇所在,举个例子。
假设有两种基本胶囊:一种是长方形胶囊,一种是三角形胶囊,假设它们都发现了要检索的东西,矩形和三角形都可以是房子或船的一部分(见图5)。给定矩形的姿态,它会稍微向右旋转,房子和船也会稍微向右旋转。考虑到三角形的位置,房子几乎是上下颠倒的,而船会稍微向右旋转。注意,形状和整个/部分关系都是在训练中学习的。矩形和三角形在船的姿势上是一致的,而在房子的姿势上是完全不同的。所以很可能矩形和三角形是同一条船的一部分,而不是房子。
图5:根据路由协议,步骤1根据目标部件的存在和位置预测目标的存在和位置,然后查找预测之间的一致。
因为我们确信矩形和三角形是船的一部分,所以将输出的矩形和三角形胶囊发送给更多的船胶囊,船胶囊将获得更多有用的输入信号,房子胶囊将接收到很少的信号。对于每次连接,路由协议算法维护一个路由权值(参见图6),当结果一致时协议时路由权值增加,不一致时路由权值减少。
图6:路由协议,步骤2更新路由权值。
路由协议算法涉及到协议检测 路由更新的几个迭代(注意,这种情况发生在每个预测中,而不仅仅是一次,也不仅仅是在训练时),在拥挤的场面特别适用:例如,在图7中,现场是模糊的,因为你可以看到一个倒立的房子在中间,但如果这样,底部矩形和三角形就无法解释了,所以路由协议算法将最有可能收敛到一个更好的解释:一只船在底部,顶部是一栋房子。这种模糊性被称为“被解释掉”,较低的矩形最好的解释是船,这也解释了较低的三角形,一旦这两个部分被解释掉,剩下的部分很容易被解释为房子。
图7:路由协议可以解析拥挤的场景,比如这张模糊的图片,它可能被误解为倒立的房子加上一些无法解释的部分。相反,较低的矩形将被解释为船的一部分,这也将把较低的三角形和船联系上。一旦船被“解释走了”,就很容易将顶部理解为房子。
这就是网络胶囊的关键原理!如果您想了解更多的细节,请查看我的两个关于网络胶囊(一个关于架构,另一个关于实现)和我评论的TensorFlow实现(Jupyter Notebook)的视频。
联系我Twitter@aureliengeron。希望这篇文章对你有用!
Aurelien Geron是一名机器学习顾问,《用scikit - Learning和TensorFlow实践机器学习》的作者。他曾是谷歌员工,2013年至2016年期间领导YouTube视频分类团队。
以上为译文。
本文由阿里云云栖社区组织翻译。
文章原标题《introducing-capsule-networks》,
作者:AurélienGéron译者:虎说八道,审校:。