胶囊网络(Capsule Networks)中的动态路由机制与向量输出原理
胶囊网络(Capsule Networks)是一种旨在解决传统卷积神经网络(CNN)在空间层次关系建模上不足的新型架构。其核心创新包括胶囊(Capsule) 的向量化输出和动态路由(Dynamic Routing) 机制。下面逐步解析其原理与实现过程。
1. 胶囊的基本概念
传统神经元的标量输出(如ReLU激活)仅能表示特征的强度,而胶囊是一个向量组,其输出向量的模长表示某个实体(如物体部分)存在的概率,方向编码该实体的空间属性(如姿态、纹理等)。例如,一个“猫耳”胶囊的向量方向可能编码耳朵的旋转角度。
2. 动态路由的目的
在多层胶囊中,低层胶囊(如“边缘”“角点”)需要将其输出传递给更合适的高层胶囊(如“眼睛”“鼻子”)。动态路由的作用是自适应地确定低层胶囊与高层胶囊间的连接权重,避免像池化那样丢弃空间信息。
3. 动态路由的步骤
假设低层胶囊 \(i\) 的输出向量为 \(\mathbf{u}_i\),高层胶囊 \(j\) 的输入为 \(\mathbf{s}_j\),动态路由通过以下步骤迭代更新权重:
步骤1:计算预测向量
对每个低层胶囊 \(i\) 和高层胶囊 \(j\),通过变换矩阵 \(\mathbf{W}_{ij}\) 将 \(\mathbf{u}_i\) 映射到高层胶囊的空间:
\[\hat{\mathbf{u}}_{j|i} = \mathbf{W}_{ij} \mathbf{u}_i \]
\(\hat{\mathbf{u}}_{j|i}\) 表示胶囊 \(i\) 对胶囊 \(j\) 的预测。
步骤2:加权求和与压缩
高层胶囊 \(j\) 的输入 \(\mathbf{s}_j\) 是所有低层预测的加权和:
\[\mathbf{s}_j = \sum_i c_{ij} \hat{\mathbf{u}}_{j|i} \]
其中 \(c_{ij}\) 是耦合系数(coupling coefficients),通过路由算法迭代更新,且满足 \(\sum_j c_{ij} = 1\)。
步骤3:非线性激活(压缩函数)
胶囊的输出向量 \(\mathbf{v}_j\) 需保持模长在 [0,1] 之间,使用压缩函数(squashing function):
\[\mathbf{v}_j = \frac{\|\mathbf{s}_j\|^2}{1 + \|\mathbf{s}_j\|^2} \frac{\mathbf{s}_j}{\|\mathbf{s}_j\|} \]
该函数保留方向,但将模长压缩到概率范围。
步骤4:迭代更新耦合系数
- 初始化对数 \(b_{ij} = 0\)(表示胶囊 \(i\) 与 \(j\) 的关联强度)。
- 迭代更新(通常3次):
- 计算耦合系数:\(c_{ij} = \frac{\exp(b_{ij})}{\sum_k \exp(b_{ik})}\)(Softmax)。
- 计算高层输出 \(\mathbf{v}_j\)(如上文步骤2-3)。
- 更新对数:\(b_{ij} \leftarrow b_{ij} + \hat{\mathbf{u}}_{j|i} \cdot \mathbf{v}_j\)(点积衡量预测与输出的一致性)。
4. 动态路由的直观解释
- 点积反馈:如果低层胶囊的预测 \(\hat{\mathbf{u}}_{j|i}\) 与高层输出 \(\mathbf{v}_j\) 方向一致,点积增大,耦合系数 \(c_{ij}\) 随之提升,强化该连接。
- 稀疏激活:最终只有少数高层胶囊接收显著权重,符合“部分-整体”的层次关系。
5. 与传统神经网络的区别
| 特性 | 传统神经元 | 胶囊网络 |
|---|---|---|
| 输出形式 | 标量(强度) | 向量(强度+属性) |
| 信息传递 | 固定连接(如全连接) | 动态路由(自适应) |
| 空间信息 | 池化可能导致丢失 | 通过向量方向保留 |
6. 优势与挑战
- 优势:
- 对 affine 变换(如旋转、缩放)具有等变性(equivariance)。
- 更擅长处理重叠物体或复杂空间关系。
- 挑战:
- 动态路由迭代计算成本高。
- 大规模数据集(如ImageNet)上表现不及CNN。
通过以上步骤,胶囊网络试图模拟视觉系统的层次推理过程,动态路由机制是其实现“共识迭代”的关键。