残差网络维数变化块身份函数

机器算法验证 机器学习 深度学习 残差 卷积神经网络 残差网络
2022-03-23 00:20:42

在尝试为自己实现带有瓶颈块的ResNet 时,我对不同维度的恒等函数残差块感到非常困惑。他们比较了身份,多维块上的卷积投影,所有块上的卷积投影。我决定使用同一性,因为另一个不会显着提高准确性,但会增加训练内存和参数计数。我注意到该标识实际上是步幅 2 的标识。(据我了解,这实质上是具有 (1,1) 和步幅 (2,2) 的内核的最大池,并连接了一堆零)。意味着你失去了 3/4 的身份,并有一个新的矩阵“身份”大小

(num_filters * 2, n/2, n/2)

后半部分全是零。其中 n 是“高度”和“宽度”维度,num_filters 是前一层的过滤器数量。

例如第一个不同维度的瓶颈块(省略批量规范和激活)

Input (256,56, 56)

Conv (kernel 1x1, 128 filters, stride 1) (128, 56, 56)

Conv (kernel 3x3, 128 filters, stride 2, pad 1) (128, 28, 28)

Conv (kernel 1x1, 512 filters, stride 1) (512, 28, 28)

Sum (last_conv, confusing_identity)

因此混淆身份的大小为 512、28、28

内核(3,3)pad(1,1)和stride(2,2)的最大池化不会编码比这个有损身份更多的信息吗?

另外,这些真的会大大影响训练时间吗?(因为两个实现都有 0 个参数)

1个回答

除了最大池化,您可以使用具有步幅 (2,2) 和内核大小 (2,2) 的2D 平均池化,可选择将其与自身连接以获得 512 个特征而不是 256 个。

这样做的好处是平均池化是线性操作,不会阻止梯度传播,也不会丢失任何信息。

正如您所说,1x1 跨步最大池的问题是 3/4 的信息被丢弃。您提出的解决方案的问题是最大池仍然是非线性的,这与残差网络的目标相矛盾:找到线性映射的残差函数。