作者 | G-kdom编辑 | 唐里

公众号 | AI科技评论

本文转自知乎作者G-kdom文章:常用的 Normalization 方法:BN、LN、IN、GN。

文章地址:https://zhuanlan.zhihu.com/p/72589565

常用的Normalization方法主要有:Batch Normalization(BN,2015年)、Layer Normalization(LN,2016年)、Instance Normalization(IN,2017年)、Group Normalization(GN,2018年)。它们都是从激活函数的输入来考虑、做文章的,以不同的方式对激活函数的输入进行 Norm 的。我们将输入的 feature map shape 记为[N, C, H, W],其中N表示batch size,即N个样本;C表示通道数;H、W分别表示特征图的高度、宽度。这几个方法主要的区别就是在:1. BN是在batch上,对N、H、W做归一化,而保留通道 C 的维度。BN对较小的batch size效果不好。BN适用于固定深度的前向神经网络,如CNN,不适用于RNN;2. LN在通道方向上,对C、H、W归一化,主要对RNN效果明显;3. IN在图像像素上,对H、W做归一化,用在风格化迁移;4. GN将channel分组,然后再做归一化。每个子图表示一个特征图,其中N为批量,C为通道,(H,W)为特征图的高度和宽度。通过蓝色部分的值来计算均值和方差,从而进行归一化。如果把特征图比喻成一摞书,这摞书总共有 N 本,每本有 C 页,每页有 H 行,每行 有W 个字符。1. BN 求均值时,相当于把这些书按页码一一对应地加起来(例如第1本书第36页,第2本书第36页......),再除以每个页码下的字符总数:N×H×W,因此可以把 BN 看成求“平均书”的操作(注意这个“平均书”每页只有一个字),求标准差时也是同理。2. LN 求均值时,相当于把每一本书的所有字加起来,再除以这本书的字符总数:C×H×W,即求整本书的“平均字”,求标准差时也是同理。3. IN 求均值时,相当于把一页书中所有字加起来,再除以该页的总字数:H×W,即求每页书的“平均字”,求标准差时也是同理。4. GN 相当于把一本 C 页的书平均分成 G 份,每份成为有 C/G 页的小册子,求每个小册子的“平均字”和字的“标准差”。  一、 Batch Normalization, BN (‘重点、重点、重点’,重要的事情说三遍)论文链接:https://arxiv.org/pdf/1502.03167.pdf为什么要进行BN呢?(1)在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。(2)Internal Covariate Shift (ICS) 问题:在训练的过程中,激活函数会改变各层数据的分布,随着网络的加深,这种改变(差异)会越来越大,使模型训练起来特别困难,收敛速度很慢,会出现梯度消失的问题。BN的主要思想:针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,‘强迫’数据保持均值为0,方差为1的正态分布,避免发生梯度消失。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 ...... 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值(注意是除以 N×H×W 而不是单纯除以 N,最后得到的是一个代表这个 batch 第1个通道平均值的数字,而不是一个 H×W 的矩阵)。求通道 1 的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。BN的使用位置:全连接层或卷积操作之后,激活函数之前。BN算法过程:

  • 沿着通道计算每个batch的均值μ

  • 沿着通道计算每个batch的方差σ²

  • 做归一化

  • 加入缩放和平移变量 γ 和 β

其中 ε 是一个很小的正值,比如 。加入缩放和平移变量的原因是:保证每一次数据经过归一化后还保留原有学习来的特征,同时又能完成归一化操作,加速训练。 这两个参数是用来学习的参数。

BN的作用:

(1)允许较大的学习率;

(2)减弱对初始化的强依赖性

(3)保持隐藏层中数值的均值、方差不变,让数值更稳定,为后面网络提供坚实的基础;

(4)有轻微的正则化作用(相当于给隐藏层加入噪声,类似Dropout)

BN存在的问题:

(1)每次是在一个batch上计算均值、方差,如果batch size太小,则计算的均值、方差不足以代表整个数据分布。

(2)batch size太大:会超过内存容量;需要跑更多的epoch,导致总训练时间变长;会直接固定梯度下降的方向,导致很难更新。

  二、 Layer Normalization, LN

论文链接:https://arxiv.org/pdf/1607.06450v1.pdf

针对BN不适用于深度不固定的网络(sequence长度不一致,如RNN),LN对深度网络的某一层的所有神经元的输入按以下公式进行normalization操作。

