码字不易,欢迎给个赞!

欢迎交流与转载,文章会同步发布在公众号:机器学习算法工程师(Jeemy110)


目前主流的深度学习模型都会采用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。

从BN到GN

训练数据进行归一化处理有助于模型的优化,对于深度模型来说,归一化中间特征同样有助于训练,BN层就是最常用的归一化方法。BN层通过计算batch中所有样本的每个channel上的均值和方差来进行归一化,其计算方式如下所示:

以CNN模型为例,中间特征的维度为[B, H, W, C],BN首先在计算在(N H, W)维度上的均值

和方差
,然后各个通道上(C维度)进行标准归一化。最后对归一化的特征进行放缩和平移(scale and shift),这里
是可学习的参数(参数大小为C)。

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

解决BN上述问题的另外一个方向是避免在batch维度进行归一化,这样当然就不会带来训练和测试的不一致性问题。这些方法包括Layer Normalization (LN),Instance Normalization (IN)以及最新的Group Normalization(GN),这些方法与BN的区别可以从图1中看出来:

图1 不同的归一化方法对比

这些方法处理方式和BN类似,但是归一化的维度不一样,BN是在(N, H, W)维度上,LN是在(H,W,C)维度上,IN是在(H,W)维度上,GN更巧妙,其通过对C分组,此时特征可以从[N, H, W, C]变成[N, H, W, G, C/G],GN的计算是在[H, W, G]维度上。LN,IN以及GN都没有在B维度上进行归一化,所以不会有BN的问题。相比之下,GN是更常用的,GN和BN的效果对比如图2所示:

图2 ResNet50模型采用BN和GN在ImageNet上不同batch size下的性能差异

从图中可以看到GN基本不受batch size的影响,而BN在batch size较小时性能大幅度恶化,但是在较大batch size,BN的效果是稍好于GN的。

解决BN在小batch性能较差的另外一个方向是直接降低训练和测试之间不一致性,比较常用的方法是Batch Renormalization (BR),它主要的思路是限制训练过程中batch统计量的值范围。另外的一个解决办法是采用多卡BN方法训练,相当于增大batch size。

FRN

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

图3 FRN层结构示意图

其中FRN的操作是(H, W)维度上的,即对每个样例的每个channel单独进行归一化,这里

就是一个N维度(HxW)的向量,所以FRN没有BN层对batch依赖的问题。BN层采用归一化方法是减去均值然后除以标准差,而FRN却不同,这里没有减去均值操作,公式中的
的二次范数的平均值。这种归一化方式类似BN可以用来消除中间操作(卷积和非线性激活)带来的尺度问题,有助于模型训练。 公式里的
是一个很小的正常量,以防止除0。FRN是在H,W两个维度上归一化,一般情况下网络的特征图大小N=HxW较大,但是有时候可能会出现1x1的情况,比如InceptionV3和VGG网络,此时
就比较关键,图4给出了当N=1时不同
下归一化的结果。当
值较小时,归一化相当于一个符号函数(sign function),这时候梯度几乎为0,严重影响模型训练;当值较大时,曲线变得更圆滑,此时的梯度利于模型学习。对于这种情况,论文建议采用一个可学习的
。对于不含有1x1特征的模型,论文中采用的是一个常量值1e-6。值得说明的是IN也是在H,W维度上进行归一化,但是会减去均值,对于N=1的情况归一化的结果是0,但FRN可以避免这个问题。
图4 当N=1时不同e对FRN归一化的影响

归一化之后同样需要进行缩放和平移变换,这里的

也是可学习的参数(参数大小为C):

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

这里的

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

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

def 

FRN层的效果也是极好的,下图给出了FRN与BN和GN的效果对比:

图5 ResNet50模型采用FRN,BN,GN在ImageNet上不同batch size下的性能差异

可以看到FRN是不受batch size的影响,而且效果是超越BN的。论文中还有更多的对比试验证明FRN的优越性。

小结

BN目前依然是最常用的归一化方法,GN虽然不会受batch size的影响,但是目前还没大范围采用,不知道FRN的提出会不会替代BN,这需要时间的检验。

参考

  1. Group Normalization.
  2. Filter Response Normalization Layer: Eliminating Batch Dependence in the Training of Deep Neural Networks.
  3. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.

