论文解析:Matrix Capsule
Matrix network
《MATRIX CAPSULES WITH EM ROUTING》
总体介绍
matrix network是对前一篇capsule network的改进,改进的方向主要在聚类算法和实体特质表示两个方面,前者从没啥理论基础的动态路由算法变成了EM算法,后者由向量表示变成了矩阵表示。在理论上更加的清晰、更符合Hinton之前构想的对于CNN的改进。
模型介绍
首先在原先的Capsule network中某个胶囊(实体)的属性只由一个一维向量,用向量的模值表示相应实体出现的概率,向量的相位表示实体的某些性质。而在改进的Capsule network中胶囊的属性则由4*4的姿势矩阵(pose matrix) M M M和激活值(activition probablity) a a a表示,前者用来表示实体的性质,后者用来表示实体存在的概率。(为什么要单独把激活概率抽出来,后续会介绍)。此处重点介绍一下使用EM进行的聚类算法,在前一版的Capsule network中,我们通过计算底层向量和顶层向量间的点积来衡量二者相似性,通过中间参数 b i j b_{ij} bij来给出底层向量和顶层向量间的耦合系数,没有直觉上的解释或者是理论支撑。而在EM算法中,则是通过概率和信息熵两方面给出了聚类算法的理论支持,如下:
实体描述
首先对于某个实体,我们用pose matrix M M M来表征它的性质,也需要将其进行一定的变换以成为更大实体的一部分(直觉上来说,就是将该实体进行相对于从属实体的线性变换),变换方式同样是乘以变换矩阵 W W W,得到的结果即为该实体对上层某个从属实体的认可矩阵(vote matrix) v v v;
层间联系
获得了底层实体对于顶层实体的认可矩阵后,我们下一步需要做的是通过这一联系来描述顶层实体的性质–pose matrix和它存在的可能性–activition probablity。在前一篇论文中,这一步是通过动态路由算法计算出底层实体和顶层实体的耦合度,再依次加权变换后的向量得到当前实体的表征向量。而在本文中,作者为这一底层到顶层的联系提供了一个概率层面的解释,我们假定底层存在M个caps,顶层存在着N个caps,则我们认为这M个底层实体是N混合高斯分布的采样值,而这N个混合高斯分布的采样的中心就是N个顶层实体的pose matrix,通过对单个高斯分布类存在的概率进行一定运算得到activition probablity。(实际上这就是一种聚类的算法,预先假定存在了N个高斯分布,通过EM算法迭代得到每个高斯分布的性质和存在的可能性,聚类越密集越可能存在)直观理解如下图:
除此之外我们做出一个更强的假设,每个高斯分布内部的变量都是独立的,协方差矩阵为对角阵.
EM路由概率部分推导:
1. 对于底层传入的某个输入 x i x_i xi,认为它服从N混合高斯分布:
p ( x i ) = ∑ j = 1 N p ( j ) p ( x i ∣ j ) = ∑ j = 1 N π j N ( x i ; u j , σ j ) p(x_i)=\sum^N_{j=1}p(j)p(x_i|j)=\sum^N_{j=1}\pi_jN(x_i;u_j,\sigma_j) p(xi)=j=1∑Np(j)p(xi∣j)=j=1∑NπjN(xi;uj,σj)
这里的p(j)为混合高斯分布中第 j j j个分布出现的概率, p ( x i ∣ j ) p(x_i|j) p(xi∣j)为第 j j j个高斯分布的概率分布,为了与论文中的符号一致,现记 p i j = p ( x i ∣ j ) p_{ij}=p(x_i|j) pij=p(xi∣j)。
2. 我们已知输入 x i x_i xi,要判断顶层某个高斯分布(实体)存在的概率,可以计算后验概率 p ( j ∣ x i ) p(j|x_i) p(j∣xi):
R i j = p ( j ∣ x i ) = p ( x i ∣ j ) p ( j ) p ( x i ) = p i j π j ∑ j = 1 N π j p i j R_{ij}=p(j|x_i)=\frac{p(x_i|j)p(j)}{p(x_i)}=\frac{p_{ij}\pi_j}{\sum^N_{j=1}\pi_jp_{ij}} Rij=p(j∣xi)=p(xi)p(xi∣j)p(j)=∑j=1Nπjpijpijπj
3. 又我们已知M个来自底层的输入,可以用蒙特卡洛法对顶层的每个高斯分布参数进行求取:
第 j j j个高斯分布的均值:
M j = ∫ p ( x j ∣ j ) x i d x i = ∫ p ( x i ) ⋅ p ( j ∣ x i ) p ( j ) x i d x i = E [ p ( j ∣ x i ) p ( j ) x i ] = 1 π j M ∑ i = 1 M R i j x i \begin{aligned} M_j&=\int p(x_j|j)x_idx_i\\ &=\int p(x_i)\cdot \frac{p(j|x_i)}{p(j)x_idx_i}\\ &=E[\frac{p(j|x_i)}{p(j)}x_i]\\ &=\frac{1}{\pi_{j}M}\sum^M_{i=1}R_{ij}x_i \end{aligned} Mj=∫p(xj∣j)xidxi=∫p(xi)⋅p(j)xidxip(j∣xi)=E[p(j)p(j∣xi)xi]=πjM1i=1∑MRijxi
又每个高斯分布存在的先验概率可以通过对变量积分得到:
π j = ∫ p ( j ∣ x i ) p ( x i ) d x i = 1 M ∑ i = 1 M R i j \pi_j=\int p(j|x_i)p(x_i)dx_i=\frac{1}{M}\sum^M_{i=1}R_{ij} πj=∫p(j∣xi)p(xi)dxi=M1i=1∑MRij
再记 r i j = R i j ∑ i M R i j r_{ij}=\frac{R_{ij}}{\sum^M_iR_{ij}} rij=∑iMRijRij,得到化简后的高斯分布均值:
M j = ∑ i = 1 M r i j x i M_j=\sum^M_{i=1}r_{ij}x_i Mj=i=1∑Mrijxi
至此,高斯分布的求取已经初见端倪,我们来分析一下这些参数的意义, r i j r_{ij} rij是假定所有 x i x_i xi都以 R i j R_{ij} Rij的概率服从第 j j j个高斯分布下,某个输入 x i x_i xi相对于所有输入更可能服从于该高斯分布的程度,也就是该输入对这个高斯分布性质的贡献程度、权重。因此求得的高斯分布均值实际上也就是所有输入的加权平均。由此我们可以直觉上得到高斯分布协方差矩阵的表达式:
σ j 2 = ∑ i = 1 M r i j ( x i − M j ) 2 ) \sigma_j^2=\sum^M_{i=1}r_{ij}(x_i-M_j)^2) σj2=i=1∑Mrij(xi−Mj)2)
至此我们完成了EM算法所以依赖的公式,现整合如下:
{ p i j = N ( x i ; μ j , σ j 2 ) R i j = p i j π j ∑ j = 1 N π j p i j , r i j = R i j ∑ i M R i j M j = ∑ i = 1 M r i j x i σ j 2 = ∑ i = 1 M r i j ( x i − M j ) 2 ) π j = 1 M ∑ i = 1 M R i j \left\{ \begin{aligned} p_{ij}&=N(x_i;\mu_j,\sigma_j^2)\\ R_{ij}&=\frac{p_{ij}\pi_j}{\sum^N_{j=1}\pi_jp_{ij}},r_{ij}=\frac{R_{ij}}{\sum^M_iR_{ij}}\\ M_j&=\sum^M_{i=1}r_{ij}x_i\\ \sigma_j^2&=\sum^M_{i=1}r_{ij}(x_i-M_j)^2)\\ \pi_j&=\frac{1}{M}\sum^M_{i=1}R_{ij} \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧pijRijMjσj2πj=N(xi;μj,σj2)=∑j=1Nπjpijpijπj,rij=∑iMRijRij=i=1∑Mrijxi=i=1∑Mrij(xi−Mj)2)=M1i=1∑MRij
EM路由信息熵部分推导:
理论上来说,我们取均值 M j M_j Mj作为pose matrix即可,按照前一篇论文的思路,我们可以用矩阵的模值来表征实体出现概率,但在这种路由方式下是不可行的。因为这里的pose matrix是所有底层输入的加权平均值,而如果我们回顾前一篇论文的计算公式 ∑ i c i j u ^ j ∣ i \sum_i c_{ij}\hat{u}_{j|i} ∑iciju^j∣il可以发现这里隐含了两个聚类目标:
- 底层实体越倾向于选择哪个顶层实体( c i j c_{ij} cij越大),对应顶层实体模值越大,出现概率越大;
- 从属于某底层实体的底层实体模值越大( u ^ j ∣ i \hat{u}_{j|i} u^j∣i),该顶层实体模值越大,概率越大
而 M j M_j Mj虽然会随着底层输入的模值增大而增大,但并没有体现出底层实体青睐于某个顶层实体的特征( c i j c_{ij} cij体现第 i i i个底层实体对第 j j j个顶层实体的偏好,对 j j j累加为1, r i j r_{ij} rij体现所有底层实体对第 j j j个顶层实体的偏好中第 i i i个的相对程度,对 i i i累加为1),因此pose matrix的模值不再能作为我们评估实体出现概率的标准,只能作为性质表征出现。为此,我们需要引入额外参数:activation probability。
这一参数是用于体现实体存在的可能性的,一个直观的匹配项就是高斯分布的概率 π j \pi_j πj,但我们也没有采用这一思路,原因是:
- ∑ j π j = 1 \sum_j \pi_j=1 ∑jπj=1,但我们希望Capsule net可以给出多个判定结果,而不是只输出一个类别。
- π j = 1 M ∑ i = 1 M R i j \pi_j=\frac{1}{M}\sum^M_{i=1}R_{ij} πj=M1∑i=1MRij,体现了所有底层实体对于某个顶层实体的偏好的均值,越受到底层实体青睐的顶层实体,该值越大,但这个值无法体现出底层实体模值的影响。因此作者引入了信息论中熵的概念来评价实体出现的可能性,如果一个实体出现的可能性越大,说明它的稳定性强而可能性少,激活值应该越大,用熵来表示如下:
S j = − ∫ p ( x ∣ j ) l n p ( x ∣ j ) d x = − 1 p ( j ) ∫ p ( j ∣ x ) p ( x ) l n p ( x ∣ j ) d x = − 1 p ( j ) E [ p ( j ∣ x ) l n p ( x ∣ j ) ] = − ∑ i = 1 n r i j l n p i j \begin{aligned} S_j&=-\int p(x|j)ln\ p(x|j)dx\\ &=-\frac{1}{p(j)}\int p(j|x)p(x)ln\ p(x|j)dx\\ &=-\frac{1}{p(j)}E[p(j|x)ln\ p(x|j)]\\ &=-\sum_{i=1}^nr_{ij}ln\ p_{ij} \end{aligned} Sj=−∫p(x∣j)ln p(x∣j)dx=−p(j)1∫p(j∣x)p(x)ln p(x∣j)dx=−p(j)1E[p(j∣x)ln p(x∣j)]=−i=1∑nrijln pij
这里原论文的推导出了问题,对应的 c o s t j h cost_j^h costjh表达式应该为:
c o s t j h = 1 2 + ( l n 2 π 2 + l n σ j h ) ∑ i r i j cost_j^h=\frac{1}{2}+(\frac{ln2\pi}{2}+ln \sigma^h_j)\sum_i r_{ij} costjh=21+(2ln2π+lnσjh)i∑rij
(此处的上标 h h h表示多维高斯分布中的某一维度,之前假设了各个变量独立,最后计算累计熵的时候对 h h h累加即可)
除此之外,作者还用了类似于平均信息熵的概念,如果我们激活了某一个顶层实体,那么我们为了描述这一顶层实体分布的参数以及存在这一事实付出一定的码长代价,付出的熵增记作 − β a -\beta_a −βa吗,如果我们不激活这一个顶层实体,那所有以 R i j R_{ij} Rij概率从属于该顶层实体都将以均匀分布的形式存在,保持不变,描述每一个这样的底层实体付出的码长带来信息熵 − β u -\beta_u −βu,因此如果激活这一实体带来的熵增少于不激活带来的熵增,我们就应该激活该实体,相应激活概率为:
a j = l o g i s t i c ( λ ( − β u ∑ i = 1 r i j − ( − β a + c o s t j h ) ) ) = l o g i s t i c ( λ ( β a − β u ∑ i = 1 r i j − c o s t j h ) ) \begin{aligned} a_j&=logistic(\lambda(-\beta_u \sum_{i=1}r_{ij}-(-\beta_a+cost^h_j)))\\ &=logistic(\lambda(\beta_a-\beta_u \sum_{i=1}r_{ij}-cost_j^h)) \end{aligned} aj=logistic(λ(−βui=1∑rij−(−βa+costjh)))=logistic(λ(βa−βui=1∑rij−costjh))
这里的 β a , β u \beta_a,\beta_u βa,βu为网络自行学习的参数,至于是每层都分配不同的 β a , β u \beta_a,\beta_u βa,βu还是共享,文章没有写明,倾向于是每层不同, λ \lambda λ为超参数。
最后,作者为了显式的引入底层激活概率对底层的影响,人为的将其添加到了EM算法的依赖公式中,修改后的依赖公式如下:
{ p i j = N ( V i j ; μ j , σ j 2 ) R i j = p i j a j ∑ j = 1 N a j p i j , r i j = a i R i j ∑ i M a i R i j M j = ∑ i = 1 M r i j V i j σ j 2 = ∑ i = 1 M r i j ( x i − M j ) 2 ) c o s t j = ( β u + ∑ h = 1 d l n σ j h ) ∑ i = 1 a i R i j a j = l o g i s t i c ( λ ( β u − c o s t j ) ) \left\{ \begin{aligned} p_{ij}&=N(V_{ij};\mu_j,\sigma_j^2)\\ R_{ij}&=\frac{p_{ij}a_j}{\sum^N_{j=1}a_jp_{ij}},r_{ij}=\frac{a_iR_{ij}}{\sum^M_ia_iR_{ij}}\\ M_j&=\sum^M_{i=1}r_{ij}V_{ij}\\ \sigma_j^2&=\sum^M_{i=1}r_{ij}(x_i-M_j)^2)\\ cost_j&=(\beta_u+\sum_{h=1}^dln\ \sigma_j^h)\sum_{i=1}a_iR_{ij}\\ a_j&=logistic(\lambda(\beta_u-cost_j)) \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧pijRijMjσj2costjaj=N(Vij;μj,σj2)=∑j=1Najpijpijaj,rij=∑iMaiRijaiRij=i=1∑MrijVij=i=1∑Mrij(xi−Mj)2)=(βu+h=1∑dln σjh)i=1∑aiRij=logistic(λ(βu−costj))
可以看出修改的点有以下几个:
- cost函数中去除了与网络训练无关的部分;
- 用表征实体激活概率的 a j a_j aj来代替分布存在的先验概率 π j \pi_j πj
- R i j R_{ij} Rij描述了底层实体对第 j j j个顶层实体的偏好程度,在此基础上作者补充了 a i a_i ai来描述该底层实体存在的可能性
至此,本文最大的贡献描述完毕,对前一篇论文中模糊的层间路由算法进行了改进,补足了强有力的理论支撑。
模型架构
模型的整体框图如下:
与前一篇的整体架构差不多,都由一个原始的CNN+中间Cap层+分类Cap层,不同点在于中间Cap层的数目变多并且增加了类似CNN中感受野(kernel)的概念,以下详细展开。
raw_map—>Reul Conv1:
原始图片经过5F*1S*32C(32通道,步长为1的5*5卷积)经过Relu激活得到了ReLU Conv1。输入[32,32,1],输出[14,14,32];
Relu Conv1—>PrimaryCaps:
从ReulConv1到PrimaryCaps的操作属于CNN和Cap之间的过渡层,既没有明显的卷积意义也没有路由操作。首先将ReluConv1的输出map进行32个1F*1S*16C的卷积从而得到[14,14,32,16]的输出,其含义是在空间层面(map)上划分出了14*14个子区域,每个子区域都由32个cap来表征,而每个Cap都需要用4*4=16的pose matrix来描述。而Cap除了pose matrix之外还有activation 参数等待初始化,同样是通过卷积来实现,ReluConv1的输出map进行32个1F*1S*1C的卷积从而得到[14,14,32,1]的输出。
这里对应模型框图中参数计算法记作:32*32*(4*4+1),即对输入深度为A的map进行B个通道数为(4*4+1)的conv。输入[14,14,32],输出[14,14,32,17]。
PrimaryCaps—>ConvCaps
这一步往后就是真正用到了路由算法的Cap层,同时还拥有了卷积感受野的概念。对于PrimaryCaps某个3*3的区域,将其内部所有Caps视为一组底层Caps,对应于CovCaps1中某个1*1区域内部的顶层Caps,即在3*3*32的底层Caps到1*1*32的顶层caps间进行路由,而路由算法中每个底层Cap和顶层Cap还需要通过4*4的权重矩阵来变换。
对应模型框图中参数计算法记作:3*3*32*32*4*4,即对将输入深度为B的map在K*K范围内的所有Cap作为顶层和顶层某一位置的C个Cap进行路由,每个底层-顶层对之间的变换都需要4*4的权重矩阵。输入[14,14,32,17],输出[6,6,32,17]
值得注意的是这里给出的参数量只是一个Conv-Cap的,每个Conv-cap的C个输出都是拥有着相同的感受野,输出时排列在通道维度上,如果不同空间维度的Caps不共享权重矩阵的话,那3*3的内核每次移动都需要新的权重矩阵。也就是总的参数量应该是相同大小的3*3卷积输出的size乘以每个Conv-cap的参数量。即:
( ( W − F + 2 P ) / S + 1 ) ∗ K ∗ K ∗ B ∗ C ∗ 4 ∗ 4 ((W-F+2P)/S+1)*K*K*B*C*4*4 ((W−F+2P)/S+1)∗K∗K∗B∗C∗4∗4
ConvCaps—>ConvCaps
这一步和前一步基本一样,不同点在于Conv-Cap移动步长变为了1。输入[6,6,32,17],输出[4,4,32,17]
ConvCaps—>ClassCaps
这一步和前一步同样差不多,不同点在于Conv-Cap的核尺寸变为了1*1,此外由于最终我们是汇总所有的信息进行分类,ClassCap层的每个输出的感受都是输入的所有Cap,为了体现出这一全局感受野的性质,同一输入map上的底层Cap共用权重矩阵,也就是Conv-Cap移动时不更新权重矩阵。而又为了不丢失位置信息,作者将底层cap的坐标化缩放到(0,1)区间内的点加在了pose matrix的前两维中。
总的参数量是:
1 ∗ 1 ∗ C ∗ E ∗ 4 ∗ 4 1*1*C*E*4*4 1∗1∗C∗E∗4∗4
参考文献
三味Capsule:矩阵Capsule与EM路由
“Understanding Matrix capsules with EM Routing (Based on Hinton’s Capsule Networks)”
如何看待Capsule的第二篇论文Matrix Capsules with EM Routing?
论文解析:Matrix Capsule相关推荐
- 论文解析:Capsule Network
Capsule network <Dynamic Routing Between Capsules> 待解决 为什么要设计动态路由算法,动态路由算法的本质看起来也就是反向传播以更新前后层 ...
- 地图构建两篇顶级论文解析
地图构建两篇顶级论文解析 一.基于声纳的密集水下场景重建 标题:Dense, Sonar-based Reconstruction of Underwater Scenes 作者:Pedro V. T ...
- 传感器标定两篇顶会论文解析
传感器标定两篇顶会论文解析 一.在城市环境中的多个3D激光雷达的自动校准 标题:Automatic Calibration of Multiple 3D LiDARs in Urban Environ ...
- 机器人导航两篇顶级会议论文解析
机器人导航两篇顶级会议论文解析 一.一种用于四旋翼无人机室内自主导航的卷积神经网络特征检测算法 标题:A Convolutional Neural Network Feature Detection ...
- SLAM架构的两篇顶会论文解析
SLAM架构的两篇顶会论文解析 一.基于superpoint的词袋和图验证的鲁棒闭环检测 标题:Robust Loop Closure Detection Based on Bag of SuperP ...
- 将视频插入视频:CVPR2019论文解析
将视频插入视频:CVPR2019论文解析 Inserting Videos into Videos 论文链接: http://openaccess.thecvf.com/content_CVPR_20 ...
- 全景分割:CVPR2019论文解析
全景分割:CVPR2019论文解析 Panoptic Segmentation 论文链接: http://openaccess.thecvf.com/content_CVPR_2019/papers/ ...
- 结构感知图像修复:ICCV2019论文解析
结构感知图像修复:ICCV2019论文解析 StructureFlow: Image Inpainting via Structure-aware Appearance Flow 论文链接: http ...
- 面部表情视频中进行远程心率测量:ICCV2019论文解析
面部表情视频中进行远程心率测量:ICCV2019论文解析 Remote Heart Rate Measurement from Highly Compressed Facial Videos: an ...
最新文章
- 你需要知道的缓存击穿/穿透/雪崩
- EDM营销内容撰写要注意的几个方面
- 在gridview里查找模板里的button控件
- ASP.NET中实现页面间的参数传递 QueryString\Application\Session\Cookie
- 报名 | TensorFlow China Roadshow 正式开启
- boost::lambda::ret用法的测试程序
- 学校(School)主要有3大角色:学校(School),讲师(Teacher),学员(Student)。请用Python语言简要实现这些类及及其属性,以及它们之间的关系。
- 【jQuery】总结:筛选器、控制隐藏、操作元素style属性
- 四 Apache Axis2 部署 WebService
- Windows SDK编程之一 窗口示例程序
- T-SQL之公用表表达式(CTE)
- phpcmsV9 用seotitle后面的小横杠分隔符自定义
- linux 挂载raid_linux初学者-磁盘阵列篇
- 【机器学习】KNN回归
- epub电子书--目录结构介绍
- 那些年曹大写过的博客
- 什么是基站定位?基站定位的原理及特点
- 改善网站安全性的5种方法
- 不正经技术研究,键盘侠,你武器可能有个坑!!
- NOIP2008年普及组初赛题目答案及解析
热门文章
- 您访问的网页出错了!
- R_circlize包_和弦图
- 1447_TC275 DataSheet阅读笔记8_电气特性
- [Elasticsearch] 过滤查询以及聚合(Filtering Queries and Aggregations)
- 题解 CF1398E 【Two Types of Spells】
- 山东财经大学python实验六答案_金融学(山东财经大学)智慧树知道2020章节测验答案...
- win10系统C盘瘦身记录
- 头皮溢脂性皮炎推荐联合治疗:采乐50ml+希尔生100g(请看详情页)维生素B2维生素B6...
- qutip+mayavi可视化波片对光偏振态的影响
- 软银巨资收购ARM:这是场天作之合?