胶囊网络关键解读!

原作者:Aurélien Géron

胶囊网络(CapsNets)是一个热门的新型神经网络体系结构,可能对深度学习,特别是计算机视觉,有深远的影响。等等,已经不是有很多计算机视觉问题被解决了吗?我们不是所有人都能看到卷积神经网络(CNNs)在各种计算机视觉任务(例如分类,定位,物体检测,语义分割或实例分割(见图1))中达到超人类水平的神话般的例子吗?

图1.一些主要的计算机视觉任务。今天,这些任务中的每一个都需要一个非常不同的CNN架构,例如用于分类的ResNet,用于对象检测的YOLO,用于实例分割的掩码R-CNN等等。

那么,是的,我们已经看到了神话般的CNN,但是:

· 他们接受了大量图像的训练(或者重复使用了神经网络的部分)。CapsNets可以使用少得多的训练数据。

· CNN不能很好地处理歧义。CapsNets,即使在密集的场景下,他们也可以表现出色(尽管他们现在仍然与背景纠缠在一起)。

· CNN在池化层中丢失了大量的信息。这些层减少了空间分辨率(见图2),所以它们的输出无法对输入的小变化做出反应。当在整个网络中必须保存详细的信息时,这是一个问题,例如在语义分割中。今天,这个问题的解决是通过在CNN周围建立复杂的体系结构来恢复一些丢失的信息。使用CapsNets,详细的属性信息(如精确的对象位置,旋转,厚度,歪斜,大小等等)在整个网络中被保留下来而不是丢失,并且随后被恢复。输入的小改动导致输出的细微变化 - 信息被保留。这就是所谓的等变性。因此,CapsNets可以在不同的视觉任务中使用相同的简单一致的架构。

· 最后,CNN需要额外的组件来自动识别一个部件属于哪个对象(例如,这条腿属于这只羊)。CapsNets可以为您提供部件的层次结构。

图2.由Liang-Chieh Chen等人提供的用于图像分割的DeepLab2流水线:注意CNN(右上角)的输出非常粗糙,因此需要添加额外的步骤来恢复某些丢失的细节。DeepLab论文中说:语义图像分割步骤包括深度卷积网络,Atrous卷积,并且全连接CRFs.看看S. Chilamkurthy的这篇伟大的文章,就知道语义分割的体系结构是多么复杂和不同。

CapsNets在2011年由Geoffrey Hinton等人在一篇名为Transforming Autoencoders的论文中首次提出,但仅在几个月前,即2017年11月,Sara Sabour,Nicholas Frosst和Geoffrey Hinton发表了一篇名为“ 胶囊网络之间的动态路由‘’的论文,他们引入了一个CapsNet架构,在MNIST(着名的手写数字图像数据集)上达到了最先进的性能,并且在MultiMNIST上得到了比CNN更好的结果(一个具有重叠的不同数字对的变形)。见图3。

图3. MultiMNIST图像(白色)及其通过CapsNet(红色+绿色)重建。“R”=重建; “L”=标签。例如,第一个例子(左上角)的预测是正确的,重建也是如此。但在第五个例子中,预测是错误的:(5,7)而不是(5,0)。因此,5是正确重建,但不是0.

虽然有这些特质,CapsNets还远远不够完美。首先,它们现在在CIFAR10或ImageNet等大图像处理上表现不如CNN好。此外,它们是计算密集型的,当它们彼此太靠近时,它们不能检测到相同类型的两个对象(这被称为“拥挤问题”,并且已经显示出人类也有这个问题)。但关键的想法是非常有前途的,似乎只是需要一些调整来发挥其全部潜力。毕竟,现代CNN是在1998年发明的,但经过一些调整后,在2012年就打败了ImageNet的最新技术。

那么,CapsNets究竟是什么?

