胶囊网络(Capsule Networks)中的动态路由算法(Dynamic Routing)推导与计算流程详解
字数 3235 2025-12-14 14:51:15

胶囊网络(Capsule Networks)中的动态路由算法(Dynamic Routing)推导与计算流程详解

题目描述

胶囊网络(Capsule Networks)是一种旨在改进传统卷积神经网络(CNN)在表示物体姿态、视角等空间关系方面局限性的新型神经网络结构。其核心思想是用“胶囊”替代神经元,每个胶囊输出一个向量(而非标量),向量的长度表示实体存在的概率,向量的方向编码实体的姿态属性(如位置、方向、大小等)。而动态路由算法(Dynamic Routing) 是胶囊网络中用于实现胶囊间信息传递与协调的关键机制,它通过迭代过程,决定低层胶囊的输出应如何被加权组合并传递给高层胶囊,以形成更复杂的视觉实体表示。动态路由的本质是一种协议路由,通过高层胶囊与低层胶囊输出之间的一致性(agreement)来调整连接权重,使网络能更自然地处理视角变换等任务,并提高模型的可解释性与鲁棒性。

解题过程(循序渐进讲解)

1. 胶囊与胶囊网络的基本概念

  • 胶囊(Capsule):可视为一组神经元的集合,这些神经元共同学习检测特定视觉实体(如边缘、角点、物体部件等)的存在及其属性。胶囊输出一个向量 \(\mathbf{u}_i\),其中向量长度(通常用L2范数)表示检测到该实体的概率,向量方向编码其实例化参数(如位置、角度等)。
  • 胶囊网络结构:一般包含若干胶囊层。低层胶囊(如PrimaryCaps)检测简单模式,高层胶囊(如DigitCaps)检测更复杂的对象。胶囊之间并非全连接,而是通过动态路由确定信息传递的权重。

2. 动态路由算法的目标与直观理解

  • 目标:给定低层胶囊的输出向量 \(\{\mathbf{u}_1, \mathbf{u}_2, ..., \mathbf{u}_n\}\),我们希望为每个高层胶囊 \(j\) 找到一个输入向量 \(\mathbf{s}_j\),它是低层胶囊输出的加权和,权重取决于低层胶囊与高层胶囊之间的“一致性”。
  • 直观理解:想象低层胶囊检测到的部件(如眼睛、鼻子、嘴巴)需要组合成一个高层概念(如人脸)。如果低层胶囊预测的姿态(方向)与高层胶囊预测的姿态一致(例如都指向同一方向的位置),则认为它们“达成协议”,低层胶囊应对高层胶囊有更大的贡献权重。这个过程通过迭代更新权重来实现。

3. 动态路由算法的详细步骤与公式推导

步骤1:预测向量的生成(低层 → 高层)
  • 对于每个低层胶囊 \(i\) 和每个高层胶囊 \(j\),通过一个可学习的变换矩阵 \(\mathbf{W}_{ij}\) 将低层胶囊的输出向量 \(\mathbf{u}_i\) 映射为“预测向量” \(\hat{\mathbf{u}}_{j|i}\)

\[ \hat{\mathbf{u}}_{j|i} = \mathbf{W}_{ij} \mathbf{u}_i \]

\(\hat{\mathbf{u}}_{j|i}\) 表示低层胶囊 \(i\) 对高层胶囊 \(j\) 应呈现姿态的预测。\(\mathbf{W}_{ij}\) 捕获了低层与高层实体之间的空间关系(如部件到整体的几何变换)。

步骤2:加权求和与高层胶囊的初始输出
  • 高层胶囊 \(j\) 的输入 \(\mathbf{s}_j\) 是所有低层预测向量的加权和:

\[ \mathbf{s}_j = \sum_{i} c_{ij} \hat{\mathbf{u}}_{j|i} \]

