我是靠谱客的博主 饱满草莓,最近开发中收集的这篇文章主要介绍胶囊神经网络:Dynamic Routing Between Capsules,NIPS2017,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Introduction

本文的三位作者来自Google Brain,Toronto。
胶囊(Capsule)是一组神经元,其活动向量(activity vector)表示特定类型实体(如对象或对象部分)的实例化参数。换句话说,越低级的胶囊捕获越细粒度的特征。我们拿人脸来举例,轮廓、五官都可以被视为低级别的特征,被低级别的胶囊的活动向量所表示。当多个低级别的胶囊预测一致,激活更高级别的胶囊(比如,识别出了眼睛、轮廓、鼻子、嘴巴等等之后,便认为这是一张人脸)。
在这里插入图片描述
胶囊的特征捕获的过程实际上依旧是卷积的过程,但是与CNN不同的是,CNN的池化操作会导致重要信息的丢失。池化的结果是一个标量,而胶囊的输出结果是一个向量,用来表示特征的方向。只有当低级别的特征之间按照一定的顺讯排列才可能激活高级别的胶囊,这是CNN无法做到的。如图中的人脸,倒过来你会发现并不是很正常的人脸。
在这里插入图片描述
为了实现上下层胶囊之间的消息传递,本文提出了一种动态路由机制(dynamic routing)。

dynamic routing

首先,本文使用胶囊的输出向量的长度来表示胶囊所代表的实体出现在当前输入中的概率。一个非线性的“挤压”函数来确保短向量被压缩到几乎为零的长度,而长向量被压缩到略小于1的长度,由此将长度转化为概率:
在这里插入图片描述
其中vj表示胶囊j的输出,sj表示胶囊的总体输入。sj的计算方式如下:
在这里插入图片描述
除了第一层胶囊之外,之后的每一层胶囊sj的总输入,是前一层胶囊的所有预测向量u^j|i的加权和,而这个预测向量需要权重矩阵Wij乘以前一层的实际输出ui得到。c_ij是动态路由过程中确定的耦合系数,所有的c_ij和为1,这个由“routing softmax”计算:
在这里插入图片描述
其中,b_ij的初始值是对数先验概率,这个概率表示胶囊i与胶囊j之间结合的可能性。这个值决于两个胶囊的位置和类型,而不取决于当前输入图像。注意这个logit并不是“一个事件发生与该事件不发生的比值的对数(统计学习方法-李航 p78)”,而是在softmax操作中e底的指数。初始的耦合系数可以通过在这里插入图片描述计算得到,这个就是两个向量之间的相似度。文中给出的动态路由方法如下:
在这里插入图片描述更直观的可视化描述参考于【3】:
在这里插入图片描述

CapsNet architecture

以MNIST手写数字数据集为输入(28*28),构建了整个网络架构。其中,胶囊也可以看做是一种卷积操作,“压缩”函数就是non-linearity。
在这里插入图片描述

  1. ReLU Conv1.作者指出胶囊网络对更高级别的特征的捕获能力更强,因此没有直接将图片作为输入,而是先经过一个ReLU Conv1。卷积核大小为9,stride=1,channels=256,所以第一层之后的输出为20×20×256。
  2. PrimaryCapsules.channels=32的卷积,这个通道数也就是胶囊数量。每一个胶囊中含有8个kernal size=9,stride=2的卷积单元,因此此层结束后输出变成了6×6×8D×32。此处的8D表示每个输出是一个8维的向量。
  3. DigitCaps.一共有10个胶囊,每一个胶囊代表一个数字类别,此层的输出是16维。为了做到与上一层胶囊的全连接,一共需要【32×6×6】个size为【8×16】的矩阵,然后经过动态路由算法得到输出。

Margin loss for digit existence

损失函数定义如下:
在这里插入图片描述其中,如果数字类k存在,那么Lk = 1;m+ = 0.9, m- = 0.1; λ=0.5。当类别k存在,而预测不存在,前半部分会很大;当k不存在而预测存在时,后半部分会很大。这保证了实际的值与预测值的一致性。

Reconstruction as a regularization method

为了探究胶囊网络是否真的提取出了特征,采用Decoder结构从训练好的结果中重构原图像。但是在Decoder训练的时候,需要mask掉错误的胶囊,只保留正确的。胶囊的输出被输入由3个完全连接层组成的解码器中(注意输出正好是一个MNIST数据集中的图片:28*28=784)。损失函数是最小化逻辑单元输出和像素强度之间的平方和差异。Decoder与胶囊网络一起训练,将重建损失缩小了0:0005,这样它就不会在训练中占主导地位。
在这里插入图片描述
下图是带有三个routing iterations的胶囊网络的重构示意图。(l;p;r)分别表示label、prediction和reconstruction target。最右边两列是错误的示例。
在这里插入图片描述并且,带有重构结构的网络的准确率也要稍高(Table1第三列)。
基线算法是CNN,带有三个卷积层(256,256,128),卷积核5×5,stride=1。然后是两个全连接层328; 192。
在这里插入图片描述

What the individual dimensions of a capsule represent

对于手写字体来说,胶囊可能代表笔画的粗细、歪斜和宽度,还包括特定于数字的变化,如2的尾部长度。重构的操作还帮助了解胶囊的含义。下图是DigitCaps中某一个维度连续变化造成的重构结果的变化,从结果的变化可以看出特定维度的含义。
在这里插入图片描述

Robustness to Affine Transformations

任意仿射变换(Affine Transformations)都能表示为原图乘以一个矩阵再接平移,通过将测试数据集替换成仿射变换后的数据集affNIST,来验证胶囊网络的鲁棒性。在MNIST达到了99.23% 的准确率,并使用affNIST测试获得了79%的准确率,远好于CNN的99.22%与66%。

Segmenting highly overlapping digits

接下来探讨胶囊对重叠图像的识别。重构后的图像为红、绿二色。L表示两个数字的标签,R表示重构之后的两个数据的标签。
在这里插入图片描述

胶囊的缺点【2】

  1. 训练周期长。应为胶囊网络不想CNN使用最大池化舍弃了部分参数,而是采用动态路由方法在每个胶囊内部都完成计算,因此训练的周期长。
  2. 性能问题。胶囊网络在CIFAR10数据集、ImageNet等大图像上的准确性并没有CNN的高。
  3. 胶囊拥挤。如果一个胶囊网络彼此之间太接近,就没有办法区分出同一类型的两个对象。因此在模型中,给定的位置上只能有一个给定类型的胶囊,这就大大局限了其现实中应用的条件。

参考博客
【1】https://www.jianshu.com/p/4ba9a48006e0
【2】https://baijiahao.baidu.com/s?id=1634425437515903801&wfr=spider&for=pc
【3】https://blog.csdn.net/xyj1536214199/article/details/78698326

最后

以上就是饱满草莓为你收集整理的胶囊神经网络:Dynamic Routing Between Capsules,NIPS2017的全部内容,希望文章能够帮你解决胶囊神经网络:Dynamic Routing Between Capsules,NIPS2017所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部