BN的作用原理(BN、LN、IN和GN)

article/2025/10/6 17:14:10

目录

归一化

1.归一化含义

2.为什么要归一化?

3.为什么归一化能提高求解最优解速度?

为什么引入BN?

BN的作用原理

BN的优点

 BN的不足

BN、LN、IN和GN之间的区别

参考


归一化

1.归一化含义

  • 归纳统一样本的统计分布性。归一化在0~1之间是统计的概率分布,归一化-1~1之间是统计的坐标分布。
  • 无论是为了建模还是为了计算,首先基本度量单位要统一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测,且sigmoid函数的取值是0-1之间的,网络最后一个节点的输出也是如此,所以经常要对样本的输出归一化处理。
  • 归一化是统一在0-1之间的统计概率分布,当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减少,从而导致学习速度很慢。
  • 另外在数据中常存在奇异样本数据,奇异样本数据存在所引起的网络训练时间增加,并可能引起网络无法收敛。为了避免出现这种情况及后面数据处理的方便,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于0或与其均方差相比很小。

2.为什么要归一化?

  • 为了后面数据处理的方便,归一化的确可以避免- -些不必要的数值问题。
  • 为了程序运行时收敛加快。
  • 同一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准。 这算是应用层面的需求。
  • 避免神经元饱和。啥意思?就是当神经元的激活在接近0或者1时会饱和,在这些区域,梯度几乎为0,这样,在反向传播过程中,局部梯度就会接近0,这会有效地”杀死"梯度。
  • 保证输出数据中数值小的不被吞食。

3.为什么归一化能提高求解最优解速度?

        上图是代表数据是否均一化的最优解寻解过程(圆圈可以理解为等高线)。左图表示未经归一化操作的寻解过程,右图表示经过归一化后的寻解过程。
        当使用梯度下降法寻求最优解时,很有可能走"之字型"路线(垂直等高线走),从而导致需要迭代很多次才能收敛;而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,在梯度下降进行求解时能较快的收敛。
        因此如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。

为什么引入BN?

为加速网络的训练,在图像预处理时,我们就后对图像进行标准化操作,即image normalization,是的每张图片都能服从u均值σ标准差的分布。但是当图片输如到神经网络后,每经过一次卷积,数据就不会再服从该分布,这种现象叫做ICS(Internal Covariate Shift,内部协变量偏移),该现象会使输入分布变化,导致模型的训练困难,对深度神经网络影响极大,如左图所示,数据分布不统一,深层网络就需要去适应这些数据分布,从而导致网络训练速度慢。如果不进行归一化,直接进行激活,很可能一些新的数据会落入激活函数的饱和区,导致神经网络训练的梯度消失,如右图所示当feature map的数据为10的时候,就会落入饱和区,影响网络的训练效果。这个时候我们引入Batch Normalization的目的就是使我们卷积以后的feature map满足均值为0,方差为1的分布规律。BN本质是解决梯度消失的问题。

BN的作用原理

BN作用位置:BN是对同一个batch中不同样本图片(输入的image)之间的同一channel的神经元(像素)进行归一化。

如图所示,一个batch中有两个图片,每个图片有三个通道,我们进行BN的位置就是对该batch中不同图片的相同通道的像素进行归一化计算。

BN前向推导公式:

下面我们用一个例子来看看BN是如何计算的,以batchsize=2为例,每个feature map有两个通道。

首先对两个feature的相同位置的通道如channel1,计算整个channel1的均值u_{1}=1和方差\sigma _{1}^{2}=1,然后将channel1中每个像素减均值除标准差,得到右边归一化数据。同理,channel2做相同操作,得到归一化后的数据。最后将归一化后的每一个像素乘γ(缩放因子)加β(平移因子)得到BN的结果。

为什么引入γ和β?

  • BN首先是得输入Normalization,对数据的分布进行额外的约束,使其变成均值为0,方差为1的分布,增强模型的泛化能力。normalization缓解了ICS,使得每一层的输入变得稳定,但是同时也降低了模型的拟合能力,缺乏了数据原有的表达能力,使得底层学习到的信息丢失,并且均值为0,方差为1,在经过sigmoid的时候,容易陷入到其线性区域,破坏了之前学习到的特征分布。所以引入γ(缩放因子)和β(平移因子),恢复数据的表达能力,对规范后的数据进行线性变换,与之前的网络层解耦,从而更加有利于优化的过程,提高模型的泛化能力。

BN的优点

  • 减少梯度消失,加速网络训练,提高训练精度。
  • 防止过拟合。
  • 减少了对学习率的要求。可以使用初始很大的学习率或者选择了较小的学习率,算法也能够快速训练收敛。
  • 减少人为选择参数。减少对初始化的依赖,在某些情况下可以取消dropout和L2正则项参数,或者采取更小的L2正则约束参数。

