先容

在这个关于胶囊网络的系列文章的第一部分,我谈到了这个新架构背后的基本直觉和动机。
在这一部分,我将描述什么是胶囊,它内部是如何事情的,以及它背后的直觉。
不才一部分我将紧张关注动态路由算法。

什么是胶囊?

为了回答这个问题,我认为引用胶囊的第一篇论文是一个好主张—Hinton等人的“转化自动编码器”。
下面供应了对付理解胶囊很主要的部分:

理解Hinton的胶囊收集第二部分胶囊是若何工作的

“人工神经网络该当利用局部胶囊”来实行一些相称繁芜的内部打算,而不是针对”神经元“活动中的视点不变性,利用单个标量输出来总结局部复制特色检测器的活动。
他们的输入,然后将这些打算的结果封装成一个高度信息量输出的小向量。
每个胶囊学习识别在有限范围下的不雅观察条件和变形的隐式定义的视觉实体,并且输出实体存在于其有限的域内的概率和一组“实例化参数”,其可以包括精确的姿态,照明以及视觉实体相对付该实体的隐式定义规范版本的变形。
当胶囊正常事情时,视觉实体存在的概率是局部不变的 — 当胶囊覆盖的有限范围内的实体在可能的外不雅观上移动时,它不会改变。
然而,实例化参数是“等变的” —随着不雅观察条件的变革以及实体在外不雅观流形上的移动,实例化参数会发生相应的变革,由于它们代表了实体在外不雅观流形上的固有坐标。

上面的段落非常密集,我花了一段韶光才逐句弄清楚它的意思。
以下是上述段落的版本,据我所知:

人造神经元输出一个标量。
此外,CNN利用卷积层,对付每个内核,在全体输入体积内复制相同内核的权重,然后输出一个2D矩阵,个中每个数字是该内核与一部分输入体积的卷积输出。
以是我们可以把这个二维矩阵作为复制特色检测器的输出。
然后将所有内核的二维矩阵堆叠在一起,以产生卷积层的输出。

CapsNet不仅可以识别数字,还可从内部表示天生它们

然后,我们试图在神经元的活动中实现视点不变性。
我们通过连续查看上述二维矩阵中的区域并选择每个区域中的最大数目的最大池化的方法来做到这一点。
结果,我们得到了我们想要的 —活动的不变性。
不变意味着通过改变输入一点,输出仍旧保持不变。
活动只是神经元的输出旗子暗记。
换句话说,在输入图像中,我们将要检测的工具轻微移动一下,网络活动(神经元的输出)将不会由于最大池化而改变,网络仍旧会检测到工具。

上面描述的机制不是很好,由于最大池化丢失有代价的信息,也不编码特色之间的相对空间关系。
我们该当利用胶囊,由于它们将以矢量形式(而不是神经元输出的标量)封装关于它们正在检测的特色状态的所有主要信息。

胶囊封装了所有关于他们正在以向量形式检测到的特色状态的主要信息。

胶囊将特色检测的概率作为其输出向量的长度进行编码。
并且检测到的特色的状态被编码为该向量指向的方向(“实例化参数”)。
因此,当检测到的特色在图像周围移动或者其状态以某种办法改变时,概率仍旧保持不变(矢量长度不变),但是其方向改变。

设想一个胶囊检测图像中的脸部,其输出长度为0.99的3D矢量。
然后我们开始移动面部图像。
矢量将在其空间中旋转,表示检测到的脸部的变革状态,但其长度将保持固定,由于胶囊仍旧确定已经检测到脸部。
这便是Hinton所说的活动等量变革:当一个物体在图像中“移动到可能的外表上”时,神经活动将会改变。
与此同时,检测的概率保持不变,这是我们该当针对的不变性的形式,而不是CNNs供应的最大池化类型。

胶囊是如何事情的?

让我们比较胶囊与人造神经元。
下表总结了胶囊和神经元之间的差异:

胶囊和神经元之间的主要差异。
来源:naturomics给出的CapsNets的谈论

回忆一下,神经元从其他神经元吸收输入标量,然后乘以标量权重和总和。
然后将这个总和通报给许多可能的非线性激活函数中的一个,这些非线性激活函数采取输入标量并根据函数输出标量。
该输出标量将作为到其他神经元的输入。
这个过程的总结可以在表格和图表的右边看到。
本色上,人造神经元可以用3个步骤来描述:

输入标量的标量加权

加权输入标量之和

标量到标量的非线性

左:胶囊图;右:人造神经元

另一方面,除了新的步骤之外,胶囊具有上述3个步骤的矢量形式,输入的仿射变换:

输入向量的矩阵乘法

输入向量的标量加权

加权输入向量之和

矢量到矢量的非线性

让我们更好地理解胶囊内部发生的4个打算步骤。

