news 2026/5/16 5:22:25

BatchNorm推理时是固定μ =均值,σ=标准差。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BatchNorm推理时是固定μ =均值,σ=标准差。

BatchNorm(批量归一化)之所以可以“折叠”(Fold)到前一层(通常是卷积层 Conv 或线性层 Linear)中,根本原因在于它的统计参数是静态的(Static),且计算过程可以转化为线性变换。

1. BatchNorm 的计算公式

在推理阶段(Inference Mode),BatchNorm 的公式如下:

x^=x−μσ \hat{x} = \frac{x - \mu}{\sigma}x^=σxμ
y=γx^+β y = \gamma \hat{x} + \betay=γx^+β

其中:

  • xxx是输入数据。
  • μ\muμ是均值,σ\sigmaσ是标准差。
  • γ\gammaγβ\betaβ是可学习的仿射参数。

2. 训练阶段 vs. 推理阶段

  • 训练阶段μ\muμσ\sigmaσ是基于当前 Mini-batch 的数据计算出来的,每个 batch 都不同。因此,无法预先确定这些值,也就无法合并。
    PyTorch / TF 还会维护:
    moving_mean(滑动均值)
    moving_var(滑动方差)`
moving_mean = momentum * moving_mean + (1 - momentum) * mu_B moving_var = momentum * moving_var + (1 - momentum) * sigma_B^2
  • 推理阶段μ\muμσ\sigmaσ使用的是在训练过程中通过“动量法”累计得到的全局统计量(Running Mean 和 Running Variance)。这些值是固定不变常量。推理阶段“也可以用 batch 统计”,但几乎从不这样做。**

3. 那推理时“用 batch 统计行不行?”

✅ 技术上:完全可以
⚠️ 但这是强烈不推荐的做法。


❌ 为什么不推荐?

1️⃣ batch 太小 → 统计极不可靠

batch size问题
1方差为 0,直接炸
2~8噪声巨大
≥32勉强稳定

推理时 batch 往往不可控。


2️⃣ 同一个样本,输出会变

同一张图片:

  • 单独推理 → 一个结果
  • 换一批一起推理 → 另一个结果

这在生产环境中是不可接受的 bug


4. 数学推导:如何折叠?

由于μ,σ,γ,β\mu, \sigma, \gamma, \betaμ,σ,γ,β在推理时都是常数,我们可以将 BatchNorm 的步骤合并为一个单一的线性变换。

假设前一层(如卷积层)的输出是xxx,其计算过程为x=W⋅input+bx = W \cdot input + bx=Winput+b

将 BatchNorm 公式展开:
y=γ(x−μσ)+β y = \gamma \left( \frac{x - \mu}{\sigma} \right) + \betay=γ(σxμ)+β
y=(γσ)x−(γ⋅μσ)+β y = \left( \frac{\gamma}{\sigma} \right) x - \left( \frac{\gamma \cdot \mu}{\sigma} \right) + \betay=(σγ)x(σγμ)+β

令:

  • 新的权重W′=γσ⋅WW' = \frac{\gamma}{\sigma} \cdot WW=σγW
  • 新的偏置b′=γσ⋅b+β−γ⋅μσb' = \frac{\gamma}{\sigma} \cdot b + \beta - \frac{\gamma \cdot \mu}{\sigma}b=σγb+βσγμ

那么,整个 Conv + BatchNorm 的操作就可以简化为:
y=W′⋅input+b′ y = W' \cdot input + b'y=Winput+b

结论:BatchNorm 的操作被完全吸收进了卷积层的权重WWW和偏置bbb中。在推理时,不再需要单独执行 BatchNorm 层,从而减少了计算量内存访问。


5 为什么 LayerNorm 不能折叠?

这与LayerNorm在推理阶段的特性相反:

  1. 动态统计量
    LayerNorm 的均值μX\mu_XμX和标准差σX\sigma_XσX不是预训练好的固定值,而是在每一次前向传播时,根据当前输入样本XXX动态计算出来的

  2. 依赖当前输入
    公式如下:
    μX=mean(X),σX=std(X) \mu_X = \text{mean}(X), \quad \sigma_X = \text{std}(X)μX=mean(X),σX=std(X)
    因为μX\mu_XμXσX\sigma_XσX依赖于XXX,而XXX又是前一层的输出,所以你不能在训练阶段或部署前预先计算出μX\mu_XμXσX。\sigma_X。σX

  3. 非线性耦合
    由于σX\sigma_XσX在分母上,且它随输入变化,LayerNorm 引入了一个非线性的、输入依赖的缩放因子。这个因子无法像常数那样被提取出来合并到前一层权重中。

6 总结对比

特性BatchNormLayerNorm
统计量来源训练阶段累计的全局常量 (Running Stats)推理阶段根据当前输入实时计算
是否静态(Static)(Dynamic/Per-sample)
能否折叠(Conv + BN→\rightarrowNew Conv)不能(BN 依赖于当前输入XXX)
原因μ,σ\mu, \sigmaμ,σ是常数,可合并进权重μ,σ\mu, \sigmaμ,σ是变量,随XXX变化

与 BatchNorm 不同,LayerNorm 由于其动态计算特性,无法折叠到前一层,因此我们必须单独对其进行量化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 5:22:06

GitHub项目克隆提速实战:巧用镜像源与子模块递归更新

1. GitHub克隆慢的痛点与解决方案 作为一名长期和GitHub打交道的开发者,我深刻理解国内用户在克隆大型项目时的痛苦。记得有一次我需要克隆FreeRTOS内核进行嵌入式开发,结果光是等待克隆完成就花了整整一上午时间,期间还多次因为网络问题中断…

作者头像 李华
网站建设 2026/5/16 5:21:33

STM32F4+OV2640实现简易网络监控:从JPEG压缩到ESP8266无线传输全流程

STM32F4OV2640构建智能无线监控系统:JPEG压缩与WiFi传输实战指南 在智能家居和工业物联网快速发展的今天,低成本、高效率的图像监控解决方案需求激增。STM32F4系列微控制器凭借其出色的性能和丰富的外设接口,搭配OV2640摄像头模块的JPEG硬件压…

作者头像 李华
网站建设 2026/5/16 5:20:34

LLM推理内存优化:位平面压缩与动态量化技术

1. LLM推理中的内存瓶颈与创新解决方案在当今生成式AI领域,大型语言模型(LLM)的推理效率正面临严峻的内存挑战。以LLaMA 3.1 405B模型为例,仅存储模型参数就需要750GB内存空间,而处理2048个token的序列时,KV缓存的内存占用会迅速超…

作者头像 李华
网站建设 2026/5/16 5:19:07

深入解析PG332 ERNIC:基于RoCE v2的嵌入式RDMA引擎架构与实战

1. PG332 ERNIC是什么?为什么需要它? 如果你正在设计一个需要超低延迟、高吞吐量的数据中心互连方案,或者想为嵌入式存储系统加速NVMe-oF这类协议,PG332 ERNIC可能会成为你的秘密武器。简单来说,这是一个专为FPGA平台设…

作者头像 李华
网站建设 2026/5/16 5:15:06

嵌入式扫码模块LV5300:全介质识读与高集成度硬件设计解析

1. 项目概述:为什么嵌入式扫码模块是智能终端的“眼睛”在智能门禁、自助售货机、公交闸机这些我们每天都会接触的设备里,藏着一个不起眼但至关重要的核心部件——嵌入式二维码扫码模块。你可以把它理解为这些智能终端的“眼睛”,负责快速、准…

作者头像 李华
网站建设 2026/5/16 5:13:04

Dell R630服务器RAID实战:8块硬盘如何混搭RAID1和RAID0?保姆级图文教程

Dell R630服务器混合RAID配置实战:系统盘与数据盘的黄金分割方案 在企业级IT基础设施中,存储配置的灵活性与可靠性往往决定着整个系统的稳定边界。当一台Dell PowerEdge R630服务器配备8块硬盘时,如何通过RAID技术的组合拳实现系统安全与数据…

作者头像 李华