为什么BN可以加速网络训练?

  • 低层的微弱变化会引起高层的输入分布的变化,高层的网络需要不断地调整去适应输入的变化。从而导致收敛速度慢,学习速度慢。所以在没有使用BN之前,我们都要选择一个小的学习率和合适的初始化参数。

 BN的不足

  • 当batch size较小时(如2、4),该batch数据的均值和方差的代表性较差,因此对最后的结果影响也较大。随着batch size越来越小,BN层所计算的统计信息的可靠性越来越差,这样就容易导致最后错误率的上升;而在batch size较大时则没有明显的差别。虽然在分类算法中一般的GPU显存都能cover住较大的batch设置,但是在目标检测、分割以及视频相关的算法中,由于输入图像较大、维度多样以及算法本身原因等,batch size一般都设置比较小,所以GN对于这种类型算法的改进应该比较明显。

    在这里插入图片描述

    如上图,可见 BN 随着 batchsize 减小,性能下降比较明显。
    由于BN训练的时候是基于一个 mini-batch 来计算均值和方差的,这相当于在梯度计算时引入噪声,如果 batchsize 很小的话, BN 就有很多不足。不适用于在线学习(batchsize = 1)当数据是大图片,并且一个batch一般都只有1-2张图片,不建议使用 BN。
     

为什么BN层一般在线性层和卷积层后面,而不是放在非线性单元后面?
        因为非线性单元的输出分布形状会在训练过程中发生变化,归一化无法消除他的方差偏移,相反的,全连接层和卷积层的输出是一个对称的,非稀疏的分布,类似于高斯分布,对他们进行归一化会产生更加稳定的分布。如果像relu这样的激活函数,如果输入的数据是一个高斯分布,经过它变换之后的数据是什么形状?小于0的被抑制了,也就是分布小于0的部分直接变成0了。

BN比较适用的场景:

每个mini-batch比较大,数据分布比较接近。在进行训练之前,要做好充分的shuffle,否则效果会差很多。另外,由于BN需要在运行过程中统计每个mini-batch的一阶统计量和二阶统计量,因此不适用于动态的网络结构和RNN网络。 

注意:

  • 训练和测试时BN是不同的:训练时的均值方差来源于当前的mini-batch数据,而测试时,则要使用训练使用过的全部数据的均值方差,这一点训练时就通过移动均值方法计算并保存下来了。

 使用BN时需要注意的问题
(1)训练时要将traning参数设置为True,在验证时将trainning参数设置为False。在pytorch中可通过创建 模型的model.train()和model.eval()方法控制。
(2)batch size尽可能设置大点,设置小后表现可能很糟糕,设置的越大求的均值和方差越接近整个训练集的均值和方差。
(3)一般将bn层放在卷积层(Conv)和激活层(例如Relu)之间,且卷积层不要使用偏置bias,该偏置可被BN层中的β给抵消掉。
下面我来用公式证明为什么不要使用篇置:

BN、LN、IN和GN之间的区别

  • BatchNorm:batch 方向做归一化,算 N ∗ H ∗ W 的均值
  • LayerNorm:channel 方向做归一化,算 C ∗ H ∗ W的均值
  • InstanceNorm:一个 channel 内做归一化,算 H ∗ W 的均值
  • GroupNorm:将 channel 方向分 group ,然后每个 group 内做归一化,算( C / / G ) ∗ H ∗ W 的均值

针对每一个 γ 和 β,GN 是对每一个 channel 进行学习的

其中两维 C 和 N 分别表示 channel 和 batch size,第三维表示 H,W,可以理解为该维度大小是 H ∗ W ,也就是拉长成一维,这样总体就可以用三维图形来表示。可以看出 BN 的计算和 batch size 相关(蓝色区域为计算均值和方差的单元),而 LN、BN 和 GN 的计算和 batch size 无关。同时 LN 和 IN 都可以看作是 GN 的特殊情况(LN 是 group=1 时候的 GN,IN 是 group=C 时候的GN)。
 

参考

BN的作用

Batch Normalization详解以及pytorch实验

一文搞懂BN的原理及其实现过程


http://chatgpt.dhexx.cn/article/elGY5ayo.shtml

相关文章

BN层多方面解读

BN层全面解读 1. BN层作用概述2. BN层作用方式3. BN作用位置4. BN层起作用的原因5. 测试时的BN层 1. BN层作用概述 BN层会使得神经网络对超参数得选择更加稳定,超参数的变化范围可以更大,工作效果也更好。即使是深层网络,BN层的存在也会使得…

模型部署——融合BN和Conv层

今天我们将尝试了解如何使我们的模型在推理上更快一点。 使用 Batch Normalization 作为提高泛化能力的一种方式浪费了大量的网络。 但是在推理过程中,批量归一化被关闭,而是使用近似的每个通道均值和方差。 很酷的是,我们可以通过 1x1 卷积…

CV-BN

what Normalization是数据标准化(归一化,规范化),Batch 可以理解为批量,加起来就是批量标准化。 和卷积层,激活层,全连接层一样,BN层也是属于网络中的一层,常见排列 co…

BN算法

