论文链接:https://arxiv.org/pdf/1710.09829v1.pdf
capsule网络motivation
capsule网络提出的原因是针对CNN进行特征提取的时候会忽略特征之间的关系,也就是说一张image里打乱region,CNN仍然能够正确识别。参考:https://baijiahao.baidu.com/s?id=1585376284135321218&wfr=spider&for=pc
原因是CNN网络通过卷积和池化虽然能解决平移不变性和一定程度的旋转不变性和放缩不变性,但是没有考虑到特征之间的关系如位置、大小。
参考:https://zhuanlan.zhihu.com/p/35154414
以人脸识别为例:
CNN模型通常只会考虑如果存在鼻子、眼睛和嘴巴等的特征就会**神经元,判断这张脸为人脸。但它其实没有考虑到底层特征和更高一层特征的方向位置和大小的关系。

CapsNet的每个神经元不再是标量,而是一个向量。每个向量都隐式的包含一些信息,比如概率,方向,大小,比如眼睛和人脸的关系,眼睛的大小是人脸的1/10,而且方向是跟人脸是一致的。只有眼睛等等这些特征跟要预测的人脸满足这种正向的对应关系,才能对预测做出贡献。

capsule网络流程
每一个layer包含多个capsule,下面展示layer l到下一个层l+1的路由算法:

具体步骤可以参考原始论文,这里只讲述重点:
(1)bij表示capsule i在聚合信息到capsule j时未进行softmax归一化的权重,初始化为0表示初始权重是一样的。
(2)ui表示capsule i的输出,u^j∣i表示capsule i向capsule j传递的向量,通过一个转换矩阵Wij施加在ui得到。对于capsule j,对上一layer传来的信息进行加权的聚合得到向量sj
(3)对向量sj进行**:
vj=1+∣∣sj∣∣2∣∣sj∣∣2∣∣sj∣∣sj
前面的1+∣∣sj∣∣2∣∣sj∣∣2∈[0,1)为压缩因子,∣∣sj∣∣sj为单位向量,因此∣∣vj∣∣∈[0,1),且向量方向是不变的。
(4)使用点积来计算vj与每个capsule i的输出u^j∣i的一致程度,根据余弦相似性原理,两个向量在方向上越接近,点积越大, 同时没有实施模归一化,考虑了∣∣u^j∣i∣∣越大,权重也越大。然后反馈权重bij。
margin loss来进行类别判断
这里借鉴了SVM里的hinge loss,对于capsule k的输出,也就是类别k的判别向量vk,向量的模长∣∣vk∣∣表示了capsule对应的类别存在的概率。对于正确的类别,∣∣vk∣∣趋向于越大越好,称为present loss,对于其他类别,∣∣vk∣∣趋向于越小越好,成为absent loss。假设某个
Lk=Tkmax(0,m+−∣∣vk∣∣)2+λ(1−Tk)max(0,∣∣vk∣∣−m−)
前半部分是present loss,Tk=1如果是真实类别。对于10-class的mnist数据集,假设某个样本的真实标签是3,那么误差为:
L=max(0,m+−∣∣v3∣∣)2+λi∈{c∣c=3,c∈[0,9]}∑max(0,∣∣vi∣∣−m−)
实例化capsule网络
作者论文中展示了3层的CapsNet来实现MNIST分类,架构如下:
