当前位置: 首页 > news >正文

神经网络设计中关于BN归一化(Normalization)的讨论

在神经网络的结构中,我们常常可以看见归一化(Normalization)如BN的出现,无论是模型的backbone或者是neck的设计都与它有着重大的关系。

因此引发了我对它的思考,接下来我将从
是什么(知识领域,诞生来源),为什么(解决了什么问题),怎么做(公式原理,未来如何使用和设计)的三个哲学维度去讨论它。

是什么

从整体到局部 — 先说“属于哪个研究方向 / 框架

归一化(Normalization)在深度学习里的位置

研究领域 / 交叉学科:
优化理论(改变梯度分布、条件数、收敛性)
表征学习/归一化技术(稳定内部表示、减少训练敏感性)
统计估计(如何准确地估计均值/方差、样本数对估计方差的影响)
分布式系统工程(SyncBN 涉及跨设备通信)

核心问题:网络训练中各层输入分布随训练迭代变化(所谓“internal covariate shift” 的实践问题)、训练稳定性、梯度尺度与收敛速度、以及隐式正则化

解决思路家族:按“聚合域”可分——跨样本(Batch-based,如 BN / SyncBN)、逐样本但分组(GroupNorm)、逐样本全部通道(LayerNorm)、逐通道逐样本空间上(InstanceNorm)等。每种方法在统计样本数、耦合程度、计算/通信开销上有不同折中。

这些名词可能现在绝对有些晦涩难懂,不过后面我会一一解释。

BN的来源

我现在会扮演一个合适的角色,从0到1带着你推演为什么需要BN里面的数学操作去解决什么问题

那我们就从**“还没有 BN 时代”**开始推演,像个深度学习数理侦探一样,一步步锁定问题,然后自然推导出 BN 的数学操作。

1️⃣ 案件背景:还没有 BN 的深度网络

在早期(2014 年以前),深度神经网络(尤其是 CNN、RNN)在训练时会遇到几个老大难问题:

1 梯度消失 / 梯度爆炸
网络层数一多,梯度在反向传播中会被不断乘上权重的导数。
如果导数平均值 < 1 → 梯度指数级衰减(梯度消失);
如果导数平均值 > 1 → 梯度指数级放大(梯度爆炸)。

2 内部协变量偏移(Internal Covariate Shift)
当我们更新前面层的参数时,后面层的输入分布就会改变。
这意味着后面层在每个训练 step 面对的不是一个稳定的任务,而是“每次输入分布都不同”的任务。
概念
“协变量”是指模型中某一层的输入(对这一层来说,输入就是它的特征分布)。
“偏移”是指输入的分布发生了变化。
在深度网络中,每一层的输入分布并不是固定的,因为前面层的参数在训练中不断变化。
内部协变量偏移:训练过程中,深层网络的中间层输入分布(均值、方差、形状)会不断变化。
影响
如果某一层输入分布一直变化,那么这一层需要不断“重新适应”新的输入分布,训练起来就很慢。
这相当于你在学做饭,但每天给你的食材味道、大小都不一样,你需要不断调整调料用量 → 学习速度慢。

3 学习速度极慢
分布漂移(Distribution Shift)
概念
更宽泛的概念,指训练数据分布与测试数据分布不一致。
例如:训练时图片都在晴天拍,测试时大部分是雨天 → 模型性能下降。
ICS 是一种特殊的分布漂移,只不过它发生在网络内部层与层之间,不是训练集与测试集之间。
关系
分布漂移:外部视角,通常是数据集问题。
内部协变量偏移:内部视角,是训练过程中网络自身制造的“数据分布变化”。

因为分布漂移,学习率不敢设太高,否则容易发散。
想加速收敛很困难。

以上这就是归一化的定位以及来源,它属于表征学习,优化理论的领域,来源于神经网络训练时遇到的传统的几个问题,梯度爆炸/消失,内部协变量偏移(Internal Covariate Shift),学习速度极慢

理解了是什么,其实我们也就引出了为什么,为什么其实就是去解决它诞生来源的几个问题

为什么

抽象和解决问题

2️⃣ 侦探分析:输入分布的“统计混乱”

我们先盯着一个中间层的输入特征 𝑥看:

假设该层有 100 个神经元,输入来自上一层输出。
每个 batch 输入时,
x 的均值(mean)和标准差(std)会随 batch 波动。
如果上游权重刚更新过,这些统计量就可能发生明显变化。
这就像你教一个学生解方程,每次题目里的数字分布都完全变样,他很难学到稳定的解法。
数学上,这种不稳定性会导致梯度更新方向变化剧烈,训练过程震荡。

3️⃣ 第一个线索:标准化能稳定分布

在传统机器学习(比如 SVM、KNN)中,我们早就知道特征标准化可以让优化更快:

在这里插入图片描述
为什么特征标准化可以加快优化
假设我们有一个简单的模型:
在这里插入图片描述
如果 xxx 的均值很偏(比如都在 500 左右),那么偏置 b 就要去抵消这个大偏移,浪费了很多学习能力。当时我就想到
这句话如何理解,如果样本的数据整体均值比较偏,那模型不就应该是解决这个偏的问题,学习这个 偏 吗,为什么说是浪费了很多学习能力。

1. “偏”有两种来源
(a) 有意义的偏

偏本身携带了任务相关的信息,模型需要去捕捉它。
例子:识别黑夜 vs 白天的照片,亮度均值的偏移是关键信息。
这种偏是 语义性的,不能被 BN 抹掉,否则会丢失有效特征。

(b) 无意义的偏(数据分布的偶然偏移)

