深度学习|表示学习|Mini-Batch Normalization 具体计算举例|23

devtools/2025/2/13 4:30:19/

如是我闻: Batch Normalization(BN)是一种在 mini-batch 级别计算均值和方差的归一化方法,它能够加速训练、稳定梯度,并减少对权重初始化的敏感性。

在 BN 过程中,我们不会使用整个数据集计算均值和方差,而是在每个 mini-batch 内单独计算,然后对数据进行标准化。


1. 假设数据集

我们假设有一个简单的数据集,其中:

  • 20 个样本
  • 每个样本有 3 个特征
  • mini-batch 大小设为 5

整个数据集如下:

X = [ 1.0 2.0 3.0 2.0 3.0 4.0 3.0 4.0 5.0 4.0 5.0 6.0 5.0 6.0 7.0 6.0 7.0 8.0 7.0 8.0 9.0 8.0 9.0 10.0 9.0 10.0 11.0 10.0 11.0 12.0 11.0 12.0 13.0 . . . . . . . . . 20.0 21.0 22.0 ] X = \begin{bmatrix} 1.0 & 2.0 & 3.0 \\ 2.0 & 3.0 & 4.0 \\ 3.0 & 4.0 & 5.0 \\ 4.0 & 5.0 & 6.0 \\ 5.0 & 6.0 & 7.0 \\ \hline 6.0 & 7.0 & 8.0 \\ 7.0 & 8.0 & 9.0 \\ 8.0 & 9.0 & 10.0 \\ 9.0 & 10.0 & 11.0 \\ 10.0 & 11.0 & 12.0 \\ \hline 11.0 & 12.0 & 13.0 \\ ... & ... & ... \\ 20.0 & 21.0 & 22.0 \\ \end{bmatrix} X= 1.02.03.04.05.06.07.08.09.010.011.0...20.02.03.04.05.06.07.08.09.010.011.012.0...21.03.04.05.06.07.08.09.010.011.012.013.0...22.0

训练时,我们按 mini-batch 进行计算,每个 batch 处理 5 个样本。


2. Batch 1(样本 1-5)的 BN 计算

batch_39">Step 1: 取出 mini-batch

第一个 mini-batch(样本 1-5):

X = [ 1.0 2.0 3.0 2.0 3.0 4.0 3.0 4.0 5.0 4.0 5.0 6.0 5.0 6.0 7.0 ] X = \begin{bmatrix} 1.0 & 2.0 & 3.0 \\ 2.0 & 3.0 & 4.0 \\ 3.0 & 4.0 & 5.0 \\ 4.0 & 5.0 & 6.0 \\ 5.0 & 6.0 & 7.0 \\ \end{bmatrix} X= 1.02.03.04.05.02.03.04.05.06.03.04.05.06.07.0

batch__51">Step 2: 计算 batch 内每个特征的均值

μ j = 1 m ∑ i = 1 m x i , j \mu_j = \frac{1}{m} \sum_{i=1}^{m} x_{i,j} μj=m1i=1mxi,j

对于 3 个特征维度:
μ 1 = 1 + 2 + 3 + 4 + 5 5 = 3.0 \mu_1 = \frac{1+2+3+4+5}{5} = 3.0 μ1=51+2+3+4+5=3.0
μ 2 = 2 + 3 + 4 + 5 + 6 5 = 4.0 \mu_2 = \frac{2+3+4+5+6}{5} = 4.0 μ2=52+3+4+5+6=4.0
μ 3 = 3 + 4 + 5 + 6 + 7 5 = 5.0 \mu_3 = \frac{3+4+5+6+7}{5} = 5.0 μ3=53+4+5+6+7=5.0

即:
μ = [ 3.0 , 4.0 , 5.0 ] \mu = [3.0, 4.0, 5.0] μ=[3.0,4.0,5.0]

batch__62">Step 3: 计算 batch 内方差

