DeepCaps: Going Deeper with Capsule Networks
仿照了这个博主的方法,读每一篇文献的时候都要问自己
一、四个问题
1、要解决什么问题?
建立深度的胶囊网络
2、用了什么方法解决?
3D卷积启发路由、局部路由
跳跃连接和卷积
提出类无关解码器
3、效果如何?
目前胶囊网络最优
4、还存在什么问题?
还没想出来
二、论文概述
2.1简介
- 胶囊网络的发展仍在起步阶段,真正潜力尚未完全实现,在几个复杂数据集上的结果并不理想。
我们提出了DeepCaps,它的改进是:
- 使用了一种新的基于3D卷积的动态路由算法(在CIFAR10、SVHN和Fashion MNIST的胶囊网络领域超越了最先进的成果);
-
实现了68%的参数减少;
-
提出了类无关的解码器网络,加强使用重建损失作为正则化项(允许我们识别和控制由实例化参数表示的图像的物理属性)。
提高CNN性能的方法是:
- 增加网络的深度(网络的层数)和宽度(每层的单元数)
- 使用尽可能多的训练数据
CNN的限制:
- 池化导致的不变性;
- 无法理解特征之间的空间关系。
胶囊网络之前的限制:
- Sabour提出的胶囊网络只具有一个卷积层和一个完全连接的胶囊层;
- 在MNIST数据集上效果还不错,但在CIFAR10这类复杂的数据集上效果不佳。
2.2贡献(动态路由&深入网络)
简单堆叠胶囊层来创建深度的胶囊网络存在的限制:
- 动态路由的成本过高,多个路由层会导致更高的训练成本和推理时间;
- 完全联通的胶囊层叠加在一起时,会导致中间层的学习能力较差(胶囊太多时,会导致耦合系数过小,抑制梯度流和学习);
- 相关单元集中在局部区域,特别是底层(局部路由可以明显的利用这一结果,但是完全连接的胶囊层中不能实现局部路由)。
为解决叠加胶囊层的限制,提出如下解决方案:
- 在规模较大的初始层中减少路由迭代次数,在中间层使用3D卷积启发路由(参数共享->减少参数);
- 使用跳跃连接和卷积来改进梯度流,解决中间层学习能力较差的问题;
- 局部路由会比完全连接的路由能够更好的捕获更高层次的信息。
由于增加模型深度,因此需要使用较强的正则化来减少过拟合(Sabour加入重构误差(解码器网络产生的重构误差)):
- 提出了类无关的解码器;
- 该解码器提供了对实例化参数的学习和扰动的可控性;
- 保证了所有类中任意给定的实例化参数的表示属性都是相同的(现有的胶囊网络和解码器不可能保证给定实例化参数所表示的物理属性在所有类中都是相同的)。
作者总结的贡献:
- 为胶囊网络提出一种深度架构DeepCaps,提出3D卷积动态路由算法(提高胶囊网络在复杂图像上的表现性能);
- 提出不依赖类的解码器网络,可提供实例化参数的可控性;
- 在基准数据集上评估DeepCaps的性能(显著优于现有的最先进的胶囊网络架构,同时需要的参数数量显著减少)。
三、DeepCaps
3.1基于动态路由的3D卷积
符号介绍:
- Φl∈R(wl,wl,cl,nl):第l层胶囊层
- Wl:特征图的高度和宽度
- Cl:3D胶囊张量的数量
- nl:原子的数量(胶囊维度)
将3D胶囊张量从l层路由出来,从而预测新的3D胶囊张量Φl+1∈ R(wl+1,wl+1,cl+1,nl+1).
- 将Φl重构为单通道张量˜Φl:(wl,wl,cl*nl,1);
- 用(c^(l+1)xn^(l+1))个三维卷积核进行卷积;生成(c^(l+1)xn^(l+1))个宽和高为(wl+1, wl+1)的特征图;
- Ψl t当第l层的第t个卷积核,t ∈ [c^(l+1)× n^(l+1)],产生中间选票V:(wl+1, wl+1, cl, cl+1× nl+1);
- 每个元素Vi,j,k,m都可以通过三维卷积运算得到:
- 为了使V的形状与输入胶囊张量˜Φl一致,我们使用 (1,1, nl) 作为3D卷积操作的步长
- 每个元素Vi,j,k,m都可以通过三维卷积运算得到:
- 保持Ψl t的大小和步长为nl随着深度变化,让我们从第l层得到单个胶囊的投票。
- 为将中间投票V重塑为初始投票˜V:(wl+1, wl+1, nl+1, cl+1, cl)。wl计算:
如果使用传统的动态路由,则会将l层所有的胶囊路由到l+1层,但卷积运算得到的特征图具有局部特征,因此相邻的胶囊共享相似的信息。我们从l层路由一组胶囊s到l+1层来消除这种冗余,而不是单独路由l层的每个胶囊。这一修改使得参数显著减少了。
通过3D卷积核将一个块的一小部分胶囊转换为一票,我们实现了局部性投票。eg:3 × 3 × 8的内核将把相邻的9个胶囊转换为一票
笔者的理解:在某个胶囊层中,一般一个实体是由多个胶囊来表示的,因此与其对每个胶囊进行单独的路由,不如先将他们分组之后再进行路由。这样的话每一组表示了一个实体,实体的特征关系更明确。
因此,提出新的路由算法:
- 初始化Bs为0,Bs∈R(wl+1,wl+1,cl+1)、s ∈ [cl],相应的耦合系数Ks用softmax_3D函数计算
- 从l层的胶囊张量s中得到的所有预测胶囊的对数都被归一化了,由于l层中的单个胶囊张量预测了所有l+1中的每个(p,q,r)th胶囊的可能输出
- l+1层中的每个胶囊张量都会有cl个l层对应的预测,每个预测将用Kpqrs加权得到单个预测Spqr,可通过squash_3D函数传递,将概率限制在0-1之间。
- ˆS 和 ˜Vs通过点积更新
- 我们对该路由算法迭代i次,根据经验设置i=3,经过迭代,l+1层的输出通过ˆS得到。
3.2DeepCaps架构
新型深度胶囊架构:
- 对特征进行高级理解
- 包含16个卷积胶囊层和一个完全连接的胶囊层
改进:
- 最初的几层路由迭代的次数为1次(特征映射空间空间较大,计算成本较高)
- 提出ConvCap层(卷积层输出的是标量,卷积层的简单叠加不会有用),类似于卷积层,但输出的是被压缩的4D张量。
-
i = 1,使用ConvCaps层,对于任何i > 1,我们使用ConvCaps3D层
卷积层路由过程:
- 将Φl重构为单通道张量˜Φl:(wl,wl,cl*nl);
- 用(c^(l+1)xn^(l+1))个三维卷积核进行卷积;
- 生成(c^(l+1)xn^(l+1))个宽和高为(wl+1, wl+1)的特征图;
- 将以上特征图重构为(wl+1, wl+1, cl+1, nl+1)作为l+1层的输出;
重塑ConvCaps:
- 提出FlatCaps(类似深度神经网络中的全连接层),消除相邻胶囊之间的空间关系
- 保持l层ConvCaps和l+1层FC_Caps的部分-整体关系
- FlatCaps的输入:(wl, wl, cl, nl)形张量,重塑为:(al, nl)形矩阵,al= wl× wl× cl
- Φl∈ R(al,nl),Φ^(l+1)∈ R(a^(l+1),n^(l+1)),Ws由反向传播学习
DeepCaps架构:
- 跳跃连接胶囊单元:三个ConvCaps层,第一层输出卷积,跳跃连接(减少深度模型中的渐变消失)到最后一层输出(元素智能连接两个胶囊层)。
- 3D卷积胶囊单元:路由迭代次数保持为3次,上一层扁平化后与其连接起来,随后进行路由
- 全连接胶囊层:所有胶囊被收集和路由后,被该层路由到类胶囊层,输入图像被编码到最终的胶囊向量。
- 解码器网络:重建输入图像(反卷积解码器)
3.3损失函数
我们使用边际损失作为损失函数:
m+=0.9,m-=0.1,在训练初始阶段,利用λ来控制梯度反向传播的效果.
3.4解码器
解码器网络由反卷积层实组成,通过DeepCaps中提取的实例化参数来重建输入数据。
- 与全连接层解码器相比,在重建图像时捕捉到了更多的空间关系;
- 使用二元交叉熵作为损失函数
- 将类相关的解码器改进为了类无关的解码器
现存的解码器:i ∈ [a], j ∈ [b] and ,t = true label in the training stage
- a:最后类胶囊的类数;
- b:胶囊维度;
- P:被概率最大的类掩盖
ˆP被矢量化输入到解码器网络。
- 解码器网络从维度特定的分布获取类信息,从而间接地向解码器提供类信息,使解码器类依赖
类无关的解码器:
- 只有Pt∈ R1×b被输入到解码器,t=true label,
;
- 正则化
- 用于数据生成(但对物理参数对哪个实例化参数捕捉缺乏可控性)