0 - 背景

  Geoffrey Hinton是深度学习的开创者之一,反向传播等神经网络经典算法发明人,他在去年年底和他的团队发表了两篇论文,介绍了一种全新的神经网络,这种网络基于一种称为胶囊(capsule)的结构,并且还发表了用来训练胶囊网络的囊间动态路由算法。

1 - 研究问题

  传统CNN存在着缺陷(下面会详细说明),如何解决CNN的不足,Hinton提出了一种对于图像处理更加有效的网络——胶囊网络,其综合了CNN的优点的同时,考虑了CNN缺失的相对位置、角度等其他信息,从而使得识别效果有所提升。

2 - 研究动机

2.1 - CNN的缺陷

  CNN着力于检测图像像素中的重要特征。考虑简单的人脸检测任务,一张脸是由代表脸型的椭圆、两只眼睛、一个鼻子和一个嘴巴组成。而基于CNN的原理,只要存在这些对象就有一个很强的刺激,因此这些对象空间关系反而没有那么重要。

  如下图,右图不是人脸但都具备了人脸需要的对象,所以CNN有很大可能通过具有的对象激活了是人脸的判断,从而使得结果判断出错。

    

  重新审视CNN的工作方式,高层特征是低层特征组合的加权和,前一层的激活与下一层神经元的权重相乘并且相加,接着通过非线性激活函数进行激活。在这么一个架构中,高层特征和低层特征之间的位置关系变得模糊(我认为还是有一些的只是没有很好的利用)。而CNN解决这个问题的方法是通过最大池化层或者或许的卷积层来扩大下续卷积核的视野(我认为最大池化层不管怎么说或多或少会丢掉信息甚至是重要信息)。

2.2 - 逆图形法

  计算机图形学是基于几何数据内部的分层表示来构造可视图像,其结构考虑到了对象的相对位置,几何化的对象间的相对位置关系和朝向以矩阵表示,特定的软件接受这些表示作为输入并将它们转化为屏幕上的图像(渲染)。

  Hinton受此启发,认为大脑所做的和渲染正好相反,称为逆图形,从眼睛接受的视觉信息中,大脑解析出其所在世界的分层表示,并尝试匹配学习到的模式和存储在大脑中的关系,从而有了辨识,注意到,大脑中的物体表示并不依赖视角。

  因此,现在要考虑的是如何在神经网络中建模这些分层关系。在计算机图形学中,三维图形中的三维对象之间的关系可以用位姿表示,位姿的本质是平移和旋转。Hinton提出,保留对象部件之间的分层位姿关系对于正确分类和辨识对象来说很重要。胶囊网络结合了对象之间的相对关系,在数值上表示为4维位姿矩阵。当模型有了位姿信息之后,可以很容易地理解它看到的是以前看到的东西而只是改变了视角而已。如下图,人眼可以很容易分辨出是自由女神像,只是角度的不同,但CNN却很难做到,而把位姿信息集合进去的胶囊网络,也可以判别出是自由女神像的不同角度。

2.3 - 优点

  • 由于胶囊网络集合了位姿信息,因此其可以通过一小部分数据即学习出很好的表示效果,所以这一点也是相对于CNN的一大提升。举个例子,为了识别手写体数字,人脑需要几十个最多几百个例子,但是CNN却需要几万规模的数据集才能训练出好结果,这显然还是太暴力了!
  • 更加贴近人脑的思维方式,更好地建模神经网络中内部知识表示的分层关系,胶囊背后的直觉非常简单优雅。

2.4 - 缺点

  • 胶囊网络的当前实现比其他现代深度学习模型慢很多(我觉得是更新耦合系数以及卷积层叠加影响的),提高训练效率是一大挑战。

3 - 研究内容

3.1 - 胶囊是什么

  摘抄Hinton等人的《Transforming Autoencoders》关于胶囊概念理解如下。

人工神经网络不应当追求“神经元”活动中的视角不变性(使用单一的标量输出来总结一个局部池中的重复特征检测器的活动),而应当使用局部的“胶囊”,这些胶囊对其输入执行一些相当复杂的内部计算,然后将这些计算的结果封装成一个包含信息丰富的输出的小向量。每个胶囊学习辨识一个有限的观察条件和变形范围内隐式定义的视觉实体,并输出实体在有限范围内存在的概率及一组“实例参数”,实例参数可能包括相对这个视觉实体的隐式定义的典型版本的精确的位姿、照明条件和变形信息。当胶囊工作正常时,视觉实体存在的概率具有局部不变性——当实体在胶囊覆盖的有限范围内的外观流形上移动时,概率不会改变。实例参数却是“等变的”——随着观察条件的变化,实体在外观流形上移动时,实例参数也会相应地变化,因为实例参数表示实体在外观流形上的内在坐标。

  简单来说,可以理解成:

  • 人造神经元输出单个标量。卷积网络运用了卷积核从而使得将同个卷积核对于二维矩阵的各个区域计算出来的结果堆叠在一起形成了卷积层的输出。
  • 通过最大池化方法来实现视角不变性,因为最大池持续搜寻二维矩阵的区域,选取区域中最大的数字,所以满足了我们想要的活动不变性(即我们略微调整输入,输出仍然一样),换句话说,在输入图像上我们稍微变换一下我们想要检测的对象,模型仍然能够检测到对象
  • 池化层损失了有价值的信息,同时也没有考虑到编码特征间的相对空间关系,因此我们应该使用胶囊,所有胶囊检测中的特征的状态的重要信息,都将以向量形式被胶囊封装(神经元是标量)

  胶囊和人工神经元对比如下:

     

