《Dynamic routing between capsules》

出处: NIPS 2017
作者:Hinton
地位:提出了胶囊网络

一、摘要

一个胶囊是一组神经元,这组神经元的激活向量表示了一个特定的物体或者物体的一部分。我们使用激活向量的长度(不是纬度)表示这个物体存在的概率(缩放到0-1),使用向量的方向(多维)表示物体的属性(位置、大小、方向、纹理等)。 被激活的低层胶囊做预测并将信息传递给高层胶囊,当多个预测达到一致时(routine-by-agreement机制 ),高层胶囊会被激活。我们通过有分辨力的训练,多层胶囊网络比CNN在MNIST数据上的表现好,并取得了SOTA。routine-by-agreement机制:低层胶囊在传递信息时,会偏好在可连接的高层胶囊中选择激活向量和低层胶囊传递的信息能产生较大标量积的高层胶囊。个人认为文章的主要亮点是提出了路由机制来取代max-pool(猜测是模型主要收益来源),其次提出用向量的长度表示物体存在的概率的思想(虽然并不知道比传统分类的优势在哪里),胶囊的概念其实是对一组神经元(比如CNN)的封装。

二、介绍

我们对视觉系统中某个固定点构建解析树,树的每层都由多个胶囊(节点)组成,低层节点会通过routine机制连接到一个父节点,顶层节点负责汇聚低层节点的分散信息,并最终推断整体。
routine-by-agreement机制:动机是让一个节点的输出信息可以传送给最合适的上层节点。具体逻辑,首先一个节点的输出信息会通过一组相关系数(和为1)缩放后传递给每个可达的上层节点;然后每个上层节点会预计算一个预测向量,如果这个预测向量有一个较大的响应(较大的标量积),那么会反馈给该低层节点;该低层节点收到反馈后,会增强该上层节点的系数同时抑制其他上层节点的系数,将信息重新缩放后传递给上层节点。这个反馈的过程可以循环多次,作者在文章末尾建议选择3次。这种方法比CNN中max-pooling无脑选择最大值要高效。 路由机制可以看做一种attention机制,它允许某个胶囊选择性的吸收某些低层胶囊传输的信息,而忽视其他无关胶囊的信息。
因为CNN可以检测特征并进行转换赋值,因此作者仍然使用CNN作为基础组件来实现胶囊网络(最后一层除外,应该是最后一层主要用来分类,论文的例子网络用的全连接层)。与CNN不同点在于,CNN的一个神经元输出标量,而胶囊输出一个向量;卷积网络通常使用max-pooling选择最大特征(丢掉精确的位置信息),而这里使用路由机制(可以保留低层特征)。因为胶囊网络的低层特征不会丢失,因此高层胶囊需要更多的存储容量来聚合更加复杂的信息,因此高层胶囊的输出向量纬度一般更大。

三、胶囊的输入输出

胶囊网络是一种通用的思想,可以有很多具体的实现 ,这里的实现只是一个简单的例子。对于胶囊 j,假设其输出的激活向量是vj,其总的输入向量是sj,由于向量长度表示物体存在的概率,因此要对输入向量归一化,公式如下:
在这里插入图片描述
sj是由较低层胶囊的输出向量加权求和得到的,公式如下:
在这里插入图片描述
其中Wij是胶囊 j 对低层胶囊 i 的参数矩阵,cij是动态路由阶段可以迭代更新的系数,计算公式如下:
在这里插入图片描述
其中k是胶囊 i 可达的上层胶囊的数目,bij是胶囊 i 对上层胶囊 j 的系数,初始化为0。
定义胶囊j对低层胶囊i的agreement(前面提到的标量积)为aij,计算公式为
在这里插入图片描述
整体流程可以归纳如下:
在这里插入图片描述

四、损失函数

对于类别k,假设其对应胶囊的输出为vk,那么该类别的损失函数为:
在这里插入图片描述
其中Tk表示样本是否存在物体k,存在为1,否则为0;m+=0.9,m-=0.1,在这里插入图片描述

五、CapsNet架构

如下图,作者在2828分辨率的MNIST数据上进行实验,模型分为三层,第一层卷积,中间胶囊网络(卷积实现),最后一层分类的胶囊网络(全连接层)。首先
第一层是9
9卷积核,channel为256的卷积网络,提取基础特征。第二层PrimaryCaps通过8个99卷积核,channel为32的卷积单元实现。每个卷积单元将输入转换成6632的特征映射,8个卷积单元的结果拼接起来产生66328的矩阵。作者将6632认为是胶囊数,8为每个胶囊的输出向量纬度。第三层DigitCaps是10个胶囊组成,每个胶囊输出纬度为16。(注意这里纬度依次递增)。
放到
在这里插入图片描述

5.1加入图像重建作为正则化方法

