Capsule Network.

卷积神经网络通过局部连接和权值共享高效地识别视觉模式,但一个标量神经元通常只能回答“某种特征是否存在”,很难在同一输出中保留该特征的位置、朝向、尺度和形变。池化又会主动压缩空间细节:这有助于分类不受微小位移影响,却让网络难以显式表达“部件以什么姿态组成整体”。

胶囊网络(Capsule Network,CapsNet)把一组神经元组织成输出向量或矩阵的胶囊(capsule):激活强度表示某个实体是否存在,姿态参数描述该实体如何出现;下层胶囊先对上层实体的姿态做“投票”,再通过路由(routing)把相互一致的投票聚到同一个父胶囊。它试图同时实现两件事:类别存在性对无关变换保持不变,内部姿态则随输入变换可预测地改变。

本文目录:

  1. 从标量神经元到胶囊
    • (1) 不变性、等变性与姿态
    • (2) 部件—整体关系与投票
    • (3) 胶囊思想的前身
  2. 向量胶囊的计算
    • (1) 姿态预测向量
    • (2) Squash非线性
    • (3) 胶囊层的张量形状与参数量
  3. 基于一致性的动态路由
    • (1) 耦合系数与路由迭代
    • (2) 路由的直觉与边界
    • (3) 计算复杂度与训练问题
  4. 原始CapsNet架构与目标函数
    • (1) 从卷积特征到数字胶囊
    • (2) 边际损失
    • (3) 重构正则化
    • (4) 实验结果应如何解释
  5. 矩阵胶囊与EM路由
    • (1) 姿态矩阵与激活概率
    • (2) 把投票聚类写成EM算法
    • (3) Spread Loss与坐标添加
  6. 胶囊网络的后续路线
    • 6.1 局部路由与密集预测
    • 6.2 显式群等变性
    • 6.3 非迭代路由
    • 6.4 无监督部件—整体建模
  7. 胶囊网络的实证边界与现状
    • (1) 哪些能力来自设计,哪些已有证据
    • (2) 经典路由是否真的学到解析树
    • (3) 为什么胶囊网络没有成为视觉主流

符号约定:用\(u_i\)表示第$i$个下层胶囊的输出,\(\hat{u}_{j\lvert i}\)表示它对第$j$个父胶囊的姿态预测,\(b_{ij}\)表示路由对数权重,\(c_{ij}\)表示耦合系数,\(s_j\)表示父胶囊的总输入,\(v_j\)表示父胶囊输出;\(i\)遍历下层胶囊,\(j\)遍历候选父胶囊,\(r\)表示路由迭代次数。

1. 从标量神经元到胶囊

(1) 不变性、等变性与姿态

传统神经元对输入做线性组合,再经过激活函数输出一个标量。一个卷积通道可以检测“是否出现眼睛”,但它不会用结构化变量同时表示眼睛的方向、尺度和局部坐标。网络若要恢复这些属性,只能把它们分散编码在许多通道的激活模式中。

胶囊把一个实体的表示拆成两类信息:

这一区分对应两种不同的变换行为:

最大池化可以让分类器对小范围位移近似不变,却会丢弃“特征在哪里”这一信息:

胶囊网络的目标是让向量范数近似保持不变、方向随姿态变化。输入发生改变时,内部表示\(v^1\)记录变化,而\(\Vert v^1\Vert\)仍表示同一实体存在:

必须注意,这是一种设计目标,不是原始胶囊层自动满足的严格数学保证。若希望对旋转群或其他变换群具有可证明等变性,还需要第$6.2$节介绍的群等变结构。

(2) 部件—整体关系与投票

识别物体不仅要知道部件出现过,还要判断它们之间的几何关系是否合理。眼睛、鼻子和嘴巴都出现,并不意味着它们一定组成一张脸;只有这些部件预测出的脸部姿态彼此一致时,整体假设才更可信。

胶囊网络把这一过程写成三步:

  1. 每个子胶囊根据自身姿态预测候选父胶囊的姿态。
  2. 父胶囊聚合来自多个子胶囊的预测。
  3. 与聚合结果一致的预测获得更大路由权重,不一致的预测被分配给其他父胶囊。

胶囊之间传递的是“实体存在 + 实体姿态”的结构化证据。路由承担的是一种软分组任务:决定哪些低层实体应该共同解释为同一个高层实体。

(3) 胶囊思想的前身

⚪ Transforming Auto-Encoders:用实例化参数表示视觉实体

早期的Transforming Auto-Encoder已经把隐变量分为存在概率和实例化参数。训练时给定图像及一个已知变换,编码器提取实体表示,再让变换作用于实例化参数,解码器据此重建变换后的图像。

