胶囊网络升级新版本,推特2000+赞,图灵奖得主Hinton都说好

胶囊网络新进展

鱼羊 发自 凹非寺

量子位 报道 | 公众号 QbitAI

胶囊网络曾被认为是下一代深度学习的基石。

图灵奖得主Geoffrey Hinton在2017年提出了这种全新的深度学习方法,以期挑战CNN“天命之子”的地位。

卷积神经网络CNN固然好用,可是在池化层中会损失空间信息,所以面对下面这种有些错位的人脸,CNN就会陷入迷茫。

胶囊网络就不同了,它计算物体的存在概率,并用向量的模来表征,向量方向则表示了特征姿态信息。因为胶囊的输出是一个向量,详细的姿态信息会被整个网络保存下来。

这样一来,无需复杂的数据扩增,胶囊网络也能实现上看下看左看右看不同方位识别

但两年过去之后,对于这个方法的研究似乎仍处于起步阶段,CNN依然笑傲深度学习。

这是不是有点雷声大雨点小了?

反正创始人本身应该是有信心的。最近,Hinton亲自指导了一项研究,担任论文的通讯作者,还下场点赞,称其为“更好的胶囊版本”。

连创始人都点赞的胶囊网络

在对象检测这个任务上,当前的AI已经展现出了超强的性能,但有个问题,想要训练出一个靠谱的AI,先得投喂它大量的数据。

这跟幼童的学习过程形成了鲜明的对比,不需要太多指导,孩子们也能学会识别和定位物体。

研究人员认为,自我监督和归纳偏差在更高效的学习中扮演了重要的角色。

于是,无监督胶囊网络诞生了。

不同于单个神经元,胶囊是一组打包好的人造神经元,能够跟踪对象各个部分之间的关系。

这个名为SCAE(Stacked Capsule Autoencoder)的网络主要由三个部分组成:集群胶囊自动编码器(CCAE),零件胶囊自动编码器(PCAE)和对象胶囊自动编码器(OCAE)。

集群胶囊用二维点表示零件,并且把它们的坐标作为系统的输入。

零件胶囊(PCAE)先将输入对象整体划分成一个个零件及其姿势;然后,通过仿射变换学习模板,使用姿势来构建新的输入。

接着,对象胶囊(OCAE)会试着由姿势推断出物体,从而发现潜在的结构。

胶囊网络的窘境

像CNN这样的神经网络需要依靠庞大的数据库学习,并且需要很长时间才能认识到不同角度看到的对象,其实是同一个物体。

而胶囊网络的思路是,场景通常包含许多复杂的对象,这些对象又由更简单的部分组成,所以其实无需构建全局等同于仿射变换的模型。

根据定义,部件的外观和形状比完整物体的变化更小,因此,它们应该更容易被学习。只要了解零件是如何组合在一起形成不同物体的,就可以从零件及其姿势中识别出对象本身。

由于物体的姿势会随着观察者位置(坐标系)的改变而改变,因此能够正确识别零件姿势的检测器会产生注视点等效的零件表示。对象 – 零件的关系不依赖于特定的位置,因此它们又是注视点不变的。这两个属性结合在一起,就产生了注视点等效的对象表示。

之前版本的胶囊网络通过迭代地改进对象的零件分配(也称为路由)来解决这个问题。但问题是这样做在计算和存储方面效率很低,并且无法扩展到更大的图像。这也就造成了胶囊网络训练速度比CNN慢得多,在CIFAR-10、ImageNet等数据集上准确率也不如CNN。

那么这个更好的胶囊网络,有什么突破吗?

SCAE

根据胶囊网络的原理,为了实现分类,需要构建生成模型(解码器)和相应的推理网络(编码器)。

生成比较简单,因为任意对象都可以产生任意多个部分。因为解码器在设计中是注视点等变的,所以编码器必须至少能近似地学习注视点等变的表示。

SCAE定义了一种新的表示学习方法,其中任意编码器都能通过推理局部零件和它们的姿势来学习注视点等变表示,并识别出这些零件属于哪一种物体。

胶囊的定义:描述抽象实体的模型的特殊部分。

在这个新版本的无监督胶囊网络中,有四个重要的组成部分:

  • PCAE编码器:自下而上注意力机制的CNN
  • OCAE编码器:Set Transformer
  • PCAE解码器
  • OCAE解码器

推断零件及姿势

对于M个零件,PCAE需要 M ×(6 + 1 )个预测参数。也就是说,对于每一个零件,都需要6个仿射变换参数,以及该零件存在的概率。

用 1 × 1 的卷积将CNN的输出投影到 M ×(6 + 1 + 1)个特征图上——这里额外的特征图将作为注意力Mask,通过softmax(归一化指数函数)在空间上对其进行标准化,与其余7个特征图相乘,并在空间位置上独立地对每个维度求和。这类似于全局平均池化,但允许模型专注于特定位置,称作基于注意力的池化。

PCAE编码器将学习推断不同零件胶囊的姿势和存在,而解码器会为每个零件绘制图像模板,像是这样:

对应于当前零件的模板,使用该零件的姿势进行仿射变换,并且变换模板的像素会被用来创建每一个图像像素的单独混合模型。

由零件,及整体

实现判断的是OCAE。

此前的胶囊网络采用基于EM算法(Hinton提出)的推理程序来投票,判断零件归属于哪个对象。这样,每个零件最开始会被投给不同的对象,但最终,投票会收敛到少数几个对象身上。

SCAE尝试直接根据零件的姿势和存在概率预测对象胶囊的activations。

使用带有K个输出的Set Transformer编码零件的activations。零件胶囊的activations描述零件本身而非像素,其在图像中可以处于任意位置,并且没有顺序意义。因此,集输入神经网络比起MLPs(多层感知机)来就成了更好的选择。

Set Transformer的每个输出都被喂给一个单独的MLP,MLP会输出对应对象胶囊的所有activations。

此外,研究人员还采用了一些应用于对象存在概率的稀疏损失。根据消融实验的结果,这一点是很有必要的:

投喂给OCAE进行训练的,是来自对象胶囊的高斯混合预测下的零件胶囊activations最大化后的可能性,受到稀疏性约束。

成绩

光说不练假把式,研究团队用未标记数据进行了训练,在无监督分类SVHN上收获了state-of-the-art的成绩,55%;在MNIST上则收获了接近于state-of-the-art的成绩,98.5%。

SCAE用对象来预测部件,因此在推理时省略了迭代路由。并且,SCAE是唯一一种在无监督对象分类中取得了具有竞争力的结果,而不依赖于互信息(MI)的方法。也就是说,它不再需要复杂的数据扩增。

不过,在目前的版本中,图像中还不允许多次出现相同类型的部件。并且在大型数据集CIFAR-10上的表现还是不给力。

作者自己也承认,这个胶囊网络还不足以模拟复杂的现实世界图像。

但正如Hinton本人所说,他只担心为基础理论挑毛病的人不够多。只要有诞生更好的方法的可能性,就应该遵循直觉继续研究。

论文团队

论文一作是来自牛津大学的博士生Adam Kosiorek,现在在DeepMind实习。

这篇论文是小哥在谷歌大脑实习期间完成的,合作单位包括谷歌大脑和DeepMind。

传送门

论文地址:https://arxiv.org/abs/1906.06818

解读博客:http://akosiorek.github.io/ml/2019/06/23/stacked_capsule_autoencoders.html

—  —

版权所有,未经授权不得以任何形式转载及使用,违者必究。