翻译:揭开胶囊网络CapsNet的神秘面纱

Posted 架构师易筋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻译:揭开胶囊网络CapsNet的神秘面纱相关的知识,希望对你有一定的参考价值。

近年来,深度学习风靡全球。从自动驾驶汽车到预测性广告,它不可避免地成为我们日常生活的重要组成部分。

杰弗里·辛顿 (Geoffrey Hinton) 被认为是将深度学习带回主流并在很大程度上负责今天的发展的人,他发布了一种全新类型的神经网络,称为胶囊网络(或 CapsNet)。顾名思义,它使用胶囊而不是人工神经元进行活动。

韩丁,Sabour和FR Ø SST描述的直觉和他们的论文中所提出的网络的运作动态路由胶囊之间,发表在2017年他们还阐述了在他们的论文声称,以减少错误率的方法MNIST数据集。据称,在高度重叠的数字上,结果比传统的 CNN 好得多。

本文试图让读者对 Hinton 和他的团队的天才有一个广泛的概述(同时涵盖更精细的点),以及为什么 CapsNet 是一个不可忽视的网络。

1. 但什么是胶囊网络?

胶囊网络(或 CapsNets)是 Geoffrey Hinton 和他的研究团队的心血结晶。它于 2017 年发布,可被描述为一种机器学习方法,试图使用人工神经网络更密切地模仿生物神经组织。

当描述胶囊网络的论文最初发布时,它在深度学习社区内引起了很多兴奋。这主要是因为论文引入了一个全新的概念,它没有遵循神经网络的传统分层结构,而是以一种完全的方式解决了这个问题。Hinton 和他的团队发表的论文中描述的想法是将称为胶囊的结构添加到传统的 CNN 中,并重用其中几个胶囊的输出,为网络中的更高胶囊形成更稳定的表示。

1.1 什么是胶囊,它们为什么起作用?

胶囊可以定义为一组神经元,它们针对物体的各种属性(例如位置、色调和大小)单独激活。实体出现在特定输入中的概率可以定义为从胶囊的输出导出的向量的长度,而向量的方向用于量化胶囊的属性。

与人工神经元不同,胶囊本质上是独立的。这意味着,当多个胶囊彼此一致时,正确检测的概率要高得多。

因此,既然我们知道 CapsNet 是由什么组成的,我们需要更好地了解它们的工作原理——或者更准确地说,胶囊与人工神经元相比如何?

要回答这些问题,我们可以参考 Hinton介绍胶囊的第一篇论文

每个胶囊学习在有限的观察条件和变形范围内识别隐式定义的视觉实体,并输出实体存在于其有限范围内的概率和一组“实例化参数”,其中可能包括精确的姿势、光照以及相对于该实体的隐式定义的规范版本的视觉实体的变形。
— 欣顿等人

Capsules 是人工神经层的替代方案,通过它可以以向量的形式存储有关特征状态的所有必要和必需的信息。根据 Hinton 和他的团队的说法,每个胶囊对其输入执行相当复杂的内部计算,然后将结果封装到一个包含大量信息输出的小向量中。与使用单个标量输出来显示计算最终结果的人工神经元相比,这要好得多。

让我们借助一个例子来说明这一点。假设我们正在使用卷积神经网络 (CNN),它被用于当今世界几乎所有基于计算机视觉的应用程序的最前沿。

CNN 的工作原理是使用卷积层将给定的输入分成多个扇区。这些层然后复制每个扇区的权重以给出一个二维矩阵,该矩阵被堆叠起来以获得卷积层的输出。之后,我们使用最大池化层查看二维矩阵中的每个区域,并选择每个区域中的最大数(标量)。结果,当我们稍微改变对象的定位时,网络神经元的输出保持不变。

所描述的机制在实践中确实工作得非常好,但它往往有一些缺陷,主要是因为架构的最大池化部分。最大池化往往会丢失卷积层提供的有价值的信息,并且也无法对特征之间的空间关系进行编码。

另一方面,胶囊倾向于将所需特征检测的概率编码为其输出向量的长度。作为向量,输出还具有方向分量,用于对检测到的特征的状态进行编码。在这种情况下,当要检测特征的物体的定位发生变化时,检测的概率(用向量的大小表示)保持不变,但方向确实随着定位的变化而变化的对象。

如果以上内容看起来过于理论化和令人困惑,下一节将有望帮助您了解 CNN 的确切缺点是什么。

