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

发布时间:2026/5/16 5:22:26

BatchNorm推理时是固定μ =均值,σ=标准差。 BatchNorm批量归一化之所以可以“折叠”Fold到前一层通常是卷积层 Conv 或线性层 Linear中根本原因在于它的统计参数是静态的Static且计算过程可以转化为线性变换。1. BatchNorm 的计算公式在推理阶段Inference ModeBatchNorm 的公式如下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其计算过程为xW⋅inputbx W \cdot input bxW⋅inputb。将 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 的操作就可以简化为yW′⋅inputb′ y W \cdot input byW′⋅inputb′结论BatchNorm 的操作被完全吸收进了卷积层的权重WWW和偏置bbb中。在推理时不再需要单独执行 BatchNorm 层从而减少了计算量内存访问。5 为什么 LayerNorm 不能折叠这与LayerNorm在推理阶段的特性相反动态统计量LayerNorm 的均值μX\mu_XμX​和标准差σX\sigma_XσX​不是预训练好的固定值而是在每一次前向传播时根据当前输入样本XXX动态计算出来的。依赖当前输入公式如下μXmean(X),σXstd(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​。非线性耦合由于σX\sigma_XσX​在分母上且它随输入变化LayerNorm 引入了一个非线性的、输入依赖的缩放因子。这个因子无法像常数那样被提取出来合并到前一层权重中。6 总结对比特性BatchNormLayerNorm统计量来源训练阶段累计的全局常量 (Running Stats)推理阶段根据当前输入实时计算是否静态是(Static)否(Dynamic/Per-sample)能否折叠能(Conv BN→\rightarrow→New Conv)不能(BN 依赖于当前输入XXX)原因μ,σ\mu, \sigmaμ,σ是常数可合并进权重μ,σ\mu, \sigmaμ,σ是变量随XXX变化与 BatchNorm 不同LayerNorm 由于其动态计算特性无法折叠到前一层因此我们必须单独对其进行量化。

相关新闻