3.2 - 囊间动态路由算法

  低层胶囊$i$需要决定如何将其输出向量发送给高层胶囊$j$。低层胶囊改变标量权重$c_{ij}$,输出向量乘以该权重后,发送给高层胶囊,作为高层胶囊的输入。关于权重$c_{ij}$,需要知道有:

  • 权重均为非负标量
  • 对每个低层胶囊$i$而言,所有权重$c_{ij}$的总和等于1
  • 对每个低层胶囊$i$而言,权重的数量等于高层胶囊的数量
  • 这些权重由迭代动态路由算法确定

  低层胶囊将其输出发送给对此表示“同意”的高层胶囊,算法伪码如下:

  权重更新可以用如下图来直观理解。

  其中两个高层胶囊的输出用紫色向量$v_1$和$v_2$表示,橙色向量表示接受自某个低层胶囊的输入,其他黑色向量表示接受其他低层胶囊的输入。左边的紫色输出$v_1$和橙色输入$\hat{u_{1|1}}$指向相反的方向,所以它们并不相似,这意味着它们点积是负数,更新路由系数的时候将会减少$c_{11}$。右边的紫色输出$v_2$和橙色输入$\hat{u_{2|1}}$指向相同方向,它们是相似的,因此更新参数的时候路由系数$c_{12}$会增加。在所有高层胶囊及其所有输入上重复应用该过程,得到一个路由参数集合,达到来自低层胶囊的输出和高层胶囊输出的最佳匹配。

         

  采用多少次路由迭代?论文在MNIST和CIFAR数据集上检测了一定范围内的数值,得到以下结论:

  • 更多的迭代往往会导致过拟合
  • 实践中建议使用3次迭代

4 - 整体框架

  CapsNet由两部分组成:编码器和解码器。前3层是编码器,后3层是解码器:

  • 第一层:卷积层
  • 第二层:PrimaryCaps(主胶囊)层
  • 第三层:DigitCaps(数字胶囊)层
  • 第四层:第一个全连接层
  • 第五层:第二个全连接层
  • 第六层:第三个全连接层

4.1 - 编码器

  

  编码器接受一张$28 \times 28$的MNIST数字图像作为输入,将它编码为实例参数构成的16维向量。

4.1.1 - 卷积层
  • 输入:$28 \times 28$图像(单色)
  • 输出:$20 \times 20 \times 256$张量
  • 卷积核:256个步长为1的$9 \times 9 \times 1$的核
  • 激活函数:ReLU
4.1.2 - PrimaryCaps层(32个胶囊)
  • 输入:$20 \times 20 \times 256$张量
  • 输出:$6 \times 6 \times 8 \times 32$张量(共有32个胶囊)
  • 卷积核:8个步长为2的$9 \times 9 \times 256$的核/胶囊
4.1.3 - DigitCaps层(10个胶囊)
  • 输入:$6 \times 6 \times 8 \times 32$张量
  • 输出:$16 \times 10$矩阵
4.1.4 - 损失函数

4.2 - 解码器

  解码器从正确的DigitCap中接受一个16维向量,并学习将其编码为数字图像(注意,训练时候只采用正确的DigitCap向量,而忽略不正确的DigitCap)。解码器用来作为正则子,它接受正确的DigitCap的输出作为输入,重建一张$28 \times 28$像素的图像,损失函数为重建图像和输入图像之间的欧式距离。解码器强制胶囊学习对重建原始图像有用的特征,重建图像越接近输入图像越好,下面展示重建图像的例子。

4.2.1 - 第一个全连接层
  • 输入:$16 \times 10$矩阵
  • 输出:512向量
4.2.2 - 第二个全连接层
  • 输入:512向量
  • 输出:1024向量
4.2.3 - 第三个全连接层
  • 输入:1024向量
  • 输出:784向量

5 - 参考资料

https://mp.weixin.qq.com/s?__biz=MzI3ODkxODU3Mg==&mid=2247484099&idx=1&sn=97e209f1a9860c8d8c51e81d98fc8a0a&chksm=eb4ee600dc396f16624a33cdfc0ead905e62ae9447b49b20146020e6cbd7d71f089101512a40&scene=21#wechat_redirect

https://mp.weixin.qq.com/s?__biz=MzI3ODkxODU3Mg==&mid=2247484165&idx=1&sn=0ca679e3a5f499f8d8addb405fe3df83&chksm=eb4ee7c6dc396ed0a330fcac12690110bcaf9a8a10794dbc5e1a326c69ecbb140140f55fd6ba&scene=21#wechat_redirect

https://mp.weixin.qq.com/s?__biz=MzI3ODkxODU3Mg==&mid=2247484433&idx=1&sn=3afe4605bc2501eebbc41c6dd1af9572&chksm=eb4ee0d2dc3969c4619d6c1097d5c949c76c6c854e60d36eba4388da2c3855747818d062c90a&scene=21#wechat_redirect

https://mp.weixin.qq.com/s/6CRSen8P6zKaMGtX8IRfqw

CapsNet胶囊网络(理解)的更多相关文章

  1. 胶囊网络 -- Capsule Networks

    胶囊网络是 vector in vector out的结构,最后对每个不同的类别,输出不一个向量,向量的模长表示属于该类别的概率. 例如,在数字识别中,两个数字虽然重叠在一起,Capsule中的两个向 ...

  2. Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络

    Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络 朱晓霞发表于目标检测和深度学习订阅 457 广告关闭 11.11 智慧上云 云服务器企业新用户优先购,享双11同等价格 立即抢购 ...

  3. CTPN网络理解

    本文主要对常用的文本检测模型算法进行总结及分析,有的模型笔者切实run过,有的是通过论文及相关代码的分析,如有错误,请不吝指正. 一下进行各个模型的详细解析 CTPN 详解 代码链接:https:// ...

  4. 【读书笔记】iOS网络-理解错误源

    考虑一个字节是如何从设备发往运程服务器以及如何从远程服务器将这个字节接收到设备,这个过程只需要几百毫秒时间,不过确要求网络设备都能正常工作才行.设备网络和网络互联的复杂性导致了分层网络的产生.分层网络 ...

  5. CapsNet资源

    算法源码: https://github.com/xanderchf/pyCapsNet https://github.com/naturomics/CapsNet-Tensorflow 参考文章: ...

  6. 【转】理解Docker容器网络之Linux Network Namespace

    原文:理解Docker容器网络之Linux Network Namespace 由于2016年年中调换工作的原因,对容器网络的研究中断过一段时间.随着当前项目对Kubernetes应用的深入,我感觉之 ...

  7. 动手实现CapsNet系列——1 概述

    Geoffrey Hinton是深度学习的开创者之一,反向传播等神经网络经典算法发明人,他在17年年底和他的团队发表了两篇论文,介绍了一种全新的神经网络,这种网络基于一种称为胶囊(Capsule)的结 ...

  8. 深度学习之父低调开源 CapsNet,欲取代 CNN

    “卷积神经网络(CNN)的时代已经过去了!” ——Geoffrey Hinton 酝酿许久,深度学习之父Geoffrey Hinton在10月份发表了备受瞩目的Capsule Networks(Cap ...

  9. Capsules for Object Segmentation(理解)

    0 - 背景 今年来卷积网络在计算机视觉任务上取得的显著成果,但仍然存在一些问题.去年Hinton等人提出了使用动态路由的新型网络结构——胶囊网络来解决卷积网络的不足,该新型结构在手写体识别以及小图像 ...

随机推荐

  1. js 批量替换

    html = html.replace(new RegExp(title,"gm"), "<span style='color:red;'>"+ti ...

  2. loadrunner迭代和并发的区别

    转载: ZEE的回答: 用比喻的方式来回一下: 四车道的马路,如果只有四辆车并排走过就是并发: 如果四辆车排成一纵队走过就是迭代: 如果有100辆车排成25行依次走过就是并发加迭代. 在以上说法中,只 ...

  3. 解决 tomcat 重启上传文件消失

    开发模式 首先开发者模式下,部署在 Tomcat 上没有什么好的办法,否则无法调试 除非使用绝对路径,缺点:不同的操作系统路径不同,自动设置 对于图片上传一般我们使用图片服务器,上传 CDN中 一般获 ...

  4. 在Unity使文字变色

    using UnityEngine;using System.Collections;using UnityEngine.UI; public class ShipIntro : MonoBehavi ...

  5. .Net Core应用框架Util介绍(六)

    前面介绍了Util是如何封装以降低Angular应用的开发成本. 现在把关注点移到服务端,本文将介绍分层架构各构造块及基类,并对不同层次的开发人员应如何进行业务开发提供一些建议. Util分层架构介绍 ...

  6. MaxCompute教程

    MaxCompute全套攻略:https://blog.csdn.net/qq_35394891/article/details/82943894 [2019年大数据福利推荐]MaxCompute教程 ...

  7. jquery动态设置图片路径和超链接href属性

    js document.getElementById("myImage").src="hackanm.gif"; jquery $("#img&quo ...

  8. js模块化世界

    前言 我们经常见到 一些这样的写法,require('xxx').import xx from '../components/data'.export const data....也听见一些这样的说法 ...

  9. HTML5特性之AJAX跨域

    js跨域问题一般会考虑iframe.jsonp. 后端语言设置响应头:header('Access-Control-Allow-Origin:*),*号表示允许所有域名,可以将*号改为指定允许的访问域 ...

  10. 如何在源码里修改openwrt root密码

    root密码在etc/shadow文件里,但里边的密码是加密过后的.具体的加密方式我不清楚,应该是Linux里的一套加密算法.但要达到修改源码密码的目的,我还是想到了一个间接的办法.首先在源码里改成t ...