1.输入向量的矩阵乘法

我们的胶囊收到的输入矢量(图中的u1,u2和u3)来自下面三层中的其他胶囊。
这些矢量的长度对较低级别的胶囊检测其相应工具的概率进行编码,并且矢量的方向对被检测工具的内部状态进行编码。
让我们假设较低级别的胶囊分别检测眼睛,嘴巴和鼻子,然后输出胶囊检测脸部。

然后这些矢量乘以相应权重矩阵W,W编码主要空间和较低级的特色(眼睛,嘴和鼻子)和较高等特色(脸)之间的其他关系.例如,矩阵W2j可以编码鼻子和脸部之间的关系:脸部以鼻子为中央,其大小是鼻子大小的10倍,并且其在空间中的方向对应于鼻子的方向,由于它们都位于同一平面上。
可以为矩阵W1j和W3j绘制类似的直觉。
乘以这些矩阵后,我们得到的是更高等特色的预测位置。
换句话说,u根据检测到的眼睛位置来表示脸部的位置,u2表示根据检测到的嘴部位置来表示脸部的位置,u3表示根据检测到的鼻子位置来表示脸的位置。

在这一点上,你的直觉该当是这样的:如果这三个低层次特色的预测指向同一个位置和状态,那么它必定是一张脸。

鼻子,嘴和眼睛胶囊的面部位置的预测紧密匹配。
那里必须有一张脸

2.输入向量的标量加权

乍一看,这个步骤与人造神经元在加入之前对其输入进行加权彷佛是非常类似的。
在神经元的情形下,这些权重是在反向传播期间学习的,但是在胶囊的情形下,它们是利用“动态路由”确定的,这是一种确定每个胶囊的输出去哪里的新方法。
我将专门给这个算法写一个帖子,在这里只供应一些直觉。

较低级别胶囊会将其输入发送到赞许其输入的较高等别胶囊。
这是动态路由算法的实质

在上面的图片中,我们有一个较低级别的胶囊须要“决定”发送它的输出到哪个更高等别的胶囊。

它将通过调度权重C做出决定,该权重将在把胶囊的输出发送到左侧或右侧的更高等别胶囊J和K之前,将该胶囊的输出相乘。

现在,更高等别的胶囊已经吸收到来自其他更低级别胶囊的许多输入向量。
所有这些输入都以红点和蓝点表示。
这些点聚拢在一起,这意味着较低级别胶囊的预测彼此靠近。
这便是为什么,例如,在胶囊J和K中都有一组红点。

那么,我们的低级胶囊该当把它输出到胶囊J还是胶囊K?这个问题的答案是动态路由算法的实质。
当低级胶囊的输出乘以相应的矩阵W时,阔别左边胶囊J中的“精确”预测的赤色簇。
另一方面,如果将落在与“精确”预测非常靠近的右边胶囊中的赤色簇K.低级胶囊具有丈量哪个高等胶囊更好地适应其结果的机制,并且将自动调度其权重,使得对应于胶囊K的权重C将是高的,并且对应于胶囊J的权重C将是低的。

3.加权输入向量的和

这一步类似于普通的人造神经元,代表了输入的组合。
我不认为这一步有什么特殊之处(除了是向量和标量的总和)。
因此,我们可以直接连续下一步。

4.“压扁”:新的矢量对矢量非线性

CapsNet引入的另一个创新是采取矢量的新型非线性激活函数,然后“压扁”它的长度不超过1,但不改变方向。

压缩非线性缩放输入矢量而不改变其方向

公式(蓝色矩形)的右侧缩放输入矢量su,它将具有单位长度,左侧(赤色矩形)实行附加缩放。
请记住,输出矢量长度可以阐明为胶囊检测到给定特色的概率。

标量形式的新型非线性图。
在实际运用中该功能对矢量进行操作

左边是运用于一维向量的压缩函数,这是一个标量。
我用它来演示函数的有趣的非线性形状。

只有将一维情形可视化才故意义;在实际运用中,它采取向量并输出一个向量,这将难以可视化。

结论

在这一部分,我们谈论了胶囊是什么,它实行的是什么样的打算,以及它背后的直觉。
我们看到胶囊的设计建立在人造神经元的设计之上,但将其扩展到矢量形式以许可更强大的代表性能力。
它还引入了矩阵权重来编码不同层次特色之间的主要层次关系,结果成功地实现了设计者的目标:关于输入变革和特色检测概率的不变性的神经元活动的等变性。

胶囊内部事情总结。
请把稳没有偏差,由于已经包含在W矩阵中,W可以容纳它和其他更繁芜的变换和关系

CapsNet上唯一剩下的部分便是胶囊算法之间的动态路由,以及这个新型网络体系构造的详细演习训练。
这些将在往后的帖子中谈论。

未完待续ing