神经网络设计中关于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.pswp.cn/web/93770.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacOS 安全机制与“文件已损坏”排查完整指南

1. 背景说明macOS 为了保护系统安全&#xff0c;内置了多个安全机制&#xff1a;机制作用是否影响第三方 AppSIP (System Integrity Protection)保护系统关键文件/目录不被篡改高风险 App/驱动可能受限Gatekeeper限制未签名/未认证 App 运行阻止“未知开发者” App文件隔离属性…

package.json文件中的devDependencies和dependencies对象有什么区别?

前端项目的package.json文件中&#xff0c;dependencies和devDependencies对象都用于指定项目所依赖的软件包&#xff0c;但它们在项目的开发和生产环境中的使用有所不同。1.dependencies&#xff1a;dependencies是指定项目在生产环境中运行所需要的依赖项。这些依赖项通常包括…

【最新版】CRMEB Pro版v3.4系统源码全开源+PC端+uniapp前端+搭建教程

一.系统介绍 crmebPro版 v3.4正式发布&#xff0c;智能任务推送、动态标签管理、商城AI生产力&#xff0c;焕然一新&#xff0c;不负期待&#xff01;页面DIY设计功能全面升级&#xff0c;组件更丰富&#xff0c;样式设计更全面&#xff1b;移动端商家管理&#xff0c;让商城管…

AI 浪潮下 IT 从业者的职业展望:替代之惑与转型之道

一、引言1.1 科技变革的浪潮&#xff1a;AI 崛起与 IT 行业震荡在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;无疑是最具影响力的变革力量之一。从实验室的前沿研究到广泛的商业应用&#xff0c;AI 以惊人的速度渗透到各个领域&#xff0c;彻底改变…

DSP音频算法移植优化工程师实战

以下以音频FIR滤波器算法为例&#xff0c;完整演示从MATLAB原型 → Python验证 → TI DSP C语言移植优化的全流程&#xff0c;包含关键代码和优化技巧&#xff1a;关键优化技术解析&#xff1a; 内存访问优化使用#pragma DATA_ALIGN确保64位对齐&#xff08;满足LDDW指令要求&a…

Spark 运行流程核心组件(三)任务执行

一、启动模式 1、standalone资源申请&#xff1a;Driver向Master申请Executor资源Executor启动&#xff1a;Master调度Worker启动Executor注册通信&#xff1a;Executor直接向Driver注册 2、YARNDriver向YARN ResourceManager(RM)申请AM容器RM分配NodeManager(NM)启动AM&#x…

rabbitmq发送的延迟消息时间过长就立即消费了

RabbitMQ延迟消息在设置过长时间后被立即消费的问题&#xff0c;通常与以下原因有关&#xff1a; TTL限制问题 RabbitMQ对消息TTL(Time To Live)有32位整数限制(0-4294967295毫秒)&#xff0c;约49.7天。超过该值的延迟时间会导致消息立即被消费解决方案&#xff1a;确保设置的…

kafka的pull的依据

1. 每次 pull() 是否必须在提交上一批消息的 offset 之后&#xff1f;绝对不需要&#xff01; 提交 offset 和调用 poll() (拉取消息) 是两个完全独立的行为。消费者可以连续调用 poll() 多次&#xff0c;期间完全不提交任何 offset。 这是 Kafka 消费者的正常工作模式。提交 o…

学习嵌入式的第二十一天——数据结构——链表

单向链表特点&#xff1a;存储的内存空间不连续 。为了弥补顺序存储存劣势。优势 插入&#xff0c;删除 O(1) 动态存储 &#xff0c;在程序运行期间决定大小。劣势&#xff1a; 不能随机访问 O(N) 节点-> 数据域指针域 顺序表(数组) 只有数据域链表的操作代码&#xff1…

Rust Web 全栈开发(十三):发布

Rust Web 全栈开发&#xff08;十三&#xff09;&#xff1a;发布Rust Web 全栈开发&#xff08;十三&#xff09;&#xff1a;发布发布 teacher_service发布 svr测试 teacher_service 和 svr发布 wasm-client测试 wasm-clientRust Web 全栈开发&#xff08;十三&#xff09;&a…

Zephyr 中的 bt_le_per_adv_set_data 函数的介绍和应用方法