其中 \(c_{ij}\) 是耦合系数(coupling coefficient),满足 \(c_{ij} \geq 0\)\(\sum_j c_{ij} = 1\)(对每个低层胶囊 \(i\),其分配到所有高层胶囊的权重和为1)。初始时,\(c_{ij}\) 通常设置为均匀分布(如 \(c_{ij} = 1 / \text{高层胶囊数量}\))。

步骤3:高层胶囊的输出向量计算
  • \(\mathbf{s}_j\) 应用一个非线性“压缩函数”(squashing function),确保输出向量的长度在0到1之间(表示概率),同时保持方向:

\[ \mathbf{v}_j = \frac{\|\mathbf{s}_j\|^2}{1 + \|\mathbf{s}_j\|^2} \frac{\mathbf{s}_j}{\|\mathbf{s}_j\|} \]

该函数使得长向量被压缩至接近1,短向量被压缩至接近0。

步骤4:迭代更新耦合系数(动态路由的核心)
  • 耦合系数 \(c_{ij}\) 不是直接学习的参数,而是通过迭代更新的,更新依据是高层胶囊输出 \(\mathbf{v}_j\) 与低层预测向量 \(\hat{\mathbf{u}}_{j|i}\) 之间的点积(即一致性度量):

\[ b_{ij} \leftarrow b_{ij} + \hat{\mathbf{u}}_{j|i} \cdot \mathbf{v}_j \]

这里 \(b_{ij}\) 是原始未归一化的对数先验概率(log prior),初始化为0(或小随机值)。点积越大,说明预测与高层输出越一致,对应的 \(b_{ij}\) 增加越多。

  • 然后通过softmax计算新的耦合系数(按每个低层胶囊 \(i\) 对不同的高层胶囊 \(j\) 归一化):

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

这样,与高层胶囊更一致的低层胶囊会获得更大的权重 \(c_{ij}\)

步骤5:重复迭代
  • 重复步骤2-4(通常3到5次),每次迭代更新 \(c_{ij}\),逐步精炼高层胶囊的输入 \(\mathbf{s}_j\) 和输出 \(\mathbf{v}_j\),最终使得高层胶囊的表示能更好地与低层胶囊的一致预测对齐。

4. 动态路由算法的整体流程总结

  1. 初始化:设 \(b_{ij} = 0\)\(c_{ij} = 1/\text{高层胶囊数}\)
  2. 迭代循环(共 \(r\) 轮):
    a. 计算高层胶囊输入:\(\mathbf{s}_j = \sum_i c_{ij} \hat{\mathbf{u}}_{j|i}\)
    b. 计算高层胶囊输出:\(\mathbf{v}_j = \text{squash}(\mathbf{s}_j)\)
    c. 更新对数先验:\(b_{ij} \leftarrow b_{ij} + \hat{\mathbf{u}}_{j|i} \cdot \mathbf{v}_j\)
    d. 计算新耦合系数:\(c_{ij} = \text{softmax}(b_{ij})\)
  3. 输出:最终高层胶囊向量 \(\mathbf{v}_j\)

5. 动态路由的意义与优缺点

  • 意义
    • 实现了部分-整体关系的显式建模,通过姿态一致性组合部件,提升对视角、形变的鲁棒性。
    • 权重 \(c_{ij}\) 由数据动态决定,增加了模型可解释性(可视为一种注意力机制)。
  • 优点:更强的姿态表示能力;对仿射变换更鲁棒;潜在的更好可解释性。
  • 缺点:计算开销大(迭代导致慢);训练不稳定;在大规模任务中表现尚未显著超越CNN。

6. 实例说明(以数字识别为例)

  • 假设低层胶囊检测到“圆弧”、“竖线”等部件,每个部件胶囊输出向量编码其位置和方向。
  • 高层胶囊可能对应数字“0”、“6”、“8”等。
  • 动态路由中,若低层胶囊预测的圆弧姿态与高层“0”胶囊预测的整体姿态高度一致,则权重 \(c_{ij}\) 增大,该部件对“0”的贡献增加;若不一致,权重减小。
  • 最终,高层胶囊输出向量的长度表示对应数字存在的概率,方向编码其具体姿态(如旋转角度)。
