mind召回的核心点有三个: 1、胶囊网络下的动态路由 2、label aware attention 3、online serving 本文主要介绍下胶囊网络的原理 首先是如何理解胶囊网络,胶囊网络是Dynamic Routing Between Capsules这篇paper在2017年由Hinton提出的(https://arxiv.org/pdf/1710.09829.pdf),起初是为了解决图像识别中图像变换导致模型无法识别原图,胶囊网络可以很好的描述向量的长度和方向来表达实体隐含的信息,即能更好的表达实体的层次信息,通过动态路由的方式,较底层的特征将只被传递到与匹配的高层。 其实就是鼻子、眼睛最终表示脸,而手臂、脚会最终表示为四肢,鼻子、眼睛和手臂、脚是比较低阶的特征,而脸和四肢属于高阶特征,鼻子、眼睛在动态路由后会聚类成脸的特征,而手臂、脚会聚类成四肢的特征。 胶囊的输出通常为某个特征的概率及特性,这个概率和特性通常被叫做实例化参数。 而实例化参数代表着 网络的等变性 ,它使得网络能够有效的识别姿势,纹理和变化。比如,如果用 CNN 模型去识别一张脸,模型会将一张眼睛和鼻子位置颠倒的图片识别为人脸,但是, 胶囊网络的等变性会保证特征图中位置的信息 ,因此,具有等变性的胶囊网络会在识别人脸时不仅考虑眼睛鼻子的存在,还会考虑它们的位置。 胶囊网络同时对 空间信息 和 物体存在概率 进行编码,编码在activity vector中。 vector的模表示特征存在的概率;vector的方向表示特征的实例化参数;移动特征会改变vector,不影响特征存在概率。讲人话就是, 向量的方向表示某一个特征,而向量的长度则表示这个特征存在的概率。 可以说胶囊网络其实是对标量扩展到向量的扩展,因为标量只是一个特定的x,而向量是一组x,所以可以表达更为立体和具象的特征信息,其实capsule就是想取代neuron,因为capsule能更立体和具象,比如每个neuron只能代表一个工作,比如在某图像识别中,它只能代表某一个区域或者某一个特征,但是capsule能够代表一个特性,比如能够通过向量的长度代表pattern存在的概率,通过向量的方向代表pattern具体的特性 ,区别如下: 胶囊网络的运算过程: 输入:v1,v2 输出:v W1、W2是可学习参数,Squash函数不会改变s的长度,意思就是向量存在的概率不会有变化,也就是说特征不会变化 这里的输入和输出都是向量 c1和c2是动态路由决定的数值,类似于pooling的操作,针对标量我们可以选择pooling(max pooling, average pooling),但是对于向量,我们可以采用一个更为具象的值,c1+c2的和是1 这里要注意的是几点,c1,c2,c3是经过T轮迭代计算而来,一般在实践过程中,T=3即可收敛,最终得到c1,c2,c3之后,就按照这个方式进行最终的胶囊网络计算。那胶囊网络是如何让鼻子、眼睛能够聚类成脸呢,这里比较重要的在于这个参数b的更新方式,b的更新方式 b = b + a * u,a是激活之后的向量,u是输入的向量,其实就是衡量激活之后的向量与输入向量之间的关系,如果他们越相似,比如接近1,那么b的更新就越大,换句话来讲,就是最终的向量会更倾向于b更大的那个u,这里面还经历过softmax的放大效应,会更加放大b的结果。 下面是T=3的时候,c的计算过程,c的值相当于做pooling,只不过这个pooling是通过动态路由学习到的。