Stacked Capsule Autoencoders
前言
由Hinton提出的Capsule的概念从最早的Transforming auto-encoders的首次提出,到Dynamic Routing Between Capsules的首次实现,再到EM routing的优化。如今的Stacked Capsule Autoencoders已经是第三个版本的CapsNet。2020年AAAI,Hinton也调侃这一版Capsule才是对的,把之前的都忘了吧。所以,接下来我们就一起看看这一版的Capsule究竟和之前的版本有何不同。(本科毕业论文笔记)
前置知识介绍
Attention机制
参考文章:
1. 关于attention机制在nlp中的应用总结
2. 深度学习中的注意力机制
3. 一步步解析Attention is All You Need!
4. CV领域的注意力机制综述
Attention机制最早是在计算机视觉领域中被提出的。它模拟了人类观察一张图片时的注意力并不是分散的,而是有焦点的。如图,图中有一个婴儿、一叠布料和一些文本。那么当人们从这张图片中获取信息时,我们会将注意力放在婴儿的脸上、文本的标题等我们想要获得信息的区域上而不会在意空白的区域。换而言之,注意力机制就是当我们从图片中获取信息时,不同信息的来源分别会对应不同的区域。这就是注意力机制的一个感性的认识。更抽象一点,特征提取过程中,不同的浅层特征(如图片中不同的像素、NLP句子模型中不同的词语、卷积神经网络中浅层特征图的不同位置等)对之后提取出来的深层特征的贡献是不同的,反过来深层的特征应该能关注浅层中重要的信息,同时忽略无关信息。
虽然最早Attention机制是在计算机视觉领域中提出的,但其大放异彩之初是在自然语言处理领域中处理机器翻译等问题中。此处我们也用NLP中引入Attention机制的方法进行简略阐述,因为Hinton在文中使用的Set Transformer技术也是从NLP的思路中出发的。
1. Encoder-Decoder框架
首先要说明的是Attention Model并不是附着在Encoder-Decoder框架下的,其更多的是一种通用的思想。利用Encoder-Decoder框架是为了更好的解释Capsule中Set Transformer的原理。而Attention模型又可分为Soft Attention模型、Hard Attention模型和Local Attention模型,原文中使用的是Soft Attention 模型的概念,所以以下介绍的是Soft Attention模型。
直观理解可以将其看作处理NLP中一个句子生成另一个句子,可以是不同语言(翻译问题)、不同长度(文段总结)等的通用模型。每一个 X X X是一个词向量,一句话就是这些 X X X按照顺序排列的结果,同样的 Y Y Y也是如此。那么一个句子可以表示成如下形式:
X = < x 1 , x 2 , x 3 . . . x n > Y = < y 1 , y 2 , y 3 . . . y m > X\;=\;<x_1, x_2, x_3...x_n>\\ Y\;=\;<y_1, y_2, y_3...y_m> X=<x1,x2,x3...xn>Y=<y1,y2,y3...ym>
那么Encoder和Decoder分别做的就是将输入 X X X编码成中间的语义编码 C C CDecoder就是将语义编码 C C C解码成 Y Y Y。但是传统的不加入Attention机制的Encoder-Decoder框架会有一个问题,就是作为分心模型的它的注意力是分散的,是不集中的。具体示意图如下:
我们可以看到我们将原本的句子 X X X编码到了语义编码 C C C中,而后通过解码器解码成了翻译后的句子 Y Y Y。这其中的数学形式可以表达成如下形式:
y 1 = D e c o d e r ( C ) y 2 = D e c o d e r ( C , y 1 ) y 3 = D e c o d e r ( C , y 1 , y 2 ) . . . . . . y_1\,=\,Decoder\,(C)\\ y_2\,=\,Decoder\,(C,y_1)\\ y_3\,=\,Decoder\,(C,y_1,y_2)\\...... y1=Decoder(C)y2=Decoder(C,y1)y3=Decoder(C,y1,y2)......
(注意到这里每次解码下一个单词也会用到之前已经解码出来的单词,这是因为NLP问题中的解码器往往都是RNN、LSTM等模型的原因)
但是事实上我们去理解这一个句子时,他应当更注重的是小明,书应当注重的是我。即在翻译的时候,每一个单词在解码时,使用的语义编码C应当是有所不同的,有所侧重的。而分心模型显然无法体现出这种不同的单词对于最终结果的贡献是不同的这一点。
没有引入注意力的模型或许在句子比较短的时候并没有太大的问题,但如果输入的句子比较长,此时所有的语义完全通过一个中间语义向量来表示,可想而知由于单词自身的消息被编码后丢失了很多细节,如当有一词多义的情况出现,它必定会需要周围的词语的信息才能在正确的语境中被翻译。但当句子过长,那么其中指代的情况便有可能丢失,这便是分心模型的缺陷。
根据以上分析可得,我们想要得到的就是解码出来的不同单词所接受的不同输入单词信息的贡献应当是不同。而Attention模型就是解决这个问题,所以增加了Attention模型之后的Encoder-Decoder框架应当是这样的。
其中每一个 C i C_i Ci的表达式如下: