前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >常用的 Normalization 方法:BN、LN、IN、GN

常用的 Normalization 方法:BN、LN、IN、GN

作者头像
AI科技评论
发布于 2019-10-01 11:43:16
发布于 2019-10-01 11:43:16
4.1K00
代码可运行
举报
文章被收录于专栏:AI科技评论AI科技评论
运行总次数:0
代码可运行

作者 | G-kdom 编辑 | 唐里

本文转自知乎作者G-kdom文章:常用的 Normalization 方法:BN、LN、IN、GN。AI科技评论获授权转载,如需转载请联系原作者。

文章地址: 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 用其对应的归一化参数独立地归一化。

伪代码如下:

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def GroupNorm(x, gamma, beta, G=16):

    # x_shape:[N, C, H, W]
    results = 0.
    eps = 1e-5
    x = 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 + beta
    return 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 内数据的真实均值和标准差。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技评论 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
来聊聊批归一化BN(Batch Normalization)层
Batch Normalization (BN) 是最早出现的,也通常是效果最好的归一化方式。feature map:
AI算法修炼营
2020/05/08
3.3K0
BN,LN,IN,GN都是什么?不同归一化方法的比较
批归一化(BN)已经成为许多先进深度学习模型的重要组成部分,特别是在计算机视觉领域。它通过批处理中计算的平均值和方差来规范化层输入,因此得名。要使BN工作,批大小必须足够大,通常至少为32。但是,在一些情况下,我们不得不满足于小批量:
deephub
2020/06/28
3.2K0
BN,LN,IN,GN都是什么?不同归一化方法的比较
如何区分并记住常见的几种 Normalization 算法
七期飞跃计划还剩12个名额,联系小编,获取你的专属算法工程师学习计划(联系小编SIGAI_NO1)
SIGAI学习与实践平台
2019/07/01
2.3K0
如何区分并记住常见的几种 Normalization 算法
Research on Batch Normalization
摘要:本文主要针对Batch Normalization技术,探究其对神经网络的作用,总结BN能够加速神经网络训练的原因,并对Internal covariate shift的情况进行探讨,同时探讨BN在Tensorflow中的实现。最后,简单介绍近年来对BN的改进,如Layer Norm和Group Norm。
不高不富不帅的陈政_
2019/06/25
1K0
Research on Batch Normalization
全面解读Group Normalization,对比BN,LN,IN
Face book AI research(FAIR)吴育昕-何恺明联合推出重磅新作Group Normalization(GN),提出使用Group Normalization 替代深度学习里程碑式的工作Batch normalization,本文将从以下三个方面为读者详细解读此篇文章:
狼啸风云
2020/03/30
4K1
全面解读Group Normalization,对比BN,LN,IN
标准化层(BN,LN,IN,GN)介绍及代码实现
在神经网络搭建时,通常在卷积或者RNN后都会添加一层标准化层以及激活层。今天介绍下常用标准化层--batchNorm,LayerNorm,InstanceNorm,GroupNorm的实现原理和代码。
languageX
2021/03/13
12.2K0
炼丹知识点:秘制Normalization
在实践中,在不同阶段对数据进行不同的正则化操作会有非常大的影响,在正确的位置进行正确的正则化操作可以为模型带来巨大的提升。
炼丹笔记
2021/12/02
6190
炼丹知识点:秘制Normalization
【AI初识境】深度学习模型中的Normalization,你懂了多少?
Normalization是一个统计学中的概念,我们可以叫它归一化或者规范化,它并不是一个完全定义好的数学操作(如加减乘除)。它通过将数据进行偏移和尺度缩放调整,在数据预处理时是非常常见的操作,在网络的中间层如今也很频繁的被使用。
用户1508658
2019/07/26
1.5K0
【AI初识境】深度学习模型中的Normalization,你懂了多少?
20190624一周文章阅读和收藏: 图像分类、检测,NLP,Python编程
打算每周整理下这周看过觉得不错的文章,主要是机器学习、深度学习、Python编程方向的,包括但不局限于论文、综述、有趣的项目以及工具教程推荐,目前这个系列的名字还没想好,就先这样命名吧
kbsc13
2019/08/16
7660
想读懂YOLOV4,你需要先了解下列技术(二)
本文YOLOV4论文总结分析的第二篇,其主要分析了数据增强和特征擦除手段,包括random erasing、cutout、hide-and-seek、grid mask、Adversarial Erasing、mixup、cutmix、mosaic、Stylized-ImageNet、label smooth、dropout和dropblock,本文分析各种BN改进、网络感受野增强技巧、注意力机制和特征融合技巧。
磐创AI
2021/08/05
4830
想读懂YOLOV4,你需要先了解下列技术(二)
深度学习中归一化/标准化方法
从定义上来讲,归一化是指把数据转化为长度为1或者原点附近的小区间,而标准化是指将数据转化为均值为0,标准差为1的数据。。归一化与标准化实质上都是某种数据变化,无论是线性变化还是非线性变化,其都不会改变原始数据中的数值排序,它们都能将特征值转换到同一量纲下。由于归一化是将数据映射到某一特定区间内,因此其缩放范围仅由数据中的极值决定,而标准化是将源数据转化为均值为0,方差为1的分布,其涉及计算数据的均值和标准差,每个样本点都会对标准化过程产生影响。
Tom2Code
2022/11/21
1.4K0
小白学图像 | Group Normalization详解+PyTorch代码
BN于2015年由 Google 提出,Google在ICML论文中描述的非常清晰,即在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1。最后的“scale and shift”操作则是为了训练所需而“刻意”加入的BN能够有可能还原最初的输入,从而保证数据中有用信息的留存。
机器学习炼丹术
2020/08/13
1.7K0
归一化 Normalization 的发展历程
LRN 最早应该是出现在 2012 年的 AlexNet 中的,其主要思想是:借鉴“侧抑制”(Lateral Inhibitio)的思想实现局部神经元抑制,即使得局部的神经元产生竞争机制,使其中相应值较大的将变得更大,响应值较小的将变得更小。此外,作者在论文中指出使用 LRN 能减少其 AlexNet 在 ILSVRC-2012 上的 top-1 错误率 1.4% 和 top-5 错误率 1.2%,效果较为显著。
公众号机器学习与AI生成创作
2020/12/18
9120
归一化 Normalization 的发展历程
深度学习基础知识(三)--- Normalization 规范化 操作
知乎专栏 - 张俊林 - 深度学习中的Normalization模型 - https://zhuanlan.zhihu.com/p/43200897
TeeyoHuang
2020/01/02
2.2K0
Batch Normalization
本篇博文主要讲解2015年深度学习领域,非常值得学习的一篇文献:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》,这个算法目前已经被大量的应用,最新的文献算法很多都会引用这个算法,进行网络训练,可见其强大之处非同一般啊。
GavinZhou
2019/05/26
6150
卷积神经网络CNN(2)—— BN(Batch Normalization) 原理与使用过程详解[通俗易懂]
Batch Normalization是由google提出的一种训练优化方法。参考论文:Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift 网上对BN解释详细的不多,大多从原理上解释,没有说出实际使用的过程,这里从what, why, how三个角度去解释BN。
全栈程序员站长
2022/09/09
1.7K0
一文搞懂归一化(PyTorch)
归一化技术通过调整输入数据的尺度,使数据分布范围趋于一致,从而提升模型的训练效率和泛化性能。常见的归一化方法包括批量归一化(BN)、层归一化(LN)、实例归一化(IN)和组归一化(GN)等。
福大大架构师每日一题
2025/03/24
1680
一文搞懂归一化(PyTorch)
从零开始深度学习(十六):批归一化(Batch Normalization)
文章首发于本人CSDN账号:https://blog.csdn.net/tefuirnever
我是管小亮
2020/04/20
2.6K0
扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization层
和卷积层相对应,每一种池化层都有1D,2D,3D三种类型,这里主要介绍2D处理图像的一个操作。1D和3D可以合理的类推。
机器学习炼丹术
2020/10/27
1.9K0
扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization层
【DL】规范化:你确定了解我吗?
Batch Normalization(以下简称 BN)出自 2015 年的一篇论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》,是最近几年来 DL 领域中非常重要的成功,并且已经被广泛证明其有效性和重要性。本篇文章将对此进行详细介绍,帮助大家更加深入的理解 BN。
阿泽 Crz
2020/07/21
1.1K0
【DL】规范化:你确定了解我吗?
推荐阅读
相关推荐
来聊聊批归一化BN(Batch Normalization)层
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验