BN的作用

article/2025/10/6 19:07:48

BN的作用一共有三个:
1 加速网络的收敛速度
2 控制了梯度消失的问题
3 防止过拟合

BN可以认为是在每一层的输入上一层的输出之间加入一个计算层,对数据的分布进行额外的约束,从而增强模型的泛化能力。但是BN同时也降低了模型的拟合能力,BN之后的输入分布被强制为均值为0标准差为1。以Sigmoid激活函数为例,BN之后的输入分布整体处于函数的非饱和区域,只包含线性变换,破坏了之前学习到的特征分布。为了恢复原始数据分布,所以引入了缩放和平移参数。仅用这两个参数就可以恢复最优的输入数据分布,与之前的网络层解耦,从而更加有利于优化的过程,提高模型的泛化能力。

介绍

  • 低层的微弱变化会引起高层的输入分布的变化,高层的网络需要不断地调整去适应输入的变化。从而导致收敛速度慢,学习速度慢。所以在没有使用BN之前,我们都要选择一个小的学习率和合适的初始化参数。
  • BN首先是得输入Normalization,使其变成均值为0,方差为1的分布,normalization缓解了ICS,使得每一层的输入变得稳定,但是缺乏了数据原有的表达能力,使得底层学习到的信息丢失,并且均值为0,方差为1,在经过sigmoid的时候,容易陷入到其线性区域。
  • 所以引入γβ,恢复数据的表达能力,对规范后的数据进行线性变换。

一、使用顺序:

Conv=>BN=>ReLU=>dropout=>Conv

BN本质上是解决传播过程中的梯度消失问题

二、训练

训练时前向传导过程公式:

在这里插入图片描述

理解:

  1. 这个可学习重构参数 γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。(因为如果没有 γ、β ,那相当于我这一层网络所学习到的特征分布被你搞坏了)
  2. 这个 scale 和 shift ,它们的主要作用就是找到一个线性和非线性的平衡点,既能享受非线性较强的表达能力,有可以避免非线性饱和导致网络收敛变慢问题。

细节:

  1. 假如某一层卷积层有6个特征图,每个特征图的大小是100 * 100,这样就相当于这一层网络有6 * 100 * 100个神经元,如果采用BN,就会有6 * 100 * 100个参数γ、β,这样岂不是太恐怖了。因此卷积层上的BN使用,其实也是使用了类似权值共享的策略,把一整张特征图当做一个神经元进行处理。

  2. 卷积神经网络经过卷积后得到的是一系列的特征图,如果min-batch sizes为m,那么网络某一层输入数据可以表示为四维矩阵 (m,c,w,h),m为min-batch sizes,c为特征图个数,w、h分别为特征图的宽高。在CNN中我们可以把每个特征图看成是一个特征处理(一个神经元),因此在使用Batch Normalization,mini-batch size 的大小就是:m ∗ w ∗ h ,于是对于每个特征图都只有一对可学习参数:γ、β。说白了吧,这就是相当于求取所有样本所对应的一个特征图的所有神经元的平均值、方差,然后对这个特征图神经元做归一化。

三、测试

对于BN,当一个模型训练完成之后,它的所有参数都确定了,包括均值和方差,γ和β。

测试的时候还是一样的:

在这里插入图片描述

对于所有的γ和β,在测试的时候都是固定的(使用的是整个训练集的均值和方差,移动平均计算而来的)

四、BN的作用

  • 改善流经网络的梯度

  • 允许更大的学习率,大幅提高训练速度:
    你可以选择比较大的初始学习率,让你的训练速度飙涨。以前还需要慢慢调整学习率,甚至在网络训练到一半的时候,还需要想着学习率进一步调小的比例选择多少比较合适,现在我们可以采用初始很大的学习率,然后学习率的衰减速度也很大,因为这个算法收敛很快。当然这个算法即使你选择了较小的学习率,也比以前的收敛速度快,因为它具有快速训练收敛的特性;

  • 减少对初始化的强烈依赖

  • 改善正则化策略:作为正则化的一种形式,轻微减少了对dropout的需求
    你再也不用去理会过拟合中dropout、L2正则项参数的选择问题,采用BN算法后,你可以移除这两项了参数,或者可以选择更小的L2正则约束参数了,因为BN具有提高网络泛化能力的特性;

  • 再也不需要使用使用局部响应归一化层了(局部响应归一化是Alexnet网络用到的方法,搞视觉的估计比较熟悉),因为BN本身就是一个归一化网络层;

  • 可以把训练数据彻底打乱(防止每批训练的时候,某一个样本都经常被挑选到,文献说这个可以提高1%的精度)。

五、BN的不足

  1. 当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、

  1. batchsize 小的时候可以用 group normalization 代替

在这里插入图片描述

BatchNorm:batch 方向做归一化,算 N ∗ H ∗ W NHWN∗H∗W 的均值

LayerNorm:channel 方向做归一化,算 C ∗ H ∗ W CHWC∗H∗W 的均值

InstanceNorm:一个 channel 内做归一化,算 H ∗ W H*WH∗W 的均值

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

针对每一个 γ 和 β,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层一般在线性层和卷积层后面,而不是放在非线性单元后面

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

  1. 网络中BN层的作用
  2. BN的作用
  3. BN训练和测试时的区别
  4. 卷积神经网络CNN—— BN(Batch Normalization) 原理与使用过程详解
  5. BN的实现
  6. BN(讲的不错)
  7. BN

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

相关文章

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就是在深度神经…

Batch Normalization详解以及pytorch实验

Batch Normalization是google团队在2015年论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》提出的。通过该方法能够加速网络的收敛并提升准确率。在网上虽然已经有很多相关文章,但基本都是摆上论文中的公式泛…

Java参数校验validation和validator区别

Java参数校验validation和validator区别 1. 参数校验概述2. validation与validator区别3. validation注解说明4. validator注解说明5. 日期格式化说明6. 实现验证6.1 引入依赖6.2 代码实现6.3 实现验证 1. 参数校验概述 常见的业务开发中无可避免的会进行请求参数校验&#xf…

hibernate-validator

validator 简介各种注解好处 validator.validate方法业务逻辑代码中检查传入的参数时为传入的参数类型中各个属性添加注解NotNull、NotBlank、NotEmpty间的区别 简介 validator,翻译过来,就是“验证器”的意思。它是一种注解式参数校验,包名…

validator自定义校验注解及使用

validator自定义校验注解及使用 官方文档&#xff1a;https://docs.jboss.org/hibernate/validator/8.0/reference/en-US/html_single/#validator-customconstraints 用到依赖: <!--validator的依赖如果项目使用的springBoot的依赖可以不用再引入 hibernate-validator 因为…

spring之Validator

初步认识 spring数据验证核心类&#xff1a;①&#xff1a;Validator ②&#xff1a;Errors,两者之间的纽带是Validator中定义的validate方法。 public interface Validator {// 限定Validator的职责&#xff0c;不可能所有的校验全部交给一个Validator来做boolean supports(…

Hibernate-Validator的学习

Hibernate-Validator的学习 此教程基于黑马程序员Java品达通用权限项目&#xff0c;哔哩哔哩链接&#xff1a;https://www.bilibili.com/video/BV1tw411f79E?p49 1.hibernate-validator介绍 早期的网站&#xff0c;用户输入一个邮箱地址&#xff0c;需要将邮箱地址发送到服…

Hibernate Validator源码解析

一、引言 问题&#xff1a;在代码编写的过程中&#xff0c;数据值的校验在JavaEE三层架构&#xff08;展示层、业务层、数据访问层&#xff09;均有涉及&#xff0c;各层的校验需求又是不尽相同的&#xff0c;因此往往会伴随着代码冗余&#xff0c;重复的校验逻辑出现在三层代…

Hibernate Validator简介

亲爱的小伙伴们我来填坑啦&#xff0c;java中优雅的参数校验方法中的校验的实现原理。 1.前言 验证数据是发生在所有应用程序层&#xff08;从表示层到持久层&#xff09;的常见任务。通常在每一层中实现相同的验证逻辑&#xff0c;这既耗时又容易出错。为了避免重复这些验证&…

bootstrapValidator验证最大值最小值范围限制

录入该值的最大值与最小值 bootstrapValidator进行效验&#xff0c;使最小值不可大于最大值&#xff0c;最大值不可小于最小值 刚开始的验证还是没事的&#xff0c;符合正常的验证规则 再把不符合规则的最大值改变&#xff0c;现在最小值已经比最大值小了&#xff0c;但是最大…

class-validator中文教程

官方文档&#xff1a; https://www.npmjs.com/package/class-validator class-validator可以说是一个简化验证的依赖库 &#xff08;采用注释的方式进行校验&#xff09; 但是缺少中文文档和过程&#xff0c;以自己的理解和对官网文档的阅读进行整理输出。 它的好兄弟class-t…