Motivation 2015年的论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》阐述了BN算法,这个算法目前已经被大量应用,很多论文都会引用这个算法,进行网络训练,可见其强大之处…

BN使用总结及启发

声明:文章仅作知识整理、分享,如有侵权请联系作者删除博文,谢谢! Batch Normalization视神经网络的经典结构,本文对BN的引入,训练、推理过程及BN的特性,进行整理。 1、数据预算处理&#xff0…

Batch Normalization (BN)简洁介绍

提出BN的文献: Ioffe, S., & Szegedy, C. (2015). Batch normalization: Accelerating deep network training by reducing internal covariate shift. 32nd International Conference on Machine Learning, ICML 2015, 1, 448–456. Batch Normalization&…

PyTorch 源码解读之 BN SyncBN:BN 与 多卡同步 BN 详解

目录 1. BatchNorm 原理 2. BatchNorm 的 PyTorch 实现 2.1 _NormBase 类 2.1.1 初始化 2.1.2 模拟 BN forward 2.1.3 running_mean、running_var 的更新 2.1.4 \gamma, \beta 的更新 2.1.5 eval 模式 2.2 BatchNormNd 类 3. SyncBatchNorm 的 PyTorch 实现 3.1 for…

BN和LN

covariate shift 是分布不一致假设之下的分支问题,指源空间和目标空间的条件概率是一致的,但边缘概率不同;而统计机器学习中的经典假设是 “源空间(source domain)和目标空间(target domain)的数…

BN的理解

机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢?BatchNorm就是在深度神经网络训练…

BN的作用

BN的作用一共有三个: 1 加速网络的收敛速度 2 控制了梯度消失的问题 3 防止过拟合 BN可以认为是在每一层的输入和上一层的输出之间加入一个计算层,对数据的分布进行额外的约束,从而增强模型的泛化能力。但是BN同时也降低了模型的拟合能力&am…

BN 层原理解析

1 训练数据为什么要和测试数据同分布? 看看下图,如果我们的网络在左上角的数据训练的,已经找到了两者的分隔面w,如果测试数据是右下角这样子,跟训练数据完全不在同一个分布上面,你觉得泛化能力能好吗&…

BN128曲线

1. 引言 BN系列椭圆曲线 E ( F p ) : y 2 x 3 b , 其 中 b ≠ 0 E(\mathbb{F}_p):y^2x^3b,其中b\neq 0 E(Fp​):y2x3b,其中b​0,由Paulo S. L. M. Barreto1 和 Michael Naehrig 在2005年论文 Pairing-Friendly Elliptic Curv…

【YOLO v4 相关理论】Normalization: BN、CBN、CmBN

一、Batch Normalization 论文:https://arxiv.org/pdf/1502.03167.pdf 源码: link. Batch Normalization是google团队在2015年论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》提出的。 个人认为…

Betaflight BN880 GPS 简单测试

Betaflight BN880 GPS 简单测试 1. 源由2. 窗台对比测试3. 开阔区域测试3.1 GPS安装位置3.1.1 BN880 GPS 机尾打印支架 安装位置3.1.2 BN880 GPS 机头固定 安装位置3.1.3 M8N GPS 机尾打印支架 安装位置 3.2 M8N模块历史记录3.3 BN880模块第一次(机尾安装&#xff0…

BN(Batch Normalization):批量归一化

现在的神经网络通常都特别深,在输出层像输入层传播导数的过程中,梯度很容易被激活函数或是权重以指数级的规模缩小或放大,从而产生“梯度消失”或“梯度爆炸”的现象,造成训练速度下降和效果不理想。 随着训练的进行,…

通俗理解BN(Batch Normalization)

1. 深度学习流程简介 1)一次性设置(One time setup) - 激活函数(Activation functions) ​ - 数据预处理(Data Preprocessing) ​ - 权重初始化(Weight Initialization&#xff0…

为什么BN?batch normalization的原理及特点

1 什么是BN? 数据归一化方法,往往用在深度神经网络中激活层之前。其作用可以加快模型训练时的收敛速度,使得模型训练过程更加稳定,避免梯度爆炸或者梯度消失。并且起到一定的正则化作用,几乎代替了Dropout 2 原理 B…

【深度学习基础知识 - 07】BN的原理和作用

Batch Normalization也是深度学习中的一个高频词汇,这篇文章将会对其做一个简单介绍。 目录 1. BN的原理2. BN的作用3. BN层的可学习参数4. infer时BN的处理5. BN的具体计算步骤以及公式6. BN和L2参数权重正则化的区别 1. BN的原理 BN就是在激活函数接收输入之前对…

什么是BN(Batch Normalization)

什么是BN(Batch Normalization)? 在之前看的深度学习的期刊里,讲到了BN,故对BN做一个详细的了解。在网上查阅了许多资料,终于有一丝明白。 什么是BN? 2015年的论文《Batch Normalization: Accelerating Deep Networ…

深度学习—BN的理解(一)

0、问题 机器学习领域有个很重要的假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢?BatchNorm就是在深度神经…