Capsule Networks/zh
| Article | |
|---|---|
| Topic area | Deep Learning |
| Prerequisites | Convolutional Neural Network, Backpropagation |
概述
胶囊网络(CapsNet)是一种神经网络架构,其中称为胶囊的神经元组共同编码视觉实体的实例化参数,而不是发出单一的标量激活。每个胶囊输出一个向量(或矩阵),其长度表示实体存在的概率,其方向表示姿态、形变、颜色或纹理等属性。胶囊通过动态路由机制跨层连接,该机制取代了传统卷积网络中的标量加权,使高层胶囊能够选择性地倾听其预测一致的低层胶囊。
胶囊网络由 Sabour、Frosst 和 Hinton 于 2017 年提出,旨在应对卷积架构所被认知的局限:它们依赖最大池化来实现平移不变性,而这会丢弃精确的空间关系,并且容易混淆经过旋转、镜像或其他变换的物体。通过强制每个胶囊建模显式的姿态,胶囊网络旨在对视角变化具有等变性,而不仅仅是不变性,从而恢复池化层所丢弃的部分结构。
尽管胶囊网络在生产系统中仍属小众架构,但它们影响了关于部分-整体层次结构、等变表示以及基于路由的注意力的研究。后续变体——EM路由、自路由、堆叠胶囊自编码器和 GLOM——探索了替代的路由规则和训练目标。
动机与直觉
标准卷积层通过在每个空间位置计算标量激活来检测特征,然后通过池化对其进行聚合。池化以换取平移容忍度为代价丢弃了特征的精确位置。Hinton 长期以来主张这是一种浪费:大脑几乎肯定保留了姿态信息,并依赖各部分姿态之间的一致性来识别整体,这一思想有时被概括为"等变性,而非不变性"。
胶囊试图将实体与其姿态一并编码。如果一张脸是整体,而眼睛、鼻子和嘴巴是部分,那么每个部分胶囊都可以预测脸部胶囊应该位于何处——例如,给定典型的面部几何结构,眼睛的位置可以预测脸部的位置。当多个部分胶囊预测出相同的脸部姿态时,网络就有强有力的证据表明存在一张脸。相反,部分预测之间的分歧则表明要么发生了误检,要么这是一种非面部的特征排列。这种重合检测是胶囊路由背后的运作原理。
胶囊表示
主胶囊通常源自一个卷积,其输出通道被重塑为向量。对于由 $ i $ 索引的胶囊层,每个胶囊产生一个输出向量 $ u_i \in \mathbb{R}^{d_i} $。其长度 $ \|u_i\| $ 通过一种称为squash 函数的非线性函数被约束在 $ [0, 1) $ 内:
$ {\displaystyle v = \frac{\|s\|^2}{1 + \|s\|^2}\, \frac{s}{\|s\|}} $
其中 $ s $ 是激活前的输入向量,$ v $ 是经过 squash 处理后的输出。短向量被推向零;长向量饱和到略低于单位长度。范数 $ \|v\| $ 被解释为该胶囊所建模的实体存在的概率,而方向 $ v / \|v\| $ 则编码其实例化参数。
高层胶囊消费来自低层胶囊的预测。每个低层胶囊 $ i $ 贡献一个预测向量 $ \hat{u}_{j|i} = W_{ij} u_i $,其中 $ W_{ij} $ 是一个学习得到的变换矩阵,它将胶囊 $ i $ 的姿态转换为对胶囊 $ j $ 姿态的预测。胶囊 $ j $ 的总输入是这些预测的加权和,权重由路由决定。
按一致性的动态路由
动态路由迭代地细化连接一层中胶囊 $ i $ 与下一层中胶囊 $ j $ 的分配权重 $ c_{ij} $。初始时,对数先验 logit $ b_{ij} $ 被设为零。路由过程重复进行少量迭代(通常为 3 次):
- 通过对目标胶囊取softmax来计算耦合系数:$ c_{ij} = \mathrm{softmax}_j(b_{ij}) $。
- 计算每个输出胶囊的激活前值:$ s_j = \sum_i c_{ij}\,\hat{u}_{j|i} $。
- 通过 squash 得到 $ v_j = \mathrm{squash}(s_j) $。
- 按一致性更新 logit:$ b_{ij} \leftarrow b_{ij} + \hat{u}_{j|i} \cdot v_j $。
当胶囊 $ i $ 的预测与胶囊 $ j $ 的一致性输出对齐时,点积 $ \hat{u}_{j|i} \cdot v_j $ 较大,从而增强耦合并强化一致性。预测不一致的胶囊则其耦合会衰减。路由在推理阶段和训练阶段都会发生,但变换矩阵 $ W_{ij} $ 是唯一通过梯度下降训练的参数。
损失函数
原始 CapsNet 使用边际损失,这是一种按类别的目标,鼓励对应的输出胶囊在该类存在时具有较长的向量,不存在时具有较短的向量:
$ {\displaystyle L_k = T_k \max(0, m^+ - \|v_k\|)^2 + \lambda (1 - T_k)\, \max(0, \|v_k\| - m^-)^2} $
其中若类别 $ k $ 存在则 $ T_k = 1 $,$ m^+ = 0.9 $,$ m^- = 0.1 $,$ \lambda = 0.5 $ 降低缺席类别项的权重以防止过早收缩。总损失按类别求和。一个重构解码器以激活胶囊的向量为输入,可选地添加一个小的均方重构项,以鼓励该胶囊保留足够的信息来重绘输入。
变体
已经提出了若干路由规则和架构扩展:
- EM 路由(Hinton 等人,2018)以期望最大化过程取代基于点积的一致性。姿态由一个 4x4 矩阵和一个激活 logit 表示;一致性被拟合为高斯混合,当各部分强烈聚类时这会使路由决策更加锐利。
- 自路由胶囊通过一个小型子网络直接学习路由函数,而不是迭代至收敛,以可解释性换取速度。
- 堆叠胶囊自编码器颠倒了典型设置:每个胶囊预测其部分的姿态,网络以无监督方式训练以重构部件模板。
- GLOM(Hinton,2021)进一步推广部分-整体思想,用类 transformer 表示中的一致性岛屿取代离散胶囊。
- 卷积胶囊在空间位置上应用相同的变换矩阵,从而恢复卷积的参数共享效率。
与卷积网络的比较
胶囊网络在三个方面不同于标准的 CNN。第一,它们用向量姿态取代标量特征,因此每个单元都携带了原本会被池化抹去的结构信息。第二,它们以按一致性路由取代池化,这是一种学习得到的、依赖于输入的分配,而非固定的归约。第三,它们追求等变性:当输入被变换时,胶囊的输出以结构化的方式变化,而不是保持不变。CNN 通过数据增强和池化来实现不变性;胶囊网络则尝试将等变性烘焙进架构本身。
在实践中,在 MNIST 和 smallNORB 等小型数据集上,CapsNet 与可比的 CNN 持平或略胜一筹,并能更优雅地处理新视角。然而,在 ImageNet 等较大的数据集上,原始架构尚未弥合与深层残差网络或视觉 transformer之间的差距,部分原因在于动态路由难以高效地扩展和参数化。
局限与开放问题
胶囊网络面临若干实际障碍。路由是迭代的且不易并行化,因此与参数量相近的前馈层相比,每批次的吞吐量较差。内存开销随相邻层胶囊数量的乘积而增长,因为每一对都拥有自己的变换矩阵。训练稳定性对路由迭代次数以及 squash 非线性函数十分敏感,后者有上界,可能使梯度变得平缓。最后,朝向部分-整体层次结构的架构性归纳偏置迄今为止在小型、结构化的数据集上展现出最清晰的收益;等变性能否在现代基础模型的规模上得到利用,仍是一个开放的研究问题。
尽管存在这些局限,其概念性贡献——表示应当显式地编码姿态,以及预测之间的一致性是一种强大的学习信号——仍持续影响着等变网络、图神经网络和结构化注意力的研究。
参考文献
Cite error: <ref> tag with name "sabour2017" defined in <references> has group attribute "" which does not appear in prior text.
Cite error: <ref> tag with name "hinton2018em" defined in <references> has group attribute "" which does not appear in prior text.
Cite error: <ref> tag with name "kosiorek2019" defined in <references> has group attribute "" which does not appear in prior text.
Cite error: <ref> tag with name "hinton2021glom" defined in <references> has group attribute "" which does not appear in prior text.