The pooling operation used in convolutional neural networks is a big mistake and the fact that it works so well is a disaster. ——Hinton
先引用深度学习三巨头之一Geoffrey Hinton(杰弗里·辛顿)的名人名言作为开端.
CNN是现在十分火热的模型,首先我们都知道,通过pooling层能够学到部分高阶特征,比如对于人脸而言可以激活识别到鼻子 ,嘴巴 ,眼睛等。
大神们看到CNN模型的强大开始进行人性本质的思索,那么它有什么搞不懂的时候咩?
答:确实有。
具体来说,pooling并不能够学到这些特征具体是从哪一层特征学到的,也就意味着会损失高阶特征之间的相互空间关系,空间层级信息无法获取到。也就是混乱的 并不能够表征一张人脸。这就是pooling层存在的缺陷。
好吧,简言之就是脸盲。
我们接着来看,计算机得到图像的过程是一层一层,从图像的内部表示到整体图像表示。但是人对图像的认识恰恰相反!
科普时间到:
人脑对图像的认识关键的点在于图像位置姿态的认识,也就是即便图像进行了旋转,平移人脑依然可以认识图像,而计算机却不行。因此提出胶囊网络CapsNet。
那么我们来正经地看看到底什么是胶囊(总之不是吃的那个小药丸💊)
胶囊定义
胶囊(Capsule)是一个,包含多个神经元的特征载体。每个神经元可以表示图像中出现的特定实体的各种属性,比如姿态(位置,大小,方向),纹理,变形等。胶囊以向量的形式封装特征的各种属性表示。
数值就是这个属性表示存在的概率,会随着特征的空间变化而变化,向量的长度保持不变的话,整个胶囊表征的高层特征就保持一致,这就是Hinton提出的活动等变性,这个不变性的意义高于pooling的不变性。
听懂以上概念后,大神小伙伴们就接着来看它的运算过程吧。
胶囊卷积运算过程
- 输入向量的矩阵乘法
- 输入向量的标量加权
- 加权输入向量之和
- 向量到向量的非线性变换
总之就是先这样,再那样就好啦~
好了,回归干货:
u 1 u_1 u1、 u 2 u_2 u2、 u 3 u_3 u3就是来自下层的3个胶囊💊,向量的长度编码了下层胶囊相应特征的概率。
那么
w 1 j w_{1j} w1j、 w 2 j w_{2j} w2j、 w 3 j w_{3j} w3j就能够编码高层特征和低层特征之间的空间关系。
神经网络是通过反向传播来学习参数,而胶囊网络是通过“动态路由”算法来进行更新。
低层胶囊需要决定它的输出是向哪个高层胶囊输出。通过学习 c i c_i