上文提到胶囊的激活向量(输出向量)的长度作为物体存在的概率,方向表示物体的属性(即向量的每个值表示一种属性)。因此可以考虑用target label的输出向量来重建(decode)原来的图像(有点类似于GAN的味道)。图像重建的网络结构为三层全连接层,结构如下。使用平方误差损失函数,加一个小的权重5e-4。将这个loss作为正则项添加到第四部分的Loss中。
在这里插入图片描述

六、实验结果

如下图,为在MNIST test集上的预测error,可以看到3次路由比1次好,加正则项效果比不加好很多。
在这里插入图片描述
模型训练完成后,作者通过依次干扰分类层输出向量的某个纬度的值,通过观察重建后的图像变化,分析每个纬度对应的属性。效果如下:在这里插入图片描述

七、补充材料

CNN缺点: CNN没有考虑简单和复杂对象之间的空间层级关系。CNN逐层检测特征,上层卷积通过对低层卷积输出的特征进行加权求和计算复杂特征。在这个过程中,组成高层特征的低层特征之间并不存在位姿(平移和旋转)关系。CNN解决这个问题的方法是使用最大池化或后续卷积层来减少通过网络的数据的空间大小,从而增加了上层网络神经元的“视野”。因此下面两个图片,CNN都检测导嘴巴和眼镜,因此会分类为人脸,而没有考虑眼镜和嘴巴的空间位置是不正确的。因此图像物体分割领域,如果要恢复物体的位置需要借助其他信息,比如U-Net在解码的时候借助了各分辨率编码的信息。
在这里插入图片描述
因为CNN没有考虑空间关系,因此需要大量的数据找到有用的特征,所以CNN需要的数据量比CapsNet多,但是CapsNet的路由机制导致它速度比较慢。
CapsNet有两个特性: 一个是Invariance(不变性)和Equivariance(等变性)。如下图所示,输入两个倾斜度不同的"1"图片,经过CNN的max-pool之后都会分类得到1存在的结论,所以CNN具有不变性。所谓的Equivariance意思是说我们并不是希望network input不一样的东西就输出一样东西,我们希望network输出完全地反映了现在看到的输入,比如说你输入这张1,得到结果是这样,你输另外一张1,其实这个1是左边这张1的翻转,那它的输出就是左边的vector的翻转。但是因为CapsNet使用向量的长度作为物体存在的概率的,因此两个不同的"1"虽然得到互为反转的向量,但是他们的||v||都是很大的,表示物体存在。总的来说,CNN只能判断物体是否存在,CapsNet不仅用输出向量的长度表示物体存在的概率,还用向量的方向表示了物体的属性(比如倾向的方向),因此后者包含的信息更大。
在这里插入图片描述
路由的agreement怎么理解: 首先路由是把信息从源地址传到目标地址,对应这里低层胶囊将信息传递到上层目标胶囊。那么agreement怎么理解呢?参考这里这里。如下图所示,三角形和长方形可以组成帆船和房子两种物体。现在假设有两层胶囊网络,第一层有两个胶囊,分别检测长方形(胶囊a)和三角形(胶囊b);第二层也有两个胶囊,分别检测房子(胶囊m)和帆船(胶囊n)。因为房子和帆船的形状是固定的,那么就可以根据长方形的位置方向推断房子的位置方向(类比于根据人的左眼或者嘴巴可以推断脸的大致位置和方向)。上文提到两层相邻胶囊之间有转换矩阵,这个转换矩阵的功能就有这种转换功能,比如a和n之间的矩阵N,可以根据a推断帆船的位置和方向(倾斜度)。如下图,根据下面的长方形,胶囊m和n分别推断出了跟这个长方形对应的为屋子和帆船时候的位置、方向;根据三角形,胶囊m和n又分别推断出了跟这个三角形对应的屋子和帆船的位置、方向。然后胶囊m将从长方形和三角形推断出的两个物体图像(两个向量v1和v2)进行比对(按照系数加权求和)得到一个输出向量v,因为这两个图像从图中可以看出方向不同(两个向量不同),那么求和之后的向量v跟v1(v2)的标量积一定是比较小的(两个向量方向不同),这样再次路由的时候,根据路由算法知道胶囊a和b输入到胶囊m的信息就会衰减。相反,胶囊n得到的两个图像是相同的(即agreement ),那么再次路由的时候输入到胶囊n的信息就会增强。(同时转换矩阵也是胶囊网络可以学习到物体的属性的原因)
在这里插入图片描述
正向作图和反向作图:
如下图,根据参数做出图像为正向作图(计算机渲染),反向作图是根据屏幕中帆船的图像,反推出各个物体的参数(胶囊网络)。
在这里插入图片描述
参考:

  1. https://zhuanlan.zhihu.com/p/31262148
  2. https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-i-intuition-b4b559d1159b
  3. https://www.jianshu.com/p/83309cdb9326
  4. https://www.sohu.com/a/226611009_633698
  5. 附hiton的演讲:https://www.leiphone.com/news/202002/RNdIDWVxcg4f6XUM.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值