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. UNP学习笔记(第二十五章 信号驱动式I/O)

    信号驱动式I/O是指进程预先告知内核,使得当某个描述符发生某事时,内核使用信号通知相关进程. 套接字的信号驱动式I/O 针对一个套接字使用信号驱动式I/O(SIGIO)要求进程执行以下3个步骤: 1. ...

  2. apue学习笔记(第四章 文件和目录)

    本章将描述文件系统的其他特性和文件的性质. 函数stat.fstat.fstatat和lstat #include <sys/stat.h> int stat(const char *re ...

  3. cocos2d-x 3.0 内存管理机制

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  4. Java 加载器

    类的加载是由类加载器完成的,类加载器包括: 根加载器( BootStrap ).扩展加载器( Extension ).系统加载器( System )和用户自定义类加载器( java.lang.Clas ...

  5. Redis(十):使用RedisTemplate执行Redis脚本

    对于Redis脚本使用过的同学都知道,这个主要是为了防止竞态条件而用的.因为脚本是顺序执行的.(不用担心效率问题)比如我在工作用,用来设置考试最高分. 如果还没有用过的话,先去看Redis脚本的介绍, ...

  6. 图片压缩CompressUtil解析

    CompressUtil 流程图: CompressUtil 类 具体解释 public class CompressUtil { /** * 终于封装的压缩方法 * @param imgPath * ...

  7. hadoop生态系统学习之路(六)hive的简单使用

    一.hive的基本概念与原理 Hive是基于Hadoop之上的数据仓库,能够存储.查询和分析存储在 Hadoop 中的大规模数据. Hive 定义了简单的类 SQL 查询语言,称为 HQL.它同意熟悉 ...

  8. [概念理解] MVC模式和C++的实现

    [转]学习可以是一件很快乐的事,特别是当你发现以前所学的点点滴滴慢慢地能够串起来或者变成了一个环,这种感觉真好.这篇文章就这么来的. 从MVC架构开始说起吧.这两天系统了解了一下MVC架构的内容,主要 ...

  9. 全命令行手写MapReduce并且打包运行

    主要要讲的有3个 java中的package是干啥的? 工作了好几年的都一定真正理解java里面的package关键字,这里在写MapReduce需要进行打包的时候突然发现命令行下打包运行居然不会了, ...

  10. HUD3689 Infinite monkey theorem

    Infinite monkey theorem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...