2017 年,Geoffrey Hinton 在论文《Dynamic Routing Between Capsules》中提出 CapsNet 引起了极大的关注,同时也提供了一个全新的研究的方向。今日,CapsNet 的作者 Sara Sabour、Hinton 老爷子联合牛津大学的研究者提出了胶囊网络的改进版本——堆栈式胶囊自编码器。这种胶囊自编码器可以无监督地学习图像中的特征,并在无监督分类任务取得最佳或接近最佳的表现。这也是胶囊网络第一次在无监督领域取得新的突破。

一个目标可以被看做是一组相互关联的部件按照几何学形式组合的结果。利用这种几何关系去重建目标的系统应当对视点的变化具有鲁棒性,因为其本质的几何关系不应随着观察视角的变化而发生改变。

本文中,研究人员描述了一种无监督的胶囊网络。其中,观察组成目标所有部件的神经编码器被用来推断目标胶囊的存在和姿态。编码器通过解码器的反向传播方法训练。

训练中,解码器使用姿态预测来预测每个已发现部件的姿态。这些部件是直接从图像中被发现的,同样也是使用神经编码器,该编码器推断这些部件及它们的仿射变换。

而对应的解码器将每个图像像素建模为由仿射变换部件做出的预测混合。研究人员从目标和目标部件的胶囊中学习无标签数据,然后将这些目标胶囊的存在向量进行聚类。

得知这些聚类的名称时,研究人员在 SVHN 和 MNIST 数据集上获得了当前最佳的无监督分类结果,准确率分别为 55% 和 98.5%。

论文:Stacked Capsule Autoencoders

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

本文提出了堆栈式胶囊自编码器(SCAE),该编码器包含两个阶段。在第一阶段,部件胶囊自编码器(PCAE)将图像分割为组成部分,推断其姿态,并将每个图像像素重建为变换组件模板的像素混合。

在第二阶段,目标胶囊自编码器(OCAE)尝试将发现的部件及其姿态安排在一个更小的目标集合中。这个目标集合对每个部件进行预测,从而解释每个部件的姿态。通过将它们的姿态——目标-观察者关系(OV)和相关的目标-部件关系(OP)相乘,每个目标胶囊都会贡献这些混合的一部分。

堆栈式胶囊自编码器的工作原理

堆栈式胶囊自编码器在使用未标注数据训练时捕捉所有目标和它们部件之间的空间关系。目标胶囊存在概率的向量倾向于组成紧密的聚类。

当给每个聚类一个分类时,其可以在无监督分类任务上达到当前最佳效果,如 SVHN 数据集上的 55% 和 MNIST 数据集上的 98.5%。以上结果还可以分别提升到 67% 和 99%,而且只需学习不到 300 个参数。

模型架构

堆栈式胶囊自编码器的结构

堆栈式胶囊自编码器的两个组成部分为:部件胶囊自编码器(PCAE)和目标胶囊自编码器(OCAE)。在下文中,论文首先介绍了集群自编码器(CCAE),通过一系列数学公式说明自编码器如何分解图像中的部件的过程,然后由此引出堆栈式胶囊自编码器的两个组成部分。

集群自编码器

图 2:使用集群自编码器对不同形状的点进行聚类的示意图。

论文首先介绍了集群自编码器,通过这种结构的数学原理,引出堆栈式胶囊自编码器的结构。令 {x_m | m = 1, . . . , M } 为一组二维的输入点,每个点属于一个集群(见图2)。首先使用Set Transformer将所有的输入点(相当于部件胶囊)编码进k个目标胶囊中,Set Transformer是一种基于注意力机制的、有置换不变性的编码器h^cap (Lee et al., 2019) 。

一个目标胶囊 k 包括一个胶囊特征向量 c_k(其存在概率 a_k ∈ [0, 1])和一个 3 × 3 的目标-观察者(OV)关系矩阵。关系矩阵代表着目标(集群)和观察者之间关系的仿射变换。

需要注意的是,每个目标胶囊每次只能代表一个目标。每个目标胶囊都使用一个独立的多层感知机 h_k^part 从胶囊特征向量 c_k 中预测 N ≤ M 个候选部件。

每个候选由条件概率 a_k,n ∈ [0, 1] (当其存在),一个关联标量的标准差λ_k,n,以及一个 3 × 3 的目标-部件(OP)关系矩阵组成。这些代表着目标胶囊和候选部件的仿射变换。

候选预测 μ_k,n 根据目标胶囊 OV 和候选 OP 矩阵相乘得来。然后,研究人员将每个输入部件建模为高斯混合模型,其中μ_k,n 和 λ_k,n 是各向同性组件的中心和标准差。其标准公式如下:

集群胶囊编码器的公式。论文通过举出集群胶囊编码器的例子,用于说明目标胶囊编码器和它的区别。

部件胶囊自编码器

