任玉琪 Capsule间的动态路由
新闻来源:IR实验室       发布时间:2018/1/4 0:42:25


Dynamic Routing Between Capsules》该论文来自于多伦多谷歌大脑研究所的Hinton团队,并发表于NIPS2017上。论文中提出了一种称为Capsule的新型神经元以及Routing-by-agreement参数训练方法。

1、论文动机

传统的前馈神经网络模型,由输入层,隐含层以及输出层构成,每一层的神经元(除输出层外)都与下一层的各个神经元相连。从图1中可看出,传统前馈神经网络中需要训练的参数数量过多,会导致模型的时间复杂度以及空间复杂度都很高。

1、传统前馈神经网络

卷积神经网络(CNN)是局部连接神经网络,从图2中可看到卷积网络两层间只有部分神经元相连,这样训练的参数会变少,解决了全连接神经网络参数过多的问题。卷积网络由输入层,巻积层、池化层和全连接层构成,相对于全连接网络最大的特点是局部特征与参数共享。卷积神经网络虽然可以提取到局部特征,但丢失了局部特征在空间上的关联性,导致同一空间中无规则的特征分布被错误识别为实体。因此作者提出了一种CapsNet的新型神经网络来解决信息丢失的问题。

https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1514450652821&di=7fdb0851f8546f5eaae2564edadc3259&imgtype=0&src=http%3A%2F%2Fxilinx.eetrend.com%2Ffiles-eetrend-xilinx%2Farticle%2F201701%2F10863-27889-14.png

2、卷积神经网络

 

2、论文方法

首先通过传统神经元与capsule神经元之间的对比,来对capsule进行直观的介绍。如图3所示,传统神经元由标量来表示,输入值与参数加权求和后得到a,最终经过激活函数得到输出,且输出为标量。Capsule神经元由向量表示,输入值与参数进行仿射变换后再与参数加权求和,最终经过非线性激活函数Squashing得到输出值,输出值为向量。

 

3Capsule VS 传统神经元

作者使用向量的长度表示实体存在的概率,所以需要将长度压缩到01之间。因此提出了squashing函数,改函数前面部分为向量的缩放尺度,剩下部分为输入向量的单位向量,该非线性函数既保留了输入向量的方向,又将输入向量的长度压缩到区间[0,1)内。

该模型中共包含两个参数,一个是矩阵,另一个是参数。其中参数由传统的后向传播训练,参数由作者提出的Routing-by-agreement动态路由方法训练。图4Routing-by-agreement方法训练参数的详细过程。上一层的capsule节点,经过一系列运算得到循环迭代r次更新,参数经过softmax函数获得。其中r为超参数,该论文的对比实验中r设置为3时,效果最佳。

 

4Routing-by-agreement

3、论文实验

论文中的实验数据为MNIST手写数字,作者利用提出的capsule构建得到Capsnet网络。该网络的第一层为常规的巻积层,卷积核大小为9*9channel数为256,激活函数为ReLU函数,原始图像经过该层后得到20*20*256的张量。第二层为PrimaryCaps层,该层由8个并行的常规卷积层构成,每个卷积层的卷积核大小为9*9channel数为32,激活函数为作者提出的squashing函数。上一层的结果经8个并行卷积后得到8个相同大小的6*6*32的张量。将8个张量合并在一起后,每个点成为一个8维的向量,组合成一个6*6*8*32的张量,最后reshape11528维的向量,也就是1152capsule神经元。网络的最后一层为capsule版的全连接层,最终得到1016维的向量。

5Capsnet

实验的损失函数为:

K为实体类别;为指示函数,属于类别k则为1,否则为0设置为0.1设置为0.9设置为0.5.

作者对得到的向量又做了重构实验,通过3个全连接层重构出一个完整的图像。从实验结果中可以发现动态路由3次的效果最好,并且重构后的图像在识别时准确率更高,错误率达到0.25%Baseline为常规的卷积神经网络。从图像中也可看到重构的结果有去噪的作用。作者对向量中的每个维度做细微调整,发现每个维度代表实体的一个属性。并且对重叠图像做识别实验,实验结果表明在重叠图像上识别效果较好。

4、总结

作者将传统神经元中的标量变为向量,来保留更多的特征信息。将向量的长度来表示实体存在的概率,向量的各个维度来表示实体的各个属性。并提出Routing-by-agreement方法,取代了卷积神经网络中的pooling层,这样既能保留最突出的特征,也可以保留局部特征在空间中的相关性。

5、代码实现

naturomics 实现地址(TensorFlow):

https://github.com/naturomics/CapsNet-Tensorflow 

XifengGuo 实现地址(Keras):https://github.com/XifengGuo/CapsNet-Keras 

leftthomas 实现地址(Pytorch):https://github.com/leftthomas/CapsNet