爱吧机器人网 » 技术 > 神经网络 > 正文

Hinton胶囊网络代码正式开源,5天GitHub fork超1.4万

核心提示:万众期待中,Hinton胶囊网络论文《Dynamic Routing between Capsules》的代码正式公布,仅仅5天,Github上fork数量就超过了1 4万。Capsule真能取代CNN吗?接下来是你动手的时间了。

新智元编译
来源:GitHub;jhui.github.io
编译:文强,马文

\
 
【新智元导读】万众期待中,Hinton胶囊网络论文《Dynamic Routing between Capsules》的代码正式公布,仅仅5天,Github上fork数量就超过了1.4万。Capsule真能取代CNN吗?接下来是你动手的时间了。
 
Hinton胶囊网络论文《Dynamic Routing between Capsules》的一作Sara Sabour日前在GitHub公布了代码,使用TensorFlow和NumPy实现,只有一台GPU也行,仅仅5天,fork的数量就超过了1.4万。
 
实际上,在官方代码公布前,已经有很多其他版本和实现。新智元也对胶囊网络的概念做过详细介绍:
 
[4]【Hinton 碰撞 LeCun】CNN 有两大缺陷,要用 capsule 做下一代 CNN
[5]【一文读懂 Hinton 最新 Capsules 论文】CNN 未来向何处去
[6]【一文读懂 Hinton 最新论文】胶囊网络 9 大优势 4 大缺陷(视频 + PPT)


不过,在看代码前,还是有必要再次回顾这篇Hinton革新CNN的论文,Jonathan Hui在他的博客上对这篇论文做过拆解,从基本概念开始,读来非常友好。
 
用“Capsule”作为下一代CNN的理由 
 
在深度学习中,神经元的激活水平通常被解释为检测特定特征的可能性。

\
 
但是,CNN善于检测特征,却在探索特征(视角,大小,方位)之间的空间关系方面效果较差。例如,下面这张图片可能会骗过一个简单的CNN模型,让CNN模型相信这是一张真实的人脸。

\
 
一个简单的CNN模型可以正确提取鼻子、眼睛和嘴巴的特征,但会错误地激活神经元进行人脸检测。如果不了解空间方向,大小不匹配,那么对于人脸检测的激活将会太高,比如下图95%。

\
 
现在,假设每个神经元都包含特征的可能性和属性。例如,神经元输出的是一个包含 [可能性,方向,大小] 的向量。利用这种空间信息,就可以检测鼻子、眼睛和耳朵特征之间的方向和大小的一致性,因此对于人脸检测的激活输出就会低很多。

\
 
在Hinton的胶囊网络的论文中,就使用“胶囊”(capsule)来指代这样的神经元。
 
从概念上讲,我们可以将CNN看成是训练神经元来处理不同方向的视角,并在最顶层有一层人脸检测神经元。

\
 
如上所述,为了CNN能够处理不同的视角或变体,我们添加了更多的卷积图层和特征图。尽管如此,这种方法倾向于记忆数据集,而不是得出一个比较通用的解决方案,它需要大量的训练数据来覆盖不同的变体,并避免过拟合。MNIST数据集包含55,000个训练数据,也即每个数字都有5,500个样本。但是,儿童看过几次就能记住数字。现有的包括CNN在内的深度学习模式在利用数据方面效率十分低下。引用Geoffrey Hinton的一句话:
 
It (convolutional network) works depressingly well.
 
胶囊网络不是训练来捕捉特定变体的特征,而是捕捉特征及其变体的可能性。所以胶囊的目的不仅在于检测特征,还在于训练模型来学习变体。
 
这样,相同的胶囊就可以检测不同方向的同一个物体类别(例如,顺时针旋转):

\
 
其中,Invariance对应特征检测,特征是不变的。例如,检测鼻子的神经元不管什么方向,都检测鼻子。但是,神经元空间定向的损失最终会损害这种invariance模型的有效性。
 
而Equivariance对应变体检测,也即可以相互转换的对象(例如检测不同方向的人脸)。直观地说,胶囊网络检测到脸部旋转了20°,而不是实现与旋转了20°的变体相匹配的脸。通过强制模型学习胶囊中的特征变体,我们可以用较少的训练数据,更有效地推断可能的变体。此外,也可以更有效地防止对抗攻击。
 
计算一个Capsule网络的输出:不同维度的参数 
 
胶囊是一组神经元,不仅捕捉特征的可能性,还捕捉具体特征的参数。
 