σ j 2 = 1 m ∑ i = 1 m ( x i , j − μ j ) 2 \sigma_j^2 = \frac{1}{m} \sum_{i=1}^{m} (x_{i,j} - \mu_j)^2 σj2=m1i=1m(xi,jμj)2

计算得到:
σ 2 = [ 2.0 , 2.0 , 2.0 ] \sigma^2 = [2.0, 2.0, 2.0] σ2=[2.0,2.0,2.0]

为了防止除零,我们加一个很小的数 ϵ \epsilon ϵ(通常是 1e-5):
σ ^ 2 = [ 2.0 + 1 e − 5 , 2.0 + 1 e − 5 , 2.0 + 1 e − 5 ] \hat{\sigma}^2 = [2.0 + 1e-5, 2.0 + 1e-5, 2.0 + 1e-5] σ^2=[2.0+1e5,2.0+1e5,2.0+1e5]

Step 4: 归一化

x ^ i , j = x i , j − μ j σ j 2 + ϵ \hat{x}_{i,j} = \frac{x_{i,j} - \mu_j}{\sqrt{\sigma_j^2 + \epsilon}} x^i,j=σj2+ϵ xi,jμj

计算所有样本的归一化值:

X ^ = [ − 1.414 − 1.414 − 1.414 − 0.707 − 0.707 − 0.707 0.0 0.0 0.0 0.707 0.707 0.707 1.414 1.414 1.414 ] \hat{X} =\begin{bmatrix} -1.414 & -1.414 & -1.414 \\ -0.707 & -0.707 & -0.707 \\ 0.0 & 0.0 & 0.0 \\ 0.707 & 0.707 & 0.707 \\ 1.414 & 1.414 & 1.414 \\ \end{bmatrix} X^= 1.4140.7070.00.7071.4141.4140.7070.00.7071.4141.4140.7070.00.7071.414

Step 5: 重新缩放和平移

y i , j = γ j x ^ i , j + η j y_{i,j} = \gamma_j \hat{x}_{i,j} +\eta_j yi,j=γjx^i,j+ηj

其中:

  • γ \gamma γ η \eta η 是可学习参数,在训练过程中不断调整。

3. Batch 2(样本 6-10)的 BN 计算

当我们处理 下一个 mini-batch(样本 6-10) 时,重新计算均值和方差,而不会使用上一个 batch 的统计量。

取出 Batch 2
X = [ 6.0 7.0 8.0 7.0 8.0 9.0 8.0 9.0 10.0 9.0 10.0 11.0 10.0 11.0 12.0 ] X = \begin{bmatrix} 6.0 & 7.0 & 8.0 \\ 7.0 & 8.0 & 9.0 \\ 8.0 & 9.0 & 10.0 \\ 9.0 & 10.0 & 11.0 \\ 10.0 & 11.0 & 12.0 \\ \end{bmatrix} X= 6.07.08.09.010.07.08.09.010.011.08.09.010.011.012.0

同样进行 BN 计算:

  • 均值 μ = [ 8.0 , 9.0 , 10.0 ] \mu = [8.0, 9.0, 10.0] μ=[8.0,9.0,10.0]
  • 方差 σ 2 = [ 2.0 , 2.0 , 2.0 ] \sigma^2 = [2.0, 2.0, 2.0] σ2=[2.0,2.0,2.0]
  • 归一化:使均值变 0,方差变 1
  • 重新缩放和平移:用 γ \gamma γ 和 eta$ 调整

这与 Batch 1 是完全独立的计算过程


4. 训练 vs 预测

训练阶段

  • 每个 mini-batch 计算自己的均值和方差
  • 使用当前 batch 的均值和方差进行归一化

推理(测试)阶段

