[解读] Capsules with Inverted Dot-Product Attention Routing

新型胶囊网络路由算法
本文提出了一种名为InvertedDot-ProductAttention的新型胶囊网络路由算法,该算法通过反向的点积注意力机制,使高层级胶囊竞争低层级胶囊的注意力,以决定信息流的方向。与传统的动态路由和EM路由相比,新算法引入了并发迭代路由,加速了运算并解决了梯度消失问题。

本文提出一种新的胶囊网络路由算法, 主要有以下三个亮点: 首先通过一个反向的点积注意力来设计路由, 其次使用层规范化方法, 最后使用并发迭代路由的方法来取代序列式的迭代.

论文链接: https://arxiv.org/abs/2002.04764v2

开源代码:

https://github.com/apple/ml-capsules-inverted-attention-routing

https://github.com/yaohungt/Capsules-Inverted-Attention-Routing

相关工作

在原始的路由算法中, 每个较低级别(前一层)的胶囊投票给每个较高级别(后一层)的胶囊状态. 较高级 (父级) 的胶囊将汇总选票, 更新其状态, 并使用更新后的状态来解释每个下级胶囊. 被解释清楚的那些最终将更多的信息流向该父级胶囊. 重复此过程, 在选票聚合过程中来确定哪些胶囊被路由到那个父级胶囊. 这个过程类似于期望最大化 (EM) 算法的 M 步和 E 步的迭代方式, 推断隐藏单元的状态和路由概率.

动态路由 (Sabour et al., 2017) 和 EM 路由 (Hinton et al., 2018) 都可以看作上述方案的变体, 它们具有基本的迭代结构, 但在细节方面有所不同, 例如其胶囊设计, 如何汇总票数, 以及是否使用非线性函数.

本文方法

本文介绍一个新颖的路由算法, 被称为 Inverted Dot-Product Attention, 就像一个反向的注意力机制, 高等级的胶囊通过竞争来争夺低等级胶囊的注意力.

路由概率直接取决于父胶囊 (来自上一个迭代步骤) 与子胶囊对父胶囊的投票 (在当前迭代步骤中) 之间的一致性.

设第 L L L 层第 i i i 个胶囊为 p i L \mathbf{p}_i^{L} piL, 维度为 d L d_L dL. 路由算法如下:

在这里插入图片描述

其中 W i j L \mathbf{W}_{ij}^L WijL 是一个可学习的权重.

推理算法如下:

ss

I \mathbf{I} I 是输入的图片样本. 其中第 7-9 行是一个并发的路由机制, 一方面加快运算速度, 另一方面能够改进梯度消失的问题. 这个问题是因为迭代次数过多, 间接导致网络层次加深. 并发路由的原理如下图:

在这里插入图片描述

路由过程如图中灰色箭头所示.

参考

  • Sara Sabour, Nicholas Frosst, and Geoffrey E Hinton. Dynamic routing between capsules. In Advances in neural information processing systems, pp. 3856–3866, 2017.

  • Geoffrey E Hinton, Sara Sabour, and Nicholas Frosst. Matrix capsules with em routing. 2018.

### 动态路由算法 EM-Routing 的实现与工作原理 #### 工作原理概述 动态路由算法的核心目标是在神经网络的不同层之间传递信息时,决定低级特征如何组合成高级特征。EM-Routing 是一种基于期望最大化 (Expectation-Maximization, EM) 算法的方法,用于优化胶囊之间的连接权重和激活值[^3]。 在 EM-Routing 中,每一层的胶囊会通过多次迭代调整其 pose 参数(表示空间变换矩阵)以及激活概率。这些参数通过 EM 算法逐步收敛到最优解,从而使得高层胶囊能够更好地捕捉输入数据的空间关系和语义信息。 --- #### 具体实现方式 1. **初始化阶段** 在初始状态下,假设第 \( L \) 层的所有胶囊都可能影响第 \( L+1 \) 层的某个特定胶囊。为此,定义了一个耦合系数 \( c_{ij} \),它决定了第 \( i \) 个低级胶囊对第 \( j \) 个高级胶囊的影响程度。该系数满足约束条件: \[ \sum_j c_{ij} = 1 \] 耦合系数由 softmax 函数计算得出,具体公式如下: \[ c_{ij} = \frac{\exp(b_{ij})}{\sum_k \exp(b_{kj})} \] 其中,\( b_{ij} \) 表示两个胶囊间的亲和度得分。 2. **预测与投票机制** 对于每一个低级胶囊 \( u_i^{(L)} \),都会生成一组针对上级胶囊 \( v_j^{(L+1)} \) 的预测向量 \( \hat{u}_{j|i} \)。这个过程可以通过一个可学习的转换矩阵完成: \[ \hat{u}_{j|i} = M_j \cdot u_i^{(L)} \] 随后,利用耦合系数加权求和的方式,得到初步估计的上级胶囊状态: \[ s_j = \sum_i c_{ij} \hat{u}_{j|i} \] 3. **更新激活值与姿态参数** 使用 EM 算法反复迭代以改进上述估计结果。每次迭代分为两步: - **E 步骤**: 计算每个低级胶囊对于某高级胶囊的概率分布 \( r_{ij} \),这反映了当前模型下低级胶囊属于某一类别胶囊的可能性。 \[ r_{ij} = \frac{p_{ij}}{\sum_k p_{ik}} \] 其中,\( p_{ij} \propto P(u_i | v_j) \)[^3]。 - **M 步骤**: 更新高级胶囊的姿态参数及其激活值。姿态参数可通过最小化重构误差获得;激活值则依赖于观察到的数据点数量和支持强度: \[ a_j = \sigma(\lambda (\beta_a + T)) \] 这里,\( T \) 是支持总和,即所有分配给此胶囊的支持数之和。 4. **终止条件** 当经过预定次数的迭代或者变化幅度小于阈值时停止循环,并返回最终的结果作为输出。 --- #### Python 实现伪代码 以下是简化版的 EM-Routing 实现框架: ```python def em_routing(votes, num_iterations=3): """ Perform Expectation Maximization routing between capsules. Args: votes: Tensor of shape [batch_size, num_capsules_in, num_capsules_out, capsule_dim]. Represents predictions from lower-level to higher-level. num_iterations: Number of iterations for the routing process. Returns: poses: Final pose parameters after convergence. activations: Activation probabilities of output capsules. """ batch_size, _, num_capsules_out, _ = votes.shape # Initialize logits and coupling coefficients logits = torch.zeros(batch_size, 1, num_capsules_out, 1).to(device) coupling_coeffs = F.softmax(logits, dim=-2) for iteration in range(num_iterations): # Compute weighted sum based on current couplings preactivate = torch.sum(coupling_coeffs * votes, dim=1, keepdim=True) # Squash function applied element-wise poses = squash(preactivate) if iteration != num_iterations - 1: # Agreement computation agreements = torch.matmul(torch.transpose(votes, 2, 3), poses) # Update logits according to agreement level logits += agreements.squeeze(dim=1) # Recompute coupling coefficients via Softmax normalization coupling_coeffs = F.softmax(logits, dim=-2) # Calculate final activation values using logistic sigmoid norm_squared = torch.norm(poses.squeeze(), dim=-1)**2 activations = torch.sigmoid(norm_squared / (norm_squared.mean() + epsilon)) return poses.squeeze(), activations ``` --- #### 总结 综上所述,EM-Routing 提供了一种灵活且高效的解决方案来处理复杂模式识别任务中的结构化表征问题。相比传统方法,这种方法不仅提高了鲁棒性和泛化能力,还降低了对抗样本攻击的风险[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值