链接

本文已被翻译成英文并首次发表于Deep Learning Turkey

Capsule Networks:一种全新且极具吸引力的AI架构 - 图2
卷积神经网络(CNN)在计算机视觉应用中经常是首选,因为它们在对象识别和分类任务上取得了成功。CNN由堆叠在一起的许多神经元组成。计算跨神经元的卷积需要大量计算,因此池化过程通常用于减小网络层的大小。卷积方法可以通过简单的计算学习数据的许多复杂特征。通过对我们的输入执行许多矩阵乘法和求和,我们可以得出我们问题的答案。
Capsule Networks:一种全新且极具吸引力的AI架构 - 图3

我总是听到CNN有多棒。什么时候失败?

CNN在解决对象识别和分类问题方面取得了巨大成功。但是,它们并不完美。如果CNN显示的方向对象不熟悉,或者对象出现在不习惯的位置,则预测任务可能会失败。

例如,如果您将一张脸倒置,网络将无法再识别眼睛,鼻子,嘴巴以及两者之间的空间关系。同样,如果你改变了脸部的特定区域(即切换眼睛和鼻子的位置),网络将能够识别脸部,但它不再是真实的脸部。CNN学习图像中的统计模式,但是他们没有学习关于什么使事物看起来像脸的基本概念。
Capsule Networks:一种全新且极具吸引力的AI架构 - 图4
关于为什么CNN无法学习概念的理论,AIGeoffrey Hinton专注于用于缩小网络规模和计算要求的池化操作。他感叹道:

“在卷积神经网络中使用的池化操作是一个很大的错误,它运作良好的事实是一场灾难!” 汇集层正在破坏信息,使网络无法学习更高级别的概念。所以他开始着手开发一种新的架构,这种架构并没有过多地依赖于这种操作。

结果:胶囊网络

什么是胶囊网络?

Hinton和Sabour借鉴了神经科学的观点,认为大脑被组织成称为胶囊的模块。这些胶囊特别擅长处理物体的特征,如姿势(位置,大小,方向),变形,速度,反照率,色调,纹理等。

理论上,大脑必须有一种机制,用于低级视觉信息路由到它认为最适合处理它的胶囊。已经提出了胶囊网络动态路由算法作为卷积神经网络模型不充分的问题的解决方案。

