首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深度学习第58讲:超越CNN——CapsNet胶囊网络

卷积神经网络在深度学习和计算机视觉应用中都有着举足轻重的地位,可以说CNN是目前深度学习的主流方法了。在CNN这样普遍化的工业应用之后,也许你会思考,我们能否更进一步,构造出性能超越CNN的网络结构?解铃还须系铃人,当年提出CNN的Hinton经过多年研究,在2017年11月提出了著名的胶囊网络(Capsule Nets),并在mnist数据识别任务上取得了迄今为止最优的成绩。本篇笔记笔者先和大家来分析一下CNN的一些缺点,然后再来详细看一下胶囊网络的基本结构和原理。

CNN的缺点

我们都知道在CNN中池化层是一个伟大的发明,数据经过池化层这样一个下采样过程的处理,能够缩小信息冗余,让网络处理更加有效的信息。但池化层也很粗暴,比如说最大池化处理,丢失了数据中很多有效的信息,降低了图像的空间分辨率。最明显的例子就是CNN很难分辨出两张有着细微差别的输入图像,比如说下图中CNN很难察觉出这只猫是在左边还是在右边。

图1 不同位置的猫

再比如说CNN识别一张人脸的要素在于两只眼睛一张嘴巴和一个鼻子,只要输入图像中有这些元素,CNN都会将其识别为人脸。比如说下面这张图,明显不是正常的人脸,倒是有点像毕加索画中的人脸,CNN也会准确无误的将其识别出来,而不会在乎构成人脸的这些鼻子眼睛之间是以怎样的一种结构来组成人脸的。

图2 变形的人脸

从CNN的角度看,鼻子歪了或者是眼睛长到嘴巴上去了对于整张图像来说只是微小的变化,不会影响它对输出的判断。Hinton认为:人类在识别图像的时候,神经元是按照一种二叉决策树的形式自上而下的进行判断识别的,而CNN则是通过一层层的网络进行信息过滤和提取来进行集成和抽象形成的,这是CNN与人类思维的最大区别。

图3 人类的思维 vs CNN的思维

所以总的来说,CNN最大的问题在于其网络内部的各神经元是平等的,没有具体的组织结构能够让CNN来识别出同一张图像内容的不同位置表示。CNN的这些缺点,正是胶囊网络Capsule Nets要做的。

胶囊网络结构与原理

2017年11月,由Sara Sabour、Nicholas Frosst和Geoffrey Hinton发表了一篇名为Dynamic Routing Between Capsules(胶囊间的动态路由)

的论文,这篇论文提出了一种新的、不同于此前的CNN网络架构的胶囊网络结构,论文一经公开,在深度学习界引起不小的反响和讨论。

图4 胶囊网络论文摘要

那么究竟什么是胶囊网络呢?简而言之,就是组成胶囊网络的基本元素是一个个的胶囊,而不是神经网络中的神经元。那胶囊又是什么呢?没错,胶囊是由一组神经元构成的,说到底,胶囊网络的最基本单元还是神经元,但是Hinton人为的规定胶囊就是胶囊网络的最小单元。

构成每个胶囊的这样一组神经元,它会学习检测给定区域(例如一个八边形区域)图像的特定目标,输出一个向量(例如一个八维向量),向量的长度代表目标存在的概率估计,而且它对姿态参数(例如精确的位置,旋转,等等)定向编码(例如8D空间)。如果对象有轻微的变化(例如移位、旋转、改变大小等),那么胶囊将输出相同长度但方向略有不同的向量,因而胶囊追求的是等变化(Equivariance),而对应的不能察觉出这种轻微变化的CNN追求的则是不变性(Invariance)。

图5 胶囊与传统神经元的区别

跟神经网络一样,胶囊网络同样具有层的概念,一个胶囊网络由多个胶囊层构成,最开始的胶囊层可以称之为基本胶囊层,基本胶囊层直接接受的小区域图像作为输入,假设它试图检测一个特定的对象和姿势,比如一个矩阵或者三角形。而在此之上更高的胶囊称之为路由胶囊(Routing Capsule),路由胶囊用来检测更为复杂的或者更大的物体。

基本胶囊层就是用我们之前很熟悉的卷积层来实现,所以这里不做赘述。但路由胶囊层就不一样了,这也正是整个胶囊网络的特殊之处。路由胶囊层采用了一种叫做routing-by-agreement(路由协议)的算法来检测物体对及其姿态。

我们以Aurélien Géron提供的胶囊网络PPT作为讲解范例。假设有两种基本胶囊:一种是长方形胶囊,一种是三角形胶囊,假设它们都发现了要检索的东西,矩形和三角形都可以是房子或船的一部分。给定矩形的姿态,它会稍微向右旋转,房子和船也会稍微向右旋转。考虑到三角形的位置,房子几乎是上下颠倒的,而船会稍微向右旋转。形状和整体与部分关系都是在训练中学习的。矩形和三角形在船的姿势上是一致的,而在房子的姿势上是完全不同的。所以很可能矩形和三角形是同一条船的一部分,而不是房子。

图6 路由协议

既然如此,我们知道了矩形和三角形是船的一部分,矩形胶囊和三角胶囊的输出也就是只关注船胶囊,所以就没有必要发送这些输出到任何其他胶囊,这就是路由协议在这个例子上的含义。

多层胶囊构成的胶囊网络结构示意图如下所示:

图7 胶囊网络

下图是胶囊网络在mnist数据集上的效果,包括对手写数字多个维度的刻画:

图8 胶囊网络在mnist数据集上的效果

胶囊网络在mnist整体识别任务上达到了99.75%的准确率,可以说是创了mnist识别任务的历史新高了。在mnist重叠数字识别上,胶囊网络也能够很好的区分出重叠的数字。

图8 胶囊网络在mnist重叠数据上的效果

胶囊网络参考实现代码:

https://github.com/naturomics/CapsNet-Tensorflow

https://jhui.github.io/2017/11/03/Dynamic-Routing-Between-Capsules/

参考资料:

Dynamic Routing Between Capsules

https://github.com/naturomics/CapsNet-Tensorflow

https://jhui.github.io/2017/11/03/Dynamic-Routing-Between-Capsules/

https://zhuanlan.zhihu.com/p/33556066

http://www.sohu.com/a/206548662_473283

一个数据科学从业者的学习历程

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181230B1AG3D00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券