capsule network--《Dynamic Routing Between Capsules》

from:https://zhuanlan.zhihu.com/p/31491520
 

Hinton大神前一段时间推出的capsule network--《Dynamic Routing Between Capsules》可谓是火了朋友圈,吸引了无数科研人员的眼球。现实生活中,无论你持什么样的观点,总有人站在“对立面”,比如知乎中不乏“高人”跳出来“怒喷”这篇论文。那些怒喷的回答我读了读,觉得喷人的答主们格局小了点。《Dynamic Routing Between Capsules》这篇论文虽有不足,但该论文的亮点不是更值得我们关注吗?吹毛求疵的“暴击”除了抓眼球、或者通过贬低别人以体现自己的优越的事,还是要少做。多关注别人的有点,学习之,这才是生存之道。

废话半天,回到正题,本文的目的并非给出capsule network的详解(因为capsule network的相关博客已经满天飞了),还是像往常一样,我们简单的分析这篇论文的Motivation,了解其思想,并思考一下有哪些应用场景。

为啥要用Capsule network? 它比CNN有哪些优势?

(Hinto论文里提到,capsule network更像是大脑工作的方式,当人们处理某个视觉信息时,大脑有个“routing”的机制,寻找大脑中最好的“capsule”来处理该视觉信息)

用下面图片中的例子说明,左边是一个房子,右边是一个帆船。假设我们用大量“房子”的图片训练CNN,然后用右边的“帆船”去测试CNN,CNN会错误地认为右边的图片也是“房子”。

为什么CNN会出现这个问题?CNN忽略了“结构信息”。这是因为不同的feature map分别捕捉了“三角形”和“四边形”的图形信息。对于测试样本“帆船”,CNN的“三角形”和“四边形”的feature map都会被激活,即该图片中包含了三角形和四边形,就认为这是一个房子。所以说,CNN仅仅考虑了“有没有”的问题,没有考虑feature map的结构关系。这个结构关系包括位置,角度等等。

房子,帆船

Capsule network是如何解决这个问题的呢?

Capsule layer的定义是a nested set of neural layers,即他是多层神经网络的一个集合,而非一个个孤零零的feature map。Capsule layer的输出也跟feature map的max-pooling输出不同,capsule layer的输出是一个向量,这个向量包含了位置,大小,角度等信息,这是feature map仅能输出一个值所不具备的。

结合房子和帆船的例子,模型中间Primary capsules,我们可以理解为某个capsule表征“房子”,某个capsule表征“帆船”。假设一个“帆船”测试样本输入到网络中,那么Primary capsules中对应“帆船”的capsule会被激活,而对应“房子”的capsule会被抑制,整个模型也就避免了将“帆船”错误地识别为“房子”。某种程度上说,Capsule layer提升了整个模型的表达能力,它比feature maps提取了更多的细节信息。

Capsule Network既然有这样的优势,那么潜在的应用有哪些呢?

因为capsule network能够建模更细节的信息,capsule network可以用来做人脸识别,物体检测等任务,泛华能力可能比CNN要强。

当然,图片信息推理(如:图片中最大物体的右边是什么?),图片描述生成(看图说话)等任务中,可能也会比较有用。

另外一方面,文本挖掘上,目前文本的结构信息仅局限在n-gram语言模型下,capsule network能否对n-gram之外的结构关系进行建模,从而提升文本挖掘任务上的表现,也不一定。

总之,capsule network已然成为一个“大坑”,相信会有很多人前来“灌水”。

我们在做文章的时候也该想一想,别为了灌水,损害了自己的“科研品味”。

最后,简单介绍一下论文中的几个重要概念,并介绍一下该论文的优势与劣势。

squash: 将向量长度限制在[0,1]之间,大家可以想想为啥。

routing by agreement:每个capsule可以认为是feature map的升级版,它记录了物体在图像中的位置、角度等信息,routing by agreement就是找到对应的capsule,并激活。

Prons:

效果好

更少的训练数据

routing by agreement能够处理更复杂的场景

通过实验分析,可解释性更强(将激活向量画出来,可以看到有些表示了粗细,有些表示平滑程度)

Cons:

在CIFAR数据上效果不是最好

没有在image-net大规模数据上测试

训练比较慢(routing by agreeement部分)

