作者:孙裕道
Capsule Network简介
Capsule定义
Capsule(胶囊)是一个拥有多个神经元的载体,每个Capsule识别一个有限的观察条件和变形范围内的视觉实体,并输出一组的实例化参数和其显著性程度值(即该实体存在的概率),该参数包含实体的精确的位置,颜色信息,以及形状的信息。其中视觉实体存在的显著性程度具有局部不变形(对实体种类的识别概率不会改变),而实例化参数具有等变性(实例化参数也会相应地变化)。
Capsule Network的实质
在计算机图形学中,如下图[1]所示,给定坐标X=40,Y=5,旋转角度为90度,纹理信息1和色相信息1,通过渲染可以得到悟空的卡通图像;同理,给定坐标X=10,Y=40,旋转角度为90度,纹理信息2和色相信息2,通过渲染也可以得到八戒的的卡通图像。
与此相反,Capsule Network本质上是一个试图执行反向图形解析的神经网络。即给定一个图像,找出该图像包含的对象有哪些,以及各个对象的实例化参数。如下图[2]所示。
Capsule Network的深度解析
Capusle Network的模型框架
Capsule Network动态路由和反向传播的参数更新原理图如下图[3]所示。Capsule Network具体的算法流程如下图[4] 所示。具体的算法原理的细节会结合参数更新原理图进行详细的介绍。
权重矩阵
算法流程图Step1:表示将低层特征向量通过权重矩阵映射成高层特征空间中的向量,其中权重矩阵是线性变换或仿射变换。以下图[5]的哪吒的图片为例:
图像是由哪吒和背景组成
哪吒是由头部和身体组成
身体是由躯干和腿部组成
头部又包括眼睛和嘴巴
权重矩阵表示了部分与主体的一种关系,身体的每一个分解部分可以通过权重矩阵与其组成的主体相关联,权重矩阵可以给定部分能推断出主体。P表示的是人对整个图片的权重矩阵,A表示头部对人的权重矩阵,X表示的是身体对人的权重矩阵。B 和C分别是眼睛和嘴巴对头部的权重矩阵,Y和Z分别是腿和躯干对身体的权重矩阵。通过连乘权重矩阵可以提取人对每个部分的基本属性。
头部对图片的权重矩阵为
身体对图片的权重矩阵为
嘴巴对图片的权重矩阵为
腿部对图片的权重矩阵为
已知,是眼睛的位置向量,是嘴巴的位置向量。则头部的位置向量。
动态路由算法(Dynamic Routing)
算法流程图Step2:
计算coupling coefficients(耦合系数)。耦合系数并不是通过反向传播学习出来的,它是通过动态路的方法计算出来的。耦合系数的作用是maxpooling的一个进阶版。maxpooling依靠区域最大化,以此来提取到了这个区域里最有用的信息,但是却忽略了其他的信息。动态路由确定耦合系数目的也是提取有用信息,但并不丢弃任何的信息。假设一张图片里有一个猴子和一头猪,猪占据了图片的大部分。经过maxpooling后丢弃掉了较少的猴子的信息,而保留了较多的猪的信息,于是这张图片被识别为猪。耦合系数并不丢弃任何的信息,属于猪的信息那么就将其更多的输出到检测猴子的的高级胶囊中,属于猪的信息就尽可能的都输出给猪的高级胶囊中,最后图片会被判定有两个动物。
算法流程图Step3:表示将含有低层的特征信息的向量通过加权求和的方式整合到高层的特征向量中。
如图[6]所示,毛和嘴是属于低层特征;鹦鹉,狗,鱼是属于高层特征。已知低层特征羽毛推断出它有较高概率属于鹦鹉;对于每个高层特征鹦鹉,狗,鱼分别对低层特征羽毛和嘴的特征向量进行加权求和,输出的结果是低层特征的某种聚类结果。
算法流程图Step4:
类似于神经网络的非线性的激活函数。前半部分
是将模长的取值范围为[0,1],后半部分
是将特征向量归一化成单位向量。这个压缩函数的主要作用是将特征进行压缩。
算法流程图Step5:这是动态路由的重要部分,用与的内积来更新。将算法的公式整合到一起会有以下的形式,
其中,
将上面的式子进一步进行简化,会有如下形式,
不难发现为隐函数,要想求出一个自然的想法就是需要给出这个隐函数的显式解形如,但是大部分隐函数并不能 由初等函数推导出来,所以需要用到迭代的方式去求解。
BP更新参数
算法流程图Step6:需要注意的是Capsule Network中的耦合系数是通过动态路由迭代的方式进行参数的更新,但是对于权重矩阵参数的更新依然需要Back Propagation来完成。
Capusle动态路由的迭代细节
首先区分一下,图[3]中Capsule Network参数更新原理图主要演示的是一次动态路由的迭代过程,下图[7]主要演示是多(T=3) 次动态路由的迭代过程。
Capsule Network实验
Capsule Network结构图
下图[8]是一个简单的3层Capsule Network网络结构。第一层是Conv1(卷积层),卷积核的大小为[9,9,1,256]。第二层为PrimaryCaps层,这层中一共有32×6×6=1162个Capusle,每一个Capsule为一个8D的向量,并且在每一个[6x6x8]的“长方体”中里共享相同的权重。第三层是DigitCaps层,这里一共有10个Capsule,它们分别代表10个类别,每一个Capsule为一个16D的向量,其中向量的模长越长表示相应的类别的概率越大。FC1,FC2,FC3为全连接层,这三层组成了一个Decoder,目的是将DigitCaps层中的特征向量重构出图片,探究特征向量中每个维度表示的含义。
Capsule向量各个维度的特征表示
如下图[9]所示,每一个行表示的是DigitCaps层中的16维Capsule向量在每个维度下给予一个扰动后的可视化展示,其中有数字粗细的变化,位置的变化,深浅颜色的变化,宽度的变化等。
Reference
[1]Martín Abadi, Ashish Agarwal, Paul Barham, Eugene Brevdo, Zhifeng Chen, Craig Citro, Greg S Corrado, Andy Davis, Jeffrey Dean, Matthieu Devin, et al. Tensorflow: Large-scale machine learning on heterogeneous distributed systems. arXiv preprint arXiv:1603.04467, 2016.
[2]Jimmy Ba, Volodymyr Mnih, and Koray Kavukcuoglu. Multiple object recognition with visual attention. arXiv preprint arXiv:1412.7755, 2014.
[3]Jia-Ren Chang and Yong-Sheng Chen. Batch-normalized maxout network in network. arXiv preprint arXiv:1511.02583, 2015.
[4]Dan C Ciresan, Ueli Meier, Jonathan Masci, Luca M Gambardella, and Jürgen Schmidhuber. Highperformance neural networks for visual object classification. arXiv preprint arXiv:1102.0183, 2011.
历史文章推荐
2018-2019年度 Top10 综述
【Awesome】Few-Shot Learning论文阅读列表
你有哪些deep learning(rnn、cnn)调参的经验?
你正在看吗?????