LN中同层神经元的输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差。对于特征图 ,LN 对每个样本的 C、H、W 维度上的数据求均值和标准差,保留 N 维度。其均值和标准差公式为:

Layer Normalization (LN) 的一个优势是不需要批训练,在单条数据内部就能归一化。LN不依赖于batch size和输入sequence的长度,因此可以用于batch size为1和RNN中。LN用于RNN效果比较明显,但是在CNN上,效果不如BN。

  三、 Instance Normalization, IN

论文链接:https://arxiv.org/pdf/1607.08022.pdf

IN针对图像像素做normalization,最初用于图像的风格化迁移。在图像风格化中,生成结果主要依赖于某个图像实例,feature map 的各个 channel 的均值和方差会影响到最终生成图像的风格。所以对整个batch归一化不适合图像风格化中,因而对H、W做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。

对于,IN 对每个样本的 H、W 维度的数据求均值和标准差,保留 N 、C 维度,也就是说,它只在 channel 内部求均值和标准差,其公式如下:

  四、 Group Normalization, GN(拿小本本get一下)

论文链接:https://arxiv.org/pdf/1803.08494.pdf

GN是为了解决BN对较小的mini-batch size效果差的问题。GN适用于占用显存比较大的任务,例如图像分割。对这类任务,可能 batch size 只能是个位数,再大显存就不够用了。而当 batch size 是个位数时,BN 的表现很差,因为没办法通过几个样本的数据量,来近似总体的均值和标准差。GN 也是独立于 batch 的,它是 LN 和 IN 的折中。

GN的主要思想:在 channel 方向 group,然后每个 group 内做 Norm,计算的均值和方差,这样就与batch size无关,不受其约束。具体方法:GN 计算均值和标准差时,把每一个样本 feature map 的 channel 分成 G 组,每组将有 C/G 个 channel,然后将这些 channel 中的元素求均值和标准差。各组 channel 用其对应的归一化参数独立地归一化。伪代码如下:

代码如下:

def GroupNorm(x, gamma, beta, G=16):

# x_shape:[N, C, H, W]results = 0.eps = 1e-5x = np.reshape(x, (x.shape[0], G, x.shape[1]/16, x.shape[2], x.shape[3]))

x_mean = np.mean(x, axis=(2, 3, 4), keepdims=True)x_var = np.var(x, axis=(2, 3, 4), keepdims=True0)x_normalized = (x - x_mean) / np.sqrt(x_var + eps)results = gamma * x_normalized + betareturn results

  总结

我们将feature map shape 记为[N, C, H, W]。如果把特征图比喻成一摞书,这摞书总共有 N 本,每本有 C 页,每页有 H 行,每行 有W 个字符。

1. BN是在batch上,对N、H、W做归一化,而保留通道 C 的维度。BN 相当于把这些书按页码一一对应地加起来,再除以每个页码下的字符总数:N×H×W。2. LN在通道方向上,对C、H、W归一化。LN 相当于把每一本书的所有字加起来,再除以这本书的字符总数:C×H×W。3. IN在图像像素上,对H、W做归一化。IN 相当于把一页书中所有字加起来,再除以该页的总字数:H×W。4. GN将channel分组,然后再做归一化。GN 相当于把一本 C 页的书平均分成 G 份,每份成为有 C/G 页的小册子,对每个小册子做Norm。另外,还需要注意它们的映射参数γ和β的区别:对于 BN,IN,GN, 其γ和β都是维度等于通道数 C 的向量。而对于 LN,其γ和β都是维度等于 normalized_shape 的矩阵。最后,BN 和 IN 可以设置参数:momentum和track_running_stats来获得在整体数据上更准确的均值和标准差。LN 和 GN 只能计算当前 batch 内数据的真实均值和标准差。—完—

为您推荐

一文读懂 12种卷积方法这位90后学霸,即将任教麻省理工GitHub 3W 星超实用技术面试手册,看这篇就够了如何利用Python开发人工智能入门项目【微软】AI-神经网络基本原理简明教程

