本文已参加「新人创造礼」活动,一同敞开创造之路

Capsule network

《Dynamic Routing Between Capsules》

待解决

 为什么要规划动态路由算法,动态路由算法的实质看起来也便是反向传达以更新前后层胶囊间的耦合系数。

全体介绍

 Capsule network的灵感来自于人眼的视觉感官进程,人在观察图画的进程中并不是和卷积网络一样纵观大局从上至下层层堆叠递进,而是观察图中的要害点构建稀少树来进行。这一进程就类似于图画烘托的逆进程,为了画一幅人像咱们首要需求画出人的大体轮廓,而后在描绘出人体的重要部件如头、躯干、四肢,最后再再每个部件内部添加更为细节的零件如眼睛、嘴巴等等。文章想要构造的网络便是前述进程的逆序,首要判别出一堆部分零件是否存在,再判别这些部分零件能够组成的较大部件是否存在,最后给出由这些较大部件构成的全体是否存在。(在实际中,这并不是直接判别是否存在而是以概率给出)。每个部件实体都是稀少树的一个节点,节点值即为该部件存在的概率。

模型介绍

 如前所说,网络中的每个节点都指带着一个部件,文中将节点称之为胶囊,也就构成了胶囊网络。

squashing

每个胶囊的输入输出均为向量,向量的模值代表着部件存在的概率,向量的相位代表着部件的性质(即用来判别向量间的相似性、隶属性)。为了完成这一意图,咱们需求对胶囊的原始输出sjs_j进行非线性紧缩如下:

vj=∣∣sj∣∣21+∣∣sj∣∣2⋅sj∣∣sj∣∣\mathbf{v}_j=\frac{||\mathbf{s}_j||^2}{1+||\mathbf{s}_j||^2}\cdot \frac{\mathbf{s}_j}{||\mathbf{s}_j||}

其间∣∣sj∣∣21+∣∣sj∣∣2\frac{||\mathbf{s}_j||^2}{1+||\mathbf{s}_j||^2}将向量缩放到了0~1规模之内,原输出向量的模值越大,整流后输出的模值越挨近1,反之则越挨近0。而sj∣∣sj∣∣\frac{\mathbf{s}_j}{||\mathbf{s}_j||}则保留了原输出向量的相位,性质不变。

prediction vector

 一个大部件由许多的小部件组合而成,但这些小部件在组合进程中需求发生必定的改换以契合部件融合时的要求,一起不同的小部件关于其隶属的大部件的奉献程度不同,例如牙齿便是嘴部由较大奉献程度的部件。因此每个部件的输出应该由其子部件向量的加权改换得到:

sj=∑icijuj∣iuj∣i=Wi,jui\mathbf{s}_j=\sum_i c_{ij}\hat{\mathbf{u}}_{j|i}\\ \hat{\mathbf{u}}_{j|i}=\mathbf{W}_{i,j}\mathbf{u}_i

其间ui\mathbf{u}_i为前层胶囊得输出向量,Wi,j\mathbf{W}_{i,j}为前层某一胶囊i到该层某一胶囊j的改换矩阵uj∣i\hat{\mathbf{u}}_{j|i}为前层某一胶囊i对该层某一胶囊j的猜测向量prediction vector;cijc_{ij}为前层某一胶囊i对该层某一胶囊j的耦合稀少coupling cofficients。

coupling cofficients

 猜测向量的核算触及到了两个参数:改换矩阵和耦合系数,前者经过网络的反向传达即可得到,后者在本文中则是经过动态路由算法得到。首要假定耦合某个耦合系数是由一暂时参数bijb_{ij}经过以下公式核算所得: ci,j=exp(bij)∑jexp(bij)c_{i,j}=\frac{exp(b_{ij})}{\sum_j exp(b_{ij})} 作者将暂时参数bijb_{ij}记作某一胶囊i对该层某一胶囊j的对数先验概率,它在动态路由算法中经过屡次循环迭代更新,动态路由算法流程图如下:

论文解析:Capsule Network

