Filter Response Normalization Layer(FRN)

一.概述

目前主流的深度学习模型都会采用BN层(Batch Normalization)来加速模型训练以及提升模型效果,对于CNN模型,BN层已经上成为了标配。但是BN层在训练过程中需要在batch上计算中间统计量,这使得BN层严重依赖batch,造成训练和测试的不一致性,当训练batch size较小,往往会恶化性能。GN(Group Normalization)通过将特征在channel维度分组来解决这一问题,GN在batch size不同时性能是一致的,但对于大batch size,GN仍然难以匹敌BN。这里我们要介绍的是谷歌提出的一种新的归一化方法FRN,和GN一样不依赖batch,但是性能却优于BN和GN。

FRN的效果如下图所示:

                   

本文的主要工作如下:

  1. FRN是一种pre-channel的归一化方法,提升了准确率
  2.  提出了TLU,在大的batchsize上表现超过了BN,是FRN的一部分

在related work中,几种方法已经被提出去解决小batch_size效果不好的情况:

1.Methods reducing train-test discrepancy in batch normalization

减少模型训练和测试时候batch_size的差异.

  1. 由于mini-batch的随机性和有些样本非独立同分布所导致的。采用Batch Renormalization (BR) 的方法,即为通过限制mini-batch到一个确定的范围内和通过限制训练期间小批量统计数据的变化.该方案的一个关键的好处即为模型在测试时和传统的BN一样.
  2. 训练过程不变,对于测试过程做出改变.法1和法2对于小的batch_size仍然表现出性能下降
  3. 多卡BN

2.Methods avoiding normalization using mini-batches

避免使用min-batch来进行归一化。方法有LN,IN,GN等。

3.Other approaches

  1. Weight Normalization 
  2. Normalization Propagation

BN的一个问题是训练时batch size一般较大,但是测试时batch size一般为1,而均值和方差的计算依赖batch,这将导致训练和测试不一致。BN的解决方案是在训练时估计一个均值和方差量来作为测试时的归一化参数,一般对每次mini-batch的均值和方差进行指数加权平均来得到这个量。虽然解决了训练和测试的不一致性,但是BN对于batch size比较敏感,当batch size较小时,模型性能会明显恶化。对于一个比较大的模型,由于显存限制,batch size难以很大,比如目标检测模型,这时候BN层可能会成为一种限制。

二.详解

 FRN旨在于消除batch_size对于归一化的影响,但是不能牺牲BN在大的batch_size上所获得性能.

谷歌的提出的FRN层包括归一化层FRN(Filter Response Normalization)和激活层TLU(Thresholded Linear Unit),如下图所示。FRN层不仅消除了模型训练过程中对batch的依赖,而且当batch size较大时性能优于BN。

                         

其中FRN的操作是(H, W)维度上的,即对每个样例的每个channel单独进行归一化,这里 x 就是一个N维度(HxW)的向量,所以FRN没有BN层对batch依赖的问题。BN层采用归一化方法是减去均值然后除以标准差,而FRN却不同,这里没有减去均值操作,公式中的 v^2是x 的二次范数的平均值。这种归一化方式类似BN可以用来消除中间操作(卷积和非线性激活)带来的尺度问题,有助于模型训练。 公式里的\epsilon是一个很小的正常量,以防止除0。FRN是在H,W两个维度上归一化,一般情况下网络的特征图大小N=HxW较大,但是有时候可能会出现1x1的情况,比如InceptionV3和VGG网络,此时\epsilon就比较关键,下图给出了当N=1时不同\epsilon下归一化的结果。

                            

\epsilon值较小时,归一化相当于一个符号函数(sign function),这时候梯度几乎为0,严重影响模型训练;当值较大时,曲线变得更圆滑,此时的梯度利于模型学习。对于这种情况,论文建议采用一个可学习的\epsilon。对于不含有1x1特征的模型,论文中采用的是一个常量值1e-6。值得说明的是IN也是在H,W维度上进行归一化,但是会减去均值,对于N=1的情况归一化的结果是0,但FRN可以避免这个问题。 

归一化之后同样需要进行缩放和平移变换,这里的\gamma\beta也是可学习的参数(参数大小为C):

                                                                              

FRN缺少去均值的操作,这可能使得归一化的结果任意地偏移0,如果FRN之后是ReLU激活层,可能产生很多0值,这对于模型训练和性能是不利的。为了解决这个问题,FRN之后采用的阈值化的ReLU,即TLU: 

                                                 

这里的\tau是一个可学习的参数。论文中发现FRN之后采用TLU对于提升性能是至关重要的。

FRN层的实现也是极其容易,在TensorFlow中的实现代码如下所示:

                        

 

三.实验

1.ImageNet Classification

                     

                    

                  

                       

                           

                             

                            

 2.Object Detection on COCO

                           

Batch Normalization(批归一化)、Layer Normalization(层归一化)、Instance Normalization(实例归一化)、Group Normalization(组归一化)是常用的归一化技术,用于在神经网络中提升训练效果和稳定性。它们的区别如下: 1. Batch Normalization(批归一化): - 对每个批次的样本进行归一化,即在每个批次上计算均值和方差。 - 在训练过程中,使用当前批次的均值和方差来进行归一化;在测试过程中,使用整个训练集的均值和方差来进行归一化。 - 常用于卷积神经网络中,对每个通道进行归一化。 2. Layer Normalization(层归一化): - 对每个样本的特征维度进行归一化,即在每个样本上计算均值和方差。 - 在训练和测试过程中都使用当前样本的均值和方差来进行归一化。 - 主要应用于循环神经网络(RNN)等不同长度序列数据中。 3. Instance Normalization(实例归一化): - 对每个样本的每个通道进行归一化,即在每个样本的每个通道上计算均值和方差。 - 在训练和测试过程中都使用当前样本的均值和方差来进行归一化。 - 主要应用于图像风格迁移等任务。 4. Group Normalization(组归一化): - 将通道分成多个组,然后在每个组内对每个样本进行归一化,即在每个样本的每个组上计算均值和方差。 - 在训练和测试过程中都使用当前样本的均值和方差来进行归一化。 - 主要用于通道数较少的情况,例如小型网络或者输入数据通道较少的情况。 总结起来,这些归一化方法的区别在于对数据的归一化范围和维度的不同处理方式,适用于不同类型的神经网络和数据。具体选择哪种归一化方法取决于具体的应用场景和网络结构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值