极简笔记:Dynamic Routing Between Capsule
capsule第一弹,算是capsule的一个简单demo,为了证明capsule是能用的。
如果传统神经网络神经元是标量神经元,capsule可以理解成张量神经元(2 dim of spatial & 1 dim of feature vector). vector length是对象出现概率,orientation是对象属性。
在mnist上使用三层结构测试:
image–conv1–PrimaryCaps–DigitCaps
前两层之间都是正常卷积,PrimaryCaps相当于把卷积层打包分组成capsule(计算本质和卷积一模一样,只是分了个组而已),Primary-digit是先每个capsule中的向量(6*6*32个,8-dim)到10个16-dim输出向量做全连接,每条边的权重是矩阵 Wij (size: 8*16)得到 u^ij (6*6*32*10个), 然后加权求和并对10个向量 sj 的长度做非线性归一化成输出向量 vj ,其中加的权 cij 是真正dynamic routing方式更新的部分, cij=exp(bij)/∑kexp(bik) ,也就是softmax操作,同时更新 bij=bij+u^Tijvj
因为dynamic routing这部分参数比全连接还要多一点点(多的就是那几个c),所以肯定还要改进。
都全连接了再突出affine transformation robust就没啥必要了,但值得注意的是,把最后得到的10个 vj 经过三层全连接重构成原图,把这个误差加上训练能一定程度地提高准确率(好的特征表示要有很强的重构能力!!!)