batch normalization_常用的 Normalization 方法:BN、LN、IN、GN相关推荐

  1. Normalization 归一化方法 BN LN IN GN

    1.分类 BN是在batch上,对N.H.W做归一化,而保留通道 C 的维度.BN对较小的batch size效果不好.BN适用于固定深度的前向神经网络,如CNN,不适用于RNN: LN在通道方向上, ...

  2. 深度学习中的归一化方法BN,LN,IN,GN

    文章目录 前言 一.BN 二.LN 三.IN 四.GN 前言 归一化层,目前主要有这几个方法, 1.Batch Normalization(2015) 2.Layer Normalization(20 ...

  3. 常用的 Normalization 方法:BN、LN、IN、GN(附代码&链接)

    来源:知乎 本文约2700字,建议阅读8分钟. 本文带你了解并区分常用的Normalization. 常用的Normalization方法主要有: Batch Normalization(BN,201 ...

  4. 深度学习归一化算法详解(BN,LN,IN,GN)

    目录 一.Batch Normalization(BN) 1.1为什么提出BN? 1.2BN的基本原理和公式 1.3BN在神经网络中的实现 1.4BN的优点和缺点 二.LN,IN,GN的原理和适用范围 ...

  5. BN,LN,IN,GN的理解和用法

    绿色区域表示将该区域作用域(四种方法都贯穿了w,h维度),即将该区域数值进行归一化,变为均值为0,标准差为1.BN的作用区域时N,W,H,表示一个batch数据的每一个通道均值为0,标准差为1:LN则 ...

  6. 常用 Normalization 方法的总结与思考:BN、LN、IN、GN

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|深度学习这件小事 常用的Normalization方法主 ...

  7. 关于深度网络中的Normalization:BN/RBN/WN/LN的记录

    深度前馈网络中前层输入的变化往往会引起后面层的变化,后面的层需要不断地调整自己的参数去适应前层的输入变化,这被称为internal covariance shift.这不仅会使网络训练变得缓慢,同时会 ...

  8. 论文分享:「FED BN」使用LOCAL BATCH NORMALIZATION方法解决Non-iid问题

    ‍ ‍ 本次分享内容基于ICLR 2021收录的一篇文章:<FED BN: FEDERATED LEARNING ON NON-IID FEATURES VIA LOCAL BATCH NORM ...

  9. 【深度学习】深度学习的归一化方法的演变(局部响应LRN,BN,LN, IN, GN, FRN, WN, BRN, CBN, CmBN)

    [深度学习]深度学习的归一化方法的演变(局部响应LRN,BN,LN, IN, GN, FRN, WN, BRN, CBN, CmBN) 文章目录 [深度学习]深度学习的归一化方法的演变(局部响应LRN ...

最新文章

  1. app、H5、safari、appstore应用主页评分页之间拉起调用、打开手机某些系统功能、app打开文档
  2. 136_Power BI 自定义矩阵热力图
  3. CTFbugku--菜鸟初学
  4. shell脚本发邮件内容html,Shell发送邮件以HTML展示
  5. PE详解之IMAGE_NT_HEADERS结构定义即各个属性的作用(PE详解02)
  6. java中的IO流之文件复制
  7. SPLUS XML操作
  8. 会声会影制作转场特效及视频转场的应用
  9. 卸载CDH5.14.2
  10. 回顾一年的工作历程_回顾历程、总结经验、展望未来
  11. 【DL-安装遇错】解决出现 pip‘s dependency resolver does not currently take into account all the packages that..
  12. 牛客刷题——两种排序方法
  13. 转换字母大小写(小写转大写)
  14. 【牛客】矩阵幂(C++)
  15. python爬虫爬取网易云音乐下载_Python爬虫实践-网易云音乐!没有版权又如何!照样爬取!...
  16. HanLP --- 依存句法分析
  17. Java中HashMap底层实现原理
  18. 【自动控制原理】【计算机控制技术】通俗易懂地理解Z变换
  19. 80端口web服务攻击痕迹
  20. JAVA优秀的开源项目git源码

热门文章

  1. centos rsyslog mysql_centos7+rsyslog+loganalyzer+mysql 搭建rsyslog日志服务器
  2. android 获取u盘名字_android 获取U盘路径
  3. python计算2的平方代码_python – NumPy计算向量的范数2的平方
  4. mysql数据库项目式教程答案_MySQL数据库项目式教程(高职)
  5. Python教程:文件路径/目录获取教程
  6. Python基础教程:in和not in操作
  7. Python教程:import与from ... import ...的区别
  8. python约束 与MD5加密写法
  9. Python文件的多种读写方式及游标
  10. python关键字与标识符