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

Geoffrey Hinton是深度学习的开创者之一,反向传播等神经网络经典算法发明人,他在17年年底和他的团队发表了两篇论文,介绍了一种全新的神经网络,这种网络基于一种称为胶囊(capsule)的结构,并且还发表了用来训练胶囊网络的囊间动态路由算法。这篇文章的意义目前还不明显,因为Hinton老师确实给大家挖了一个大坑来填,论文中还有一些想法目前很粗糙,有水论文的机会。

Capsules

Capsule 中的神经元的激活情况表示了图像中存在的特定实体的各种性质。这些性质可以包含很多种不同的参数,例如姿势(位置,大小,方向)、变形、速度、反射率,色彩、纹理等等。而输入输出向量的长度表示了某个实体出现的概率,所以它的值必须在 0 到 1 之间。

Capsule解决了CNN无法对特征之间相对位置等空间信息进行预测的问题,具有旋转不变性。

capsules是一个向量,表征了两个部分:

  1. 其长度表征了某个实例(物体、视觉概念或者是他们的一部分)出现的概率
  2. 其方向(长度无关的部分)表征了物体的某些图像属性(位置、颜色、方向、形状等)
当胶囊工作正常时,视觉实体存在的概率具有局部不变性——当实体在胶囊覆盖的有限范围内的外观流形上移动时,概率不会改变。

用图形描述概念如下:

一个简单的CNN模型可以正确地提取鼻子,眼睛和嘴巴的特征,但是提取出来的特征会错误地激活神经元,得出脸部检测成功的结果,如下:

CapsNet将每个特征的概率的标量表示替换成很多信息的向量表示,输出的不再是标量x,而是一个包含[可能性,方向,大小]的向量,那么就可以检测鼻子,眼睛和耳朵特征之间的方向和大小的不一致, 得出最后的结论,如下图:

又比如,下面的第一行表示神经元检测数字“7”的概率;Capsule检测数字“7”时会输出一个2维向量,向量的长度表示检测特征的概率,向量的方向方向代表其参数(属性)。

第二行中,输出的2维向量为v=(0, 0.9)和 v=(0, 0.3),大小表示为:√(0^2+0.9^2 )=0.9 和 :√(0^2+0.3^2 )=0.3;第三行中,输出的2维向量为v=(0.2, 0.87)和 v=(0.2, 0.19),向量的大小仍为0.9和0.3。在这里,随意给的0.2代表其向右旋转20度。当然,可以再添加两个神经元来捕捉特征的大小和笔画的粗细程度,如下:

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

 用图像表示如下:

CapsNet

Reconstruct

猜你喜欢

转载自www.cnblogs.com/ratels/p/12329058.html