假定前层有M1M_1个胶囊,每个胶囊的输出向量维度为M2M_2,当时层有N1N_1个胶囊,每个胶囊的输出向量维度为N2N_2 则:

  1. 对前层每一个胶囊核算其对下一层每个胶囊的改换矩阵W∈RM2∗N2W\in R^{M_2*N_2},构成一全体改换矩阵W′∈RM1∗N1∗M2∗N2W’\in R^{M_1*N_1*M_2*N_2},矩阵相乘得到猜测矩阵U∈RM1∗N1∗N2∗1U\in R^{M_1*N_1*N_2*1};
  2. 初始化对数先验概率矩阵B∈RM1∗N1=0B\in R^{M_1*N_1}=\mathbf{0};
  3. 对前层的每一个胶囊,核算它对当时层每个胶囊的耦合系数,构成一全体耦合矩阵C∈RM1∗N1=softmax(B,dim=1)C\in R^{M_1*N_1}=softmax(B, dim=1),列方向上和为1保证前层某个胶囊对当时层的影响被当时层一切胶囊瓜分;
  4. 对当时层的每一个胶囊,核算其初始输出sj\mathbf{s}_j,构成全体原始输出S∈RN1∗N2S\in R^{N_1*N_2};
  5. 对全体原始输出矩阵进行紧缩得胶囊的输出V=squash(S,dim=1)V=squash(S,dim=1);
  6. 对对数先验概率矩阵的值进行更新,bij=bij+uj∣i⋅vjb_{ij}=b_{ij}+\hat{\mathbf{u}}_{j|i}\cdot\mathbf{v}_j,其内涵意义为对当时层的每个胶囊capj{cap}_j都要核算和前层某个胶囊capi{cap}_i的猜测向量uj∣i\hat{\mathbf{u}}_{j|i}间的点积来衡量二者间的相似性,即衡量在相位(性质)上的相似性,如果二者不相似则二者的点积为负,削弱了capi{cap}_i关于capj{cap}_j的重要性,反之则增强了重要性;
  7. 重复步骤3~6,直到循环终结;
  8. 输出当时循环次序胶囊的输出矩阵VV;

值得注意的是,路由算法的意图应该是在于迭代已找到较好的耦合系数CC和改换矩阵WW,但二者均能够经过反向传达算法完成,虽然动态路由算法中存在显式的反向传达(BB的更新),但W、CW、C仍然受网络练习时的隐式反向传达更新影响。所以在代码完成进程中,有的办法将WW与动态路由算法解开(创立一副本参加核算),防止了B(C)B(C)的迭代进程对其发生反向传达影响,而仅在核算最后输出参加进来,而有的算法则未处理。透过这一差异,咱们能够提出一个疑问:既然动态路由算法实质是在对BB进行显式的反向传达,而BB又是为CC服务的,为何不直接让CC或着BB经过网络的隐式反向传达更新?,或许是为了在不添加网络练习次数的一起添加CC反向传达的次数以让其更好的契合实际?

详细模型

 作者运用的详细模型如下:

论文解析:Capsule Network

模型总共有三层,第一层便是简略的CNN,第二层是基础的Cap层,但关于第一层的输入并没有运用动态路由的办法优化,仍然是对输入选用CNN的模式处理,只不过运用了8个32通道的卷积层,将不同卷积层不同方位的输出拼接以为是经历了Cap的输出向量,获得了6*6*32个8维输出向量,第三层是高档的Cap层,对前层的Cap输入选用了动态路由处理,此层包括了10个Caps,终究输出了10个16维向量,对应于10个类别实体存在的“性质和概率”,取L2范数即可表明每个类别呈现的概率,须注意的是由于并没有进行归一化,也便是能够进行辨认出图片中多个类别。

练习措施

 练习方面,作者运用了margin loss,关于每个类别得到的分类成果都核算出loss后取和作为终究的loss:

Lc=Tcmax(0,m+−∣∣vc∣∣)2+(1−Tc)max(0,∣∣vc∣∣−m−)2L_c=T_cmax(0,m^+-||v_c||)^2+\lambda(1-T_c)max(0,||v_c||-m^-)^2

另外,作者以为查验网络特征提取才能的一个好办法是运用提取的特征进行重构,故在原始的Capsule net上附加了一个可练习的重构模块,将原Capsule net一切类别输出向量中模值最大的作为输入图片的解码成果,送入三层全连接层即可编码出恢复图片,核算这这两张图片的squared error作为网络练习时的正则束缚。

论文解析:Capsule Network

实验成果

 文章主要在minist数据集上进行验证,给出的分类成果表明CapsuleNet在层数较浅的情况下得到了略差劲于ensembling SOTA模型,但优于单个模型的表现。一起成果表明添加了重构正则的确显著削减了判别错误率(甚至削减幅度大于CapsuleNet关于CNN的改进,怀疑如果在baseline基础上也引入重构正则会不会也有提高)。此外,为了证明模型重构才能不是由于decoder特征提取的好而是由于encoder练习的好(过拟合),作者对解码成果进行了有规则的扰动,发现重构成果也发生了有规则的改动,说明解码成果的确反映了原始图画的某方面的特征,且向量的不同方位于不同特征有关。

 除了单个数字的重构,作者尝试了将两张图片进行堆叠,编码时轮番将将两个概率最大类别的输出向量送入编码器编码,辨认准确率在图片堆叠规模更多的情况下与现有办法适当。这证明了CapsuleNet一个十分重要的性质,它的确是依照着部件的组合顺序将图片分配给最相近的类别,而不是简略的将图片和类别联络起来,而如果咱们强行运用错误的向量进行重构,能够发现重构成果并不包括该数字,这一现象同样佐证了该性质。它并不是对一切的数字类别都给出了合理的特征提取成果,而是只给辨认到的数字赋予可恢复的特征向量。

