其实取标题的时候很犹豫,这篇文章很大篇幅是在讲动态路由与聚类,但也有一部分关于胶囊网络的其他理解,大家不要太在意标题。
这是我参考的三篇博文:https://spaces.ac.cn/archives/4819、https://spaces.ac.cn/archives/5112、https://spaces.ac.cn/archives/5155,写的很好,我下面的一些理解就来自这里。
首先先谈一下个人对胶囊网络工作过程的理解,胶囊网络首先提取一组特征,然后在这组特征上做一个聚类,用聚类结果进行预测,根据预测结果进行反向传播,对提取特征的矩阵进行更新(可以理解为换一组特征或者对特征进行微调),然后继续聚类,这样循环往复。
胶囊网络给人最深的印象是vector in vector out,但个人感觉这点是针对于CNN而言的,而这一点在图像处理作用尤为明显,因为CNN的池化损失了太多的信息,这也使得一谈到胶囊网络就是vector in vector out。其实直接用个全连接层(对应论文里面的 W i j W_{ij} Wij)就可以实现vector in vector out,真正有意义的是通过动态路由将聚类引入到深度学习,以及采用了类似Transformer中的多头注意力机制。当然这只是个人的理解,仅供参考。
动态路由与K-means
先给出论文中动态路由算法过程:

简单来说动态路由就是一个“软化”的K-means,在K-means中直接将点划分到最近的簇,而动态路由里面则是通过softmax获取相似度,成比例地将这点分到各个簇中。
当然上面的说法只是借助K-means的思想让大家更好的理解动态路由,仔细考虑的话并不准确。
假设低层的胶囊输出为 u i , 0 < i < M u_{i},0<i<M ui,0<i<M,高层的胶囊输出为 v j , 0 < j < N v_{j},0<j<N vj,0<j<N,如果按上面的思路,初始的时候会对 u i u_{i} ui进行平均来获取初始的 v j v_{j} vj,这样的话所有的 v j v_{j} vj是一样的,这显然不合理。
其实动态路由可以看作是卷积+K-means,这里说卷积并不是指卷积操作,而是CNN中通过卷积来获取某个特征。
动态路由中有一步 u ^ i j = W i j u i \hat {u}_{ij}=W_{ij}u_{i} u<

本文探讨胶囊网络的动态路由机制,将其与K-means、GMM、RNN和Transformer进行比较。动态路由是一种软化的K-means,通过多轮迭代更新特征中心,与RNN的隐状态有相似之处,且与Transformer的多头注意力机制有共通点。胶囊网络通过向量输入输出增强表征能力,避免了传统CNN池化造成的信息损失。
最低0.47元/天 解锁文章
7829

被折叠的 条评论
为什么被折叠?