2. 为什么不是卷积神经网络?

卷积神经网络 (CNN) 已经存在很长时间了。事实上,它们是当今深度学习如此流行的主要原因之一。CNN 通常被认为赋予机器破译和分析图像的能力。然而,正如本文的重点,CNN 也往往有一定的局限性。

CNN 的主要特征是它的卷积层。它以像素为单位检测图像的重要特征。与将这些更简单的特征结合起来以检测更复杂的特征并最终产生分类预测的更高层相比,网络中存在的更深层将倾向于检测更简单的特征(如边缘和轮廓)。

Max Pechyonkin 在他的博客中给出了一个很好的例子,它抓住了传统 CNN 的主要缺点。它主要总结了CNN在预测特征和分类图像时通常不考虑特征之间的空间距离的事实。

Max 举的例子是一张经过数字编辑的图像,其中面部(眼睛、鼻子、嘴巴)的组成部分混杂在一起。对于 CNN,这些部分的存在就是强有力的证据,表明图像中存在人脸。嘴是在眼睛上方还是下方都没有关系。由于较高层会检测与他们接受训练的人脸相关的特征,因此他们会检测人脸。

这个问题的原因是什么?最大池化。最大池化一方面是一种使 CNN 工作得非常好的方法,但也导致了诸如更高级别特征之间的姿势关系之类的宝贵信息的丢失。

卷积神经网络中使用的池化操作是一个很大的错误,而且它运行良好的事实是一场灾难。
— 杰弗里·辛顿

简而言之,CNN 中的层没有考虑到图像检测到的特征之间的重要空间层次结构。以上面的例子为例,仅仅有眼睛和嘴巴应该不足以检测到一张脸。神经网络还应该能够辨别这些特征是否以及如何相互定向。

3. 胶囊网络架构

在这里,我将以简短而简洁的方式描述胶囊网络架构。

作者在论文中定义的胶囊网络可以分为两个主要部分:编码器解码器

3.1 CapsNet 编码器


编码器有 3 个与之相关的主要层。它们总结如下:

  1. 卷积层:该层的工作是检测二维图像中的基本特征。在 CapsNet 中,卷积层有 256 个内核,大小为 9x9x1,步长为 1。
  2. PrimaryCaps 层:该层具有主要胶囊(网络的名称),其工作是获取卷积层检测到的特征的输出并生成输入特征的组合。该层有 32 个“主胶囊”,每个胶囊产生形状为 6x6x8 的输出张量。该层的最终输出具有 6x6x8x32 的形状(因为有 32 个胶囊)。
  3. DigitCaps 层:这一层有 10 个胶囊,每个数字一个。(注意:这是特定于该网络的,因为该网络是在 MNIST 数据集上训练的,该数据集需要产生 10 个类别的输出概率)。每个胶囊接收一个 6x6x8x32 的形状向量并输出一个 16x10 的矩阵;进入解码器。

3.2 CapsNet 解码器


CapsNet 解码器有 3 个全连接层 (FC),它们从 DigitCaps 层接收 16 维输入并学习将其解码为图像。在纸张中重新创建的图像大小为 28x28 像素。

4. 动态路由算法

任何谈论胶囊网络的博客都不得不提到动态路由算法。这是一种新颖的算法,用于训练胶囊网络以使其按照它的方式运行。

对于任何想要深入了解算法本质的人,我强烈建议阅读将其介绍给世界的原始论文。然而,并非所有人都愿意通读技术术语和长篇论文。以下部分对该算法进行了广泛的概述。

4.1 直觉

可以最好地描述算法背后的主要直觉,因为它在论文中给出:

较低级别的胶囊将其输入发送到“同意”其输入的较高级别的胶囊。这就是动态路由算法的本质。

由于胶囊的输出是一个向量,因此可以使用强大的动态路由机制来确保每个胶囊的输出被发送到其上层的特定且适当的父级。

该算法与传统训练方法有一些相似之处,即更高级别的胶囊覆盖图像的更大区域。然而,它忽略了最大池化步骤,这是与 CNN 训练相关的提醒。动态路由不会处理有关实体在区域内的精确位置的信息。

对于存在于层次结构较低级别的胶囊,位置信息根据在给定时刻处于活动状态的胶囊进行位置编码。随着我们向上移动网络,越来越多的信息开始在胶囊输出向量的幅度分量中进行速率编码