Capsule Networks:一种全新且极具吸引力的AI架构 - 图5
Portrait de femme au col d`hermine(奥尔加)

胶囊表示图像中存在的特定实体的各种特征。一个非常特殊的特征是图像中存在实例化的实体。实例化的实体是一个参数,如位置,大小,方向,变形,速度,反照率,色调,纹理等。表示其存在的一种显而易见的方法是使用一个单独的逻辑单元,其输出是实体存在的概率[ 1 ]。为了获得比CNN更好的结果,我们应该使用迭代路由协议机制。这些功能称为实例化参数。在经典CNN模型中,不能获得图像中对象的这种属性。平均/最大池化层减小了一组信息的大小,同时减小了大小。

好吧,某处有一个嘴唇,鼻子和眼睛,但卷积神经网络无法决定它应该在哪里以及它在哪里。 > 对于传统的网络,错位的功能不会让它失望!

壁球功能

Capsule Networks:一种全新且极具吸引力的AI架构 - 图6壁球功能

在深度神经网络中,激活函数是应用于层输出的简单数学运算。它们用于近似存在于数据中的非线性关系。激活层通常作用于标量值 - 例如,对向量中的每个元素进行标准化,使其落在0和1之间。
在Capsule Networks中,一种称为squash函数的特殊类型的激活函数用于归一化向量的大小,而不是标量元素本身。
Capsule Networks:一种全新且极具吸引力的AI架构 - 图7

协议路由算法
这些壁球功能的输出告诉我们如何通过训练学习不同概念的各种胶囊来路由数据。图像中每个对象的属性在路由它们的向量中表示。例如,脸部的激活可以将图像的不同部分路由到理解眼睛,鼻子,嘴巴和耳朵的胶囊。

胶囊网络在MNIST数据集中的应用

Capsule Networks:一种全新且极具吸引力的AI架构 - 图8由胶囊网络执行的角度估计

现在,下一步至关重要:

就像不同层次的深层CNN中的层学习图像的不同语义属性(内容,纹理,样式等)一样,胶囊也可以组织成不同的层次。在一个级别的胶囊进行预测,了解物体的形状,并将它们传递给更高级别的胶囊,这些胶囊可以了解方向。当多个预测一致时,更高级别的预测变得活跃。此过程被描述为动态路由,我现在将更详细地讨论。

那么,让我们创建一个逐步的胶囊架构来分类MNIST数据集:

第一层有一个经典的卷积层。在第二层中,在称为主要胶囊的层中执行卷积处理,其中应用该squash函数。每个主要胶囊接收图像的一个小区域作为输入(称为其感受野),并且它试图检测特定图案的存在和姿势 - 例如,圆圈。

更高层中的胶囊(称为路由胶囊)检测更大和更复杂的对象,例如数字8,由两个圆圈组成。然后他们使用一种新颖的挤压功能来保证这些矢量的长度在0到1之间。

在主胶囊层之前施加标准卷积层,并获得9×9×256的输出。在主胶囊层中应用具有32个通道的新卷积过程,步幅为2.然而,将其与其他卷积过程分开的这个特征是压缩的功能。最后,这给出了主要胶囊的输出。

Capsule Networks:一种全新且极具吸引力的AI架构 - 图9初级胶囊的卷积过程

这提供了6x6输出。然而,在胶囊层中,实现动态路由算法,使得这些8长度输出DigitCaps向量的32个输出由于具有第三层动态路由的胶囊层而获得(逐协议路由算法) 。逐协议算法包括协议(检测和路由)更新的几次迭代。

Capsule Networks:一种全新且极具吸引力的AI架构 - 图10Capulel层

  1. def CapsNetinput_shapen_classnum_routing):
  2. “””
  3. 胶囊网络的MNIST数据集。
  4. :“input_shape”参数:vdata形状,3d,[whc]
  5. :“n_class”参数:类的数量
  6. :“num_routing”参数:动态路由迭代次数
  7. :功能输出:两个Keras模型,第一个用于训练,第二个用于evalaution
  8. `eval_model`用于同时进行训练。
  9. “””
  10. X = layers.Input(形状= input_shape
  11. 1层:卷积层(Conv2D
  12. CONV1 = layers.Conv2D(过滤器= 256kernel_size = 9,步幅= 1,填充= '有效',活化= ' RELU ',名字= ' CONV1 ')(x)的
  13. 2层:Conv2D壁球活化,[无,num_capsuledim_capsule]来回整形。
  14. primarycaps = PrimaryCapCONV1dim_capsule = 8n_channels = 32kernel_size = 9,步幅= 2,填充= '有效'
  15. 3层:胶囊层。运行:动态路由算法。
  16. digitcaps = CapsuleLayernum_capsule = n_classdim_capsule = 16num_routing = num_routing
  17. name = ' digitcaps ')(primarycaps
  18. 4层:
  19. #如果你使用Tensorflow,你可以跳过这个会话:)
  20. out_caps =长度(名称= ' capsnet ')(digitcaps

动态路由在capsulelayers.pyCapsuleLayer (layers.Layer)函数中定义。由于该计算步骤,在图像中不存在对象的区域中矢量值较小,而检测区域中的矢量尺寸根据属性而变化。

  1. CapsuleLayer(层。层):
  2. “””
  3. 胶囊层。它类似于密集层。密集层有`in_num`输入,每个都是标量,输出
  4. 来自前一层的神经元,它有'out_num`输出神经元。CapsuleLayer只是扩展了神经元的输出
  5. 从标量到矢量。所以它的输入形状= [None,input_num_capsule,input_dim_capsule]和输出形状= \
  6. [None,num_capsule,dim_capsule]。对于密集层,input_dim_capsule = dim_capsule = 1。
  7. :param num_capsule:此图层中的胶囊数
  8. :param dim_capsule:此层中胶囊的输出向量的维度
  9. :param routings:路由算法的迭代次数
  10. “””
  11. DEF __init__(自,num_capsule,dim_capsule,路线= 3,
  12. kernel_initializer = ' glorot_uniform ',
  13. ** kwargs):
  14. 超级(CapsuleLayer,自我)。__init __(** kwargs)
  15. self .num_capsule = num_capsule
  16. self .dim_capsule = dim_capsule
  17. 自我 .routings =路线
  18. self .kernel_initializer = initializers.get(kernel_initializer)
  19. def build(self,input_shape):
  20. assert len(input_shape)> = 3,“输入Tensor应该有shape = [None,input_num_capsule,input_dim_capsule] ”
  21. self .input_num_capsule = input_shape [ 1 ]
  22. self .input_dim_capsule = input_shape [ 2 ]
  23. #变换矩阵
  24. self .W = self .add_weight(shape = [ self .num_capsule,self .input_num_capsule,
  25. self .dim_capsule,self .input_dim_capsule],
  26. initializer = self .kernel_initializer,
  27. name = ' W ')
  28. self .built = 真的

