再见了,批量依赖性(Batch Dependence)。
优化神经网络方法千千万,批量归一化(Batch Normalization,BN)就是其中之一。
这种方法可以说是非常成功,减轻了如何合理初始化神经网络这个棘手问题。可以成倍加快大型卷积神经网络训练速度,也能大幅提升收敛后的分类准确率。
但样本间的依赖性却是个问题:
若是小批量(mini-batch)太小,或者样本间存在相关性,就会对训练产生影响。
虽然也有人提出了诸如批量再归一化(Batch Renormalization)和群组归一化(Group Normalization,GN)等方法,但要么与大批量BN性能不匹配,要么在小批量的BN仍表现出性能下降。
怎么破?
那就直接消除批量依赖性。
这是来自Google Research团队的一篇力作,提出了滤波器响应归一化(Filter Response Normalization,FRN)层,有效改善了上述问题。
这项研究的主要贡献是如下三点:
1、FRN是一种归一化方法,可以让每个通道(channel)归一化训练的模型达到高精度。 2、阈值线性单元(Thresholded Linear Unit,TLU),是一个和FRN一起使用的激活函数,即使在没有任何批量依赖关系的大批量情况下,也比BN的效果要好。研究人员把这种组合称作FRN层。 3、在真实场景中,比较了各种归一化方法在大型图像分类和对象检测任务中的表现。
麦迪逊大学统计学助理教授、《Python机器学习》作者Sebastian Raschka也分享了这项研究,得到了网友较高的关注。
这条消息发布没多久,便已经有了100多的分享和接近400的点赞。
接下来,就来看一下FRN层的庐山真面吧。
效果如何?
来看一下FRN层的效果。
实验任务主要是图像分类和目标检测,分别在ImageNet和COCO数据集上进行。
首先是图像分类的实验结果。
△表1 对于ResnetV2-50和InceptionV3,在ImageNet分类任务中,FRN层在批量大小方面优于BN和其他归一化方法。
ImageNet分类数据集包含1000个类,研究人员对1.28M大小的图像进行了训练,并对50K验证图像进行结果报告。图像的大小为299X299。
与FRN层做比较的是一些常规的归一化方法,包括批量归一化(Batchnorm)、批量再归一化(BatchRenorm)、群组归一化(Groupnorm)、层归一化(Layernorm)和实例归一化(Instancenorm)。
从实验结果可以看到,即使是在大批量规模的情况下,FRN的方法都优于其它主流的归一化方法。
并且在ResnetV2-50和Incepetion V3上,都表现出了良好的性能优势。这表明批量依赖性训练对于高性能来说是不必要的。
下图展示了使用Resnet V2-50结构的各种归一化方法的训练和验证曲线。
△使用ResnetV2-50模型进行Imagenet分类的各种归一化方法的训练曲线和验证曲线的比较。
不难看出,FRN层实现了更高的训练和验证精度,这表明去除随机批量依赖性可以做到更简、更优,从而使模型得到更好的训练。
接下来是在COCO数据集上的目标检测任务。
△表2 在COCO数据集上的目标检测任务结果。
研究人员使用80个对象类在COCO数据集上执行实验。
从实验结果中,不难看出,FRN层在所有批量大小上都优于其它方法。
值得注意的是,当BN在小批处理中表现出显著的性能下降时,FRN表现出相对较小的性能下降,并且始终优于GN。
FRN层长什么样?
之前已经提到,FRN层是FRN和TLU的结合。所以,该方法的结构如下图所示:
△研究人员所提出的FRN层示意图。
研究人员假设要处理的是前馈神经网络,在形状为 B,W,H,C 的卷积运算区域4D张量X之后产生的滤波器响应。
其中,B是小批量的大小,W、H是map的空间范围,C是卷积中使用的滤波器数。C也指输出通道。
对于上述提出的归一化方案,研究人员指出了几点值得注意的地方:
1、与其他归一化方案类似,滤波器响应归一化消除了滤波器权重和预激活的尺度效应(scaling effect)。 2、所提出方法的主要区别之一是,没有在归一化之前移除平均值。 3、这个归一化方法是在每个通道的基础上进行的。 4、虽然乍一看,FRN和之前有人提出的局部响应归一化(LRN)非常相似,但是LRN在相同的空间位置上对相邻通道进行归一化,而FRN则是对空间范围进行全局归一化。
方法虽好,并不通用
虽然FRN层在实验上取得了较大的进步,但网友也对此提出质疑。
作者仅报告了不超过32的批量处理大小。不知道它是否可与大型(常用)批量处理大小(64,128,256,512等)相提并论。 此方法不适用于非卷积运算,并且该运算的方差对输出通道大小敏感。 数据集中的实验非常有限。
当然,研究人员在论文中也提到,FRN层这个方法并不是通用的,例如,层归一化(LN)在NLP任务中就非常好用。
其它领域中FRN层的表现,也是这项工作未来所要探索的内容。
那么,谷歌这次提出的新方法,对你的研究有帮助吗?
传送门
论文: https://arxiv.org/abs/1911.09737
Twitter: https://twitter.com/rasbt/status/1200808727613452291
Reddit: https://www.reddit.com/r/MachineLearning/comments/e4g50h/r_filter_response_normalization_layer_eliminating/