capsule network介绍与实现

论文链接: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模型通常只会考虑如果存在鼻子、眼睛和嘴巴等的特征就会**神经元,判断这张脸为人脸。但它其实没有考虑到底层特征和更高一层特征的方向位置和大小的关系。
capsule network介绍与实现
CapsNet的每个神经元不再是标量,而是一个向量。每个向量都隐式的包含一些信息,比如概率,方向,大小,比如眼睛和人脸的关系,眼睛的大小是人脸的1/10,而且方向是跟人脸是一致的。只有眼睛等等这些特征跟要预测的人脸满足这种正向的对应关系,才能对预测做出贡献。
capsule network介绍与实现

capsule网络流程

每一个layer包含多个capsule,下面展示layer ll到下一个层l+1l+1的路由算法:
capsule network介绍与实现
具体步骤可以参考原始论文,这里只讲述重点:
(1)bijb_{ij}表示capsule ii在聚合信息到capsule jj时未进行softmax归一化的权重,初始化为0表示初始权重是一样的。
(2)ui\mathbf{u}_{i}表示capsule ii的输出,u^ji\mathbf{\hat{u}}_{j|i}表示capsule ii向capsule jj传递的向量,通过一个转换矩阵Wij\mathbf{W}_{ij}施加在ui\mathbf{u}_{i}得到。对于capsule jj,对上一layer传来的信息进行加权的聚合得到向量sj\mathbf{s}_{j}
(3)对向量sj\mathbf{s}_{j}进行**:
vj=sj21+sj2sjsj\mathbf{v}_{j}=\frac{||\mathbf{s}_{j}||^{2}}{1+||\mathbf{s}_{j}||^{2}}\frac{\mathbf{s}_{j}}{||\mathbf{s}_{j}||}
前面的sj21+sj2[0,1)\frac{||\mathbf{s}_{j}||^{2}}{1+||\mathbf{s}_{j}||^{2}}\in [0,1)为压缩因子,sjsj\frac{\mathbf{s}_{j}}{||\mathbf{s}_{j}||}为单位向量,因此vj[0,1)||\mathbf{v}_{j}||\in [0,1),且向量方向是不变的。
(4)使用点积来计算vj\mathbf{v}_{j}与每个capsule ii的输出u^ji\mathbf{\hat{u}}_{j|i}的一致程度,根据余弦相似性原理,两个向量在方向上越接近,点积越大, 同时没有实施模归一化,考虑了u^ji||\mathbf{\hat{u}}_{j|i}||越大,权重也越大。然后反馈权重bijb_{ij}

margin loss来进行类别判断

这里借鉴了SVM里的hinge loss,对于capsule kk的输出,也就是类别kk的判别向量vk\mathbf{v}_{k},向量的模长vk||\mathbf{v}_{k}||表示了capsule对应的类别存在的概率。对于正确的类别,vk||\mathbf{v}_{k}||趋向于越大越好,称为present loss,对于其他类别,vk||\mathbf{v}_{k}||趋向于越小越好,成为absent loss。假设某个
Lk=Tkmax(0,m+vk)2+λ(1Tk)max(0,vkm)L_{k}=T_{k}\max{(0,m^{+}-||\mathbf{v}_{k}||)}^{2}+\lambda (1-T_{k})\max(0,||\mathbf{v}_{k}||-m^{-})
前半部分是present loss,Tk=1T_{k}=1如果是真实类别。对于10-class的mnist数据集,假设某个样本的真实标签是3,那么误差为:
L=max(0,m+v3)2+λi{cc3,c[0,9]}max(0,vim)L=\max{(0,m^{+}-||\mathbf{v}_{3}||)}^{2}+\lambda \sum_{i\in\{c|c\neq 3,c\in[0,9]\}}\max(0,||\mathbf{v}_{i}||-m^{-})

实例化capsule网络

作者论文中展示了3层的CapsNet来实现MNIST分类,架构如下:
capsule network介绍与实现