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

杰弗里·辛顿 (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的神秘面纱相关推荐

  1. 揭开J2EE集群的神秘面纱(一):什么是J2EE集群

    揭开J2EE集群的神秘面纱(一):什么是J2EE集群 作者:不详 来源:CSDN博客 酷勤网收集 2008-04-18 摘要 酷勤网 J2EE集群技术包括负载均衡和失效转移.负载均衡意味着有许多客户端 ...

  2. 揭开RTMP播放流程的神秘面纱

    RTMP 是目前各种网络直播应用最核心的传输协议,也是互动直播采用最广泛的协议. 如果说流媒体服务器(Server)是网络直播的骨骼,RTMP则是网络直播的血液,可以说,没有RTMP,就没有今天如此火 ...

  3. 连通子图什么意思_一道物理竞赛题揭开“希罗喷泉”的神秘面纱,到底什么物理原理?...

    多数初二的中学生朋友们现在都已经在学习压强知识,这一块知识属于中考物理必考重点内容,所占分值很高,所考查题型非常广泛,而且多是力学知识的综合性应用,因此属于中考的一个难点,中学生朋友们在遇到有关此类复 ...

  4. 算法笔记 揭开广度优先遍历BFS的神秘面纱 HERODING的算法之路

    揭开广度优先遍历BFS的神秘面纱 前言 1. 审题 1.1 树的BFS 1.2 图的BFS 2. 解法 2.1 树的BFS 2.2 图的BFS 3. 总结 前言 最近到了面试的高峰时期,前段时间也刷了 ...

  5. xpress-mp优化实例精选_实例解析,揭开“隔震技术”的神秘面纱!

    作者简介:仁者见仁,从事施工管理,深扎施工一线多年.著有微信公众号"仁者见仁",旨在为大家提供关于施工技术.项目管理最接地气的满满干货. 传统的抗震技术主要特点是"抗&q ...

  6. 揭开均线系统的神秘面纱_在应用程式审查API中揭开新玩法的神秘面纱

    揭开均线系统的神秘面纱 During the #11WeeksOfAndroid the new Play In-App Review API was announced. This was a lo ...

  7. Siamese Capsule Networks 翻译 (孪生胶囊网络)

    摘要 胶囊网络在事实上的基准计算机视觉数据集(例如MNIST,CIFAR和smallNORB)上显示出令人鼓舞的结果. 虽然,它们尚未在以下任务上进行测试:(1)所检测到的实体固有地具有更复杂的内部表 ...

  8. 揭开Salesforce Accredited Professional证书神秘面纱,到底含金量有多高?

    自从Salesforce宣布Accredited Professional计划以来,已经过去了将近两年.这些认证旨在证明备考者在Salesforce平台特定领域的广泛知识,并且仅供Salesforce ...

  9. 论文阅读_胶囊网络CapsNet

    介绍 英文题目:Dynamic Routing Between Capsules 中文题目:胶囊之间的动态路由 论文地址:https://papers.nips.cc/paper/2017/file/ ...

最新文章

  1. Android中 TextView的使用
  2. 浅谈 LiveData 的通知机制
  3. JS中的!= 、== 、!==、===的用法和区别
  4. POJ.3648.Wedding(2-SAT)
  5. 什么是网络套接字(Socket)?
  6. linux mysql io压力大_MySQL性能调优(四) Linux 磁盘IO
  7. peewee创建mysql_python – peewee MySQL,如何创建包装SQL构建的ins的自定义字段类型?...
  8. 太妙了!微软670页《dotnet官方手册》火了,完整PDF开放下载!
  9. 高效快速中值滤波算法c语言,快速中值滤波及c语言实现.docx
  10. cmd oracle sys登录_Oracle 数据库、表、方案的逻辑备份与恢复
  11. Java Java Java
  12. 3.2亿人每天都在刷抖音,而他们却看这几个公众号!
  13. loadrunner11 linux服务器,loadrunner11监控linux服务器性能
  14. python返回类型为anytype_python - Zeep的SOAP请求(Python) - 堆栈内存溢出
  15. ASP.NET Core 和 EF Core 系列教程——迁移
  16. 计算机老师教师节祝福语,教师节祝福语大全简短
  17. MATLAB强化学习实战(十一) 使用自定义训练循环训练强化学习策略
  18. 如何在Vue.js和ElementUI框架中获取Collapse组件最后选中的值
  19. 使用VS2015,office 2007自带的OCR组件来实现OCR功能
  20. 如何关闭迅雷极速版的升级提示

热门文章

  1. for good是什么意思?
  2. 在线练习sql的各类网站
  3. 如何用电脑进行编程?
  4. java学习笔记第七周(二)
  5. cs224n学习笔记9-问答系统
  6. js随机生成4位验证码(包括数字英文大小写)
  7. 登高自卑 | 我的Vue3入门与实践笔记
  8. mysql更改密码的sql语句_修改mysql登录密码与sql语句介绍
  9. div边框弧形设计,css3的border-radius属性
  10. 定义枚举类型,输出三角形的形状