1.CNN模型的缺陷
- CNN主要用于捕捉图形的局部特征,但是在探索这些特征之间的关系似乎不是特别好(比如相对位置关系、相对大小关系,特征的方向等等关系)
- 如下面两幅图,由于局部特征相同,所以CNN可能将它们都识别成一张人脸:
- 一个简单的CNN模型可以正确地提取鼻子,眼睛和嘴巴的特征,但是并不能提取出特征之间的相对关系:
- CapsNet模型就是为解决CNN这个缺陷而产生的。
2.Capsules网络的概念
-
在一般的神经网络中,一层一般由若干神经元组成,每个神经元对应一个常数(或者叫常数的输出和输出)。下图为一个全连接神经网络:
-
一般神经网络中每层(layer)的神经元(neuron)太过简单很难表征一些概念;为了能表示一些复杂的概念,将一组神经元封装起来形成Capsule(胶囊),每个Capsule对应一个向量而不是标量,而向量就可以作为良好的表征(比如word2vec中的向量就可以良好表征词汇)。Capsule的输入和输出就不再是标量而是向量。
-
Capsule 的输出向量表征了两个部分:
- 其长度表征了某个实例或实例的一部分出现的概率
- 其方向表征了实体的某些图形属性(位置,颜色,方向,形状等等)
-
将上面全连接网络的每个神经元⚪换成Capsule⬜:
-
激活函数
- 首先需要考虑一下什么样的激活函数可以用于向量的激活,论文中使用了下面激活函数: v j = ∣ s j ∣ 2 1 + ∣ s j ∣ 2 s j ∣ s j ∣ v_j=\frac{|s_j |^2}{1+|s_j |^2 }\frac{s_j}{|s_j |} vj=1+∣sj∣2∣sj∣2∣sj∣sj
- 该激活函数称为squashing,是一个非线性激活函数;其中 s j s_j sj是当前Capsule的输入, v j v_j vj是当前Capsule的输出。
- 上面公式可以拆成两个部分:后半部分是一个单位向量 s ^ j = s j ∣ s j ∣ \hat{s}_j=\frac{s_j}{|s_j |} s^j=∣sj∣sj,前半部分是模长放缩因子 ∣ s j ∣ 2 1 + ∣ s j ∣ 2 \frac{|s_j |^2}{1+|s_j |^2 } 1+∣sj∣2∣s