这一方法建立了胶囊网络最重要的表示观念:网络不应只学会“看到任何姿态都输出相同特征”,还应显式保留输入如何变化。它尚未引入后来的胶囊间路由,但已经把不变识别与等变姿态分开。

2. 向量胶囊的计算

(1) 姿态预测向量

⚪ Vector Capsule:用向量方向编码姿态

设下层胶囊输出为\(u_i\in\mathbb{R}^{d_{\mathrm{in}}}\)。它针对每个候选父胶囊\(j\)使用不同的变换矩阵:

\[\hat{u}_{j\lvert i}=W_{ij}u_i, \qquad W_{ij}\in\mathbb{R}^{d_{\mathrm{out}}\times d_{\mathrm{in}}}.\]

\(\hat{u}_{j\lvert i}\)称为预测向量(prediction vector)或“投票”。矩阵\(W_{ij}\)学习的是子实体与父实体之间的姿态关系:若子胶囊检测到一只眼睛,它可以据此预测整张脸的位置和朝向。

父胶囊对所有子胶囊投票做加权求和:

\[s_j=\sum_i c_{ij}\hat{u}_{j\lvert i}.\]

其中\(c_{ij}\geq 0\)且对每个固定的\(i\)满足\(\sum_jc_{ij}=1\)。因此每个子胶囊把自己的解释权分配给候选父胶囊,而一个父胶囊可以同时接收许多子胶囊的证据。

(2) Squash非线性

父胶囊的总输入经过压缩函数得到输出:

\[v_j=\operatorname{squash}(s_j) =\frac{\Vert s_j\Vert^2}{1+\Vert s_j\Vert^2} \frac{s_j}{\Vert s_j\Vert}.\]

当\(s_j=0\)时定义\(v_j=0\)。这个函数保持方向不变,并把向量长度压到\([0,1)\):

\[\Vert v_j\Vert=\frac{\Vert s_j\Vert^2}{1+\Vert s_j\Vert^2}.\]

小输入会被强烈压向零,大输入则逐渐接近单位长度。原论文把\(\Vert v_j\Vert\)解释为实体存在概率,但它没有经过概率校准,也不满足多类别概率之和为一;更准确的说法是,它是一个被训练为表示存在性的有界激活强度。

这个非线性还存在数值和优化代价:零点附近的梯度很小,大范数区域又会饱和;实现时必须为\(\Vert s_j\Vert\)加入极小量,避免除零。

(3) 胶囊层的张量形状与参数量

若一个批次有\(B\)个样本,下层包含\(N\)个\(d_{\mathrm{in}}\)维胶囊,上层包含\(M\)个\(d_{\mathrm{out}}\)维胶囊,则主要张量形状为:

\[\begin{aligned} u &: [B,N,d_{\mathrm{in}}],\\ W &: [N,M,d_{\mathrm{out}},d_{\mathrm{in}}],\\ \hat{u} &: [B,N,M,d_{\mathrm{out}}],\\ c &: [B,N,M],\\ v &: [B,M,d_{\mathrm{out}}]. \end{aligned}\]

若每个子—父胶囊对都使用独立矩阵,参数量为\(NMd_{\mathrm{in}}d_{\mathrm{out}}\),投票张量占用\(O(BNMd_{\mathrm{out}})\)内存。胶囊数量随空间分辨率增长时,这两个量会迅速成为瓶颈。卷积胶囊通常通过局部连接、位置间共享变换或限制候选父胶囊来降低成本。

3. 基于一致性的动态路由

(1) 耦合系数与路由迭代

⚪ Dynamic Routing:迭代强化一致投票

动态路由为每个子—父胶囊对维护一个路由对数权重\(b_{ij}\)。初始化\(b_{ij}=0\)后,第$t$轮先沿候选父胶囊维度归一化:

\[c_{ij}^{(t)} =\frac{\exp(b_{ij}^{(t)})}{\sum_k\exp(b_{ik}^{(t)})}.\]

然后计算父胶囊输入和输出:

\[\begin{aligned} s_j^{(t)}&=\sum_i c_{ij}^{(t)}\hat{u}_{j\lvert i},\\ v_j^{(t)}&=\operatorname{squash}\left(s_j^{(t)}\right). \end{aligned}\]

最后用预测向量与父胶囊输出的点积衡量一致性:

\[b_{ij}^{(t+1)} =b_{ij}^{(t)}+\hat{u}_{j\lvert i}^{\top}v_j^{(t)}.\]

