Dynamic Routing Between Capsules
本文旨在理解胶囊网络,而对于论文翻译可参看翻译链接(该童鞋翻译很详细)
基本信息
作者:Sara Sabour, Nicholas Frosst,Geoffrey E. Hinton
机构:Google Brain Toronto
连接:https://arxiv.org/abs/1710.09829
源码:https://github.com/naturomics/CapsNet-Tensorflow; https://github.com/bourdakos1/CapsNet-Visualization
翻译:https://blog.csdn.net/XinyanH/article/details/78776351
背景
卷积网络的缺点
卷积网络中的卷积层主要用于检测图像像素中的重要特征。主要有以下特点:
1)较浅的层(更接近输入的层)将学习检测诸如边缘和颜色渐变之类的简单特征
2)较深的层则将简单特征组合成复杂一些的特征
3)深层特征由浅层特征加权组合得来
4)网络顶部的致密层组合高层特征并输出分类预测
由于这些特点,卷积网络的深层特征与低层特征之间不存在位姿(平移和旋转)关系。如下图所示,左边和右边卷积网络都会判断为是人脸:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/70604351ff8e614d76b4ba0722cc68e9.jpeg)
另外一个例子,人脑可以从不同方向观察并判断这是同一个物体,而卷积网络则很难区分:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/74c3b90791a5964cba43bf19fca256cb.jpeg)
因此传统CNN存在根本缺陷:
1) 对象空间关系:CNN的内部数据表示没有考虑简单和复杂对象之间的重要空间层次;
2)Max pooling:研究者们(Hinton等)认为,CNN中的池化操作是一个很大的错误,它运行良好的事实就是一个很大的错误和灾难;
所以提出胶囊网络,来规避这些问题
胶囊网络结构
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/022d9bb5a09fc1a4b40219f2b49fa241.jpeg)
结构如上图,详细如下:
1)ReLU Conv1:普通卷积层
卷积核:256x9x9x1,激活层:ReLU,输出:256通道20x20的特征图
2)PrimaryCaps:胶囊生成层
卷积核:32x8x9x9x256,输出32通道,长度为8大小为6x6的特征图;所以一个胶囊:8x1x1,即可理解为一个通道上,同一个像素位置的8个数字组成一个胶囊;则一共1152(6x6x32)个胶囊。激活层:ReLU(代码实现可选,论文中没有明确说明);本层中没用路由算法
3)DigitCaps:胶囊FC层
胶囊路由层,输入1152个8维的胶囊,输出10个16为的胶囊,详见动态路由
4)Output:
将每个胶囊取模并softmax化,即
s
o
f
t
m
a
x
∣
∣
v
j
∣
∣
softmax||v_j||
softmax∣∣vj∣∣,输出10个类的概率值;训练时与真实标签做均值误差计算,当然整体结构还包括重建部分及重建loss计算(本文略)
动态路由
算法描述
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/1032b5f5e696f0bda40fadd4b9628597.jpeg)
结构详解
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/8a695373bd42c9f43e97fbd33495478c.png)
上图很好展示了路由层原理结构,下面就结合算法描述综合详述其过程:
1)说明:
图中下面是输入方向,上面是输出方向;
u
i
u_i
ui表示输入胶囊,文中为1152个,但这里只画出2个;
v
j
v_j
vj表示输出胶囊,文中10个,这里只画出4个;
2)首先卷积:仿射变换
其目的是通过卷积进行维度变换(8–>16)并学习,W是权值矩阵:1152x8x16x10,
W
i
j
W_ {ij}
Wij为16x8,则
u
^
j
∣
i
\hat u_ {j|i}
u^j∣i大小为16为向量;如算法中式2的右半部分
3)路由:每个输出胶囊j对应的多个 u ^ j ∣ i \hat u_{j|i} u^j∣i(1152个,这里只画2个)进行路由
a)首先 c i j c_{ij} cij是标量,它是由同样数量并一一对应的 b i j b_{ij} bij通过算法中式3计算得到; b i j b_{ij} bij初始化为0,第一次路由时 c i j c_{ij} cij相等,但随着 b i j b_{ij} bij的更新(如图中), c i j c_{ij} cij值将会不同(存在偏向,就像投票选举,开始对候选人不了解,对候选人打分一样,待候选人演讲后,就会出现偏向)
b)循环路由:要多次循环,文中提到3次较佳
首先sj由算法式2中左边部分计算得到,这里没有偏置项;然后用squash函数计算出
v
j
v_j
vj,如式1;在然后根据
v
j
v_j
vj及
u
^
j
∣
i
\hat u_ {j|i}
u^j∣i更新
b
i
j
b_{ij}
bij,在更新
c
i
j
c_{ij}
cij;继续循环
c)该路由操作是在前向进行
总结
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/ca261cd1cd8988e00645d2ef68f30c84.jpeg)
区别:
1)胶囊输入输出节点为向量,普通神经元为标量
2)胶囊网络多一步仿射变换(胶囊维度变化),求和时没有偏置项b
3)激活函数不同
评价与延伸:
1)本文路由连接部分,采用的是全链接方式,计算量较大
2)《Capsules for Object Segmentation》将胶囊网络应用到目标分割,其改进了路由全链接方式,采用局部连接,与卷积局部链接有异曲同工之妙
3)《Matrix Capsules with EM Routing》新版路由:https://blog.csdn.net/u011681952/article/details/81974291