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. ThinkPHP第一课 环境搭建

    第一课 环境搭建 1.说明: ThinkPHP是一个开源的国产PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的. 最早诞生于2006年初.原名FCS.2007年元旦正式更名为Think ...

  2. 学写jQuery插件开发方法

    jQuery如此流行,各式各样的jQuery插件也是满天飞.你有没有想过把自己的一些常用的JS功能也写成jQuery插件呢?如果你的答案是肯定的,那么来吧!和我一起学写jQuery插件吧!   很多公 ...

  3. js:string转int

    http://blog.csdn.net/leidengyan/article/details/5503594 <script>     var   str='1250' ;   aler ...

  4. mysql导出导入所有数据库

    导出所有数据库 mysqldump -uroot -p123456 --all-databases > /home/aa.sql 导入所有数据库 mysql -uroot -p123456 &l ...

  5. 导出数据生成Excel(MVC)

    /// <summary> /// 生成Excel /// </summary> /// <returns></returns> public File ...

  6. Java获取系统属性及环境变量

    当程序中需要使用与操作系统相关的变量(例如:文件分隔符.换行符)时,Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回 ...

  7. python爬虫,从hao123爬取网址信息

    最近研究python的爬虫,小小程序,拿下来分享,本人使用python3.7,纯粹兴趣爱好,希望能帮助大家激发兴趣.从hao123,爬取各种网址信息,代码如下. import urllib.reque ...

  8. andorid中发送短信页面以及邮件发送

    跳转到发送短信页面 Uri smsToUri = Uri.parse("smsto://10086"); Intent mIntent = new Intent( android. ...

  9. HDFS源码分析之DataXceiverServer

    DataXceiverServer是Hadoop分布式文件系统HDFS的从节点--数据节点DataNode上的一个后台工作线程,它类似于一个小型的服务器,被用来接收数据读写请求,并为每个请求创建一个工 ...

  10. JAVA学习第五十二课 — IO流(六)File对象

    File类 用来给文件或者目录封装成对象 方便对文件与目录的属性信息进行操作 File对象能够作为參数传递给流的构造函数 一.构造函数和分隔符 public static void FileDemo( ...