理解Hinton胶囊网络之精华浓缩版,第二部分: 胶囊网络是如何工作的?(Capsule Networks)

胶囊网络精华浓缩版第一部分中,我们就吐槽过Max pooling的一堆缺陷:

  • 虽然最大池化层可帮助辨别图像中元素的位置关系,但是有太多信息丢失(pooling操作“粗暴地”把局部相邻像素点集压缩成一个像素点)
  • 缺乏空间分层和空间推理能力,缺乏“举一反三”的能力
Max pooling图示

当我们深入看胶囊网络的工作方式,我们会感觉胶囊网络就是为改进Max Pooling而生的:

来自: https://arxiv.org/pdf/1710.09829.pdf

上图胶囊网络整体架构中,卷积层Conv1输出后,跟的不再是Max Pooling层, 而是主胶囊层(PrimaryCaps layer)数据胶囊层(DigitCaps layer)

这些胶囊层到底是如何工作的?我们先从胶囊层和一般的全连接层入手。

一般的全连接层是这样工作的:

来自:https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-ii-how-capsules-work-153b6ade9f66

对于上一层Max Pooling输出的所有标量(x1, x2, x3)与权重(w1,w2,w3)做卷积求和操作。最后,使用非线性激活函数 f(•)输出预测值hj

胶囊层是这样工作的:

来自:https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-ii-how-capsules-work-153b6ade9f66

对于上一层胶囊层输出的所有胶囊向量(u1,u2,u3),通过一系列转换矩阵(W1j,W2j,W3j),转换为更高层的胶囊向量(\(\hat{u1}\),\(\hat{u2}\),\(\hat{u3}\)),最后通过胶囊网络独有的动态路由算法(而不是后向传播)聚合成最后需要的胶囊向量(capsule j),再通过特殊的激活方法(squash)输出最后结果。

以人脸识别举例,u1、u2、u3可以是代表眼睛、鼻子、嘴巴的胶囊向量。矩阵W1j、W2j、W3j代表的转换是眼睛到人脸、鼻子到人脸、嘴巴到人脸的转换。\(\hat{u1}\)、\(\hat{u2}\)、\(\hat{u3}\) 是高层的胶囊向量,分别代表了人脸相对眼睛应该的位置,人脸相对鼻子应该的位置,人脸相对嘴巴应该的位置。最后权重(c1, c2, c3)聚合最高层的胶囊,即,该人脸的最终表征。

事实上,如果\(\hat{u1}\)、\(\hat{u2}\)、\(\hat{u3}\)所表达脸的位置都是符合并且相近的,那么,那个地方一定有一张符合要求的脸:

来自:https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-ii-how-capsules-work-153b6ade9f66

但是最终人脸的位置和表征需要动态路由(dynamic routing )算法来聚合

来自:https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-ii-how-capsules-work-153b6ade9f66

下层的胶囊特征会自己调整转换权重,把输出发送到高层对应的胶囊中,即,如果这张脸更适合用鼻子(鼻子长得很有特色,哈哈!)去判断,动态路由算法会加大“鼻子胶囊”的权重 !

 

参考文献:

  1. Understanding Hinton’s Capsule Networks. Part II: How Capsules Work
  2. https://arxiv.org/pdf/1710.09829.pdf

本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com

或直接扫二维码:

发布者

David 9

David 9

邮箱:yanchao727@gmail.com 微信: david9ml

发表评论

电子邮件地址不会被公开。 必填项已用*标注