一、摘要
本文介绍2017年的论文《Dynamic Routing Between Capsules》,论文介绍了胶囊之间的动态路由机制,至此胶囊神经网络才算是完整地被提出来(此前几年Hinton老爷子有给出过概念,但是没有给出官方的实现)。
译文:
胶囊是一组神经元,其活动向量表示特定类型实体(如物体或物体部分)的实例化参数。我们使用活动向量的长度来表示实体存在的概率,并使用其方向来表示实例化参数。一个层级的活跃胶囊通过变换矩阵对更高层级胶囊的实例化参数进行预测。当多个预测一致时,更高层级的胶囊变得活跃。我们展示了一种经过判别性训练的多层胶囊系统在MNIST数据集上达到了最先进的性能,并且在识别高度重叠的数字方面明显优于卷积神经网络。为了实现这些结果,我们使用了一种迭代的通过一致性路由的机制:低层级胶囊倾向于将其输出发送到那些活动向量与来自低层级胶囊的预测有较大标量积的高层级胶囊。
二、核心创新点
胶囊网络最初被Hinton老爷子提出来是用于解决CNN的缺陷的。我们拿一张网上广为流传的示例图来解释胶囊网络相对于CNN的改进之处。对于下面这张图,CNN则会认为它是一张人脸的图像,而胶囊网络则可以辨别出来这不是正常的人脸。
要学习胶囊网络,我们还需要简要了解下基本概念。胶囊(Capsule)是胶囊神经网络中的基本单元 ,它由一组神经元组成,用于表示特定类型的实体及其属性。每个胶囊不仅输出实体存在的概率,还可以表示实体的姿态参数(如位置、方向、大小等)。对比常规的神经网络,常规神经网络的基本单元是神经元,其输出是一个标量值,而胶囊的输出是一个向量,这使得胶囊能够捕捉更丰富的特征信息。通过引入胶囊和动态路由机制,胶囊网络改进了卷积神经网络在特征表示和特征关系捕捉方面的局限性,从而能够更好地处理物体的变形和旋转。
1、胶囊的输入输出和动态路由机制
对于胶囊的输入和输出,作者使用胶囊的输出向量长度来表示当前胶囊所代表的实体存在于当前输入中的概率。看起来很绕,通俗来说就是如果一个胶囊对应的特征在输入中有出现,那么它对应的输出向量长度就应该比没出现的胶囊输出向量要长。因此,作者使用了一个非线性的squash函数,这个函数确保短向量的长度被压缩到接近0,二长向量的长度则压缩到略小于1的取值。这个思路通过使用判别式学习来实现:
其中,是胶囊j的输出向量,而是其总输入。对于第一层胶囊之外的其余胶囊,总输入就是所有来自下一层的胶囊的预测向量加权和,这个预测向量则是使用一个权重矩阵与下一层胶囊的输出相乘得到。
其中,是耦合系数,由动态路由迭代确定。胶囊i与上一层中的所有胶囊之间的耦合系数总和为1。并且,耦合系数由"routing softmax"函数来决定,该函数的初始logits(记为)则由胶囊i和胶囊j之间的对数先验耦合概率来确定。
对于动态路由机制,作者也给出了对应的算法流程。
2、损失函数
论文使用实例化向量的长度来表示胶囊实体存在的概率,当且仅当图像中存在数字类k时(论文案例是图像数字识别任务),作者希望数字类k的top-level胶囊具有较长的实例化向量。为了允许多个数字的情况,作者为每个digit胶囊使用单独的边界损失(margin loss):
其中,当数字类别k存在时,等于1,另外是0.9,则是0.1。对于不存在的数字类别,λ则可以防止初始学习过程缩小所有digit胶囊的活动向量长度,λ取值设定为0.5。