Matrix capsules with EM routing
论文:Matrix capsules with EM routing
没有太大的变动,主要还是一个新的路由算法,听说卷积胶囊就是由这篇文章来的。
路由算法的本质和第一篇Dynamic Routing Between Capsules是一样的,只不过把相应的位置换成了EM算法罢了,其中提到的高斯混合模型是EM算法1个经典应用。
我们直接使用李航《统计学习方法》里面的介绍粗略理解高斯混合模型
高斯混合模型
高斯混合模型定义
![](https://img.haomeiwen.com/i7152393/99d568123c99f549.png)
用EM算法求解高斯混合模型(GMM)参数
我们先使用最大似然估计来尝试求解GMM的参数。如下:
![](https://img.haomeiwen.com/i7152393/8a96825175ec842e.png)
![](https://img.haomeiwen.com/i7152393/c9b5e715c0215587.png)
算法
输入:观测数据,高斯混合模型
输出:高斯混合模型参数
(1)取参数的初始值开始迭代;
(2)E步:依据当前的模型参数,计算分模型对观测数据
的响应度,即计算每个数据
来自子模型
的可能性
![](https://img.haomeiwen.com/i7152393/38c1337a7167e997.png)
(3) M步:计算新一轮迭代的模型参数
![](https://img.haomeiwen.com/i7152393/7890d676ef775208.png)
(4)重复计算E步和M步,直到收敛
胶囊分配
EM路由在运行时将胶囊分组形成一个更高级别的胶囊。它同时会计算分配概率来量化胶囊及其父胶囊之间的运行时连接。例如,手胶囊不属于人脸胶囊,它们之间的分配概率为零。
r_{ij}也将是零。
![](https://img.haomeiwen.com/i7152393/a546bc985d0f60af.png)
计算胶囊的激活值和姿态矩阵
胶囊输出的计算不同于深度网络的神经元。在EM聚类中,我们通过高斯分布来表示数据点。在EM路由中,我们仍用高斯模型对父胶囊的姿态矩阵进行建模。姿态矩阵是一个4×4矩阵,即16个元素。我们用具有16个μ和16个σ的高斯模型对姿态矩阵建模,每个μ表示姿态矩阵的一个元素。
令为从胶囊
到父胶囊
的投票,
为它的第
个元素。我们应用高斯概率密度函数:
![](https://img.haomeiwen.com/i7152393/80e213bb7faedeb1.png)
来计算属于胶囊
的高斯模型的概率:
![](https://img.haomeiwen.com/i7152393/99d71924627508f5.png)
取自然对数:
![](https://img.haomeiwen.com/i7152393/f944bbc99ac89a56.png)
我们估算一下激活一个胶囊的成本。成本越低,胶囊就越有可能被激活。如果成本高,投票就不匹配父高斯分布,因此被激活的概率就越低。
令为由胶囊i激活父胶囊j的成本,它是对数似然取负:
![](https://img.haomeiwen.com/i7152393/1999b1b42bd5727d.png)
由于低层的胶囊与胶囊 有着不同的关联,我们根据运行时分配概率
按比例计算成本。所有下层胶囊的成本为:
![](https://img.haomeiwen.com/i7152393/5a0196c7e35fbdcc.png)
我们用下面的公式来确定胶囊 是否会被激活:
![](https://img.haomeiwen.com/i7152393/6619302169ce06ad.png)
原文中,“”被解释为描述胶囊 j的均值和方差的成本。换句话说,如果父胶囊j表示数据点的收益
高于投票差异造成的成本,我们激活输出胶囊。我们不通过分析来计算
。相反,我们通过反向传播和成本函数来训练它。
,
,
和
通过下一节讨论的EM路由迭代地计算。上述公式中的
是温度参数的倒数
。当
越来越优,我们降低温度(
变大),它增加
的
曲线的梯度。这有助于我们在这些区域内以更高的投票差异灵敏度更好地精调
。在我们的实现里,迭代开始时
首先被初始化为1,然后每次路由迭代后增加1。论文并没有说明细节,我们建议在实现中采用不同的方案进行试验。
EM路由
利用EM路由迭代计算出姿态矩阵和输出胶囊的激活值。EM法交替地调用步骤E和步骤M,将数据点拟合到混合高斯模型 。步骤E确定父胶囊每个数据点分配的概率。步骤M在
的基础上重新计算高斯模型的值。我们重复迭代3次。最终的
就是父胶囊的输出。最终的高斯模型的16个
将构成父胶囊的 4×4 姿态矩阵。
![](https://img.haomeiwen.com/i7152393/e7531b60b4ac8955.png)
上面的和
分别是激活值和子胶囊的投票。我们用均匀分布初始化分配概率
。即开始时子胶囊与任意父胶囊有同样的关联。我们调用步骤M来计算更新的高斯模型
和父激活
,基于
,
和当前的
。然后我们调用步骤E基于新的高斯模型和新的
重新计算分配概率
。
步骤M的细节:
![](https://img.haomeiwen.com/i7152393/8567af292a5ae2d6.png)
在步骤M中,我们计算 和
,基于子胶囊的激活
,当前
和投票
。步骤M也会重新计算父胶囊的成本和激活
。
和
会分别地训练。在我们的实现中,每一次路由迭代后
(温度参数的倒数)增加1。
步骤E的细节:
![](https://img.haomeiwen.com/i7152393/4ec5d0c9e713610c.png)
步骤E中,我们基于新的,
和
重新计算分配概率
。如果投票越接近更新的高斯模型的
,分配则增加。
损失函数(使用Spread损失)
矩阵胶囊需要一个损失函数来训练,
和
。我们选择传播损失(spread loss)作为反向传播的主要损失函数。第i类(不是真标签t)的损失被定义为:
![](https://img.haomeiwen.com/i7152393/ba4c1025f70989ea.png)
是目标类(真标签)的激活值,
是类
的激活值。
总损失为:
![](https://img.haomeiwen.com/i7152393/02dcbbc01c8b7820.png)
如果真标签和错误的类之间的边距小于m,我们通过 的平方惩罚它。 m开始为0.2,在每一代训练后线性增加0.1。m达到最大值0.9后会停止增长。从较低的边距开始训练可以避免在早期阶段出现太多的死胶囊。
其他实现将正则损失和重构损失添加到损失函数中。
参考链接:
关于矩阵胶囊与EM路由的理解(基于Hinton的胶囊网络)。)
第二篇《Matrix Capsules with EM routing》解析
如何看待Capsule的第二篇论文Matrix Capsules with EM Routing?
“Matrix capsules with EM routing”(使用EM路由的矩阵胶囊)译文
Matrix Capsule with EM Routing翻译
学习Hinton老爷子的胶囊网络,这有一篇历史回顾与深度解读
高斯混合模型的终极理解
李航《统计学习方法》学习笔记之——第九章:EM算法及其推广(高斯混合模型)