均值归一化_超越BN和GN!谷歌提出新的归一化层:FRN相关推荐

  1. [概念]深度学习5种标准化层BN、GN、LN、IN、SN + 谷歌提出新的标准化层:FRN

    标准化和归一化的区别? 对图像做数据预处理,最常见的对图像预处理方法有两种,正常白化处理又叫图像标准化处理,另外一种方法叫做归一化处理 而所谓的标准化其实是因为它们都是用标准正太分布的公式如下,标准化 ...

  2. 谷歌提出新分类损失函数:将噪声对训练结果影响降到最低

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 训练数据集里的标签通常不会都是正确的,比如图像分类,如果有人错误地把猫标记成狗,将会对训练结果造成不良的影响. 如何在不改变训练样本的情况 ...

  3. 均值归一化_不能不用也不可乱用的标准化和归一化处理

    今天这篇还是讲特征工程那一堆事,准确点说是数据预处理范畴内的,在做PCA降维时,我发现利用方差过滤出的主成分和利用PCA降维得到的主成分对应位置的方差有些不同: VarianceThreshold:[ ...

  4. 超越Swin Transformer!谷歌提出了收敛更快、鲁棒性更强、性能更强的NesT

    [导读]谷歌&罗格斯大学的研究员对ViT领域的分层结构设计进行了反思与探索,提出了一种简单的结构NesT,方法凭借68M参数取得了超越Swin Transformer的性能. 文章链接:htt ...

  5. r语言归一化_生物信息学之RMA(Robust Multi-Array Average)算法的归一化和最终计算过程...

    上一篇介绍了RMA算法的背景校正部分.接下来是归一化和最终计算过程. 首先是归一化: 归一化就是将不同组之间的数据统一.因为组之间的数据虽然经过背景校正之后去除了部分噪音. 但是如果某一组自身因为内因 ...

  6. 谷歌提出新框架Soft Diffusion:从通用扩散过程中正确调度、学习和采样

    关注公众号,发现CV技术之美 本文转自机器之心,编辑蛋酱. 近来,扩散模型成为 AI 领域的研究热点.谷歌研究院和 UT-Austin 的研究者在最新的一项研究中充分考虑了「损坏」过程,并提出了一个用 ...

  7. 超越BN-ReLU!谷歌大脑等提出EvoNorms:归一化激活层的进化

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:机器之心  | 作者:Hanxiao Liu等 最近,谷 ...

  8. 均值归一化_深度神经网络中的归一化技术

    为什么我们需要归一化? 归一化一直是深度学习研究的一个活跃领域.归一化技术可以大大减少机器学习模型的训练时间.让我们看看归一化的一些好处. 它对每个特征进行归一化,以便它们保持每个特征的贡献,因为某些 ...

  9. 均值归一化_数据归一化

    数据归一化 [TOC] 将所有的数据映射到同一尺度. ​ 首先,为什么需要数据归一化?举个简答的例子.样本间的距离时间所主导,这样在样本1以[1, 200]输入到模型中去的时候,由于200可能会直接忽 ...

最新文章

  1. Matlab与线性代数 -- 稀疏矩阵的图形显示
  2. pat 1060. Are They Equal (25)
  3. flex4.6 图表 在module中 x轴旋转正确的做法
  4. Reporting Services系列五:WebService接口
  5. 华东政法大学教学管理系统_中国科学技术大学1022万采购3包生命科学仪器
  6. 配置所需要的依赖_配置spring所需要的jar包
  7. U-Net及使用keras搭建U-Net分割网络以及改进和问题纪实
  8. UVA 10529 Dumb Bones 可能性dp 需求预期
  9. 现场取证之流量分析总结
  10. 怎么手写 xpath
  11. 计算机专业大学生怎么学习?
  12. IcedTea6 1.7.3
  13. HTML编辑器-Bluefish 2.0.1 发布
  14. QQGame找茬游戏辅助工具
  15. win10此计算机未连接到网络,win10连接无线wifi时提示无法连接到此网络解决方法...
  16. 上海住房公积金的提取条件
  17. PC党福音,育碧五款游戏大作登场E3 2014
  18. 使用MOD13A1产品NDVI数据计算植被覆盖度
  19. 大流量卡介绍:网上的大流量卡都是怎么来的?
  20. android杂凑算法,SM3密码杂凑算法分析

热门文章

  1. 基于libmad的MP3解码播放器
  2. 推荐 7 个学习 TypeScript 的宝库,2021 是时候给自己加薪了!
  3. sonarqube通过sonarqube maven插件分析maven工程使用的mvn命令示例
  4. K8S部署工具:KubeOperator集群部署
  5. eclipse常用功能:代码重构(变量批量重命名)、自定义注释、代码模板、打开断言
  6. 什么原因会导致minor gc运行频繁?
  7. 优惠券卡包应用数据库字段设计/系统架构设计/缓存层设计方案
  8. Java基础--内部类及匿名内部类
  9. oracle逻辑备份和物理备份,oracle数据库物理备份和逻辑备份区别
  10. python多线程并发编程技术_同步线程 - Python并发编程教程™