0. 简单总结
感谢:https://juejin.cn/post/6844903986995134471
https://zhuanlan.zhihu.com/p/90073690
为了改善CNN对旋转不具备不变性,学习不到3D空间信息和CNN只关注要检测的目标是否存在,而不关注这些组件之间的位置和相对的空间关系。
- CNN 自己的处理
虽然max pooling在很多任务上提高了原始CNN的准确率,但是我们也可以看到max pooling丢失了很多有价值的信息,并没有很好地理解内容
Capsule尝试去解决这些问题 (优势)
- Capsule可以学习到物体之间的位置关系,例如它可以学习到眉毛下面是眼睛,鼻子下面是嘴唇,可以减轻前面的目标组件乱序问题
- Capsule可以对3D空间的关系进行明确建模,capsule可以学习到上面和下面的图片是同一个类别,只是视图的角度不一样。Capsule可以更好地在神经网络的内部知识表达中建立层次关系。
- 在训练的时候 能使用相对较少的数据集,但相对来说 其训练时间较CNN变得更长
1. capsule的结构
capsule 是向量,其可以理解为object的某个类别,其模长表示某个entity存在的概率,其方向表示某个entity属性
其计算的方式 为以下四步:
对输入向量做乘法,其中 和 分别来自与前面的 capsule 的输出,在单个 capsule 内部,对 和 分别乘上 和 得到了 新的 和 。
对输入向量进行标量加权,令与相乘,与相乘,其中和均为标量,且。
对得到向量求和,得到。
向量到向量的非线性化,将得到的结果向量 进行转换,即通过函数 得到结果 ,作为这个capsule 的输出,且这个结果 可以作为下一个 capsule 的输入
2. 细节(训练方式)
动态寻路算法
鬼都看不懂下面这个
- 直观理解
其中两个高层胶囊的输出用紫色向量 表示,橙色向量表示接受自某个低层胶囊的输入,其他黑色向量表示接受其他低层胶囊的输入。左边的紫色输出 和橙色输入 指向相反的方向,所以它们并不相似,这意味着它们点积是负数,更新路由系数的时候将会减少。右边的紫色输出 和橙色输入 指向相同方向,它们是相似的,因此更新参数的时候路由系数 会增加。在所有高层胶囊及其所有输入上重复应用该过程,得到一个路由参数集合,达到来自低层胶囊的输出和高层胶囊输出的最佳匹配。