深度学习中的胶囊网络(Capsule Network)动态路由机制与特征编码原理
题目描述
胶囊网络(Capsule Network)是一种替代传统卷积神经网络的架构,旨在解决CNN在空间层次关系建模上的局限性。其核心创新是胶囊(Capsule) 和动态路由(Dynamic Routing) 机制。每个胶囊是一组神经元,不仅编码特征的存在性,还通过激活向量(activation vector)的方向和长度表示实例化参数(如姿态、纹理等)。动态路由通过迭代协议在不同层胶囊间传递信息,替代池化操作,从而保留物体的空间层次结构。
解题过程
1. 胶囊的基本概念
- 传统神经元的局限:传统神经元输出标量(激活值),无法同时表示特征的多种属性(如位置、方向等)。
- 胶囊的表示:胶囊输出一个向量(如\(\mathbf{v}_j\)),其中:
- 向量方向:编码实例化参数(如物体的姿态、大小)。
- 向量长度(模长):表示特征存在的概率(通过非线性函数压缩到[0,1]区间)。
2. 动态路由的动机
- 池化操作的缺陷:最大池化等操作会丢失空间信息(例如,无法区分“眼睛在鼻子左侧”还是“右侧”)。
- 动态路由的目标:通过迭代协商,让低层胶囊的输出仅传递给能更好预测其存在的高层胶囊,从而建模部分-整体关系。
3. 动态路由的步骤
设低层胶囊\(i\)的输出为\(\mathbf{u}_i\),高层胶囊\(j\)的输入为\(\mathbf{s}_j\),路由步骤如下:
步骤1:线性变换(仿射变换)
- 对每个低层胶囊的输出\(\mathbf{u}_i\),通过权重矩阵\(\mathbf{W}_{ij}\)预测高层胶囊的“投票向量”:
\[ \hat{\mathbf{u}}_{j|i} = \mathbf{W}_{ij} \mathbf{u}_i \]
- \(\mathbf{W}_{ij}\)可学习,用于对齐低层特征与高层特征的坐标系。
步骤2:加权求和与耦合系数
- 高层胶囊的输入\(\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{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\|} \]
步骤4:迭代更新耦合系数
- 初始化:所有\(c_{ij}\)设为相同值(如均匀分布)。
- 迭代更新(通常3次循环):
- 计算高层胶囊输出\(\mathbf{v}_j\)。
- 通过点积相似度更新耦合系数:
\[ b_{ij} \leftarrow b_{ij} + \hat{\mathbf{u}}_{j|i} \cdot \mathbf{v}_j \]
(若投票$ \hat{\mathbf{u}}_{j|i} $与高层输出$ \mathbf{v}_j $方向一致,则增加$ b_{ij} $)
- 对\(b_{ij}\)应用softmax得到新的\(c_{ij}\):
\[ c_{ij} = \frac{\exp(b_{ij})}{\sum_k \exp(b_{ik})} \]
4. 特征编码与重建损失
- 边际损失(Margin Loss):用于分类任务,鼓励正确类别的胶囊向量长度接近1,其他类别接近0。
- 重建损失(Reconstruction Loss):通过解码器(如全连接网络)从高层胶囊向量重建输入图像,增强特征的可解释性(类似自编码器)。
关键创新与优势
- 等变性(Equivariance):胶囊网络对输入变换(如平移、旋转)具有等变性,而非不变性(如CNN的池化层)。
- 部分-整体关系建模:动态路由显式建模对象的部分如何组合成整体(例如“车轮+车身→汽车”)。
- 抗对抗攻击:因保留空间信息,对输入扰动更鲁棒。
局限性
- 计算复杂度高(动态路由需迭代);
- 目前主要在小规模数据集(如MNIST)上验证,大规模应用仍需改进。
通过动态路由机制,胶囊网络实现了从低层特征到高层特征的共识驱动信息传递,为深度学习中的几何关系建模提供了新思路。