这种从位置编码到速率编码的转变,再加上更高级别的胶囊代表具有更多自由度的更复杂的实体,这表明胶囊的维数应该随着我们提升层次结构而增加。
欣顿等人。—来源

既然我们已经对算法的基本直觉有了基本的了解,我们可以一步一步地进一步研究动态路由算法。

4.2 算法

这是逐行描述算法的论文摘录,然后是算法实际执行的摘要:

在我们看到算法中究竟发生了什么之前,我们需要知道究竟需要实现什么。较低层的胶囊i需要决定如何将其输出向量发送到较高层的胶囊j。它通过改变标量权重c[ij] 来做出决定,这将乘以它的输出向量,然后被视为层次结构中上方胶囊的输入。

  1. 该过程的第一行采用较低级别l 的所有现有胶囊及其输出u,以及用户给出的路由迭代次数r。最后一行表明该过程将产生网络层次结构中上面存在的胶囊的输出,v[j]。对于那些熟悉神经网络训练的人来说,这个算法可以被认为有点类似于传统神经网络的前向传递。
  2. 第二行定义了一个系数b[ij],它是一个临时值,在程序结束后迭代更新并存储在c[ij] 中。它在程序开始时被初始化为 0。
  3. 第三行表示第 4-7 行将迭代重复r次。
  4. 第四行计算矢量的值C [1] , 这都为较低级别的胶囊所有的权我。然后对所有较低级别的胶囊执行此过程。Softmax用于确保捕获的每个权重c[ij]都是非负的,并且所有权重的总和最终等于 1。
  5. 在为所有较低级别的胶囊计算权重后,步骤 5 计算所有获得的输入向量的线性相关组合。每个输入向量都由上一步确定的路由系数c[ij]加权。
  6. 第六行描述了通过压缩非线性的向量,这确保了向量的方向分量的保留,但其长度被强制为不超过 1。

4.3 作者的建议

该论文检查了 MNIST 和 CIFAR 数据集的一系列值。作者在论文中给出的两个主要建议在训练胶囊网络时需要注意:更多的迭代往往会过度拟合数据,建议在实践中使用 3 次路由迭代。

4.4 编码

对于我们这些需要亲眼看到结果的人,论文中用于动态路由算法的官方模型已经由作者发布。你可以在这里找到它们:
https://github.com/Sarasra/models

5. 应用和实现

任何想法的最佳衡量标准都可以从实际示例和基于它完成的工作中获取。如前所述,胶囊网络一经发布就在深度学习社区掀起了风暴,从那时起,已经有许多以胶囊网络为基础的作品发表。

现在已经提议将胶囊网络用于各种领域,从情感分析对象分割再到肺癌筛查

6. 限制

尽管胶囊网络开辟了全新的可能性范围,但它们在大多数领域仍然无法超越卷积神经网络,尽管与前者相比具有更好的准确性。

虽然胶囊网络确实倾向于解决卷积神经网络面临的核心问题,但它们还有很长的路要走。胶囊网络尚未在 ImageNet 等大型数据集上得到令人满意的测试,这导致对其在大型数据集上表现良好(优于现有方法)的能力产生了一些怀疑。

此外,CapsNet 的训练和验证速度非常缓慢。这是因为动态路由算法的内部循环。这使得它不适合在相当大的数据集上进行有效训练,因为所需的迭代次数会很多。此外,胶囊网络在更复杂的数据集和不同领域的工作情况还有待观察。

7. 结论

Hinton 和他的团队向世界介绍了一个新的构建块——胶囊——它有可能用于深度学习,以更好地模拟神经网络内知识内部表示之间的空间和层次关系。它们背后的直觉既狡猾又简单,但又不失优雅。

随着胶囊网络的研究越来越多,它进一步扩展到深度学习的其他领域只是时间问题。

参考

https://heartbeat.comet.ml/demystifying-capsule-networks-14aaa5b967b2

https://arxiv.org/pdf/1710.09829.pdf

以上是关于翻译:揭开胶囊网络CapsNet的神秘面纱的主要内容,如果未能解决你的问题,请参考以下文章

揭开SolidWorks二次开发的神秘面纱

Android之OkHttp网络架构源码深入分析(揭开神秘的面纱)

HTTP协议刨析--揭开HTTP的神秘面纱

涨姿势!一切皆Socket!揭开神秘的Socket面纱。

揭开Java IO流中的flush()的神秘面纱

揭开动态代理的神秘面纱