目录 概述 1 函数接口介绍 1.1 函数原型 1.2 功能详解 2 使用方法 2.1 创建流程 2.1.1 创建扩展广播实例 2.1.2 设置周期性广播数据 2.1.3 配置周期性广播参数 2.1.4 启动广播 2.2 主流程函数 2.3 关键配置 (prj.conf) 3 高级用法 3.1 大数据分片传输 3.2 动态数…

Ansible 角色管理指南

Ansible 角色管理指南 实验环境设置 以下命令用于准备实验环境&#xff0c;创建一个工作目录并配置基本的Ansible设置&#xff1a; # 创建web工作目录并进入 [azurewhiskycontroller ~]$ mkdir web && cd web# 创建Ansible配置文件 [azurewhiskycontroller web]$ cat &…

【补充】数据库中有关系统编码和校验规则的简述

一、字符集和校验规则&#xfeff;1.创建数据库案例数据库创建方法&#xff1a;使用CREATE DATABASE语句创建数据库字符集指定方式&#xff1a;通过CHARACTER SETutf8指定数据库编码格式默认配置说明&#xff1a;未指定字符集时默认使用utf8和utf8_general_ci配置文件位置&…

计算机网络 HTTP1.1、HTTP2、HTTP3 的核心对比及性能分析

以下是 HTTP/1.1、HTTP/2、HTTP/3 的核心对比及性能分析&#xff0c;重点关注 HTTP/3 的性能优势&#xff1a;&#x1f4ca; HTTP 协议演进对比表特性HTTP/1.1 (1997)HTTP/2 (2015)HTTP/3 (2022)传输层协议TCPTCPQUIC (基于 UDP)连接建立TCP 三次握手 TLS 握手 (高延迟)同 HTT…

【计算机视觉与深度学习实战】07基于Hough变换的答题卡识别技术:原理、实现与生物识别拓展(有完整代码)

1. 引言 在人工智能和计算机视觉快速发展的今天,自动化图像识别技术已经渗透到社会生活的各个角落。从工业质检到医学影像分析,从自动驾驶到教育评估,计算机视觉技术正在重塑我们与数字世界的交互方式。在这众多应用中,答题卡识别技术作为教育信息化的重要组成部分,承载着…

《WASM驱动本地PDF与Excel预览组件的深度实践》

WASM为何能成为本地文件解析的核心载体,首先需要跳出“前端只能处理轻量任务”的固有认知,从“性能与兼容性平衡”的角度切入。PDF与Excel这类文件格式的解析,本质是对复杂二进制数据的解码与重构——PDF包含嵌套的对象结构、字体渲染规则和矢量图形描述,Excel则涉及单元格…

Oracle Free 实例重装系统操作指南

之前申请了两台 x86 架构的 Oracle 机器&#xff0c;偶尔用来部署开源项目测试&#xff0c;有一台在测试 SSH 相关功能时 “变砖”&#xff0c;网上看重装系统发现很繁琐就没去打理&#xff0c;近期又想到这个机器&#xff0c;发现去年就有了官方重装方法&#xff0c;简单配置下…

Linux 基础指令与权限管理

一、Linux 操作系统概述1.1 操作系统的核心价值操作系统的本质是 "使计算机更好用"。它作为用户与硬件之间的中间层&#xff0c;负责内存管理、进程调度、文件系统管理和设备驱动管理等核心功能&#xff0c;让用户无需直接操作硬件即可完成复杂任务。在服务器领域&am…

深度学习-167-MCP技术之工具函数的设计及注册到MCP服务器的两种方式

文章目录 1 MCP协议概述 1.1 MCP的原理 1.2 两种主要的通信模式 2 工具函数的设计与实现 2.1 tools.py(工具函数) 2.2 工具函数的设计原则 2.3 工具函数的测试 3 MCP服务器的构建与配置 3.1 安装mcp库 3.2 main.py(MCP服务器) 3.2.1 方式一(add_tool方法) 3.2.2 方式二(@mcp.to…

哈希:两数之和

问题描述&#xff1a;在一个整数数组中&#xff0c;找到两数之和为target的两个值&#xff0c;返回找到的两个值的下标。 nums[3,3] target6 返回&#xff1a;[0,1] 说明&#xff1a;返回结果&#xff0c;索引无顺序要求&#xff1b;有唯一的答案&#xff1b;不能使用两次相…