点积越大,下一轮\(c_{ij}\)越大;方向相反的预测不会得到强化。重复\(r\)轮后返回最后一轮\(v_j\)。算法中\(b_{ij}\)是未归一化的logit,\(c_{ij}\)才是耦合系数,最终结果也不是\(c_{ij}=b_{ij}\)。

动态路由既在训练时执行,也在验证和推理时执行。路由没有独立可学习参数,但预测矩阵\(W_{ij}\)和前后网络仍通过反向传播训练;计算图通常展开固定轮数,而不是迭代到数学收敛。

(2) 路由的直觉与边界

动态路由常被解释为“按一致性聚类”:父胶囊输出类似当前簇中心,耦合系数类似软分配,点积更新让相似投票逐渐聚在一起。它也与注意力有相似之处,因为两者都计算内容相关的加权和。

但动态路由不等同于标准聚类或概率推断:

因此,“路由权重变尖锐”不等于“网络发现了真实部件—整体关系”。路由是否具有语义,需要通过干预姿态、可视化投票、组合泛化或受控数据实验验证。

(3) 计算复杂度与训练问题

设投票向量维度为\(d\),动态路由每轮聚合与一致性更新约需\(O(BNMd)\)计算,\(r\)轮为\(O(rBNMd)\)。这还没有包含生成投票所需的矩阵乘法。与只做一次稀疏卷积相比,胶囊层同时枚举大量子—父组合,并反复读写投票和耦合张量,硬件利用率较低。

路由还会带来三类优化问题:

  1. 梯度路径变长。预测矩阵既影响父胶囊输出,又通过多轮一致性间接改变路由权重。
  2. 胶囊竞争失衡。早期偶然获得较大激活的父胶囊可能吸收更多投票,其他胶囊因缺少输入而训练不足。
  3. 深层扩展困难。每增加一层都引入新的投票与路由,显存、计算和数值敏感性同时累积。

增加路由轮数并不保证性能单调提升。原始CapsNet常使用三轮,这是经验设置而非收敛定理;实际实现应把一轮路由和不带迭代的加权聚合作为必要基线。

4. 原始CapsNet架构与目标函数

(1) 从卷积特征到数字胶囊

原始MNIST CapsNet依次包含:

  1. 一个具有$256$个\(9\times9\)卷积核、步幅为$1$的卷积层,把局部像素变成标量特征。
  2. PrimaryCaps层,用$32$组卷积产生\(6\times6\times32=1152\)个八维胶囊;同一位置的八个标量组成一个胶囊。
  3. DigitCaps层,包含$10$个十六维胶囊,每个胶囊对应一个数字类别;所有PrimaryCaps向每个数字胶囊投票,并执行动态路由。

分类时取十个数字胶囊的向量范数,最大者作为预测类别。不同于普通分类器的softmax,各类别长度不是互斥归一化概率,因此同一图像可以允许多个类别胶囊同时激活;这也是模型处理重叠数字的出发点。

(2) 边际损失

对类别\(k\),令\(T_k=1\)表示该类别存在,边际损失为:

\[L_k=T_k\max(0,m^+-\Vert v_k\Vert)^2 +\lambda(1-T_k)\max(0,\Vert v_k\Vert-m^-)^2.\]

原论文设置\(m^+=0.9\)、\(m^-=0.1\)、\(\lambda=0.5\)。第一项要求真实类别胶囊的长度至少接近\(0.9\),第二项压低不存在类别的长度。总分类损失为\(\sum_kL_k\)。

$\lambda$降低大量负类别在训练早期的影响,避免网络只靠把所有胶囊都压到零来减小损失。由于每类独立计算边际损失,该目标也适用于一张图像中存在多个目标类别的情况。

(3) 重构正则化

训练时只保留真实类别胶囊的输出,其余类别胶囊置零,再通过全连接解码器重构输入图像。原始解码器的层宽为$512$、$1024$和$784$,重构平方误差以$0.0005$的权重加入总损失:

\[L=\sum_kL_k+0.0005L_{\mathrm{recon}}.\]

重构任务迫使十六维数字胶囊保存足够多的姿态和书写风格信息,而不只保留分类所需的单一证据。改变某一维并观察重构图像,可以检验该维是否控制笔画粗细、倾斜、宽度或位置:

但单维遍历呈现可解释变化,并不证明每一维都对应唯一且稳定的物理因素。潜变量可能相互纠缠,其含义也会随随机种子和数据分布改变。

(4) 实验结果应如何解释

原论文在MNIST上展示了较低分类误差,并在MultiMNIST中把两个重叠数字分别重构:

重构结果说明类别胶囊能够从混合图像中提取与指定标签相关的像素结构,为对象级表示提供了直观证据。论文还报告从MNIST训练分布迁移到仿射变换数据时优于当时的卷积基线。

