1. 动态路由:胶囊网络的核心引擎
第一次接触胶囊网络时,最让我困惑的就是这个"动态路由"机制。传统神经网络像流水线一样固定传递数据,而胶囊网络却让神经元们"开会讨论"决定信息传递路径。这种设计背后隐藏着对生物神经系统的深刻模仿——我们大脑的神经元集群正是通过动态协作来处理复杂信息的。
动态路由的数学本质是迭代式的协议算法。我用一个生活场景来解释:假设你组织多部门会议(底层胶囊),需要汇总报告给CEO(上层胶囊)。第一次各部门都觉得自己最重要(初始权重均等),经过几轮展示后,与核心议题关联度高的部门获得更多发言权(耦合系数增大),无关部门逐渐沉默。这个过程用代码实现时,关键在耦合系数c_ij的softmax归一化和高层胶囊输出v_j的迭代计算:
python复制def dynamic_routing(lower_output, iterations=3):
b_ij = torch.zeros(batch_size, lower_dim, upper_dim) # 初始化路由 logits
for _ in range(iterations):
c_ij = F.softmax(b_ij, dim=2) # 计算耦合系数
s_j = (c_ij[:,:,None] * lower_output).sum(dim=1) # 加权求和
v_j = squash(s_j) # 非线性压缩
b_ij += (lower_output * v_j[:,None,:]).sum(dim=-1) # 更新路由权重
return v_j
实测发现3次迭代就能达到较好效果。与Max Pooling的暴力降维相比,动态路由保留了空间层次信息。比如在MNIST数据集上,传统CNN会把数字"9"和"6"的顶部弧线混淆,而胶囊网络能通过姿态矩阵区分二者旋转角度的本质差异。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 姿态矩阵:几何关系的密码本
胶囊网络的另一精髓是姿态矩阵——一个4x4的变换矩阵,它编码了部件与整体间的几何关系。这就像乐高说明书:不仅告诉你用什么积木(实例化参数),还精确标注每块积木的位置和角度(姿态参数)。
在PyTorch中实现时需要注意矩阵可微性。我推荐使用`nn.Para
