摘要
这篇文章就是提出了一个新的结构
胶囊时一组神经元的集合,这些集合用一个 向量表示,其中active的vector代表着某个实体的各个实例参数。通常我们会用此向量的长度来代表某个实体存在的概率,方向表示这个 实体的一些属性。在网络中,低层的胶囊为高层的胶囊做预测,当低层的都完成预测的时候,高层的胶囊就会被激活,通常低层的胶囊将自己的输出传递给高层 的胶囊的时候,遵循着高层与低层的胶囊的输出有一个较大的数量积。
introduction
这种结构类似一颗parse tree,也就是说这棵树上的一个节点就是一个胶囊,每个胶囊有事同一层神经网络中的某些神经元的集合,每一个神经元呢都表示的是特定实体的一些属性,通常使用instantiation parameter表示一个胶囊的实力参数,[那么这个vector的长度表示实体存在的概率,方向表示实体的一些属性 ,比如(position,size,orientation)]并且这个每个节点都会在above layer(也就是下一层)中找一个 parent。这种将当前层的输出输送到下一层的过程是通过一个动态路由确保将胶囊的输出发送到上面一层适当的父节点,开始的时候,输出会被动态路由到所有可能的父节点,但是通过耦合系数将其缩小到和为1**,对于每一个可能的parent,当前的胶囊都会将自己的输出乘以一个权重矩阵得到一个预测向量,然后将这个预测向量与可能的父节点进行乘积,得到的乘积越大,那么对应的parent耦合系数就越高,其他的就会越低,**这样就增加了此胶囊对于父胶囊的一些贡献,同时也增加了此胶囊与父胶囊的标量积。
这里使用一种新的动态路由的方式代替了最大池化(因为最大池化会丢失位置信息,就会破坏图像中某些部件的相对位置关系,我们希望cnn可以理解朝向和比例的变动,并相应的改变图像,从而不损失图像的位置信息,这里我们使用rate-code的方式将位置信息编码到胶囊向量里面,);使用了输出响亮的capsule代替了cnn中的scalar -output feature detector。
具体的算法如下:
损失函数
这个损失函数表示的是capsule网络最顶层的输出向量长度很大的那个类别出现的概率比较大,允许一张图片有多个数字,并且每张图片的熟悉的类别都单独的计算间隔损失,每个数字的损失之和就是所有的损失。
网络结构
第一层就是普通的CNN层,起像素级局部特征检测作用。原图像是28×28大小第一层采用256个9×9的卷积核,步长为1,得到输出矩阵大小为20×20×256。
第二层叫做PrimaryCaps层。PrimaryCaps层的计算过程具有多种理解方式,其中之一为,8个并行的常规卷积层的叠堆。
接下来,将第二层的输出转换成16×10维的向量组,得到第三层。在经过两个全连接和一个Sigmoid层,得到输出
参考链接
1 https://www.jiqizhixin.com/articles/2017-11-05
2 https://blog.csdn.net/sunlianglong/article/details/80412304
3https://www.youtube.com/watch?reload=9&v=pPN8d0E3900 YouTube视频