胶囊网络笔记
胶囊
https://spaces.ac.cn/archives/4819这篇文章真的太棒了
一个向量,向量的模长代表概率,向量的分布代表着一定的方向,在计算loss时是使用模长计算,因此允许了向量内部的不同,从而保证鲁棒。
底层的胶囊和高层的胶囊构成一些连接关系
可以理解为底层胶囊使用底层的初级特征做分类,高级胶囊将多个分类的结果聚集整合起来。
通过一些实验,此squash函数比论文中的可能更好,这个函数的特点是在模长很接近于0时起到放大作用,而不像原来的函数那样全局都压缩。
Capsule可优化的地方还有非常多,包括理论上的和实践上的。我觉得整个算法中最不好看的部分并非动态路由,而是那个squash函数。对于非输出层,这个压缩究竟是不是必要的?还有,由于要用模长并表示概率,模长就得小于1,而两个模长小于1的向量加起来后模长不一定小于1,因此需要用函数进一步压缩,这个做法的主观性太强。这也许需要借助流形上的分析工具,才能给出更漂亮的解决方案,或者也可以借鉴一下量子力学的思路,因为量子力学也存在波函数相加的情况。
实践角度来看,Capsule显然是太慢了。这是因为将聚类的迭代过程(动态路由)嵌入了神经网络中。从前向传播来看,这并没有增加多少计算量,但从反向传播来看,计算量暴增了,因为复合函数的梯度会更加复杂。