什么胶囊网络
胶囊网络(CapNet)
胶囊网络(CapsNet)于2011年在Geoffrey Hinton的一篇名为《Transforming Autoencoders》的论文中首次出现。
2017年底,Geoffrey Hinton等人又发表了一篇名为《Dynamic Routing between Capsules》的论文,其中介绍了胶囊架构。这是一种新的深度神经网络模型。目前这种模型主要应用在图像识别领域。
所谓“胶囊(capsules)”指的是人脑中的一种结构,它们能够很好的处理不同类型的视觉刺激并对诸如位置、形制、速度等信息进行编码。
在深度学习中,胶囊则是嵌入的神经元集合。一个胶囊网络是由胶囊而不是由神经元构成。
胶囊网络的作用
那么为什么需要CapsNet,CapsNet对现有模型有哪些改进呢?
首先,在图像识别领域,目前是各种CNN网络的天下,不过CNN网络有其自身的局限性,这一点Hinton之前也提到过。CNN的不足主要体现在下面两方面 :
CapsNet是一种思路,Hinton也说了论文中的实验方式只是一种最直接的实现方式。其核心思路包括以下两点:
1. 与传统神经元不同,Capsule的输入和输出都是一个向量,我们可以将向量长度理解为传统神经元中的概率,向量的方向来表示其他信息(包括位置信息)。
2. 使用基于约定的动态路由(后面会有解释)来代替传统CNN中的Max-Pool(也可以理解为一种原始的路由机制)。
下面是一个capsule和传统神经元的对比图,右边部分我们已经很熟悉了。下面来简单介绍一下测三个公式。
动态路由
动态路由的思路就是将第I-1层变换后的输出(上图中的Uj|i)和第I层的输出(上图中的V)做点积,点积的结果代表两个向量的相似度。
我们约定,第I-1层输出到到第I层的权重于两层之间的相似度成正比,并且权重总和为1。下图是动态路由过程的伪代码, 其中的迭代次数r是一个超参数,Hinton的论文中建议将其设为3。
完整网络结构
了解了Capsule单元的结构之后,我们来看一下论文中给出的参考网络模型。参考网络实现了对MNIST手写数据集的图像识别,下图是模型的结构,可以看到这个胶囊网络模型只有三层,比传统模型的层数少了许多。
网络的第一层仍然是一个卷基层,第二层为主胶囊层,在主胶囊层中我们仍然使用了CNN中滑动窗口的概念。第三层为数字胶囊层,他的输出为1610的向量,其中每一个 161的向量对应着一个类的可能性。
原文使用了一个额外的图像重建结构来对模型进行训练,重建结构使用DiitCaps中活动的输出(可能性最大的)来重建出原始图像,通过这种方式强迫网络记住更多的图像特征。重建网络只是简单地使用了三个全连接层来实现,其结构如下图所示:
结语
本文通过使用了较短的篇幅来介绍胶囊网络的核心概念,内容中如果有纰漏或者难以理解之处,请留言加以指正。
如果读者有足够的时间,可以阅读文章开头处提到的文章更进一步的了解网络的更多细节。
胶囊网络中的胶囊单元给了我们构建深度神经网络时一个新的选型,通过动态路由机制网络也较好的解决了复杂网络难以训练的问题。
相信胶囊网络的退出只是一个开始,随着越来越多的人对这种网络的关注,更多的可能性奖杯不断地发掘出来。