随机初始化参数的模型其训练结果不比预训练模型差(使用了合适的normalization),唯一的不同是增加了训练迭代次数。随机初始化训练具有很好的鲁棒性,甚至在以下情况仍然成立:
- 仅适用10%训练数据
- 用于更深和更宽的模型
- 用于多任务和多指标
结论
随机初始化的模型在训练一段时间后就要赶上预训练模型,其时间=预训练模型训练时间+微调时间。
预训练模型不能提供更好的正则化,当训练数据较少时,发现必须选择新的超参数进行微调(微调初始参数来自预训练),以避免过拟合。当使用这些相同的超参数进行随机初始化训练时,即使只有10%的COCO数据,模型也可以在不增加任何正则化的情况下与训练前的准确率相匹配。
当目标任务/指标是需要更多使用局部空间信息来进行预测的任务时,ImageNet 预训练方法并没有展现出更强大的地方。我们观察到,当从头开始训练时,高重叠区域的 AP 会明显改善; 我们还发现了需要精准空间定位的关键点 AP,从头开始收敛速度相对较快。直观地说,基于分类的,类似 ImageNet 图片集的预训练任务和对局部敏感的目标任务,三者之间的差异可能会限制预训练方法发挥其功能。
正则化
在图像分类任务中,正则化的引入能够辅助模型的优化过程。在以往的研究中,有效的正则化策略包括标准的参数初始(normalized parameter initialization)和激活正则化层(activation normalization layers)。对于目标检测任务,在不采用预训练模型而从头开始训练一个检测器时,往往会面临与从头训练一个分类器相似的问题。
BN是现代网络训练中常用的归一化方法,它在一定程度上造成了从零开始训练检测器的困难。与图像分类器不同,对象检测器通常使用高分辨率输入进行训练。这减少了受内存限制的批处理大小,小批处理大小严重降低了BN的准确性。使用预训练可以避免这个问题,因为微调可以采用预训练批量统计作为固定参数;但是,从零开始训练BN是无效的。
在这项研究中,我们应用最近提出的两种正则化策略,它们能够有助于缓解小批量输入的问题:
- Group Normalization (GN):这是我们最近提出的,作为 BN 的一种替代策略。GN 方法的计算与输入的批量维度无关,因此引用该正则化方法时,模型准确性对输入的批量大小并不敏感。
- Synchronized Batch Normalization (SyncBN): 这是BN 的一种跨设备(GPU) 实现,能够统计多个设备的批量大小情况。当使用多个GPU 时,该正则化方法能够增加BN 的有效批量大小,从而避免小批量输入的问题。
详细解说各种正则化
BN为啥有时会不好
如果Batch Size太小,则BN效果明显下降。
BN是严重依赖Mini-Batch中的训练实例的,如果Batch Size比较小则任务效果有明显的下降。那么多小算是太小呢?下图给出了在ImageNet数据集下做分类任务时,使用ResNet的时候模型性能随着BatchSize变化时的性能变化情况,可以看出当BatchSize小于8的时候开始对分类效果有明显负面影响。之所以会这样,是因为在小的BatchSize意味着数据样本少,因而得不到有效统计量,也就是说噪音太大。做目标检测和视频分类时,batch size都会比较小,这时BN的的效果就不太好。
什么是group normalization
BN是对于b,h,w做归一化,可以理解为每个神经元都对一个mini batch做归一化处理,而GN是将channel分为许多组(group),对每一组做归一化,及先将feature的维度由[N, C, H, W]reshape为[N, G,C//G , H, W],归一化的维度为[C//G , H, W]
代码如下:
由此可以看出,GN和BN是有很多相似之处的,代码相比较BN改动只有一两行而已,论文给出的代码实现如下:
def GroupNorm(x, gamma, beta, G, eps=1e-5):
# x: input features with shape [N,C,H,W]
# gamma, beta: scale and offset, with shape [1,C,1,1]
# G: number of groups for GN
N, C, H, W = x.shape
x = tf.reshape(x, [N, G, C // G, H, W])
mean, var = tf.nn.moments(x, [2, 3, 4], keep dims=True)
x = (x - mean) / tf.sqrt(var + eps)
x = tf.reshape(x, [N, C, H, W])
return x * gamma + beta
其中beta 和gama参数是norm中可训练参数,表示平移和缩放因子
从深度学习上来讲,完全可以认为卷积提取的特征是一种非结构化的特征或者向量,拿网络的第一层卷积为例,卷积层中的的卷积核filter1和此卷积核的其他经过transform过的版本filter2(transform可以是horizontal flipping等),在同一张图像上学习到的特征应该是具有相同的分布,那么,具有相同的特征可以被分到同一个group中,按照个人理解,每一层有很多的卷积核,这些核学习到的特征并不完全是独立的,某些特征具有相同的分布,因此可以被group。导致分组(group)的因素有很多,比如频率、形状、亮度和纹理等,HOG特征根据orientation分组,而对神经网络来讲,其提取特征的机制更加复杂,也更加难以描述,变得不那么直观。另在神经科学领域,一种被广泛接受的计算模型是对cell的响应做归一化,此现象存在于浅层视觉皮层和整个视觉系统。作者基于此,提出了组归一化(Group Normalization)的方式,且效果表明,显著优于BN、LN、IN等。GN的归一化方式避开了batch size对模型的影响,特征的group归一化同样可以解决InternalCovariateShiftInternal Covariate ShiftInternalCovariateShift的问题,并取得较好的效果。
效果如下:
可以看到,在32images/gpu的时候,GN的train error是最小的,收敛很容易;但是val error会比BN高一些,这是因为BN的正则化方式引入了一些随机量,GN因为过强的表达能力出现了一定的过拟合;而当batch的数量减小时,GN仍然保持了它的性能,BN的错误率却开始不断上升。
作者还将GN使用到了detection算法上,主要以Mask RCNN做比较。要注意的地方有三个: 第一,使用ImageNet的预训练网络的时候(finetune时),要frozenBN层,不然结果反而会劣化,而GN不会有这个问题。保持特征网络的BNfrozen,只在Head部分使用GN会提升效果,但是如果把backbone也换成GN预训练的,效果会更好。
第二,使用BN的准确率模型性能已经无法随着迭代次数增加的时候,GN反而可能会随着迭代次数的增加性能有一定的上升。
第三,不使用预训练模型,GN仍然可以达到compared的性能,但是BN会出现结果的劣化
收敛性
显然,通过随机初始化过程的模型收敛速度与经 ImageNet 预训练初始化的收敛速度是相去甚远的。因为经预训练后,模型可能直接利用已学习的低级特征(边缘、纹理等) 而无需重新学习。此外,从头开始训练的模型需要学习目标的低级和高级语义,这可能需要更多的迭代过程才能更好地收敛
实验设置
该文对基准模型进行了微小的改变,总的来说,基准设置和超参数都遵循 Mask R-CNN 模型,你可以在开源的 Detectron 项目中找到。此外,我们额外添加了正则化策略,并改变了模型迭代的步数,具体如下:
模型结构: 采用 Mask R-CNN,ResNet 或 ResNeXt,并采用特征金字塔网络(FPN)作为模型的主体结构,并采用端到端的方式(end-to-end)来训练 RPN 和 Mask R-CNN。此外,GN/SyncBN 代替所有 frozen BN 层(逐通道的仿射变换)。为了公平比较,在研究过程中对预训练模型同样采用 GN 或 SyncBN 正则化策略进行微调。
学习率方案: Detectron 中原始版本的 Mask R-CNN 模型进行了 90k 步的微调迭代过程(1×schedule)或 180k 步的迭代(2×schedule)。对于本文中的模型,探究更长的训练过程。例如,所谓的 6×schedule 是带 540k 步迭代的微调过程。不论最终的迭代步数是多少,都遵循 2×schedule 策略,在最后的 60k 和 20k 时将学习率降低 10倍(即总是在运行相同的迭代步数后降低学习率)。在实验中,发现对于第一个(大)学习率,训练更长的时间是有用的,但对于较小的学习率,训练太久往往会导致过拟合现象的发生。
超参数: 其他所有的超参数都遵循 Detectron 中的设置。特别是,初始学习率设置为 0.02,并采用 linear warm-up 策略,权重衰减率为 0.0001,动量参数设定为 0.9。在 8 个 GPU 上,采用 synchronized SGD,每个 GPU 上 mini-batch 大小为 2,来训练所有模型。
默认情况下,Detectron 中的 Mask R-CNN 在测试过程不使用数据扩充操作,在训练过程也只引入水平翻转的增强操作。在无特别说明的情况下,图像较短边的像素值是 800。
结论
- 在不需要对模型结构进行大幅度修改的情况下,可以在一个新的任务中从头开始训练一个模型。
- 从头开始训练一个模型通常需要更多的迭代步数才能获得充分的收敛。
- 从头开始训练的模型性能能够匹配的上经预训练的模型性能,即使是在只有 10k COCO 训练数据的情况下。
- 经 ImageNet 预训练的模型,在一个新的任务中能够加快收敛速度。
- 经 ImageNet 预训练的模型并不一定有助于减少过拟合现象的发生,除非我们采用非常小的数据。
- 如果我们的目标是比定位和分类更敏感的任务,那么 ImageNet 预训练对于模型的帮助将变得更小。