前言
“Dynamic Routing Between Capsules”是由Hinton等联合发表在NIPS会议上。提出了一个新的神经网络---胶囊网络与囊间的动态路由算法。
上篇文章中提到了动态路由算法,由于没太理解,因此找了原论文并且结合参考文献的4篇博文进行解读,才对胶囊网络与动态路由算法的过程有了一点认识。本篇文章的所有图片来源都是来自4篇博文,并且参考了其中部分知识。对胶囊网络有兴趣的同学可以阅读下,非常有帮助。
本篇文章约3.2k字,预计阅读12分钟。
1. 作者
本篇论文是由Sara Sabour、Nicholas Frosst与Geoffrey E. Hinton联合发表。对于胶囊网络(Capsules Net)的提出者之一Geoffrey E. Hinton(「杰弗里·埃弗里斯特·辛顿」),我们应该了解下:
❝他是「反向传播算法」、「对比散度算法」和「波尔兹曼机」的发明人之一,也是深度学习的积极推动者,被誉为“「深度学习之父」”。因在深度学习方面的贡献与约书亚·本希奥和杨立昆一同被授予了2018年的图灵奖。----- 维基百科
❞
2. 背景
2.1 CNN的特性与缺陷
卷积神经网络(CNN)在图像分类上取得了非常显著的效果。它有几个非常重要的特性:
「平移不变性(translation invariance )」:简单来说不管图片的内容如何进行平移,CNN还能输出与之前一样的结果。为什么具有平移不变性?这个性质由全局共享权值和Pooling共同得到的;
「平移等变性(translation equivariance)」:对于一个函数,如果你对其输入施加的变换也会同样反应在输出上,那么这个函数就对该变换具有等变性。这由局部连接和权值共享决定;
例:
❝如果输出是给出图片中猫的位置,那么将图片中的猫从左边移到右边,这种平移也会反应在输出上,我们输出的位置也是从左边到右边,那么我们则可以说CNN有等变性;如果我们只是输出图片中是否有猫,那么我们无论把猫怎么移动,我们的输出都保持”有猫”的判定,因此体现了CNN的不变性。---引自http://www.lunarnai.cn/2018/03/23/CNN_euivariant_invariant/
❞
「不具备特性」:
「旋转不变性」:做过简单的图像分类就应该知道,当我们为了增强模型性能,总是会做图像增强的工作,其中就包括旋转,这就是为了克服CNN不具备旋转不变性的缺陷;
根据以上信息我们可以得出「结论」:CNN擅长检测特征,但在探索特征之间的「空间关系」(大小,方向)「方面效果不佳」。例如,对于以下扭曲的人脸图,CNN可能会认为这是一张正常的人脸。
2.2 最大池化(Max Pooling)的缺陷
作者认为Max Pooling在每一层仅保留最活跃的特征,而忽略了其他的特征,即损失了有价值的东西。
❝This type of “routing-by-agreement” should be far more effective than the very primitive form of routing implemented by max-pooling, which allows neurons in one layer to ignore all but the most active feature detector in a local pool in the layer below.
❞
3. 胶囊网络
简单的CNN模型可以正确提取鼻子,眼睛和嘴巴的特征,但会错误地激活神经元以进行面部检测。如果没有意识到「空间方向和大小」上的不匹配,则面部检测的激活将太高【简单来说,并不是存在眼睛、鼻子、嘴巴就一定是一张脸,还有考虑各个部位的方向问题、大小问题等】。
但是,如果每个神经元都包含特征的概率和其他属性。例如,它输出一个包含[可能性,方向,大小]的「向量」。有了这些空间信息,就可以检测到鼻子,眼睛和耳朵的特征在方向和大小上的不一致,从而为面部检测输出低得多的激活力。
「因此用向量来代替单个神经元标量」,即文章提到的“胶囊”(Capsule),形成了胶囊网络。
3.1 胶囊
以下通过原文的描述对胶囊下一些定义:
1、一个胶囊是一组神经元(「输入」),即神经元「向量」(activity vector),表示特定类型的实体(例如对象或对象部分)的实例化参数(例如可能性、方向等)。
❝A capsule is a group of neurons whose activity vector represents the instantiation parameters of a specific type of entity such as an object or an object part.
❞
2、「使用胶囊的长度(模)来表示实体(例如上述的眼睛、鼻子等)存在的概率」,并使用其方向(orientation)来表示除了长度以外的其他实例化参数,例如位置、角度、大小等。
❝We use the length of the activity vector to represent the probability that the entity exists and its orientation to represent the instantiation parameters.
❞
❝In this paper we explore an interesting alternative which is to use the overall length of the vector of instantiation parameters to represent the existence of the entity and to force the orientation of the vector to represent the properties of the entity.
❞
3、胶囊的「向量输出」的长度(模长)不能超过1,可以通过应用一个「非线性函数」使其在方向不变的基础上,缩小其大小。
❝cannot exceed 1 by applying a non-linearity that leaves the orientation of the vector unchanged but scales down its magnitude.
❞
接下来我们主要介绍胶囊之间的传播与训练过程。
3.1.1 问题定义
胶囊网络总的计算过程如下所示(图来自[4]):
我们假设低层次的胶囊(输入)是探测眼睛、嘴巴、鼻子,整个胶囊网络的目的(输出)是探测人脸。为了与普通神经网络相比,完全可以将胶囊网络的计算看成前向传播的过程。
3.1.2 低层胶囊输入
输入为较为低层次的胶囊(Primary Capsule) ,其中, 表示胶囊的个数, 表示每个胶囊内的神经元个数(向量长度)。图中的 可以解释为监测到眼睛、嘴巴、鼻子三个低层次的胶囊。
3.1.3 计算预测向量(predict vector)
应用一个转换矩阵(transformation matrix) , 表示输出胶囊的神经元数量,将输入