例如,下面的第一行表示神经元检测到数字“7”的概率。2-D胶囊是组合了2个神经元的网络。这个胶囊在检测数字“7”时输出2-D矢量。对于第二行中的第一个图像,它输出一个向量 v=(0,0.9)v=(0,0.9)。矢量的大小0.9 对应于检测“7”的概率。每行的第二个图像看起来更像是“1”而不是“7”。 因此,其相应的可能性为“7”较小。

\
 
在第三行,旋转图像20°。胶囊将产生具有相同幅度但不同方向的矢量。这里,矢量的角度表示数字“7”的旋转角度。最后,还可以添加2个神经元来捕捉大小和笔画的宽度(见下图)。

\
 
我们称胶囊的输出向量为活动向量 ,其幅度代表检测特征的概率,其方向代表其参数(属性)。
 
在计算一个胶囊网络输出的时候,首先看一个全连接的神经网络:

\
 
其中每个神经元的输出是从前一层神经元的输出计算而来的:
 
\
 
对于capsule网络,一个capsule的输入Ui和输出Vj都是向量。
\
\
 
 
它将短向量缩小到接近0,将长向量缩小为接近单位向量( unit vectors)。因此,每个capsule的似然性在0到1之间。

\
 
迭代动态路由规则与重要性
 
在深度学习中,我们使用反向传播来训练模型参数。转换矩阵 Wij 在胶囊中仍然用反向传播训练。不过,耦合系数 cij 用新的迭代动态路由方法进行计算。

\
 
 
在深度学习中,我们使用反向传播来训练基于成本函数的模型参数。这些参数(权重)控制信号从一层到另一层的路由。如果两个神经元之间的权重为零,则神经元的激活不会传播到该神经元。
 
迭代动态路由提供了如何根据特征参数来路由信号的替代方案。通过利用特征参数,理论上,可以更好地将胶囊分组,形成一个高层次的结构。例如,胶囊层可能最终表现为探索“部分-整体”关系的分析树。例如,脸部由眼睛、鼻子和嘴组成。迭代动态路由利用变换矩阵、可能性和特征的性质,控制向上传播到上面胶囊的信号的多少。
 
最后,就到了应用胶囊构建CapsNet,进而对MNIST数字进行分类和重构的时候了。下面是CapsNet的架构。一个CapsNet共有3层,两个卷积层和一个全连接层。

\
 
论文提到的MNIST数字重构任务:

\
 
Github代码
 
Capsule模型代码在以下论文中使用:
 
"Dynamic Routing between Capsules”(胶囊间的动态路由) by Sara Sabour, Nickolas Frosst, Geoffrey E. Hinton.
 
要求:
 
TensorFlow(请参阅http://www.tensorflow.org了解如何安装/升级)NumPy(请参阅http://www.numpy.org/)
 
GPU
 
运行测试验证设置是否正确,例如:

\
 
快速MNIST测试结果:
 
从以下网址下载并提取MNIST记录到 $DATA_DIR/:https://storage.googleapis.com/capsule_toronto/mnist_data.tar.gz从以下网址下载并提取MNIST模型checkpoint到$CKPT_DIR:https://storage.googleapis.com/capsule_toronto/mnist_checkpoints.tar.gz

\

快速CIFAR10 ensemble测试结果:
 
从以下网址下载并提取cifar10二进制版本到 $DATA_DIR/:https://www.cs.toronto.edu/~kriz/cifar.html从以下网址下载并提取cifar10模型checkpoint到 $CKPT_DIR:https://storage.googleapis.com/capsule_toronto/cifar_checkpoints.tar.gz将提取的二进制文件的目录作为 data_dir 传递给($ DATA_DIR)

\

Sample CIFAR10训练命令:

\
 
Sample MNIST的完整训练命令:
 
在 training-validation pass 训练,validate=true 也是如此要在一个以上的GPU pass训练,num_gpus = NUM_GPUS

\
 
在上述模型的训练期间对validation进行测试:

\
 
训练过程中连续运行的注意事项
 
在训练中也要注意pass --validate=true
 
总共需要2个GPU:一个用于训练,一个用于验证
 
如果在同一台机器上进行训练和验证,则需要限制每个任务的RAM消耗,因为TensorFlow会填满第一个任务的所有RAM,从而导致第二个任务失败。

\
 
要测试/训练 MultiMNIST pass --num_targets = 2 以及 --data_dir = $DATA_DIR/multitest_6shifted_mnist.tfrecords@10。 生成 multiMNIST / MNIST 记录的代码位于input_data/mnist/mnist_shift.py。
 
生成multiMNIST测试的示例代码:

\
 
为 affNIST 的泛化能力建立 expanded_mnist: --shift = 6 --pad = 6。
 
读取affNIST的代码将遵循。
 
代码由Sara Sabour(sarasra, sasabour@google.com)维护。
 

上一篇:卷积神经网络入门这一篇就够了
下一篇:通过对抗性图像黑入大脑

本周栏目热点

助力卷积神经网络时空特征学习 史上最大行人重识别视频数据集被提出

[2018-04-20]  本文提出了一个大型的、长序列的、用于行人重识别的视频数据集,简称LVreID。与现有的同类数据集相比,该数据集具有以下特点:1)长序列:平均每段视频序列长为200帧,包含丰......