5. 矩阵胶囊与EM路由

(1) 姿态矩阵与激活概率

⚪ Matrix Capsules:分离姿态矩阵与实体激活

向量胶囊把姿态和存在性都压进同一个向量,方向表示姿态、长度表示激活。矩阵胶囊把二者显式分开:第$i$个胶囊输出一个激活概率\(a_i\)和一个\(4\times4\)姿态矩阵\(M_i\)。

子胶囊对父胶囊的投票为:

\[V_{ij}=M_iW_{ij}.\]

若输入实体经历变换\(T\),理想情况下姿态变为\(TM_i\),投票也随之变为\(TM_iW_{ij}\);多个部件对同一整体的预测仍保持一致。这种矩阵乘法使“部件到整体”的坐标变换更直观,也便于描述视点变化。

(2) 把投票聚类写成EM算法

⚪ EM Routing:以高斯混合聚类姿态投票

EM路由把父胶囊视为候选高斯簇,把投票矩阵展开后的每个维度视为观测。责任度\(R_{ij}\)表示子胶囊\(i\)属于父胶囊\(j\)的程度。

在M-step中,用\(R_{ij}a_i\)加权估计父胶囊各姿态维度\(h\)的均值与方差:

\[\begin{aligned} r_{ij}&=R_{ij}a_i,\\ \mu_j^h&=\frac{\sum_i r_{ij}V_{ij}^h}{\sum_i r_{ij}},\\ (\sigma_j^h)^2&=\frac{\sum_i r_{ij}(V_{ij}^h-\mu_j^h)^2}{\sum_i r_{ij}}. \end{aligned}\]

父胶囊激活由解释这些投票的代价决定:

\[\begin{aligned} \operatorname{cost}_j^h &=(\beta_u+\log\sigma_j^h)\sum_i r_{ij},\\ a_j&=\operatorname{sigmoid}\left( \lambda\left(\beta_a-\sum_h\operatorname{cost}_j^h\right) \right). \end{aligned}\]

在E-step中,根据父胶囊激活与高斯似然重新计算责任度:

\[R_{ij} =\frac{a_j\prod_h\mathcal{N}(V_{ij}^h;\mu_j^h,(\sigma_j^h)^2)} {\sum_k a_k\prod_h\mathcal{N}(V_{ik}^h;\mu_k^h,(\sigma_k^h)^2)}.\]

重复若干轮后,均值\(\mu_j\)成为父胶囊姿态,\(a_j\)表示其存在概率。逆温度\(\lambda\)随迭代增大,使分配逐渐变尖锐。与点积路由相比,EM路由显式建模投票方差与激活代价,但对方差下界、对数域计算、初始化和归一化非常敏感。

(3) Spread Loss与坐标添加

矩阵胶囊使用Spread Loss拉开真实类别激活\(a_t\)与其他类别\(a_i\):

\[L=\sum_{i\neq t}\max(0,m-(a_t-a_i))^2.\]

训练过程中逐渐增大间隔\(m\),先学习容易区分的样本,再要求更大的类别间隔。

卷积胶囊共享位置间的变换矩阵,这提高了平移泛化,却让网络难以知道特征的绝对位置。原论文把归一化行列坐标加到投票矩阵的指定元素中,称为坐标添加(coordinate addition)。这样网络既共享局部部件—整体变换,又保留对象在整幅图像中的位置。

6. 胶囊网络的后续路线

6.1 局部路由与密集预测

⚪ SegCaps:把胶囊扩展到高分辨率分割

原始全连接胶囊层让每个子胶囊向所有父胶囊投票,无法直接扩展到医学图像分割。SegCaps只在局部空间窗口内路由,并让同一类型胶囊在不同位置共享变换矩阵;解码端使用反卷积胶囊恢复分辨率。

局部路由把子—父连接从全局稠密关系改为卷积式邻域,显著减少参数和内存,也保留像素级输出。但它同时削弱了全局部件—整体分组能力:远距离区域要通过堆叠多层才能通信。

6.2 显式群等变性

⚪ Group Equivariant Capsule Network:对指定变换群建立保证

经典胶囊网络希望姿态随视点变化,却没有保证学习出的变换矩阵满足群结构。群等变胶囊把姿态定义为变换群中的元素,并让投票、距离和均值运算与群作用相容,从而对指定群得到可证明等变性。

这种保证依赖预先选择的群,例如平面旋转或刚体变换。若真实数据变化不属于该群,或还包含遮挡、非刚性形变和光照变化,群等变结构仍需与普通特征学习结合。