capsule network——CNN仅仅考虑了“有没有”的问题,没有考虑feature map的结构关系。这个结构关系包括位置,角度等。Capsule layer的输出也跟feature map的max-pooling输出不同,capsule layer的输出是一个向量,这个向量包含了位置,大小,角度等信息,这是feature map仅能输出一个值所不具备的;训练比较慢的更多相关文章

  1. 深度学习课程笔记(十一)初探 Capsule Network

    深度学习课程笔记(十一)初探 Capsule Network  2018-02-01  15:58:52 一.先列出几个不错的 reference: 1. https://medium.com/ai% ...

  2. Capsule Network

    Capsule Network最大的特色在于vector in vector out & 动态路由算法. vector in vector out 所谓vector in vector out ...

  3. 语义分割:使用关系图辅助图像分割-Capsule Network、IceNet

    文章:欲取代CNN的Capsule Network究竟是什么来头?它能为AI界带来革命性转折么? 文章:用于分类.检测和分割的移动网络 MobileNetV2 网络 文章:后RCNN时代的物体检测及分 ...

  4. TensorFlow中max pooling层各参数的意义

    官方教程中没有解释pooling层各参数的意义,找了很久终于找到,在tensorflow/python/ops/gen_nn_ops.py中有写: def _max_pool(input, ksize ...

  5. 【面向代码】学习 Deep Learning(三)Convolution Neural Network(CNN)

    ========================================================================================== 最近一直在看Dee ...

  6. 卷积神经网络(Convolutional Neural Network, CNN)简析

    目录 1 神经网络 2 卷积神经网络 2.1 局部感知 2.2 参数共享 2.3 多卷积核 2.4 Down-pooling 2.5 多层卷积 3 ImageNet-2010网络结构 4 DeepID ...

  7. day-16 CNN卷积神经网络算法之Max pooling池化操作学习

    利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...

  8. Convolutional neural network (CNN) - Pytorch版

    import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms # ...

  9. 22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表。然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法showB输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。

    22.编写一个类A,该类创建的对象可以调用方法showA输出小写的英文字母表.然后再编写一个A类的子类B,子类B创建的对象不仅可以调用方法showA输出小写的英文字母表,而且可以调用子类新增的方法sh ...

随机推荐

  1. unity 切圆角矩形 --shader编程

    先上个效果图 制作思路 如上图我们要渲染的就是上图带颜色的部分 步骤: 先获取黄色和蓝绿部分 例如以下图 算法 |U|<(0.5-r)或|V|<(0.5-r) 注意的是模型贴图最大值是1. ...

  2. C++里面定时器的使用

    说白了就是三个函数的使用: SetTimer(20, 20, 0); //第一个20表示此定时器的标识符,第二个20表示你要定的时间,第三个不用管,设0即可. void CLMS511_interfa ...

  3. vs调试,监控变量

  4. css:html() text() val()

    转http://www.jb51.net/article/35867.htm .html()用为读取和修改元素的HTML标签    对应js中的innerHTML .html()是用来读取元素的HTM ...

  5. npm安装package.json

    npm安装package.json时,直接转到当前项目目录下,用命令npm install 或npm install --save-dev安装即可,自动将package.json中的模块安装到node ...

  6. 【翻译自mos文章】执行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误

    执行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误. 适用于: Oracle Server - Ente ...

  7. python升级安装后的yum的修复

    升级python版本号后,执行yum # yum -y install openssl 提演示样例如以下: There was a problem importing one of the Pytho ...

  8. VSTS跟Kubernetes整合进行CI/CD

    利用VSTS跟Kubernetes整合进行CI/CD   为什么VSTS要搭配Kubernetes? 通常我们在开发管理软件项目的时候都会碰到一个很头痛的问题,就是开发.测试.生产环境不一致,导致开发 ...

  9. 32.10 使用模板更改控件的UI

    32.10  使用模板更改控件的UI 样式是改变WPF控件基本外形的非常好(且非常简单)的方式,它通过为窗口部件的特性设置建立一组默认的值,从而改变WPF控件的基本外形.但是,即使样式允许我们改变各种 ...

  10. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类1.教育工具2.生活工具3.社交应用4.定位工具5.游戏6.报纸和杂志的阅读器7.移动办公应用8.财经工具9.手机购物应用10.风景区相关应用11.旅游相关的 ...