神经网络是怎样理解图片的?

[2018-04-21]  我们总是听说人工智能在图像识别上超越了人类,刷脸也逐渐成了生活中司空见惯的事儿。这些图像识别技术背后,通常是深度神经网络。...

通过对抗性图像黑入大脑

[2018-04-19]  在上面的图片中,左边是一张猫的照片。在右边,你能分辨出它是同一只猫的图片,还是一张看起来相似的狗的图片?这两张图片之间的区别在于, ...

卷积神经网络入门这一篇就够了

[2018-04-20]  CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下......

神经网络结构在命名实体识别(NER)中的应用

[2018-04-20]  近年来,基于神经网络的深度学习方法在自然语言处理领域已经取得了不少进展。作为NLP领域的基础任务—命名实体识别(Named Entity Recognition,NER)也不例外,神经网络结......

精选推荐

揭秘达芬奇手术机器人
揭秘达芬奇手术机器人

[2018-04-19]  达芬奇手术系统是由美国Intuitive Surgical公司制造的机器人手术系统。美国食品和药物管理局(FDA)于2000年通过该标准,旨在利用微创手段 ...

通过对抗性图像黑入大脑
通过对抗性图像黑入大脑

[2018-03-02]  在上面的图片中,左边是一张猫的照片。在右边,你能分辨出它是同一只猫的图片,还是一张看起来相似的狗的图片?这两张图片之间的区别在于, ...

德国研发出一种能在你体内工作的微型机器人

[2018-01-26]  纽约时报的报道,德国的研究人员已经开发出一种长约七分之一英寸的机器人,首先看起来不过是一小块橡皮条。然后它开始移动。机器人走路,跳跃,爬行,滚动和游泳。它甚至爬出......

机器人灵巧手将成为智能机器人的下一个重大突破
机器人灵巧手将成为智能机器人的下一个重大突破

[2018-01-25]  计算机科学教授兼东北地区助手机器人实验室负责人罗伯特·普拉特(Robert Platt)说:“机器人手操作是下一步要解决的问题。想象一下,一个机器人可以在现实世界中用手去做事......

CES 2018:英特尔推出49量子位芯片争夺量子霸权
CES 2018:英特尔推出49量子位芯片争夺量子霸权

[2018-01-10]  在与Google、IBM的一场关于建立量子计算系统的马拉松比赛中,英特尔通过了一个关键的里程碑。近日,这个科技巨头已经推出了一个49个量子位 ...

从AI中窥探人性
从AI中窥探人性

[2018-01-03]  人们对人造智能的恐惧早已成为科幻书籍和电影的极好题材。但现在,一些同样的担忧开始影响关于现实世界AI技术的政策讨论。如果这样的担忧演变成为一种技术恐慌...

2017年:AI渗入云端
2017年:AI渗入云端

[2017-12-29]  云中的人工智能不仅仅是科技巨头的权力游戏,它也可能是人工智能领域的下一个飞跃。加利福尼亚州的Rigetti Computing公司刚刚使用其原型量子芯片之一在其云平台上运行机器学......

人工智能民主化能否实现取决于科技巨头
人工智能民主化能否实现取决于科技巨头

[2017-12-29]  我们经常听到像谷歌和微软这样的公司说他们希望人工智能民主化。这是一个很好的词,民主化。 但这些公司如何界定“民主化”还不清楚,像AI本身一样,它似乎有点炒作的味道...

美国Natilus公司试飞水上无人货机 设计简单成本降低
美国Natilus公司试飞水上无人货机 设计简单成本降低

[2017-12-28]  Natilus创业公司成立于2014年,其梦想是建造大型无人机,以半价提供比船舶快得多国际货运。在十二月份,Natilus计划在旧金山湾测试一个9米翼展的小型原型无人机的水上滑行能力......

助力卷积神经网络时空特征学习 史上最大行人重识别视频数据集被提出
助力卷积神经网络时空特征学习 史上最大行人重识别视频数据集被提出

[2017-12-25]  本文提出了一个大型的、长序列的、用于行人重识别的视频数据集,简称LVreID。与现有的同类数据集相比,该数据集具有以下特点:1)长序列:平均每段视频序列长为200帧,包含丰......