如果要将图像分解为组成部件的集合关系,就需要首先推断图像是由哪些部件组成的,同时也需要了解观察者和这些部件之间的关系(称之为他们的姿态)。

在本研究中,每个部件胶囊都有六个维度的自由姿态,一个存在变量,和一个独特的特征。研究人员把部件发现问题视为自编码:编码器学习去推断不同部件胶囊的姿态和存在,而解码器学习每个部件的图像模板。

模板对应的部件是使用其姿态的仿射变换,而这些变换过的模板的像素点被用来为每个图像像素创建单独的混合模型。在部件胶囊自编码器后是目标胶囊自编码器。

令 y ∈ [0, 1]^h×w×c 为图像。研究人员将部件胶囊的数量限定在 M 之内。对于每个部件胶囊,他们使用一个编码器去推断姿态 x_m ∈ R^6,存在概率 d_m ∈ [0, 1],以及特殊特征 z_m ∈ R^c_z。

虽然后者不会直接参与图像重建,但是会将对应部件的特殊信息提供给目标胶囊自编码器。他们会通过目标胶囊自编码器使用反向传播微分的方式训练。

当前条件下,不允许图像中同一种类型的部件多次出现,从而导致部件胶囊不会在空间中被复制(尽管它们可能会)。然而,确实需要分辨出所有出现在图像中的部件,因此编码器会采用带有从下到上(bottom-up)注意力机制的卷积神经网络。

对于每个胶囊 k,其预测一个特征矩阵 e^k,特征矩阵是 6(姿态)+1(存在)+c_z(特殊特征)的胶囊参数,其空间维度是 h_e × w_e,以及一个单通道注意力层 a_k。

最终,该胶囊的参数计算公式是。softmax 是对空间维度上的计算。这种计算有点类似于全局平均池化,但是允许一些空间点比其他点对最终结果的权重影响更大。研究人员将其称为注意力池化(attention-based pooling)。

图像的像素点被建模为独立的高斯混合模型。对于每个像素点,研究人员采用其对应的变换模板,并将其视为有着恒定方差的各向同性高斯组件的中心点。其混合概率对部件胶囊的存在概率和在该位置的色值函数 (c 指的是图像的通道数)都是成比例的。

部件胶囊自编码器的公式推导过程

目标胶囊自编码器(OCAE)

下一步是从已经发现的部件中寻找目标。因此,需要使用相连的姿态 x_m,特殊特征 z_m,以及平滑化的模板 T_m(通过将部件胶囊的特征进行转化)。这些将会成为目标胶囊自编码器的输入,这里和集群自编码器有一些不同。

首先,研究人员将部件胶囊的存在概率 d_m 输入目标胶囊自编码器——由于平衡注意力机制,避免将缺失点考虑在内。

其次,d_m 同时用于衡量部件胶囊的对数似然 cf。另外,除了特殊特征外,不对其他目标胶囊自编码器的输入计算梯度,以便提升训练的稳定性,并避免隐变量崩溃。

最后,通过部件胶囊自编码器发现的部件有着独立的特征(模板和特殊特征)。因此,每个部件姿态都可以被解释为是目标胶囊预测的独立混合——即每个目标胶囊都做出 M 个候选预测 V_k,1:M,或者对每个部件做出一个候选预测。

最终,部件胶囊的似然公式是:

图 3:从MNIST(左)和SVHN(中)和CIFAR 10(右)学习到的模板。

图 4:展示了胶囊自编码器对MNIST数据集的重建过程。a)MNIST图像;b)红色的部件胶囊和绿色的目标胶囊在重建中的组合;c)实际参与重建的被激活胶囊;d)根据图像捕捉到的信息;e)部件的仿射变换,用于展示其重建图像的过程。

模型性能评估

堆栈式胶囊自编码器使用仿射变换,这样可以使编码器的输入由一组较小的变换目标或部件解释。

无监督分类评价

研究人员在 MNIST、SVHN 和 CIFAR 10 数据集上进行了测试,并将目标胶囊的存在打上类别标签。他们使用了多种评价方法。

在部件胶囊编码器上,研究人员在 MNIST 数据集上使用了 24 个单通道,11 × 11 的模板,在 SVHN 和 CIFAR 10 上则分别使用了 32 个 3 通道,14 × 14 的模板。

对于后两个数据集的图像,研究人员进行了 Sobel 过滤,作为重建的目标。对于目标胶囊编码器,研究则分别使用了 24、32 和 64 个目标胶囊。

表 1:运行五次后取平均的无监督分类结果和标准差。

欢迎关注磐创博客资源汇总站:

http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:

http://pytorch.panchuang.net/

