转载原文:https://blog.csdn.net/bhneo/article/details/79419361
本文将胶囊网络分析得很透彻,感谢分享
本文介绍了Hinton的第二篇胶囊网络论文“Matrix capsules with EM Routing”,其作者分别为Geoffrey E Hinton、Sara Sabour和Nicholas Frosst。我们首先讨论矩阵胶囊并应用EM(期望最大化)路由对不同角度的图像进行分类。对于那些想了解具体实现的读者,本文的第二部分是一个关于矩阵胶囊和EM路由的tensorflow实现。
CNN所面临的挑战
在上一篇关于胶囊的文章中,我们提到了CNN在探索空间关系中面临的挑战,并讨论了胶囊网络如何解决这些问题。让我们回顾一下CNN在分类相同类型但不同角度的图像时所面临的一些重要的挑战。例如,正确地分类不同的方向的人脸。
![](https://i-blog.csdnimg.cn/blog_migrate/b6a072923d088c42fa659e6d83924398.jpeg)
从概念上讲,CNN需要训练多个神经元来处理不同的特征方向(0°,20°,20°),并用一个顶层的人脸检测神经元检测人脸。
![](https://i-blog.csdnimg.cn/blog_migrate/b31344afe56a356040c6928b53ee4c28.jpeg)
为了解决这个问题,我们添加了更多的卷积层和特征映射。然而,这种方法倾向于记住数据集,而不是概括解决方案。它需要大量的训练数据,去覆盖不同的变体以及避免过拟合。MNIST数据集包含55000个训练数据,每个数字有5500个样本。然而,小孩子们根本不需要这么多样本来学习数字识别。我们现有的深度学习模型,包括CNN,在利用数据上都显得非常低效。
对抗攻击
对于将个别特征进行简单的移动,旋转或大小调整的对抗样本,CNN显得非常脆弱。
![](https://i-blog.csdnimg.cn/blog_migrate/a9ea2b9b0fa8c850ef84677d69705950.jpeg)
我们可以对图像添加微小的不可见的更改,从而轻松地欺骗一个深层神经网络。左边的图片被CNN正确地归类为熊猫。通过选择性地从中间图片向熊猫图片中添加微小的变化,CNN居然把右边的合成图像归类为长臂猿。
![](https://jhui.github.io/assets/capsule/a2.png)
(图片来自 OpenAI)
胶囊
一个胶囊能够捕捉特征的可能性及其变体。因此,胶囊不仅能检测到特征,还能通过训练来学习和检测变体。
![](https://i-blog.csdnimg.cn/blog_migrate/6189cd5103f720cc50d760e532ab7821.jpeg)
例如,同一网络层可以检测顺时针旋转的面部。
![](https://i-blog.csdnimg.cn/blog_migrate/89510b579a1e073ed9eb6561044382d0.jpeg)
同变性是可以相互变换的对象的检测。直观地说,一个胶囊检测到脸右旋转20°(或左旋转20°),并不是通过匹配一个右旋转20°的变体来识别到脸部。通过迫使模型在胶囊中学习特征变量,我们可以用较少的训练数据更有效地推断可能的变体。在CNN中,最终的标签是视角不变的,即顶层神经元检测到一个人脸,但丢失了旋转角度信息。对于同变性来说,像旋转角度这类变化的信息被保存在胶囊里面。保留这些空间方向的信息可以帮助我们避免对抗样本攻击。
矩阵胶囊
一个矩阵胶囊同神经元一样可以捕捉激活(可能性),但也捕捉到了一个4x4的姿态矩阵。在计算机图形学中,一个姿态矩阵定义了一个物体的平移和旋转,它相当于一个物体的视角的变化。
![](https://i-blog.csdnimg.cn/blog_migrate/1d27f1cec124ae64b61ce98f45ebde83.png)
(图片来源于论文Matrix capsules with EM routing)
例如,下面的第二行图像代表上面同一对象的不同视角。在矩阵胶囊中,我们训练模型来捕捉姿态信息(方向、方位角等)。当然,就像其他深度学习方法一样,这仅仅是我们的意图,并不能得到保证。
![](https://jhui.github.io/assets/capsule/data.png)
(图片来源于论文Matrix capsules with EM routing)
EM(期望最大化)路由的目的是通过使用聚类技术(EM)将胶囊分组形成一个部分-整体关系。在机器学习中,我们使用EM聚类簇将数据点聚类为高斯分布。例如,我们通过两个高斯分布G1=N(μ1,σ21)G1=N(μ1,σ12)
我们将在运行时使用EM路由,将胶囊分组到父胶囊中:
![](https://i-blog.csdnimg.cn/blog_migrate/106820bdcb930f505afcb1e1aa3ae07c.jpeg)
例如,如果鼻子,嘴和眼睛胶囊都有一个相似的姿态矩阵值的投票,那么我们将他们聚集在一起形成父胶囊:人脸胶囊。
![](https://jhui.github.io/assets/capsule/c3.jpg)
A higher level feature (a face) is detected by looking for agreement between votes from the capsules one layer below. We use EM routing to cluster capsules that have close proximity of the corresponding votes.
高斯混合模型 & 期望最大化(EM)
我们先来了解一下EM。高斯混合模型将数据点聚类为混合高斯分布,由均值μμ描述。
![](https://jhui.github.io/assets/capsule/em.gif)
(图片来源于Wikipedia)
对于一个两集群的高斯混合模型,我们先随机的初始化集群G1=(μ1,σ21)G1=(μ1,σ12)分布下,看到所有的数据点的概率最大化。
在给定集合G1G1
在每次迭代中,我们开始于2个高斯分布,之后会根据数据点重新计算其μμ。
![](https://jhui.github.io/assets/ml/GM1.png)
最终,我们会收敛到两个高斯分布,它使观察到的数据点的似然最大化。
![](https://jhui.github.io/assets/ml/GM2.png)
使用EM进行协议路由(Routing-By-Agreement)
现在,我们探讨更多的细节。一个更高层次的特征(一张脸)通过寻找来自下一层胶囊的投票的协商被检测到。一个从胶囊ii通过成本函数和反向传播学到。它不仅学习了人脸的组成,而且能够保证在经过变换后父胶囊与其子组件的姿态信息匹配。
下面是矩阵胶囊的协议路由(Routing-By-Agreement)的可视化图。姿态矩阵TiTi)
![](https://jhui.github.io/assets/capsule/gh.png)
(图片来源于Geoffrey Hinton)
即使视角改变,姿态矩阵和投票也会以协调的方式变化。在我们的例子中,当脸部旋转时,选票的位置可能会从红色点变为粉红色点。然而,EM路由是基于邻近度的,它仍然可以将相同的子胶囊聚集在一起。因此,变换矩阵对于物体的任何视角都是相同的:视角不变性。用于对象的不同方向,我们只需要一组转换矩阵和一个父胶囊。
![](https://jhui.github.io/assets/capsule/cluster2.jpg)
胶囊分配
EM路由在运行时将胶囊分组形成一个更高级别的胶囊。它同时会计算分配概率rijrij也将是零。
![](https://jhui.github.io/assets/capsule/c2.jpg)
计算胶囊的激活值和姿态矩阵
胶囊输出的计算不同于深度网络的神经元。在EM聚类中,我们通过高斯分布来表示数据点。在EM路由中,我们仍用高斯模型对父胶囊的姿态矩阵进行建模。姿态矩阵是一个4×4矩阵,即16个元素。我们用具有16个μμ表示姿态矩阵的一个元素。
令vijvij
我们估算一下激活一个胶囊的成本。成本越低,胶囊就越有可能被激活。如果成本高,投票就不匹配父高斯分布,因此被激活的概率就越低。
令costijcostij是否会被激活: