Capsule Networks: A new and attractive AI architecture

胶囊收集:一种全新的富有吸引力的AI架构_胶囊_卷积 智能助手

作者 | Ayyüce Kızrak

翻译 | 安石徒、Disillusion、AdaAlvin、friedhelm739

校正 | 酱番梨 整理 | 菠萝妹

原文链接:

https://heartbeat.fritz.ai/capsule-networks-a-new-and-attractive-ai-architecture-bd1198cc8ad4

胶囊网络:一种全新的富有吸引力的AI架构

罂粟花胶囊

本文已被翻译为英文并首次揭橥在《Deep Learning Turkey》。

卷积神经网络(CNN)因其在目标识别和分类任务中的成功运用而被打算机视觉运用界所青睐。
CNN是由堆叠在一起的多个神经元组成的。
在神经元之间打算卷积须要大量的打算,因此常日利用池化来减小网络层的大小。
卷积方法可以通过大略的打算来学习数据的许多繁芜特色。
通过对输入进行矩阵乘法和求和,我们可以得出问题的答案。

基本的卷积神经网络

我总是听到CNN到底有多精良。
但是他们什么时候会失落败呢?

CNN在办理物体识别和分类问题方面确实取得了巨大的成功。
然而,它们并不完美。
如果输入CNN的工具处于一个CNN不熟习的方向,或是涌如今CNN从未见过的地方,那么它的预测任务很可能失落败。

例如,如果你把一张脸颠倒过来,网络将不再能够识别眼睛、鼻子、嘴巴以及它们之间的空间关系。
类似地,如果改变面部的特定区域(即切换眼睛和鼻子的位置),网络也可以识别脸部,但是它已经不是真正的脸部了。
CNN只学习到了图像中的统计信息,但是他们没有学习基本的思维,即到究竟什么样子才会被称作是脸。

Geoffrey Hinton 和 Sara Sabour

关于CNN为何不能学习思维的理论,人工智能之父杰弗里·辛顿(Geoffrey Hinton)针对付用于缩小网络规模和打算需求的池化操作哀叹道:

“在卷积神经网络中利用的池化操作是一个大缺点,它事情得如此好便是一个灾害!

池化层毁坏信息,使得网络无法学习更高等的思维。
因此,他动手开拓一种新的体系构造,这种体系构造并不很依赖于这种池化操作。

由此引出:胶囊网络

什么是胶囊网络?

Hinton 和 Sabour 从神经科学中借用了一些想法,即认为大脑被组织成了叫做胶囊 的模块。
这些胶囊特殊善于处理物体的姿态(位置、大小、方向)、变形、速率、反照率、色调、纹理等特色。

他们推测,大脑肯定有一种机制,将低层次的视觉信息通报到它认为能最好的处理这些信息的胶囊。
针对卷积神经网络模型性能不敷的领域问题,人们提出了胶囊网络和动态路由算法。

毕加索和他的女神们

胶囊表示图像中特定实体的各种特色。
一种非常分外的特色是图像中实例化实体的存在。
实例化实体是诸如位置、大小、方向、变形、速率、反照率、色调、纹理等参数。
表示其存在的一个大略方法是利用单独的逻辑单元,其输出是实体存在的概率[1]。
为了得到比CNN更好的结果,我们该当利用一个迭代的协议路由机制。
这些特性称为实例化参数。
在经典的CNN模型中是没有得到图像中目标的这些属性的。
均匀/最大池层减少了一组信息的大小,同时减少了其尺寸大小。

图中有些地方有嘴唇、鼻子和眼睛,但是卷积神经网络不知道它们在哪和该当在哪里。
对付传统网络,这些错放的特性不会影响到它!

挤压函数

挤压函数

在深度神经网络中,激活函数是运用于层输出的大略数学运算。
它们用于近似数据中存在的非线性关系。
激活层常日对标量值起浸染,例如,对向量中的每个元素进行规范化,使其介于0和1之间。

在胶囊网络中,一种称为挤压函数的分外类型的激活函数被用来归一化矢量的大小,而不是标量元素本身。

协议路由算法

这些挤压函数的输出见告我们如何通过演习成学习不同思维的各种胶囊来路由数据。
图像中每个工具的属性都用路由它们的向量来表示。
例如,面部的激活可以将图像的不同部分路由到能够理解眼睛、鼻子、嘴和耳朵的胶囊。

针对MNIST数据集的胶囊网络运用

胶囊网络的角度估计

下一步至关主要:

就像深层CNN的不同层数学习图像的不同语义属性(内容、纹理、样式等)一样,胶囊也可以被组织身分歧的层次。
同一层的胶囊进行预测,学习工具的形状,并将其通报给学习方向的更高层次的胶囊。
当多个预测同等时,更高等别的胶囊变得生动。
这个过程被描述为动态路由,现在我将更详细地谈论它。

那么我们先创建一个用于对MNIST数据集进行分类的分步胶囊体系构造:

第一层为范例的卷积层。
在第二层中,在称为低级胶囊 的层中实行卷积过程,个中运用了挤压函数。
每个主胶囊吸收图像的一个小区域作为输入(称为感想熏染野),它用来检测特定图案(如圆圈)的存在和姿态。

较高层的胶囊(称为路由胶囊)检测更大和更繁芜的物体,如由两个圆组成都的数字8。
然后他们利用一个新的挤压函数来担保这些向量的长度在0-1之间。

在低级胶囊层之前运用标准卷积层,并且得到9x9x256的输出。
在低级胶囊层中采取32通道、步长为2的卷积核。
然而,这个差异于其他卷积核的特色便是挤压函数。
末了就得到了低级胶囊的输出。

低级胶囊的卷积过程

此时可以得到6x6的输出。
由于在运用了动态路由算法的胶囊层中,其具有第三层动态路由的结果(根据协议路由算法),即得到这些8-长度输出DigitCaps矢量的32个输出。
协议路由算法包括一些协议(检测和路由)更新的迭代。

胶囊层

def CapsNet(input_shape, n_class, num_routing):

\公众\"大众\公众

MNIST Dataset for Capsule Networks.

: \公众input_shape\"大众 parameter: vdata shape, 3d, [w,h,c]

: \"大众n_class\公众 parameter: number of classes

: \"大众num_routing\"大众 parameter: dynamic routing number of iteration

: Function output: two Keras model, first for training, second for evalaution.

`eval_model` used for traning at the same time.

\"大众\"大众\"大众

x = layers.Input(shape=input_shape )

# LAYER 1: Convolution Layer (Conv2D)

conv1 = layers.Conv2D(filters=256, kernel_size=9, strides=1, padding='valid', activation='relu', name='conv1')(x)

# LAYER 2: Conv2D squash activation, [None, num_capsule, dim_capsule] fro reshaping.

primarycaps = PrimaryCap(conv1, dim_capsule=8, n_channels=32, kernel_size=9, strides=2, padding='valid')

# LAYER 3: Capsule Layers. Run: Dynamic routing algorithm.

digitcaps = CapsuleLayer(num_capsule=n_class, dim_capsule=16, num_routing=num_routing,

name='digitcaps')(primarycaps)

# LAYER 4:

# If you use Tensorflow you can skip this session :)

out_caps = Length(name='capsnet')(digitcaps)

capsulelayers.py中的动态路由类CapsuleLayer (layers.Layer)函数定义。
由于这个打算步骤,在图像中不存在工具的区域中向量值很小,而检测区域中向量的维度根据属性而变革。

class CapsuleLayer(layers.Layer):

\"大众\"大众\公众

The capsule layer. It is similar to Dense layer. Dense layer has `in_num` inputs, each is a scalar, the output of the

neuron from the former layer, and it has `out_num` output neurons. CapsuleLayer just expand the output of the neuron

from scalar to vector. So its input shape = [None, input_num_capsule, input_dim_capsule] and output shape = \

[None, num_capsule, dim_capsule]. For Dense Layer, input_dim_capsule = dim_capsule = 1.

:param num_capsule: number of capsules in this layer

:param dim_capsule: dimension of the output vectors of the capsules in this layer

:param routings: number of iterations for the routing algorithm

\公众\"大众\公众

def __init__(self, num_capsule, dim_capsule, routings=3,

kernel_initializer='glorot_uniform',

kwargs):

super(CapsuleLayer, self).__init__(kwargs)

self.num_capsule = num_capsule

self.dim_capsule = dim_capsule

self.routings = routings

self.kernel_initializer = initializers.get(kernel_initializer)

def build(self, input_shape):

assert len(input_shape) >= 3, \"大众The input Tensor should have shape=[None, input_num_capsule, input_dim_capsule]\公众

self.input_num_capsule = input_shape[1]

self.input_dim_capsule = input_shape[2]

# Transform matrix

self.W = self.add_weight(shape=[self.num_capsule, self.input_num_capsule,

self.dim_capsule, self.input_dim_capsule],

initializer=self.kernel_initializer,

name='W')

你也可在此查看全部代码。

性能测试 ?

在对10000幅图像的测试数据集进行测试时,我们对MNIST数据集的准确率达到99.61%,对FASHION MNIST数据集的准确率达到92.22%。
棒吧!

?

对付80%重叠手写数字的MultiMNIST数据集,当数据重叠时胶囊网络的性能显得非常好,特殊是与CNN模型比较。

MultiMNIST 数据集的胶囊网络输出

MNIST的50次迭代用时 ⏳

与CNN比较,由于打算的繁芜性,胶囊网络的演习韶光较慢。
以下是在各种硬件和云做事器上的50迭代演习韶光:

肯定 :)

要利用谷歌Colab支持,最吸引人的选项,请阅读谷歌Colab的免费GPU教程!

胶囊网络的✔️优点和❌缺陷

✔️比较其他前辈的技能,对MNIST数据集用胶囊网络有着最高的成功率。

✔️利用较小的数据集将更加成功。
(通过迫使模型在胶囊中学习特色变量,它可以更有效地用更少的演习数据推断出可能的变量。
)

✔️routing-by-agreement算法使我们能够区分有重叠图像的工具。

✔️更随意马虎用激活向量理解图像。

✔️胶囊网络能够保留诸犹如变性、色调、姿势、反照率、质地、变形、速率和工具位置等信息。

❌和一些出色的模型比较,CIFAR10 在数据集的表现上并不堪利

❌没有在大规模的数据集上测试

❌由于采取协议路由算法,演习模型须要更多的韶光。

不同路由算法的胶囊网络模型的运用表明,它是一个须要更多实验和正在发展的课题。

如上面的图例所示,当仅仅改变Kim Kardashian的图片方向,预测的准确度就会大幅低落。
右边的图片,我们能很随意马虎地看出来一只眼睛和她的嘴巴都放在缺点的位置,这不是一个人该有的样子容貌。
然而,我们却看到这张图是被预测为是人的可能性是0.9。

一个被演习地很好的CNN模型在这个方法上会有一些问题。
除了很随意马虎地被特色被放置在缺点位置的图片欺骗,对付不同方向的图片,CNN模型也很随意马虎辨认不明。

毫无疑问,CNN会受到对抗性攻击的影响。
这是一个会引起安全问题的主要约束,尤其当我们将一个隐形样式嵌入到工具中使其看起来像其它东西时。
但是,正如我们已知,我们可以通过胶囊网络来办理这个问题!

我们在胶囊网络中的学术论文

基于胶囊网络的手势识别(Recognition of Sign Language Using Capsule Networks)

视力和听力受损的人们可以在唇语或手和面部表情(如符号措辞)的帮助下仍能互换。
胶囊网络能帮助确保残疾人能不仅无障碍地生活而且可以通过康健有效的跟其他人沟通来提高生活质量。

在这项事情中,胶囊网络的手势数字识别精确率能达到94.2%:

手势数据集(Sign Language Digits Dataset, Arda Mavi ve Zeynep Dikle)

参考文献:

[1] Sabour, S., Frosst, N. ve Hinton, G.E., “Dynamic Routing Between Capsules’’, arXiv preprint arXiv:1710.09829, 2017.

[2]Hinton, G. E., Krizhevsky A. ve Wang, S. D. “Transforming Auto-encoders.” International Conference on Artificial Neural Networks. Springer, Berlin, Heidelberg, 2011.

[3] CSC2535: 2013 Advanced Machine Learning Taking Inverse Graphics Seriously, Geoffrey Hinton Department of Computer Science University of Toronto, 2013.

[4] Capsule Network Implementation of MNIST dataset (in Turkish explanation, Deep Learning Türkiye, kapsul-agi-capsule-network.

[5] Recognition of Sign Language Using Capsule Networks, Fuat Beşer, Merve Ayyüce KIZRAK, Bülent BOLAT, Tülay YILDIRIM, https://github.com/ayyucekizrak/Kapsul-Aglari-ile-Isaret-Dili-Tanima

想要连续查看该篇文章干系链接和参考文献?

长按链接点击打开或点击底部【胶囊网络:一种全新的富有吸引力的AI架构】:

https://ai.yanxishe.com/page/TextTranslation/1364

AI研习社逐日更新精彩内容,不雅观看更多精彩内容:雷锋网雷锋网雷锋网

7分钟理解Tensorflow.js在Keras中理解和编程ResNet初学者若何利用Keras进行迁移学习如果你想学数据科学,这 7 类资源千万不能错过

等你来译:

深度学习目标检测算法综述一文教你如何用PyTorch构建 Faster RCNN高等DQNs:利用深度强化学习玩吃豆人游戏用于深度强化学习的构造化掌握网络 (ICML 论文讲解)