你也可以在这里找到所有的工作。

测试性能🏅

当使用10,000图像测试数据集进行测试时,我们获得了MNIST数据集的99.61%准确度,并且获得了FASHION MNIST数据集的92.22%准确度。是啊!😎
对于具有80%重叠手写数字的MultiMNIST数据集,当数据重叠时,胶囊网络的性能似乎非常好,特别是与CNN模型相比时。
Capsule Networks:一种全新且极具吸引力的AI架构 - 图11MultiMNIST数据集的胶囊网络输出

MNIST的50纪元工作时间⏳

与CNN相比,由于其计算复杂性,胶囊网络的训练时间较慢。以下是各种硬件和云服务器上的50纪元培训时间:
Capsule Networks:一种全新且极具吸引力的AI架构 - 图12
Capsule Networks:一种全新且极具吸引力的AI架构 - 图13当然 :) 要使用Google Colab支持,最吸引人的选项,请阅读> Google Colab免费GPU教程!

✔️Pros和❌Consof Capsule Networks

与其他最先进的技术相比,✔️Capsule网络在MNIST数据集中取得了最大的成功。

✔️使用较小的数据集成功。(通过强制模型学习胶囊中的特征变体,它可以用更少的训练数据更有效地推断可能的变体。)

✔️逐协议算法允许我们区分重叠图像中的对象。

✔️使用激活矢量更容易解释图像。

✔️Capsule网络维护对象的等效性,色调,姿势,反照率,纹理,变形,速度和位置等信息。


与现有技术模型相比,❌CIFAR10在数据集方面没有成功。

❌尚未在非常大的数据集上进行测试。

❌由于协议路由算法,训练模型需要更多时间。

具有不同路由算法的胶囊网络模型的应用表明它是一个需要更多实验并且仍在开发的主题。

“卷积神经网络注定失败” Geoffrey Hinton

另一个例子

Capsule Networks:一种全新且极具吸引力的AI架构 - 图14
Capsule Networks:一种全新且极具吸引力的AI架构 - 图15卷积神经网络的重要安全问题举例

在上面示出的示例中,当仅改变Kim Kardashian的图像的方向时,预测准确度显着下降。在右边的图像中,我们可以很容易地判断出一只眼睛和她的嘴是不正确放置的,这不是一个人的假设。然而,我们看到了0.90的预测分数。

受过良好训练的CNN在这种方法上存在一些障碍。除了容易被具有不正确位置的特征的图像欺骗之外,当以不同方向观看图像时CNN也容易混淆。

毫无疑问,CNN可能受到对抗性攻击的影响。这是一个可能导致安全问题的重要约束,特别是当我们将潜在模式嵌入到对象中以使其看起来像其他东西时。但是,正如我们所知,我们可以通过Capsule Networks解决这个问题!

✨胶囊网络的模型是值得和有前途的!


📝 我们关于胶囊网络的学术论文:使用胶囊网络识别手语听力和语言障碍者继续通过唇读或手和脸的运动(即手语)进行交流。胶囊网络可以帮助确保残疾人不仅可以充分参与生活,还可以通过与他人的健康和有效沟通来提高生活质量。

在这项工作中; Capsule Networks 以94.2%的验证准确度识别手语的数字。

Capsule Networks:一种全新且极具吸引力的AI架构 - 图16手语数字数据集,Arda Mavi ve Zeynep Dikle


参考

[1] Sabour,S.,Frosst,N. ve Hinton,GE,“ 胶囊之间的动态路由 ”,arXiv preprint arXiv:1710.09829,2017。
[2] Hinton,GE,Krizhevsky A. ve Wang,SD“ 转换自动编码器。”国际人工神经网络会议。斯普林格,柏林,海德堡,2011年。
[3] CSC2535:2013高级机器学习认真对待逆向图形,Geoffrey Hinton多伦多大学计算机科学系,2013年。
[4] MNIST数据集的胶囊网络实现(土耳其语解释,深度学习Türkiye,kapsul-agi-capsule-network
[5] 使用胶囊网络识别手语FuatBeşerMerveAyyüceKIZRAKBülentBOLATTülayYILDIRIMhttps://github.com/ayyucekizrak/Kapsul-Aglari-ile-Isaret-Dili-Tanima