胶囊网络(Capsule Network)

Introduction

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

Geoffrey Hinton是深度学习的开创者之一,反向传播等神经网络经典算法发明人.

引入

CNN着力于检测图像像素中的重要特征。考虑简单的人脸检测任务,一张脸是由代表脸型的椭圆、两只眼睛、一个鼻子和一个嘴巴组成。而基于CNN的原理,只要存在这些对象就有强的刺激,因此这些对象空间关系反而没有那么重要。如下图,右图不是人脸但都具备了人脸需要的对象,所以CNN有很大可能通过具有的对象激活了是人脸的判断,从而便得结果判断出错。
tu1
​ 如下图,重新审视CNN的工作方式,高层特征是低层特征组合的加权和,前一层的激活与下一层神经元的权重相乘且相加,接着通过非线性激活函数进行激活。在这么一个架构中,高层特征和低层特征的位置关系变得模糊,而CNN解决这个问题的方法是通过最大池化层。
tu2

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

逆图形(inverse graphisc)思想

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

​ 在计算机图形应用程序中,比如设计或者渲染,对象通常是通过参数设置来呈现的。而在胶囊网络中,恰恰相反,网络是要学习如何反向渲染图像(inverse rendering)——通过观察图像,然后尝试预测图像的实例参数。

​ 胶囊网络通过重现它检测到的对象,然后将重现结果与训练数据中的标记示例进行比较来学习如何预测。通过反复的学习,它将可以实现较为准确的实例参数预测。所以胶囊网路就是一种尝试演绎逆图形过程的神经网络。

胶囊网络同时对空间信息和物体存在概率进行编码,编码在Capsule向量中。

  • 向量的模表示特征存在的概率;
  • 向量的方向表示特征的姿态信息;

移动特征会改变Capsule向量,不影响特征存在概率。
胶囊和人工神经元对比如下:
tu11tu22

胶囊之间的动态路由算法

在这里插入图片描述

路由(routing)是指底层胶囊将输入向量传递到高层胶囊的过程。高层胶囊和底层胶囊的权重通过动态路由(dynamic routing)获得。权重更新可以用如下图来直观理解

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

在这里插入图片描述

单个胶囊的运算方式:
单个胶囊的运算方式

整体框架(以minist数据集为例的流程)

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

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

编码器

在这里插入图片描述
编码器接受一张28×28 的MNIST数字图像作为输入,将它编码为实例参数构成的16维向量。

  • 卷积层
    输入:28×28×1 灰度图像
    输出:20×20×256 张量
    卷积核:256个步长为1的9×9×1的核
    激活函数:ReLU
  • PrimaryCaps层(32个胶囊)
    输入:20×20×256张量
    输出:6×6×8×32 张量(共有32个胶囊)
    卷积核:8个步长为2的9×9×256的核/胶囊
  • DigitCaps层(10个胶囊)
    输入:6×6×8×32张量
    输出:16×10 矩阵
  • 损失函数
    在这里插入图片描述

解码器

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

  • 全连接层(3个)
    16×10矩阵 --> 512向量–>1024向量–>784向量
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值