《Dynamic Routing Between Capsules》胶囊网络理解
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.****.net/XinyanH/article/details/78776351
背景
卷积网络的缺点
卷积网络中的卷积层主要用于检测图像像素中的重要特征。主要有以下特点:
1)较浅的层(更接近输入的层)将学习检测诸如边缘和颜色渐变之类的简单特征
2)较深的层则将简单特征组合成复杂一些的特征
3)深层特征由浅层特征加权组合得来
4)网络顶部的致密层组合高层特征并输出分类预测
由于这些特点,卷积网络的深层特征与低层特征之间不存在位姿(平移和旋转)关系。如下图所示,左边和右边卷积网络都会判断为是人脸:
另外一个例子,人脑可以从不同方向观察并判断这是同一个物体,而卷积网络则很难区分:
因此传统CNN存在根本缺陷:
1) 对象空间关系:CNN的内部数据表示没有考虑简单和复杂对象之间的重要空间层次;
2)Max pooling:研究者们(Hinton等)认为,CNN中的池化操作是一个很大的错误,它运行良好的事实就是一个很大的错误和灾难;
所以提出胶囊网络,来规避这些问题
胶囊网络结构
结构如上图,详细如下:
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化,即,输出10个类的概率值;训练时与真实标签做均值误差计算,当然整体结构还包括重建部分及重建loss计算(本文略)
动态路由
算法描述
结构详解
上图很好展示了路由层原理结构,下面就结合算法描述综合详述其过程:
1)说明:
图中下面是输入方向,上面是输出方向;表示输入胶囊,文中为1152个,但这里只画出2个;表示输出胶囊,文中10个,这里只画出4个;
2)首先卷积:仿射变换
其目的是通过卷积进行维度变换(8–>16)并学习,W是权值矩阵:1152x8x16x10,为16x8,则大小为16为向量;如算法中式2的右半部分
3)路由:每个输出胶囊j对应的多个(1152个,这里只画2个)进行路由
a)首先是标量,它是由同样数量并一一对应的通过算法中式3计算得到;初始化为0,第一次路由时相等,但随着的更新(如图中),值将会不同(存在偏向,就像投票选举,开始对候选人不了解,对候选人打分一样,待候选人演讲后,就会出现偏向)
b)循环路由:要多次循环,文中提到3次较佳
首先sj由算法式2中左边部分计算得到,这里没有偏置项;然后用squash函数计算出,如式1;在然后根据及更新,在更新;继续循环
c)该路由操作是在前向进行
总结
区别:
1)胶囊输入输出节点为向量,普通神经元为标量
2)胶囊网络多一步仿射变换(胶囊维度变化),求和时没有偏置项b
3)**函数不同
评价与延伸:
1)本文路由连接部分,采用的是全链接方式,计算量较大
2)《Capsules for Object Segmentation》将胶囊网络应用到目标分割,其改进了路由全链接方式,采用局部连接,与卷积局部链接有异曲同工之妙
3)《Matrix Capsules with EM Routing》新版路由:https://blog.****.net/u011681952/article/details/81974291