偏的产生可能是因为采集方式、批次差异、传感器参数等,和任务标签没有直接关系。
例子:同一类猫的照片,有的拍摄时曝光偏高,有的偏低,这个亮度变化与“猫”的类别无关。
模型如果直接学习这种无关的偏,就等于浪费参数去“拟合无关信号”,还可能降低泛化能力。

2. 为什么“浪费学习能力

模型是有限容量的(参数有限,优化能力有限)。
如果早期层需要去适配这种无意义的偏:
一部分参数会被迫去调节不同 batch/样本间的均值和方差差异
这些参数的更新会因为数据批次差异而震荡(优化不稳定)
真正与任务有关的模式(如形状、纹理、结构信息)会被延迟学习

简单来说:
如果模型花了很多梯度和迭代去修正这些批次间的“量纲偏差”,那它能用来学习语义特征的“精力”就被分走了。

3. 怎么判断“偏”要不要学?

这在理论上很难提前知道,但可以有经验判断:
如果偏是全局一致且标签相关 → 需要保留(BN 就要小心设计)
如果偏是批次/样本之间不稳定且与标签无关 → 适合用 BN 去消除
实践中,我们很难精确分类,所以 BN 这种方法是基于“假设大部分批次间均值/方差偏移是无关的”来设计的

4️⃣ 关键问题:深度网络的标准化该怎么做(以BN为例)?

侦探的推理来到关键一步:

在深度网络中,我们不能只在输入层做一次标准化,因为中间层的分布也会漂移。

那我们能不能在每一层的每个训练 step都做一次标准化,把漂移控制住?

于是,BN 的核心想法出现了:

在这里插入图片描述
以上其实就是为什么的整个思考,它与前面的BN 的诞生逻辑串起来了

痛点:早期网络没有 BN,内部协变量偏移 + 输入特征分布不稳定 → 训练慢、难收敛
关键假设:均值/方差的批次波动多数与任务无关
操作:对每个 batch 的特征做标准化,让它的均值 ≈ 0,方差 ≈ 1
好处
梯度更新更稳定(步长不用太小)
不用浪费参数去适配输入量纲差异
网络可以更快进入学习“形状/模式”等更有意义的特征阶段

怎么做

公式推演

接下来我会带着你进行归一化数学公式上的推演,推演遵循每个操作都讲清楚,是什么(参数的意义),为什么(通过参数解决什么问题),怎么做(通过什么公式用参数去解决问题)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

每个操作的「一句话总结」

在这里插入图片描述

常见问题

问题 1:为什么把特征强制为 0-mean,1-var 会限制网络表达能力?γ,β 为什么解决这个问题?

直觉理解
BN 前的标准化:
在这里插入图片描述

问题 2:推理阶段没有 batch 的概念或 batch 很小是什么意思?

在这里插入图片描述

问题 3:标准化消除了输入尺度对激活的影响,减小参数尺度与优化耦合,有哪些地方被标准化了?

在这里插入图片描述

未来如何使用和设计归一化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实践设计示例

场景建议归一化理由
ImageNet 分类,大 batchBN批内统计稳定,加速收敛
单张图像生成 / 风格迁移IN 或 GN不依赖 batch
多 GPU 小 batchSyncBN 或 GNBN 单卡统计不稳,GN 可替代
移动端轻量模型GN稳定且无需 batch,硬件友好
TransformerLN序列长度不固定,适合逐样本标准化
多任务 / 自适应SN学习动态选择归一化方式
http://www.dtcms.com/a/333180.html

相关文章:

  • 扣子(Coze),开源了!Dify 天塌了
  • 淡季磨剑,旺季出鞘!外贸管理软件让淡季备货与旺季冲刺无缝衔接
  • Mini MAX AI应用矩阵测评报告——基于旗下多款产品的综合体验与行业价值分析
  • 亚马逊“十省联动”4.0:产业带跨境转型的全维度赋能路径
  • Linux操作系统--多线程(锁、线程同步)
  • 优秘企业智脑 AISEO 技术拆解:从算法逻辑到 GEO 优化,如何重构企业智能营销底层能力?
  • JVM执行引擎深入理解
  • Redis核心架构
  • Java学习第一百三十六部分——finally块执行时机
  • 如何回答研究过MQ的源码吗
  • Jenkins 环境部署
  • 在多语言大模型中保留文化细微差别:超越翻译
  • IPv4地址和IPv6地址:解析两代互联网协议的本质差异
  • 【swift开发】SwiftUI概述 SwiftUI 全面解析:苹果生态的声明式 UI 革命
  • DevEco Studio 6.0.0 元服务页面跳转失败
  • 机器翻译:模型微调(Fine-tuning)与调优详解
  • leetcode 1780. 判断一个数字是否可以表示成三的幂的和 中等
  • 新手入门Makefile:FPGA项目实战教程(二)
  • 达梦数据库使用控制台disql执行脚本
  • 【uni-app】根据角色/身份切换显示不同的 自定义 tabbar
  • 用Qt自带工具windeployqt快速打包程序
  • python自学笔记9 Seaborn可视化
  • ​​金仓数据库KingbaseES V9R1C10安装教程 - Windows版详细指南​
  • AXI4-Stream Switch IP核的用法
  • PyQt6实例_50个流通领域重要生产资料市场价格查看工具
  • Web 安全之 Cookie Bomb 攻击详解
  • Mac(一)常用的快捷键整理
  • 学习寻找自己感兴趣的事情--心理学入门的书籍
  • 「iOS」————UITableView性能优化
  • SpatialVLM和SpatialRGPT论文解读