简而言之,CapsNet由胶囊而不是神经元组成。胶囊是一小组神经元,其学习检测图像的给定区域内的特定对象(例如矩形),并输出一个向量,其长度表示为该对象存在的估计概率(例如,8维矢量),并且其方向(例如,在8D空间中)对该对象的属性参数(例如,精确的位置,旋转等)进行编码。如果对象稍微改变(例如,移动,旋转,调整大小等),那么胶囊将输出相同长度的矢量,但方向稍有不同。因此,胶囊是等变的。

就像常规的神经网络一样,CapsNet被组织成多层(见图4)。最下层的胶囊被称为主胶囊:它们中的每一个都接收图像的小区域作为输入(称为其接受场),并且试图检测特定图案的存在和属性,例如矩形。更高层的胶囊称为路由胶囊,能够检测更大更复杂的物体,如船只。

图4.双层CapsNet。在这个例子中,主胶囊层具有两个5×5胶囊映射,而第二胶囊层具有两个3×3胶囊映射。每个胶囊输出一个矢量。每个箭头表示不同胶囊的输出。蓝色箭头表示试图检测三角形的胶囊的输出,黑色箭头表示试图检测矩形的胶囊的输出,等等。

主胶囊层使用几个常规的卷积层来实现。例如,在本文中,他们使用两个卷积层输出256个包含标量的6x6特征映射。他们重塑这个输出以获得包含8维矢量的32个6x6映射。最后,他们使用一个新的压缩函数来确保这些向量的长度在0到1之间(以表示一个概率)。就是这样:这成为主胶囊的输出。

接下来的层中的胶囊也尝试检测物体和它们的属性,但是它们的工作方式非常不同,使用称为按协议路由的算法。这就是CapsNets的大部分魔力所在。我们来看一个例子。

假设只有两个主胶囊:一个长方形胶囊和一个三角形胶囊,假设他们都检测到他们正在寻找的东西。矩形和三角形都可以是房子或船的一部分(见图5)。由于长方形的位置略微向右旋转,房屋和船只也必须稍微向右旋转。考虑到三角形的属性,房子将几乎颠倒,而船会稍微旋转到右侧。请注意,形状和整体/部分关系都是在训练中学习的。现在注意到长方形和三角形与船的属性一致,而他们强烈地不吻合这个房子的属性。所以,矩形和三角形很可能是同一条船的一部分,而且没有房子。

图5.通过协议进行路由,步骤1 - 基于对象部分的存在和属性来预测对象的存在和属性,然后查找预测之间的一致性。

由于我们现在确信长方形和三角形是船的一部分,因此将长方形和三角形胶囊的输出更多地发送到船胶囊,而不是发送到房屋胶囊:这样,船胶囊将接收更有用的输入信号,并且房屋胶囊将会收到较少的噪音。对于每个连接,按路由协议算法保持一个路由权重(参见图6):当达成一致时增加路由权重,在不一致时减少路由权重。

图6.通过协议路由,步骤2 - 更新路由权重。

协商路由算法涉及协议检测+路由更新的一些迭代(注意,这对于每个预测都会发生,不仅仅是一次,而且不仅仅是在训练时间)。这在拥挤的场景中特别有用:例如,在图7中,场景模糊不清,因为您可以在中间看到倒置的房屋,但是这会使底部的矩形和顶部的三角形不能解释,协议算法很可能会更好地解释:底部是一条船,顶部是一个房子。模糊性也变成“可解释性的”:下面的矩形最好用船的存在来解释,这也解释了下面的三角形,一旦解释了这两个部分,剩下的部分就很容易被解释为一个房子。

图7.通过协议路由可以解析拥挤的场景,比如这个模糊的图像,这可能被误解为颠倒的房子加上一些无法解释的部分。相反,下面的长方形将被路由到船胶囊,这也将把下面的三角形路由到船胶囊。一旦这艘船被“解释通”,很容易把顶部看作一座房子。

这就是CapsNets背后的关键思想!

原文链接:https://www.oreilly.com/ideas/introducing-capsule-networks

本文转自: fastai中文社区,原作者:Aurélien Géron,转载此文目的在于传递更多信息,版权归原作者所有。