1.CNN模型的缺陷
- CNN主要用于捕捉图形的局部特征,但是在探索这些特征之间的关系似乎不是特别好(比如相对位置关系、相对大小关系,特征的方向等等关系)
- 如下面两幅图,由于局部特征相同,所以CNN可能将它们都识别成一张人脸:
- 一个简单的CNN模型可以正确地提取鼻子,眼睛和嘴巴的特征,但是并不能提取出特征之间的相对关系:
- CapsNet模型就是为解决CNN这个缺陷而产生的。
2.Capsules网络的概念
-
在一般的神经网络中,一层一般由若干神经元组成,每个神经元对应一个常数(或者叫常数的输出和输出)。下图为一个全连接神经网络:
每层的小⚪对应一个神经元,神经元的输入输出都是一个常量
-
一般神经网络中每层(layer)的神经元(neuron)太过简单很难表征一些概念;为了能表示一些复杂的概念,将一组神经元封装起来形成Capsule(胶囊),每个Capsule对应一个向量而不是标量,而向量就可以作为良好的表征(比如word2vec中的向量就可以良好表征词汇)。Capsule的输入和输出就不再是标量而是向量。
-
Capsule 的输出向量表征了两个部分:
- 其长度表征了某个实例或实例的一部分出现的概率
- 其方向表征了实体的某些图形属性(位置,颜色,方向,形状等等)
-
将上面全连接网络的每个神经元⚪换成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

CapsNet模型旨在解决CNN在捕捉图形局部特征与关系上的不足,通过引入胶囊网络(Capsules)来更好地表示特征及其关系。胶囊由一组神经元构成,输出向量表征概率和图形属性。动态路由机制允许低层胶囊的输出有选择地进入高层胶囊,增强特征表示。模型结构包括CNN层、primary capsules层和DigitCaps层,损失函数采用合页损失,同时利用重构验证胶囊的表示能力。
最低0.47元/天 解锁文章
388

被折叠的 条评论
为什么被折叠?