在测试时,我们不再依赖 mini-batch,而是用整个训练过程中累积的全局均值和方差,通常用 指数移动平均 计算:
μ g l o b a l = 0.9 ⋅ μ g l o b a l + 0.1 ⋅ μ b a t c h \mu_{global} = 0.9 \cdot \mu_{global} + 0.1 \cdot \mu_{batch} μglobal=0.9μglobal+0.1μbatch
σ g l o b a l 2 = 0.9 ⋅ σ g l o b a l 2 + 0.1 ⋅ σ b a t c h 2 \sigma^2_{global} = 0.9 \cdot \sigma^2_{global} + 0.1 \cdot \sigma^2_{batch} σglobal2=0.9σglobal2+0.1σbatch2

这样,即使 batch size 变为 1,BN 也能正确工作。


5. 总的来说

  • Batch Normalization 在 mini-batch 级别计算均值和方差,不会跨 batch 计算。
  • 每个 batch 计算自己的均值和方差,互不影响。
  • 训练时用 mini-batch 统计量,推理时用全局统计量(移动平均计算)。
  • BN 主要作用:
    1. 让每层的输入分布稳定(均值 0,方差 1)。
    2. 让梯度更稳定,加速训练。
    3. 使网络更鲁棒,不依赖权重初始化。

以上


http://www.ppmy.cn/devtools/158380.html

相关文章

MacOS 命令行详解使用教程

本章讲述MacOs命令行详解的使用教程,感谢大家观看。 本人博客:如烟花般绚烂却又稍纵即逝的主页 MacOs命令行前言: 在 macOS 上,Terminal(终端) 是一个功能强大的工具,它允许用户通过命令行直接与系统交互。本教程将详细介绍 macOS…

深度学习入门:搭建你的第一个神经网络

在当今数字化时代,深度学习正以前所未有的速度改变着我们的生活。从语音助手到自动驾驶汽车,从图像识别到自然语言处理,深度学习的应用无处不在。而Python作为一门简洁而强大的编程语言,成为了深度学习领域最受欢迎的工具之一。今天,我们将一起踏上深度学习的旅程,搭建你…

支持多种网络数据库格式的自动化转换工具——VisualXML

一、VisualXML软件介绍 对于DBC、ARXML……文件的编辑、修改等繁琐操作,WINDHILL风丘科技开发的总线设计工具——VisualXML,可轻松解决这一问题,提升工作效率。 VisualXML是一个强大且基于Excel表格生成多种网络数据库文件的转换工具&#…

SLF4J与Spring集成实战:替代JCL并绑定Log4j

在Java开发中,日志框架的选择和集成一直是一个重要的环节。SLF4J(Simple Logging Facade for Java)作为一个流行的日志门面框架,提供了简单而强大的日志抽象层。与JCL(Jakarta Commons Logging)相比&#x…

TCP/IP参考模型和网络协议

由于国防部担心他们一些重要的主机、路由器和互联网关可能会突然崩溃,所以网络必须实现的另一目标是网络不受子网硬件损失的影响,已经建立的会话不会被取消,而且整个体系结构必须相当灵活。 TCP/IP是一组用于实现网络互连的通信协议。Interne…

【KOA】01-专栏介绍及学习计划(后续项目实战结合Vue3)

前言 关于node的知识,前面的文章介绍了express框架,并且做了一个专栏。 Express专栏 最近了解到node的koa框架也是比较常用、实用,因此在接下来会介绍相关知识,编写相关代码案例,写成博客文章,整理成一个…

Spring实现AOP功能的原理:代理模式(JDK动态代理与CGLIB字节码生成技术代理)的理解

JDK 动态代理和 CGLIB 代理是 Java 中两种常见的动态代理技术。它们的核心作用是 在运行时生成代理对象,用于增强原始对象的功能(如 AOP 切面编程、拦截方法调用等)。 ① JDK 动态代理 JDK 动态代理基于 java.lang.reflect.Proxy 和 Invocat…

SQL最佳实践(笔记)

写在前面: 之前baeldung的Java Weekly Reviews里面推荐了一篇关于SQL优化的文章,正好最近在学习数据库相关知识,记一些学习笔记 原文地址:SQL Best Practices Every Java Engineer Must Know 1. 使用索引 使用索引…