Hinton老爷子CapsNet再升级,结合无监督,接近当前最佳效果的更多相关文章

  1. 【转】有监督训练 & 无监督训练

    原文链接:http://m.blog.csdn.net/article/details?id=49591213 1. 前言 在学习深度学习的过程中,主要参考了四份资料: 台湾大学的机器学习技法公开课: ...

  2. 转:Deep learning系列(十五)有监督和无监督训练

    http://m.blog.csdn.net/article/details?id=49591213 1. 前言 在学习深度学习的过程中,主要参考了四份资料: 台湾大学的机器学习技法公开课: Andr ...

  3. 学习笔记CB008:词义消歧、有监督、无监督、语义角色标注、信息检索、TF-IDF、隐含语义索引模型

    词义消歧,句子.篇章语义理解基础,必须解决.语言都有大量多种含义词汇.词义消歧,可通过机器学习方法解决.词义消歧有监督机器学习分类算法,判断词义所属分类.词义消歧无监督机器学习聚类算法,把词义聚成多类 ...

  4. kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归

    使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...

  5. 将句子表示为向量(上):无监督句子表示学习(sentence embedding)

    1. 引言 word embedding技术如word2vec,glove等已经广泛应用于NLP,极大地推动了NLP的发展.既然词可以embedding,句子也应该可以(其实,万物皆可embeddin ...

  6. UFLDL深度学习笔记 (三)无监督特征学习

    UFLDL深度学习笔记 (三)无监督特征学习 1. 主题思路 "UFLDL 无监督特征学习"本节全称为自我学习与无监督特征学习,和前一节softmax回归很类似,所以本篇笔记会比较 ...

  7. 1(1).有监督 VS 无监督

    对比一 : 有标签 vs 无标签 有监督机器学习又被称为“有老师的学习”,所谓的老师就是标签.有监督的过程为先通过已知的训练样本(如已知输入和对应的输出)来训练,从而得到一个最优模型,再将这个模型应用 ...

  8. NGK福利再升级,1万枚VAST限时免费送

    NGK在推出持有算力获得SPC空投活动后,福利再升级,于美国加州时间2021年2月8日下午4点推出新人福利活动,注册NGK成为新会员,即可获得0.2枚VAST奖励. VAST免费福利送活动仅送出1万枚 ...

  9. 白*衡(Color Constancy,无监督AWB):CVPR2019论文解析

    白*衡(Color Constancy,无监督AWB):CVPR2019论文解析 Quasi-Unsupervised Color Constancy 论文链接: http://openaccess. ...

随机推荐

  1. 编写一个可复用的SpringBoot应用运维脚本

    前提 作为Java开发者,很多场景下会使用SpringBoot开发Web应用,目前微服务主流SpringCloud全家桶也是基于SpringBoot搭建的.SpringBoot应用部署到服务器上,需要 ...

  2. 性能测试之Mysql数据库调优

    一.前言 性能调优前提:无监控不调优,对于mysql性能的监控前几天有文章提到过,有兴趣的朋友可以去看一下 二.Mysql性能指标及问题分析和定位 1.我们在监控图表中关注的性能指标大概有这么几个:C ...

  3. spring jpa ManyToMany 理解和使用

    1.java和jpa 中所有的关系都是单向的.这个关系数据库不同,关系数据库,通过外键定义并查询,使得反向查询总是存在的. 2.JPA还定义了一个OneToMany关系,它与ManyToMany关系类 ...

  4. MVC04

    1. 从页面到action 讲述controller与View之间的具体运作关系 在上次添加的名为Movie的Model内添加 下面我们尝试为该model内的属性添加attribute 具体修改如下: ...

  5. 2017、2018面试分享(js面试题记录)记得点赞分享哦;让更多的人看到~~

    2017面试分享(js面试题记录) 1. 最简单的一道题 '11' * 2 'a8' * 3 var a = 2, b = 3; var c = a+++b; // c = 5 2. 一道this的问 ...

  6. 第一篇:解析Linux是什么?能干什么?它的应用领域!

    不得不说的前言(不看完睡觉会尿床):饿货们~!你说你们上学都学了点啥?这不懂那也不懂,快毕业了啥也不会.专业课程不学好毕业了也找不到好工作.爸妈给你养大,投资了多少钱.你毕业后随便找了个什么鸡毛工作开 ...

  7. flask 分页数据显示

    填充一些数据在表中 @blue.route('/pages/') def pages(): # 默认进入这个视图函数 第一页并只显示5条数据 page = request.args.get('page ...

  8. C++ 别踩白块小游戏练习

    #include <iostream> #include <stdio.h> #include <stdlib.h> #include <easyx.h> ...

  9. 初学react

    React特点: 声明式设计:建议使用JSX来描述用户界面;构建组件:单向响应的数据流: JSX:JSX是一种JAVASCRIPT的语法扩展,元素是构成react的最小单位,JSX就是用来声明REAC ...

  10. ajax4

    用jquery实现json jquery.ajax([settings]) type类型使用“POST”或者“GET”,默认使用get URL:发送请求地址 data:是一个对象,连同请求发送到服务器 ...