胶囊网络(Capsule Networks)中的动态路由算法(Dynamic Routing)推导与计算流程详解 题目描述 胶囊网络(Capsule Networks)是一种旨在改进传统卷积神经网络(CNN)在表示物体姿态、视角等空间关系方面局限性的新型神经网络结构。其核心思想是用“胶囊”替代神经元,每个胶囊输出一个向量(而非标量),向量的长度表示实体存在的概率,向量的方向编码实体的姿态属性(如位置、方向、大小等)。而 动态路由算法(Dynamic Routing) 是胶囊网络中用于实现胶囊间信息传递与协调的关键机制,它通过迭代过程,决定低层胶囊的输出应如何被加权组合并传递给高层胶囊,以形成更复杂的视觉实体表示。动态路由的本质是一种 协议路由 ,通过高层胶囊与低层胶囊输出之间的 一致性 (agreement)来调整连接权重,使网络能更自然地处理视角变换等任务,并提高模型的可解释性与鲁棒性。 解题过程(循序渐进讲解) 1. 胶囊与胶囊网络的基本概念 胶囊(Capsule) :可视为一组神经元的集合,这些神经元共同学习检测特定视觉实体(如边缘、角点、物体部件等)的存在及其属性。胶囊输出一个向量 \(\mathbf{u}_ i\),其中向量长度(通常用L2范数)表示检测到该实体的概率,向量方向编码其实例化参数(如位置、角度等)。 胶囊网络结构 :一般包含若干胶囊层。低层胶囊(如PrimaryCaps)检测简单模式,高层胶囊(如DigitCaps)检测更复杂的对象。胶囊之间并非全连接,而是通过动态路由确定信息传递的权重。 2. 动态路由算法的目标与直观理解 目标 :给定低层胶囊的输出向量 \(\{\mathbf{u}_ 1, \mathbf{u}_ 2, ..., \mathbf{u}_ n\}\),我们希望为每个高层胶囊 \(j\) 找到一个输入向量 \(\mathbf{s}_ j\),它是低层胶囊输出的加权和,权重取决于低层胶囊与高层胶囊之间的“一致性”。 直观理解 :想象低层胶囊检测到的部件(如眼睛、鼻子、嘴巴)需要组合成一个高层概念(如人脸)。如果低层胶囊预测的姿态(方向)与高层胶囊预测的姿态一致(例如都指向同一方向的位置),则认为它们“达成协议”,低层胶囊应对高层胶囊有更大的贡献权重。这个过程通过迭代更新权重来实现。 3. 动态路由算法的详细步骤与公式推导 步骤1:预测向量的生成(低层 → 高层) 对于每个低层胶囊 \(i\) 和每个高层胶囊 \(j\),通过一个可学习的变换矩阵 \(\mathbf{W} {ij}\) 将低层胶囊的输出向量 \(\mathbf{u} i\) 映射为“预测向量” \(\hat{\mathbf{u}} {j|i}\): \[ \hat{\mathbf{u}} {j|i} = \mathbf{W} {ij} \mathbf{u} i \] \(\hat{\mathbf{u}} {j|i}\) 表示低层胶囊 \(i\) 对高层胶囊 \(j\) 应呈现姿态的预测。\(\mathbf{W} {ij}\) 捕获了低层与高层实体之间的空间关系(如部件到整体的几何变换)。 步骤2:加权求和与高层胶囊的初始输出 高层胶囊 \(j\) 的输入 \(\mathbf{s} j\) 是所有低层预测向量的加权和: \[ \mathbf{s} j = \sum {i} c {ij} \hat{\mathbf{u}} {j|i} \] 其中 \(c {ij}\) 是耦合系数(coupling coefficient),满足 \(c_ {ij} \geq 0\) 且 \(\sum_ j c_ {ij} = 1\)(对每个低层胶囊 \(i\),其分配到所有高层胶囊的权重和为1)。初始时,\(c_ {ij}\) 通常设置为均匀分布(如 \(c_ {ij} = 1 / \text{高层胶囊数量}\))。 步骤3:高层胶囊的输出向量计算 对 \(\mathbf{s}_ j\) 应用一个非线性“压缩函数”(squashing function),确保输出向量的长度在0到1之间(表示概率),同时保持方向: \[ \mathbf{v}_ j = \frac{\|\mathbf{s}_ j\|^2}{1 + \|\mathbf{s}_ j\|^2} \frac{\mathbf{s}_ j}{\|\mathbf{s}_ j\|} \] 该函数使得长向量被压缩至接近1,短向量被压缩至接近0。 步骤4:迭代更新耦合系数(动态路由的核心) 耦合系数 \(c_ {ij}\) 不是直接学习的参数,而是通过迭代更新的,更新依据是高层胶囊输出 \(\mathbf{v} j\) 与低层预测向量 \(\hat{\mathbf{u}} {j|i}\) 之间的点积(即一致性度量): \[ b_ {ij} \leftarrow b_ {ij} + \hat{\mathbf{u}} {j|i} \cdot \mathbf{v} j \] 这里 \(b {ij}\) 是原始未归一化的对数先验概率(log prior),初始化为0(或小随机值)。点积越大,说明预测与高层输出越一致,对应的 \(b {ij}\) 增加越多。 然后通过softmax计算新的耦合系数(按每个低层胶囊 \(i\) 对不同的高层胶囊 \(j\) 归一化): \[ c_ {ij} = \frac{\exp(b_ {ij})}{\sum_ k \exp(b_ {ik})} \] 这样,与高层胶囊更一致的低层胶囊会获得更大的权重 \(c_ {ij}\)。 步骤5:重复迭代 重复步骤2-4(通常3到5次),每次迭代更新 \(c_ {ij}\),逐步精炼高层胶囊的输入 \(\mathbf{s}_ j\) 和输出 \(\mathbf{v}_ j\),最终使得高层胶囊的表示能更好地与低层胶囊的一致预测对齐。 4. 动态路由算法的整体流程总结 初始化 :设 \(b_ {ij} = 0\),\(c_ {ij} = 1/\text{高层胶囊数}\)。 迭代循环 (共 \(r\) 轮): a. 计算高层胶囊输入:\(\mathbf{s} j = \sum_ i c {ij} \hat{\mathbf{u}} {j|i}\)。 b. 计算高层胶囊输出:\(\mathbf{v} j = \text{squash}(\mathbf{s} j)\)。 c. 更新对数先验:\(b {ij} \leftarrow b {ij} + \hat{\mathbf{u}} {j|i} \cdot \mathbf{v} j\)。 d. 计算新耦合系数:\(c {ij} = \text{softmax}(b_ {ij})\)。 输出 :最终高层胶囊向量 \(\mathbf{v}_ j\)。 5. 动态路由的意义与优缺点 意义 : 实现了 部分-整体关系 的显式建模,通过姿态一致性组合部件,提升对视角、形变的鲁棒性。 权重 \(c_ {ij}\) 由数据动态决定,增加了模型可解释性(可视为一种注意力机制)。 优点 :更强的姿态表示能力;对仿射变换更鲁棒;潜在的更好可解释性。 缺点 :计算开销大(迭代导致慢);训练不稳定;在大规模任务中表现尚未显著超越CNN。 6. 实例说明(以数字识别为例) 假设低层胶囊检测到“圆弧”、“竖线”等部件,每个部件胶囊输出向量编码其位置和方向。 高层胶囊可能对应数字“0”、“6”、“8”等。 动态路由中,若低层胶囊预测的圆弧姿态与高层“0”胶囊预测的整体姿态高度一致,则权重 \(c_ {ij}\) 增大,该部件对“0”的贡献增加;若不一致,权重减小。 最终,高层胶囊输出向量的长度表示对应数字存在的概率,方向编码其具体姿态(如旋转角度)。