6.3 非迭代路由

⚪ Self-Routing Capsule Network:一次前向计算完成路由

Self-Routing不再通过父胶囊输出反复修正耦合系数,而是让子胶囊直接预测到各父胶囊的路由权重和姿态贡献。路由因此变成一次可学习前向计算,可以与卷积层相同地批量执行。

它牺牲了“父胶囊与投票反复达成一致”的解释,却减少了推理延迟和展开路由造成的显存占用。该结果也提示:胶囊表示与迭代路由是两个可以独立检验的设计,使用胶囊并不必然要求动态路由。

⚪ Efficient-CapsNet:以自注意力替代迭代路由

Efficient-CapsNet利用预测向量之间的成对一致性生成非迭代注意力权重,并通过更紧凑的卷积骨干减少胶囊数量。它在小型图像任务中用较少参数保留胶囊表示,同时避免多轮动态路由。

自注意力路由仍需计算胶囊间关系,因此“非迭代”不等于没有二次复杂度;它主要消除了路由轮数和循环依赖。对大图像而言,局部化、稀疏化或层次化仍然不可缺少。

6.4 无监督部件—整体建模

⚪ Stacked Capsule Autoencoders:从无标签图像发现对象与部件

Stacked Capsule Autoencoder由两级组成:部件胶囊自编码器把图像分解为若干带姿态的部件,对象胶囊自编码器再把部件集合解释为少量对象。模型通过重构部件及其几何关系学习,不依赖类别标签来指定哪个胶囊对应哪个对象。

它把胶囊从监督分类器推进到对象中心表示学习,并在合成场景中展示了无监督分组能力。但模型依赖明确的生成假设和受控数据;面对复杂纹理、背景和大量对象时,如何稳定发现可复用部件仍是开放问题。

7. 胶囊网络的实证边界与现状

(1) 哪些能力来自设计,哪些已有证据

胶囊网络的结构明确鼓励以下行为:姿态参数保留变换信息;路由根据投票一致性组合部件;类别胶囊允许多个对象同时激活;重构目标迫使表示保存实例细节。这些都是合理的归纳偏置。

但“鼓励”不等于“保证”。评估胶囊模型时应分别检验:

小型数据集上的正面结果证明胶囊思想可以工作,却不足以说明它在所有视觉任务上优于CNN或Vision Transformer。

(2) 经典路由是否真的学到解析树

⚪ 路由机制的消融研究:尖锐耦合不等于更好分组

该研究比较多种路由方式后发现,动态路由与EM路由确实会让耦合系数趋向极化,但这种极化并不稳定对应更好的分类;一些简单、固定或随机的路由基线也能取得相近甚至更好结果。

这说明原始模型的性能可能同时来自向量表示、预测变换、损失函数和网络容量,不能把全部收益归因于“路由发现了部件层次”。可靠结论需要对路由、胶囊维度、重构损失和参数量分别消融。

⚪ 深层胶囊的扩展研究:路由可能造成训练饥饿

深层胶囊网络中,早期路由偏好会让部分胶囊持续接收较少信号,形成类似“训练饥饿”的现象;层数增加后,梯度和激活失衡会逐层累积。该研究没有证明所有胶囊架构都不可扩展,但对“只需堆叠路由层就会自然形成解析树”的假设提出了实证质疑。

路由可视化也容易产生误导:一个耦合矩阵看起来稀疏,只说明模型做出了选择,不说明选择对应人类定义的部件。应结合受控干预、跨姿态一致性和下游组合泛化验证其语义。

(3) 为什么胶囊网络没有成为视觉主流

胶囊网络没有被完全否定,但经典形式面临几个现实障碍:

  1. 计算不规则。生成所有投票并迭代路由,比标准卷积和矩阵乘法更难高效并行。
  2. 扩展成本高。高分辨率、更多对象和更多胶囊类型都会扩大子—父组合张量。
  3. 优化敏感。路由轮数、压缩函数、方差稳定项、损失权重和初始化相互影响。
  4. 收益不稳定。在小型受控数据上观察到的优势,常随更强骨干、数据增强和现代基线而缩小。
  5. 替代方案成熟。群等变网络可以显式编码对称性,对象中心模型可以学习分组,视觉Transformer和槽注意力可以进行全局关系建模。

因此,胶囊网络目前更适合作为一种结构化表示与对象中心推理思想,它最有价值的问题仍然成立:模型如何同时表示“是什么”和“以什么姿态存在”,以及如何根据几何一致性把部件组合成对象。现代方法未必保留Squash或动态路由,却持续在等变网络、对象槽、集合预测和生成式场景分解中回答这些问题。