总结

 在参阅了其他人对Hinton的研究路线梳理之后,大约了解了Capsule结构提出的意图。主要来说是Hinton觉得现有的CNN结构存在着较大的误区,体现在如下方面:

  1. BP算法过于简略粗犷,单纯的根据当时点的梯度来调整参数优化的方向一步步的迫临最优解,即使是关于鞍点、部分极值等问题的解决办法也仅仅在BP上添加了一些限制,没有做出实质性的改动,某种意义上而言是定性而非定量的算法。而且BP算法的好坏受终究规划的损失函数影响很大,但直觉上了解,无论是图画分类、语义切割、图画切割,它们的实质都应该归结到图画特征的提取,而不宜受终究方针影响过大;
  2. 从神经解剖学来看,哺乳动物的大脑皮层中存在着 Cortical minicolumn的柱状结构,而并没有包括很多的分层结构,也便是说从“仿照人脑”视点来看,现有CNN结构堆叠层数的措施是不对的,应该考虑如安在单层之内完成杂乱内部结构。
  3. 从认知科学的视点来看,人脑并不是一个完全精细的体系,而是依照着很多先验常识来做出下意识判决的,这便是为何存在着多种视错觉现象(样本过少,学习对实际生活无益)。一个比较显著的特质便是是视觉结构(coordinate frame),它表明人在观察物体时实际上遭到坐标系的严重影响的。而CNN却并未体现出这以特点。
  4. 从不变性的视点来看,CNN架构中很多运用下采样操作(pooling、stride),其机理便是用呼应强烈的部分替代全体,减小旋转、平移的影响,添加鲁棒性带来不变性(invariant)。但Hinton以为这种不变性仅仅关于方针的不变性,指分类成果不变,激活函数输出不变等等,而咱们需求的则是更高档的常识等价,预处理时的augumentation同理。此外,CNN架构处理静态图画和视频流的方法有所区别,而大脑则运用同一套视觉体系。Hinton以为这依然与CNN缺乏视觉结构表征有关,

Hinton据此提出了Capsule来替代layer,Capsule运用一组组向量作为输入输出,每层结构愈加的杂乱,Capsule应该具有如下等价性:

  • 方位编码(place-coded):视觉中的内容的方位发生了较大改动,则会由不同的 Capsule 表明其内容。
  • 速率编码(rate-coded):视觉中的内容为方位发生了较小的改动,则会由相同的 Capsule 表明其内容,但是内容有所改动。
  • 高层的 capsule 有更广的域 (domain),所以低层的 place-coded 信息到高层会变成 rate-coded 为了完成Cap第三点性质,cap的输出应当呈现出如下聚类特性: )

论文解析:Capsule Network
相邻的小内容实体(红点,如圆形、黑白、弧)构成一个更大规模的内容实体(眼睛)。 聚类办法用如下方法评估: scorei=∑logp(xi∣mixture)−∑logp(xi∣uniform)score_i=\sum logp(x_i|mixture)-\sum logp(x_i|uniform) 即得分越高,底层实体排布越紧密,对应混合高斯分布就越隶属于该高层部件,越趋向于均匀分布则越不或许构成高档部件。这便是初始提出的路由算法,routing by agreement。

对应于本文,Capsule运用向量输入输出:

论文解析:Capsule Network
底层到高层的部件寻路运用了dynamic routing算法,未运用聚类的概念,反而愈加像是attenion机制, 对应不变性的解释:如果同样是在底层Cap发现了某个部件,方位改动过大时或许时会在高层分配给不同部件,经过耦合系数完成;改动不大时则耦合系数不咋改动,权重矩阵发生改动;而底层的大规模改动在高层则成了无伤大雅的小改动。
 回到最最初的疑惑,运用routing算法的实质是为了构成底层对高层的选择性归属,具有必定的attention感觉,不直接运用全连接等等是为了削减关于BP的依靠,削减损失函数对练习的影响。
 Capsule结构是一种十分有潜力的结构,它的引入也十分的契合直觉,但它的规划并没有让人觉得和初始意图有十分紧密的联络。向量对向量的输入输出对应Cortical minicolumn结构真的类似吗?坐标结构这一先验常识在CapsuleNet中如同也没有直观的体现。动态路由技能真的就很像是简略的内部自BP+attention,与削减BP影响的观念不是很契合。无论怎么,这是另一场源自CV内部的革命,值得多加关注,相较于transfomer愈加的契合直觉。

参阅

浅析Hinton最近提出的Capsule计划 怎么看待Hinton的论文《Dynamic Routing Between Capsules》? Capsule Network胶囊网络解读与pytorch代码完成