胶囊网络(Capsual Network)

胶囊网络

近日学习深度神经网络了解到胶囊网络,且胶囊网络解决了CNN的一些缺点,通过查阅资料决定按照自己的理解整理一下。

1. 简单了解胶囊网络

首先胶囊网络(Capsual Network)是NeurIPS 2017的一项工作。作者首先总结了当前卷积神经网络的限制与不足:①CNN通过池化操作获得invariance,有助于分析,但是同时一些局部信息也会丢失。如果数据发生旋转、倾斜,其效果会很差 ②CNN很解释部分与整体之间的位置关系。当前针对问题1现有两种方法解决方案,一是数据增强,通过对训练样本进行旋转、位移生成新的训练集;二是使用更多的参数去建模,也就是构建一个更深层的网络。但是这些方法局限性也很大,缺少局部的等变特性(equivariance),所以其泛化能力很弱。

什么是Capsule?最简单的理解Capsule与neuron的区别是,原来neuron是output一个值, 而Capsule是output一个vector。简单结构图如下所示。图中v1与v2为黄色胶囊和绿色胶囊输出的向量。
在这里插入图片描述
在一个network里面,每一个neuron的工作就是负责检测一个具体的模式。举例来说有一个neuron,假设你做图像辨识,有一个neuron的工作只是detect往左的鸟嘴,另外一个neuron的工作只是detect向右的鸟嘴;其实不太可能有一个neuron,它可以同时做两件事情,一个neuron它其实就是侦测一种鸟嘴而已,所以你很难说有一个neuron,它就是看说有向左边的鸟嘴,他被activate;向右边的鸟嘴,它也这被activate。Capsule有不一样的地方,Capsule是侦测某一个种类的模式,它不是只侦测一个模式。 而output向量v的每一个维度就代表了模式的特性。而向量v的norm就代表了模式是否存在。

2. 胶囊网络的整体运作

输入两个 向量,v1和v2,分别乘上另外两个矩阵w1和w2 ,得到u1和u2,接下来把和做weighted sum,得到s,s=u1c1+u2c2,随后,通过一个挤压的方式得到v。挤压只会改变长度,它不会改变的方向。挤压的具体操作可以通过下图中的公式计算得出。总而言之,反正就是输入两个 向量,v1和v2,然后经过一连串的运算,得到向量v;在这一连串的运算里面有矩阵w1和w2,weighted sum和挤压,参数w1和w2通过backpropagation learn出来的。
在这里插入图片描述
比较的特别地方是c1和c2不是通过backpropagation learn出来的。这里c1和c2叫做coupling coefficients,他们是在testing的时候在使用Capsule的动态去决的。这个决定的过程叫做动态路由(dynamic routing)。c1和c2可以想成是pooling一样。Max pooling就是有一组neuron,然后只选最大那个值出,到底哪一个neuron的值会被选, 在training的时候不知道,在testing的时候才去dynamic决定的;它这个coupling coefficients跟max pooling是一样的,它也是online的时候决定的。

3. 动态路由
在这里插入图片描述
我们来看看c1,c2,c3是怎么运作的,首先要有一组参数b,b的初始值都是0,而b01,b02,b03就对应到c1,c2,c3,假设跑T个iteration,T是一个事先确定好的超参数。

接下来我们把b(r-1)1,b(r-1)2,b(r-1)3做softmax得到c(r-1)1,c(r-1)2,c(r-1)3,所。有了c(r-1)1,c(r-1)2,c(r-1)3以后就可以做weighted sum,得到sr,再把得到的sr做挤压得到ar。然后用计算出来的ar去update b的值,你就把ar计算出来的结果去跟每一个u做内积,如果某个u和arr的内积结果特别大,即他们特别接近,对应到的b的值就会增加。具体的计算可以看图。现在假设跑了T个iteration以后,我们就得到了T个iteration的c(T)1,c(T)2,c(T)3,这个就是我们最后要拿来计算s跟v的coupling coefficients,特别说明文章中括号里面的字母表示的是上标。如果我们用图示来展开的话,看起来像是这个样子:
在这里插入图片描述

主要学习参考:
作者:SpareNoEfforts
链接:https://www.jianshu.com/p/83309cdb9326
来源:简书

  • 11
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值