矩阵胶囊的前向计算
矩阵胶囊在向量胶囊的基础上改变了胶囊的表示方式,矩阵胶囊由激活概率与姿态矩阵两部分构成一个元组单位。激活概率用于表示矩阵胶囊被激活的概率,姿态矩阵用于表示胶囊的姿态信息。在向量胶囊的前向计算中,动态路由被视为胶囊元的非线性激活函数,对于矩阵胶囊,胶囊元的前向计算采用EM路由作为非线性激活函数,EM路由是根据EM算法中Estep和Mstep组成的参数估计方法。矩阵胶囊元的前向计算过程如图。对于胶囊元
j
j
j,输入多个低层矩阵胶囊,经过EM路由输出一个矩阵胶囊。其中,低层胶囊的姿态矩阵需要经过变换矩阵进行视觉坐标的线性变换得到投票矩阵,而激活概率不进行变换。矩阵
W
i
j
W_{ij}
Wij表示低层胶囊
i
i
i到高层胶囊
j
j
j的视觉坐标变换。高层胶囊的激活概率
a
j
a_{j}
aj表示胶囊元
j
j
j所对应特征被激活的概率。
结合上图所示的矩阵胶囊元,现考虑多个胶囊元并构建一层胶囊网络,令
Ω
L
\Omega_{L}
ΩL和
Ω
L
+
1
\Omega_{L+1}
ΩL+1分别表示低层胶囊和高层胶囊的集合,
V
i
j
h
V_{ij}^{h}
Vijh表示投票矩阵
V
i
j
V_{ij}
Vij变形为向量后的第
h
h
h个元素,假设路由迭代数为
T
T
T,EM路由过程为:
步骤1. 对于任意的胶囊
i
∈
Ω
L
i\in\Omega_{L}
i∈ΩL和胶囊
j
∈
Ω
L
+
1
j\in\Omega_{L+1}
j∈ΩL+1,初始化两个胶囊间的连接概率为均匀分布:
R
i
j
=
1
∣
Ω
L
+
1
∣
R_{ij}=\frac{1}{|\Omega_{L+1}|}
Rij=∣ΩL+1∣1
步骤2. 在迭代第
t
t
t次时,依次执行:遍历胶囊
j
∈
Ω
L
+
1
j\in\Omega_{L+1}
j∈ΩL+1,执行
M
s
t
e
p
(
a
,
R
,
V
,
j
)
Mstep(a,R,V,j)
Mstep(a,R,V,j);遍历胶囊
i
∈
Ω
L
i\in\Omega_{L}
i∈ΩL,执行
E
s
t
e
p
(
μ
,
σ
,
a
,
V
,
i
)
Estep(\mu,\sigma,a,V,i)
Estep(μ,σ,a,V,i);记
t
=
t
+
1
t=t+1
t=t+1。
步骤3. 当迭代次数满足 t = T t=T t=T时,返回高层胶囊的激活概率 a a a和姿态矩阵 M M M;否则执行步骤2。
EM路由的Estep和Mstep
在EM路由过程中, M s t e p ( a , R , V , j ) Mstep(a,R,V,j) Mstep(a,R,V,j)定义为:
- 遍历胶囊 i ∈ Ω L i\in\Omega_{L} i∈ΩL,修正连接概率: R i j = R i j a i R_{ij}=R_{ij}a_{i} Rij=Rijai
- 对投票矩阵 V i j V_{ij} Vij中任意的第 h h h个元素,计算高斯混合模型的均值和方差: μ j h = ∑ i R i j V i j h ∑ i R i j , ( σ j h ) 2 = ∑ i R i j ( V i j h − μ j h ) 2 ∑ i R i j \mu_{j}^{h}=\frac{\sum_{i}R_{ij}V_{ij}^{h}}{\sum_{i}R_{ij}},(\sigma_{j}^{h})^{2}=\frac{\sum_{i}R_{ij}(V_{ij}^{h}-\mu_{j}^{h})^{2}}{\sum_{i}R_{ij}} μjh=∑iRij∑iRijVijh,(σjh)2=∑iRij∑iRij(Vijh−μjh)2
- 计算第 h h h个元素对应的代价: c o s t j h = ( β u + l o g ( σ j h ) ) ∑ i R i j cost_{j}^{h}=(\beta_{u}+log(\sigma_{j}^{h}))\sum_{i}R_{ij} costjh=(βu+log(σjh))i∑Rij
- 根据代价计算激活概率: a j = s i g m o i d ( λ ( β a − ∑ h c o s t j h ) ) a_{j}=sigmoid(\lambda(\beta_{a}-\sum_{h}cost_{j}^{h})) aj=sigmoid(λ(βa−h∑costjh))
其中, β u , β a \beta_{u},\beta_{a} βu,βa是可学习参数, λ \lambda λ是退火系数,随着迭代次数上升而增大。姿态矩阵 M j M_{j} Mj的第 h h h个元素取高斯混合模型的均值 μ j h \mu_{j}^{h} μjh。代价的推导过程如下:
对于低层胶囊
i
i
i和高层胶囊
j
j
j的连接,用
P
i
∣
j
h
P_{i|j}^{h}
Pi∣jh表示胶囊
i
i
i到胶囊
j
j
j的投票矩阵在第
h
h
h个元素上的正态分布:
P
i
∣
j
h
=
1
2
π
(
σ
j
h
)
2
e
x
p
(
−
(
V
i
j
h
−
μ
j
h
)
2
2
(
σ
j
h
)
2
)
P_{i|j}^{h}=\frac{1}{\sqrt{2\pi(\sigma_{j}^{h})^{2}}}exp(-\frac{(V_{ij}^{h}-\mu_{j}^{h})^{2}}{2(\sigma_{j}^{h})^{2}})
Pi∣jh=2π(σjh)21exp(−2(σjh)2(Vijh−μjh)2)
概率取对数得到:
l
n
(
P
i
∣
j
h
)
=
−
(
V
i
j
h
−
μ
j
h
)
2
2
(
σ
j
h
)
2
−
l
n
(
σ
j
h
)
−
l
n
(
2
π
)
2
ln(P_{i|j}^{h})=-\frac{(V_{ij}^{h}-\mu_{j}^{h})^{2}}{2(\sigma_{j}^{h})^{2}}-ln(\sigma_{j}^{h})-\frac{ln(2\pi)}{2}
ln(Pi∣jh)=−2(σjh)2(Vijh−μjh)2−ln(σjh)−2ln(2π)
结合胶囊间的连接概率信息,并取相反数得到损失的表达:
c
o
s
t
j
h
=
∑
i
−
R
i
j
l
n
(
P
i
∣
j
h
)
=
(
l
n
(
σ
j
h
)
+
1
2
+
l
n
(
2
π
)
2
)
∑
i
R
i
j
cost_{j}^{h}=\sum_{i}-R_{ij}ln(P_{i|j}^{h})=(ln(\sigma_{j}^{h})+\frac{1}{2}+\frac{ln(2\pi)}{2})\sum_{i}R_{ij}
costjh=i∑−Rijln(Pi∣jh)=(ln(σjh)+21+2ln(2π))i∑Rij
这个损失也被称为代价,代价的表达式实际上是信息熵的表达式,代价越小,信息熵越小,胶囊的不确定性越小,因此应该以更大概率激活胶囊:
a
j
=
s
i
g
m
o
i
d
(
λ
(
k
−
∑
h
c
o
s
t
j
h
)
)
a_{j}=sigmoid(\lambda(k-\sum_{h}cost_{j}^{h}))
aj=sigmoid(λ(k−h∑costjh))其中,
k
,
λ
,
1
2
+
l
n
(
2
π
)
2
k,\lambda,\frac{1}{2}+\frac{ln(2\pi)}{2}
k,λ,21+2ln(2π)都是常数。常数的调整可以改变胶囊网络激活胶囊的能力。
EM路由中, E s t e p ( μ , σ , a , V , i ) Estep(\mu,\sigma,a,V,i) Estep(μ,σ,a,V,i)定义为:
- 遍历胶囊 j ∈ Ω L + 1 j\in\Omega_{L+1} j∈ΩL+1,对于胶囊 i i i到胶囊 j j j的投票矩阵,计算16个元素所对应高斯分布的联合概率: P j = 1 ∏ h 16 2 π ( σ j h ) 2 e x p ( − ∑ h 16 ( V i j h − μ j h ) 2 2 ( σ j h ) 2 ) P_{j}=\frac{1}{\sqrt{\prod_{h}^{16}2\pi(\sigma_{j}^{h})^{2}}}exp(-\sum_{h}^{16}\frac{(V_{ij}^{h}-\mu_{j}^{h})^{2}}{2(\sigma_{j}^{h})^{2}}) Pj=∏h162π(σjh)21exp(−h∑162(σjh)2(Vijh−μjh)2)
- 遍历胶囊 j ∈ Ω L + 1 j\in\Omega_{L+1} j∈ΩL+1,更新胶囊 i i i到胶囊 j j j的连接概率: R i j = a j P j ∑ k ∈ Ω L + 1 a k P k R_{ij}=\frac{a_{j}P_{j}}{\sum_{k\in\Omega_{L+1}}a_{k}P_{k}} Rij=∑k∈ΩL+1akPkajPj
EM路由过程中的 E s t e p ( μ , σ , a , V , i ) Estep(\mu,\sigma,a,V,i) Estep(μ,σ,a,V,i)用于得到低层胶囊 i i i到高层胶囊 j j j的连接概率, M s t e p ( a , R , V , j ) Mstep(a,R,V,j) Mstep(a,R,V,j)将连接概率代入高斯混合模型的极大似然参数估计表达式,得到均值和方差,从而得到姿态矩阵,再计算代价得到高层胶囊 j j j的激活概率。
卷积架构下的矩阵胶囊网络
卷积架构下的矩阵胶囊网络如图所示。卷积胶囊网络由卷积层,矩阵预胶囊层,卷积矩阵胶囊层组成。输入图像经过卷积层得到通道数为A的特征图。使用两组卷积模块分别对特征图计算,第一组卷积模块为B个并行的卷积网络,每个卷积网络的卷积核大小为
1
×
1
1\times 1
1×1,通道数为
4
×
4
4\times 4
4×4。第二组卷积模块也是B个并行的卷积网络,每个卷积网络的卷积核大小为
1
×
1
1\times 1
1×1,通道数为1。因此预胶囊层的参数数量为
1
×
1
×
A
×
B
×
(
4
×
4
+
1
)
1\times 1\times A\times B\times (4\times 4+1)
1×1×A×B×(4×4+1)。将两组卷积的张量在最后一维拼接得到由胶囊构成的特征图。使用向量胶囊网络构建滤波器,在胶囊的特征图上计算卷积即称为卷积矩阵胶囊层。第一层卷积矩阵胶囊层输入通道数为B,输出通道数为C,令卷积核大小为
K
×
K
K\times K
K×K,由于每个转换矩阵
W
i
j
∈
R
4
×
4
W_{ij}\in R^{4\times 4}
Wij∈R4×4,因此,该卷积矩阵胶囊层的参数数量为
K
×
K
×
B
×
C
×
(
4
×
4
)
K\times K\times B\times C\times (4\times 4)
K×K×B×C×(4×4)。同理,在图中,第二层卷积矩阵胶囊层的参数数量应当为
K
×
K
×
C
×
D
×
(
4
×
4
)
K\times K\times C\times D\times (4\times 4)
K×K×C×D×(4×4)。在最后一层输出胶囊集合时,先基于激活概率进行最大池化,即在图中反映为
i
=
1
i=1
i=1,再使用全连接胶囊网络计算,因此参数数量为
D
×
E
×
(
4
×
4
)
D\times E\times (4\times 4)
D×E×(4×4)。
如果令A,B,C,D=32,输入图像为1通道的
32
×
32
32\times 32
32×32灰度图,卷积核大小均设置
K
=
3
K=3
K=3。第一层胶囊卷积的步长为2,第二层胶囊卷积步长为1,均不设填充。输出胶囊集合为
E
=
10
E=10
E=10。则从张量变换的角度看,张量形状变化如下图所示。
矩阵胶囊的损失函数
矩阵胶囊网络基于折页函数构建损失,并在向量胶囊损失函数的基础上进行了化简。对于一个样本,记输出胶囊中标签目标类别 t t t 的激活概率为 a t a_{t} at,其他类别 i i i的激活概率为 a i a_{i} ai,则类别 i i i与目标类别 t t t的损失计算为: L i = m a x ( 0 , m − ( a t − a i ) ) 2 L_{i}=max(0,m-(a_{t}-a_{i}))^{2} Li=max(0,m−(at−ai))2从损失的形式上可见,当目标类别的激活概率小于其他类别 i i i 的激活概率时,损失值会增加。其中, m m m为折页的限制边界,在训练过程中,逐步从0.2上升至0.9,递增折页边界有利于逐步软化输出的概率分布,增强模型的泛化能力。一个样本的损失为所有类别损失的加和: L = ∑ i ≠ t L i L=\sum_{i\neq t}L_{i} L=i=t∑Li如果固定地取值 m = 1 m=1 m=1,函数 L L L从形式上等价于多分类支持向量机的损失。