capsule -> a group of neurons whose activity vector represents something.
length of the activity vector represent the probability and orientation represent the instantiation parameters
可以把capsule里的特征理解成特征空间中的特征向量,长度代表显著性,方向代表各种特征
Active capsules at one level make predictions, via transformation matrices, for the instantiation parameters of higher-level capsules.
可以理解W权重,是从一个低维特征空间到高维特征空间的变换矩阵,通过这个矩阵,低层的特征可以对下一层的特征进行预测。
同时结合上一层低维特征的预测结果进行聚类,从而可以引起高维特征的激活。
Introduction
capsule 的出发点还是基于人类的视觉系统,通常而言,人在看到一幅图像的时候是有着类似于 attention 机制的存在的,即只对部分区域仔细地观察,而对其他区域相对简略的获取信息。 但CNN明显不满足这样的机制,CNN 本身 权值共享,局部连接和多卷积核 的操作,就是将一张图像所有的区域一视同仁,将重要的特征提取方式对所有区域进行操作。这样难免会有冗余,获取了很多不需要的信息,同时在进行 max-pooling 的时候丢失了很多细节。
而 capsule 则是认为,人类在对图像进行认知的时候,实际上是在构建一个类似于解析树一样的认知结构,capsule通过特征向量的激活与否来表示某一特征是否存在在图像之中,激活的特征会在下一层capsule中找到其父节点。对于低层节点,特征向量中包含了很多局部信息,随着层次的加深,局部信息会被压缩,提取,所以高层节点更多的是一些全局信息,同时在信息传递的过程中,减少了细节信息的损失。
capsule 再进行信息传递的过程中,采用了路由机制,即由低层特征通过权重矩阵,对下一层激活的特征进行预测,利用向量的内积对相似性进行衡量,如果预测的特征向量和下一层实际的输出向量内积较大,即两个向量较为相似,从而增加连接的配对系数。
How the vector inputs and outputs of a capsule are computed
实现capsule的方式多种多样,论文里提出的一个实现的实例,实际上本文主要还是提出了一个实现框架。
首先我们希望 the length of the output vector of a capsule to represent the probability that the entity represented by the capsule is present in the current input. 所以有了"squashing" function: $$ v_j = \frac{||s_j||^2}{1+||s_j||^2}\frac{s_j}{||s_j||} $$ 简单分析一下这个公式,乘积的后一项表示按模长归一化,前一项则是对模长进行了一定的压缩,模长越小,越接近0,模长越长,越接近1。$s_j$是capsule的输入,$v_j$是输出。
考虑不同层 capsule 间信息的传递,首先输入 $s_j$是由预测向量$\hat{u}{j|i}$加权得到的,即 $$ s_j = \sum_ic{ij}\hat{u}{j|i} $$ 而预测向量是由前一层向量的输出向量乘以加权矩阵得到的,即 $$ \hat{u}{j|i} = W_{ij}u_i $$ 注意到$W_{ij}$实际上依然是个矩阵,而$c_{ij}$则是由动态路由算法求得的匹配系数,是个数。结合上面两个式子,可以看出 $$ s_j = \sum_i c_{ij}W_{ij}u_i $$ 现在考虑一下 $c_{ij}$ 的求得,$c_{ij}$和$b_{ij}$有关,$b_{ij}$可以理解为,i和j的匹配程度,用对数先验概率作为初始, $$ c_{ij}=\frac{exp(b_{ij})}{\sum_kexp{(b_{ik})}} $$ The agreement is simply the scalar product $a_{ij}=v_j\hat{u}{j|i}$ . This agreement is treated as if it was a log likelihood and is added to the initial logit, $b{ij}$ before computing the new values for all the coupling coefficients linking capsule i to higher level capsules.
也有说动态路由这里,实际上是在做聚类,论文里用的是k-means,其实感觉是有点像,推导也是很类似,但是还是不是很理解。目前的理解是,capsule路由实际上是在做特征向量的聚类,不妨设二层的capsule网络,前一层有n个神经元,后一层有k个神经元,实际上是在将前n个神经元提取的特征向量聚成k类,所采用的距离度量方式是向量点积。
这样capsule里面的主要参数有两个,W和c,W是根据网络训练出来的,由低维特征空间向高维特征空间的一个过渡矩阵,而c则是由路由算法,对特征之间关系的描述与刻画。
来源:oschina
链接:https://my.oschina.net/u/4409656/blog/4054687