CapsNet 胶囊网络理解

姿态矩阵

物体姿态的变化主要包括旋转、平移和缩放三种形式。针对一个向量,可以通过乘上一个姿态矩阵来调整向量姿态(大小、方向等)。

CapsNet 胶囊网络理解_第1张图片

假设有一张 28 x 28 的 图片,初始向量包含了候选框的坐标信息,左上角(0,0)和右下角(28,28),一开始候选框囊括了整张图片的特征。那么将向量乘上有限次变换矩阵(姿态矩阵),可以囊括图片中任意子特征信息。同理,囊括了图片中部分细小特征的向量(14,14,18,18),可以通过有限次矩阵变换得到整张图片的特征。

下图表示依次对物体做了旋转、平移和缩放操作。首先将(x,y)先逆时针转 30 度,再向右平移 2 个单位,最后缩放 50% 到(x',y')。由于矩阵乘法的结合律,我们可以先将左边三个矩阵相乘,转化成一个矩阵,相当于仅仅对向量实施一次变换操作。

因此,在定义姿态矩阵参数后,可以只对提取到的低层次特征做一次矩阵乘法,得到的结果理论上可以涵盖不同层次的高级特征。

网络结构

CapsNet 胶囊网络理解_第2张图片
  • 第一个卷积层 Conv1 使用 256 个 9x9 的卷积核,得到 20x20x256 的输出;
  • 第二个卷积层 Conv2 同样使用 256 个 9x9 的卷积核,得到 6x6x256 的输出;
    对输出的结果做进一步操作:以 8 通道为一组,划分成 32 组;
    在这里引入向量的概念,组合 8 个 1x1 的标量为 1 个 1x8 的向量,最后输出可以看作是 32 通道,每个通道有 6x6 个向量;
    对向量统一执行 squash 操作;
  • FC 全连接层的输入,可以看作是数量为 6x6x32=1152 个 1x8 的向量,输出为 10 个 1x16 的向量;
    用 shape 来表示输入和输出分别为 [1152,1,8] 和 [1152,10,16]。将输出矩阵看作 [1152,1,160],那么中间的转换矩阵可以表示为 [1152,8,160],即 [1152,1,8] * [1152,8,160] = [1152,1,160],最后将结果重新表示成 10 个 1x16 的向量;
    此处的转换矩阵即全连接层的初始化参数,也可以将它理解成姿态矩阵;
  • 经过上一步,我们拥有了 1152 个预测的 10 分类向量,向量维度是 1x16 ;
    然后使用 Dynamic Routing 算法,得出加权后的总的向量;
    Dynamic Routing 算法可以理解为:不断地调整权重改变 1152 个候选向量对总向量的贡献值,调整的依据是计算每次生成的总向量与各个候选向量的相似度;计算总向量与候选向量的点积,如果两个向量越接近,那么点积结果就越大,因而代表该候选向量的贡献值越大,从而调高针对该向量的权重;因此不断地迭代,会使产生的总向量越来越接近所有候选向量的集中值,使之更具有代表性;
  • 最后计算不同类向量的 L2 范数,判断当前类存在的可能性;
    一个低层特征对应一个高层特征,假设低层特征 a 预测高层特征 A 的概率为 0.6,预测高层特征 B 的概率为 0.4,通过迭代后预测 A 的概率变高了,变成了 0.8,那么意味着预测 B 的概率减少到了 0.2;而多个低层特征间对一个高层特征的预测是相互独立的,假设低层特征 b 预测高层特征 B 的概率增加了,但这并不会影响到低层特征 a 对高层特征 B 的预测概率;因此最后可能预测出多个高层特征,即可实现多分类问题。

你可能感兴趣的:(CapsNet 胶囊网络理解)