胶囊网络
胶囊网络是Geoffrey Hinton与2017年底提出的一种新的深度神经网络模型,目前这种模型主要应用在图像识别领域,提出模型的论文在这里。不过由于原文比较难读懂,网络上已经出现了很多很好的论文解析。我认为这个系列文章很好的描述了模型的原理和思路,而且他还有中文翻译版,翻译的质量很不错。
那么为什么需要CapsNet,CapsNet对现有模型有哪些改进呢?
首先,在图像识别领域,目前是各种CNN网络的天下,不过CNN网络有其自身的局限性,这一点Hinton之前也提到过。CNN的不足主要体现在下面两方面 :
- CNN中,对不同特征的相对位置并不关注。
- 池化操作虽然效果很好,增加了模型的鲁棒性,但同时丢失了模型的很多细节。
CapsNet的详解
CapsNet是一种思路,Hinton也说了论文中的实验方式只是一种最直接的实现方式。而CapsNet的核心思路包括以下两点: 1. 与传统神经元不同,Capsule的输入和输出都是一个向量,我们可以将向量长度理解为传统神经元中的概率,向量的方向来表示其他信息(包括位置信息)。 2. 使用基于约定的动态路由(后面会有解释)来代替传统CNN中的Max-Pool(也可以理解为一种原始的路由机制)。
Capsule的结构
下面是一个capsule和传统神经元的对比图,右边部分我们已经很熟悉了。下面来简单介绍一下测三个公式。
- 第一个Eq.2 中, W是一组通过训练获得的参数。它和传统神经元类似,只是从一维向量变为二维。
- 第二个Eq.2中, C是通过动态路由计算得到,不需要训练,具体动态路由的算法后面会介绍。
- Eq.1是一个非线性函数,分为两部分。右边部分负责将向量转换成一个近似的单位向量;左边部分是一个被称为Squashing的函数,使得输出的长度被压缩在0到1之间。前面我们提到过,这里输出的长度可以被理解为特征的概率。
动态路由
动态路由的思路就是将第I-1层变换后的输出(上图中的Uj|i)和第I层的输出(上图中的V)做点积,点积的结果代表两个向量的相似度。我们约定,第I-1层输出到到第I层的权重于两层之间的相似度成正比,并且权重总和为1。 下图是动态路由过程的伪代码, 其中的迭代次数r是一个超参数,Hinton的论文中建议将其设为3。
整个网络结构
了解了Capsule单元的结构之后,我们来看一下论文中给出的参考网络模型。参考网络实现了对MNIST手写数据集的图像识别,下图是模型的结构,可以看到这个胶囊网络模型只有三层,比传统模型的层数少了许多。网络的第一层仍然是一个卷基层,第二层为主胶囊层,在主胶囊层中我们仍然使用了CNN中滑动窗口的概念。第三层为数字胶囊层,他的输出为1610的向量,其中每一个 161的向量对应着一个类的可能性。
原文使用了一个额外的图像重建结构来对模型进行训练,重建结构使用DiitCaps中活动的输出(可能性最大的)来重建出原始图像,通过这种方式强迫网络记住更多的图像特征。重建网络只是简单地使用了三个全连接层来实现,其结构如下图所示:
结语
本文通过使用了较短的篇幅来介绍胶囊网络的核心概念,内容中如果有纰漏或者难以理解之处,请留言加以指正。如果读者有足够的时间,可以阅读文章开头处推荐的文章更进一步的了解网络的更多细节。
胶囊网络中的胶囊单元给了我们构建深度神经网络时一个新的选型,通过动态路由机制网络也较好的解决了复杂网络难以训练的问题。相信胶囊网络的退出只是一个开始,随着越来越多的人对这种网络的关注,更多的可能性奖杯不断地发掘出来。