论文地址:Dynamic Routing Between Capsules
一、胶囊网络诞生的原因
首先来看CNN对以下三幅图片的识别结果,图1识别为人,图2因为有鼻子眼睛嘴巴等等也识别为人,图3则识别为黑头发。很明显CNN对图2和图3的判断是有悖常识的。
那么之所以CNN会错误地判断图2和图3两张图片,是因为CNN的以下的致命缺点:
①CNN 对物体之间的空间关系的识别能力不强, 比如卡戴珊的嘴巴和眼睛换位置了还被识别成人?
②CNN 对物体旋转之后的识别能力不强 (微微旋转还可以),比如卡戴珊倒过来就被识别成头发了?
当前针对该问题的现有两种方法解决方案,一是数据增强,通过对训练样本进行旋转、位移生成新的训练集;二是使用更多的参数去建模,也就是构建一个更深层的网络。但是这些方法局限性也很大,缺少局部的等变特性(equivariance),所以其泛化能力很弱。
结论
①正确地分类和辨识对象,要分辨出对象的特征之间的分层姿态关系。
②取代最大池化的新方法。既能保证数据空间小,又要尽可能保证重要的信息传递
这就引出了本文所要描述的胶囊网络来解决上述的问题。
那么胶囊网络是如何解决这些问题的呢?
现在,如果这三个低层特征 (眼睛,鼻子和嘴) 的预测指向相同的脸的位置和状态,那么出现在那个地方的必定是一张脸。上左图预测出脸,因为红蓝黄绿圈非常吻合;而上右图没有没有预测出脸,因为红蓝黄绿圈相差甚远。
二、胶囊
什么是胶囊?
胶囊 (Capsule) 又称为向量神经元,是一个包含多个神经元的载体,每个神经元表示了图像中出现的特定实体的各种属性。这些属性可以包括许多不同类型的实例化参数 (instantiation parameter),例如姿态 (位置、大小、方向),变形,速度,色相,纹理等。
那么什么是胶囊, 所谓胶囊,就是一个向量,向量的长度代表目标存在的概率估计,用向量的方向表示实体的属性。 如果对象有轻微的变化(例如移位、旋转、改变大小等),那么胶囊将输出相同长度但方向略有不同的向量。在传统的神经网络中,把神经元替换成胶囊,就是胶囊网络。传统的神经网络输入和输出都是一个神经元,而胶囊网络的输入和输出都是一个向量。
三、胶囊的运作
胶囊的运作
动态路由算法
上图是对上面的动态路由算法的伪代码的一个图示,上图是第一次的迭代结果,那么第一次迭代的结果C1和C2,是会被用到第二次的动态路由算法当中的,那么同样地,第二次的动态路由算法所计算出来的C1和C2也是会被用到第三次的迭代当中的,这个有点类似于RNN算法,最后输出一个向量V
上两张图解释了一下,为什么当u1和a1越相似的时候,c1的权重就会随之地调高,也就是动态路由算法是怎么实现这个的?因为c根据公式由b计算出来,而b由公式根据a和c的内积计算出来,那么当a和c特别相似、相近的时候,两个向量的内积就会特别的大,从而使得b也会变大,而c 也会跟着变大。
四、胶囊网络
五、实验结果
上图,baseline代表的是CNN卷积神经网络,对MNIST数据集以及MultiMNIST数据集的识别结果,下面是胶囊网络CapsNet的各种情况对以上两个数据集的识别结果,不管是哪个情况,总体来看,胶囊网络在MNIST手写数字识别这个数据集上都是要比CNN卷积神经网络要强的。
上图是作者为了测试CapsNet的泛化能力,专门对MNIST数据集做了(大小、粗细、厚度、位置)等变化,得到的结果是CapsNet的结果是79%,而CNN的结果只有66%,从而说明CapsNet的泛化能力是要比CNN要强的。
上图是CapsNet胶囊网络应用在高度重叠的数字上的错误率仅为5 %
reference
- https://blog.csdn.net/shine19930820/article/details/88959982?utm_source=app
- Dynamic Routing Between Capsules(这个是原论文)
- https://blog.csdn.net/zjm2017/article/details/84991333?biz_id=102&utm_term=%E8%83%B6%E5%9B%8A%E7%BD%91%E7%BB%9C&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-84991333&spm=1018.2118.3001.4449
- https://blog.csdn.net/shine19930820/article/details/88959982?utm_source=app
- https://www.sohu.com/a/226611009_633698 这个很详细
- B站相关视频