Stacked Capsule Autoencoders论文阅读报告

1.摘要

因为物体都是由多个部分组成的,因此作者提出了一种新的物体表示方法:**unsupervised capsule autoencoder (SCAE)**它利用各部分之间的几何关系来推理物体。由两个阶段组成

  1. Part Capsule autoencoder 将图像分割成几个组成部分,推断它们的pose并通过适当排列仿射变换的部分模板来重建图像
  2. Object Capsule autoencoder将发现的组成部分及其pose组织成更小的对象集,这些对象尝试使用每个部位的单独预测混合来重建部位姿势

SCAE是通过在稀疏约束下最大化图像和部分的对数似然来训练的。
Stacked Capsule Autoencoders论文阅读报告_第1张图片

2.引言

CNN的定义方式决定了它具有平移不变性(如果一个局部特征在a位置有用,那么它在b位置也同样有用)于是人们想要探索其他不变性,但CNN对其他类型的变换视角变换处理的不好(因此CNN通过数据增强来让模型学习泛化到不同的视角上)

替代方案: 学习整个对象的自然坐标与其各个部分的自然坐标之间的变换

首先区分两个概念:invariant与equivariant

  • invariant:CNN得到的表征是不随着视角的变化而变化的
  • equivariant:随着视角的变化,表征也相应的变化

采用该方案的原因

  1. 计算机图形学就是利用对象到部分的坐标变换来以视点不变(viewpoint-invariant)的方式表示物体的几何形状
  2. 当人类的视角变化的时候,神经活动的模式也会跟着变化(并不是说识别的标签发生变化,而是感知活动的表征)

注:

  • 不随着视角变化而变化的是连接的权重,而这些权重编码了不同的东西之间的关系
  • CNN并不理解图像,它不会分辨什么是什么的一部分;它更关注每个位置的像素,对每个像素位置存在的东西建立了丰富的描述从而识别物体
  • object-part之间的关系是viewpoint-invariant(不随视角的变化而变化,并且很容易通过学习权重来编码。但物体相对于观察者的相对坐标是viewpoint-equivariant),很容易通过神经元活动来编码

3.hinton演讲

胶囊网络的出发点是在神经网络中建立更多的结构,然后希望这些新增的结构可以帮助模型更好的泛化。

在CNN中Yann只设计了很少,很简单的一些结构,就是让特征检测器可以在不同的平移变换之间复制。

那么我的下一个问题就是,我们能不能沿着这个方向继续往前走,能不能设计一些更加模块化的结构,这样就可以做解析树之类的。
胶囊会表征某个东西是否存在

一个胶囊包括了什么?

Stacked Capsule Autoencoders论文阅读报告_第2张图片

  • 胶囊中的逻辑单元(蓝色):用来表示当前图像中是否存在这个实体,不管实体是在这个胶囊覆盖的图像范围的任何地方,也就是说胶囊可以是卷积组成的
  • 胶囊中的矩阵(红色):用来表示这个胶囊表示的实体和观察者之间的空间关系,或者是这个实体内嵌的固有坐标系和观察者之间的空间关系,这样就知道了它朝什么方向、多大、在哪里等
  • 胶囊中的向量(黑色):包含其他属性——比如变形,如果要处理视频,也会包含速度、颜色等信息
  • 胶囊是用来捕捉固有几何特性的。一个表示了某个物体的胶囊可以根据自己的姿态预测出它的部件的姿态,而且物体自己和物体的部件之间的关系不会随着视角的变化而变化,这才是要以权重的方式存储在神经网络里的 然后就可以用这些不依赖视角的知识做对象识别 (p.s.网络权重中存储的应该一些不变的、高度概括的东西)

胶囊是如何工作的?

Stacked Capsule Autoencoders论文阅读报告_第3张图片

  • 使用贪婪的方式训练一个自动编码器——从像素到部件,从部件得到更大的部件(尝试把这些部件拼成熟悉的整体)
  • 下面的一层是已经从图像中得到的低层次的胶囊,已经知道了它们是否存在,它们的pose。
  • 在低层次胶囊的基础上学习更高级的胶囊(我们希望每个高层次的胶囊可以解释好几个底层的胶囊,也就是一个整体胶囊对应多个部件胶囊)
  • 每一个已经实例化的高层次胶囊都会为每个已经从图像中提取到的低层次的胶囊预测姿态(到底先 生成低层次还是高层次胶囊???)
  • 目标函数:让高层次胶囊通过混合模型 (这是啥??)产生的、已经在低层次胶囊上观察到的姿态的似然最大化。
  • 在这个混合模型下,对数似然是可以计算的,这些结构的训练方式是反向传播,学习如何让高层次的胶囊实例化
  • 当通过混合模型做反向传播的时候,其中并不能很好地解释数据的元素的后验概率几乎为 0。那么当计算反向传播的时候,反向传播并不会改动它们,因为它们没有什么作用;那些提供了最好的解释的元素得到最大的导数,就可以学习、优化

编码器

面对的问题:有一些部件,想从部件推理出整体,这是一个很难
处理的推理问题
处理方式:transformer,直接把所有的部件输入到transformer里让它们自己去碰,多层 Transformer 模型会决定如何处理一致性如何组织不同的部件

具体做法 把所有已经提取到的胶囊都找出来,把它们输入到多层 Transformer 套模型(Set Transformer)里,这个套模型会给每个低层次胶囊取向量描述,然后随着在模型里逐层上升,把其他胶囊的信息作为背景环境不断更新这个向量描述。当这些部件的描述更新得足够好了以后,就在最后一层里把它们转换成预测,预测整体物体应该在哪里。

你可能感兴趣的:(学习笔记)