深度学习12:胶囊神经网络
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
传统CNN存在着缺陷下面会详细说明如何解决CNN的不足Hinton提出了一种对于图像处理更加有效的网络——胶囊网络其综合了CNN的优点的同时考虑了CNN缺失的相对位置、角度等其他信息从而使得识别效果有所提升。
研究动机
CNN的缺陷
CNN着力于检测图像像素中的重要特征。考虑简单的人脸检测任务一张脸是由代表脸型的椭圆、两只眼睛、一个鼻子和一个嘴巴组成。而基于CNN的原理只要存在这些对象就有一个很强的刺激因此这些对象空间关系反而没有那么重要。
如下图右图不是人脸但都具备了人脸需要的对象所以CNN有很大可能通过具有的对象激活了是人脸的判断从而使得结果判断出错。
重新审视CNN的工作方式高层特征是低层特征组合的加权和前一层的激活与下一层神经元的权重相乘并且相加接着通过非线性激活函数进行激活。在这么一个架构中高层特征和低层特征之间的位置关系变得模糊。而CNN解决这个问题的方法是通过最大池化层或者或许的卷积层来扩大下续卷积核的视野我认为最大池化层不管怎么说或多或少会丢掉信息甚至是重要信息。
逆图形法
计算机图形学是基于几何数据内部的分层表示来构造可视图像其结构考虑到了对象的相对位置几何化的对象间的相对位置关系和朝向以矩阵表示特定的软件接受这些表示作为输入并将它们转化为屏幕上的图像渲染。
Hinton受此启发认为大脑所做的和渲染正好相反称为逆图形从眼睛接受的视觉信息中大脑解析出其所在世界的分层表示并尝试匹配学习到的模式和存储在大脑中的关系从而有了辨识注意到大脑中的物体表示并不依赖视角。
因此现在要考虑的是如何在神经网络中建模这些分层关系。在计算机图形学中三维图形中的三维对象之间的关系可以用位姿表示位姿的本质是平移和旋转。Hinton提出保留对象部件之间的分层位姿关系对于正确分类和辨识对象来说很重要。
胶囊网络结合了对象之间的相对关系在数值上表示为4维位姿矩阵。当模型有了位姿信息之后可以很容易地理解它看到的是以前看到的东西而只是改变了视角而已。如下图人眼可以很容易分辨出是自由女神像只是角度的不同但CNN却很难做到而把位姿信息集合进去的胶囊网络也可以判别出是自由女神像的不同角度。
胶囊网络优点
-
由于胶囊网络集合了位置信息因此其可以通过一小部分数据即学习出很好的表示效果所以这一点也是相对于CNN的一大提升。举个例子为了识别手写体数字人脑需要几十个最多几百个例子但是CNN却需要几万规模的数据集才能训练出好结果这显然还是太暴力了
-
更加贴近人脑的思维方式更好地建模神经网络中内部知识表示的分层关系胶囊背后的直觉非常简单优雅。
胶囊网络缺点
-
胶囊网络的当前实现比其他现代深度学习模型慢很多我觉得是更新耦合系数以及卷积层叠加影响的提高训练效率是一大挑战。
研究内容
胶囊是什么
人工神经网络不应当追求“神经元”活动中的视角不变性使用单一的标量输出来总结一个局部池中的重复特征检测器的活动而应当使用局部的“胶囊”这些胶囊对其输入执行一些相当复杂的内部计算然后将这些计算的结果封装成一个包含信息丰富的输出的小向量。每个胶囊学习辨识一个有限的观察条件和变形范围内隐式定义的视觉实体并输出实体在有限范围内存在的概率及一组“实例参数”
简单来说可以理解成
-
人造神经元输出单个标量。卷积网络运用了卷积核从而使得将同个卷积核对于二维矩阵的各个区域计算出来的结果堆叠在一起形成了卷积层的输出。
-
通过最大池化方法来实现视角不变性因为最大池持续搜寻二维矩阵的区域选取区域中最大的数字所以满足了我们想要的活动不变性即我们略微调整输入输出仍然一样换句话说在输入图像上我们稍微变换一下我们想要检测的对象模型仍然能够检测到对象
-
池化层损失了有价值的信息同时也没有考虑到编码特征间的相对空间关系因此我们应该使用胶囊所有胶囊检测中的特征的状态的重要信息都将以向量形式被胶囊封装神经元是标量
胶囊和人工神经元对比如下
囊间动态路由算法
低层胶囊i 需要决定如何将其输出向量发送给高层胶囊j 。低层胶囊改变标量权重cij 输出向量乘以该权重后发送给高层胶囊作为高层胶囊的输入。关于权重cij 需要知道有
-
权重均为非负标量
-
对每个低层胶囊i 而言所有权重cij 的总和等于1
-
对每个低层胶囊i 而言权重的数量等于高层胶囊的数量
-
这些权重由迭代动态路由算法确定
低层胶囊将其输出发送给对此表示“同意”的高层胶囊算法伪码如下
权重更新可以用如下图来直观理解。
其中两个高层胶囊的输出用紫色向量 v1 和 v2 表示橙色向量表示接受自某个低层胶囊的输入其他黑色向量表示接受其他低层胶囊的输入。左边的紫色输出 v1 和橙色输入 u1|1 指向相反的方向所以它们并不相似这意味着它们点积是负数更新路由系数的时候将会减少 c11 。右边的紫色输出 v2 和橙色输入 u2|1 指向相同方向它们是相似的因此更新参数的时候路由系数 c12 会增加。在所有高层胶囊及其所有输入上重复应用该过程得到一个路由参数集合达到来自低层胶囊的输出和高层胶囊输出的最佳匹配。
采用多少次路由迭代论文在MNIST和CIFAR数据集上检测了一定范围内的数值得到以下结论
-
更多的迭代往往会导致过拟合
-
实践中建议使用3次迭代
整体框架
CapsNet由两部分组成编码器和解码器。前3层是编码器后3层是解码器
-
第一层卷积层
-
第二层PrimaryCaps主胶囊层
-
第三层DigitCaps数字胶囊层
-
第四层第一个全连接层
-
第五层第二个全连接层
-
第六层第三个全连接层
编码器
编码器接受一张28×28的MNIST数字图像作为输入将它编码为实例参数构成的16维向量。
卷积层
-
输入28×28图像单色
-
输出20×20×256张量
-
卷积核256个步长为1的9×9×1的核
-
激活函数ReLU
PrimaryCaps层32个胶囊
-
输入20×20×256张量
-
输出6×6×8×32张量共有32个胶囊
-
卷积核8个步长为1的9×9×256的核/胶囊
DigitCaps层10个胶囊
-
输入
6×6×8×32张量
-
输出
16×10矩阵
损失函数
解码器
解码器从正确的DigitCap中接受一个16维向量并学习将其编码为数字图像注意训练时候只采用正确的DigitCap向量而忽略不正确的DigitCap。解码器用来作为正则子它接受正确的DigitCap的输出作为输入重建一张28×28像素的图像损失函数为重建图像和输入图像之间的欧式距离。解码器强制胶囊学习对重建原始图像有用的特征重建图像越接近输入图像越好下面展示重建图像的例子。
第一个全连接层
-
输入16×10矩阵
-
输出512向量
第二个全连接层
-
输入512向量
-
输出1024向量
第三个全连接层
-
输入1024向量
-
输出784向量