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

深度学习|表示学习|卷积神经网络|Batch Normalization在干什么?|19

如是我闻: Batch Normalization(批归一化,简称 BN)2015 年由 Ioffe 和 Szegedy 提出 的一种加速深度神经网络训练并提高稳定性的技术。

它的核心思想是:在每一层的输入进行归一化,使其均值接近 0,方差接近 1,从而减少不同批次数据的分布变化(Internal Covariate Shift),提高训练效率,并降低对超参数的敏感性。

在这里插入图片描述


1. 为什么需要 Batch Normalization?

(1) 训练过程中数据分布会变化

  • 在深度神经网络中,每一层的输入数据并不是固定的,而是来自前一层的输出。
  • 随着训练进行,前几层的权重不断变化,导致后面层的输入数据分布发生变化(即 Internal Covariate Shift)。
  • 这种变化会让网络不断适应新的数据分布,影响收敛速度,甚至可能导致梯度消失或梯度爆炸问题

(2) 归一化输入可以加速收敛

  • 在训练神经网络时,通常对输入数据进行归一化(标准化),即让输入数据的均值为 0,方差为 1:
    x ′ = x − μ σ x' = \frac{x - \mu}{\sigma} x=σxμ
  • 但是,如果只对输入数据归一化,而不对隐藏层的输入归一化,那么后续层仍然可能受到数据分布变化的影响。

(3) Batch Normalization 解决了什么问题?

减少 Internal Covariate Shift,让每层的输入分布更加稳定。
加速收敛,使网络能够使用更大学习率进行训练。
减少梯度消失和梯度爆炸问题,提高深度网络的训练稳定性。
减少对超参数(如学习率、权重初始化)的依赖,使得网络更容易调参。
有一定的正则化效果,降低过拟合的风险。


2. Batch Normalization 的计算过程

假设当前网络有一层的输入是 x x x,Batch Normalization 计算过程如下:

(1) 计算均值和方差

对一个 batch 的数据 B = { x 1 , x 2 , . . . , x m } B = \{ x_1, x_2, ..., x_m \} B={x1,x2,...,xm},计算该 batch 的均值 μ B \mu_B μB 和方差 σ B 2 \sigma_B^2 σB2
μ B = 1 m ∑ i = 1 m x i \mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i μB=m1i=1mxi
σ B 2 = 1 m ∑ i = 1 m ( x i − μ B ) 2 \sigma_B^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2 σB2=m1i=1m(xiμB)2

(2) 归一化数据

用均值和标准差对数据进行标准化:
x ^ i = x i − μ B σ B 2 + ϵ \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} x^i=σB2+ϵ xiμB
其中 ϵ \epsilon ϵ 是一个很小的数,防止除以 0。

(3) 线性变换(可学习参数)

为了保证 BN 不会限制网络的表达能力,我们引入两个可学习参数:

  • 缩放参数 γ \gamma γ(scale):控制归一化后的分布的尺度。
  • 平移参数 β \beta β(shift):让归一化后的数据能够恢复到合适的分布。

最终输出:
y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β

这样,BN 既能保证数据的稳定性,又能让网络学到适当的分布。


3. Batch Normalization 在网络中的作用

BN 层通常可以添加到 全连接层或卷积层之后,ReLU 之前

  • 在全连接网络(MLP)中
    z = W x + b z = Wx + b z=Wx+b 之后,加入 Batch Normalization:
    z ^ = z − μ B σ B 2 + ϵ \hat{z} = \frac{z - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} z^=σB2+ϵ zμB
    然后乘以 γ \gamma γ 并加上 β \beta β
    y = γ z ^ + β y = \gamma \hat{z} + \beta y=γz^+β
    最后再经过激活函数(如 ReLU)。

  • 在 CNN 里,对每个通道的特征图进行归一化:
    μ B = 1 m ⋅ h ⋅ w ∑ i = 1 m ∑ j = 1 h ∑ k = 1 w x i , j , k \mu_B = \frac{1}{m \cdot h \cdot w} \sum_{i=1}^{m} \sum_{j=1}^{h} \sum_{k=1}^{w} x_{i, j, k} μB=mhw1i=1mj=1hk=1wxi,j,k
    其中 m m m 是 batch 大小, h , w h, w h,w 是特征图的高度和宽度。


4. Batch Normalization 的优缺点

✅ 优点

  1. 加速训练(可以使用更大学习率)。
  2. 减少梯度消失/梯度爆炸问题
  3. 提高网络的泛化能力,有一定的正则化效果(但不完全等同于 Dropout)。
  4. 降低对权重初始化的敏感性

❌ 缺点

  1. 对小 batch 不友好(因为均值和方差计算会不稳定)。
  2. 在 RNN 里效果不好(时间序列数据的统计特性不同)。
  3. 推理时计算均值和方差会增加计算量

6. BN 和其他归一化方法的对比

归一化方法应用场景归一化维度适用于 RNN?
Batch NormalizationCNN, MLP在 batch 维度计算均值和方差
Layer NormalizationRNN, Transformer在特征维度归一化(不依赖 batch)
Instance Normalization风格迁移在每个样本的特征图上归一化
Group Normalization小 batch CNN在多个通道分组归一化

7. 总的来说

  • Batch Normalization(BN)是深度学习中的一个重要归一化技术,它的目标是减少 Internal Covariate Shift,提高训练速度和稳定性
  • 核心步骤
    1. 计算 batch 均值和方差。
    2. 归一化数据,使其均值 0,方差 1。
    3. 使用可学习参数 γ \gamma γ β \beta β 进行缩放和平移。
  • BN 主要作用
    • 加速收敛,可以使用更大学习率。
    • 减少梯度消失/梯度爆炸问题,提高稳定性。
    • 有一定的正则化作用,降低过拟合
  • 缺点
    • 小 batch 训练效果较差
    • 在 RNN 里效果不好

以上

相关文章:

深度学习|表示学习|卷积神经网络|Batch Normalization在干什么?|19

如是我闻: Batch Normalization(批归一化,简称 BN) 是 2015 年由 Ioffe 和 Szegedy 提出 的一种加速深度神经网络训练并提高稳定性的技术。 它的核心思想是:在每一层的输入进行归一化,使其均值接近 0&…...

Go基础之环境搭建

文章目录 1 Go 1.1 简介 1.1.1 定义1.1.2 特点用途 1.2 环境配置 1.2.1 下载安装1.2.2 环境配置 1.2.2.1 添加环境变量1.2.2.2 各个环境变量理解 1.2.3 验证环境变量 1.3 包管理工具 Go Modules 1.3.1 开启使用1.3.2 添加依赖包1.3.3 配置国内包源 1.3.3.1 通过 go env 配置1.…...

echarts、canvas这种渲染耗时的工作能不能放在webworker中做?

可以将 ECharts、Canvas 等渲染耗时的工作放在 Web Worker 中进行处理。Web Worker 允许在后台线程中运行 JavaScript,从而将计算密集型任务从主线程中分离出来,避免阻塞用户界面。以下是一些关键点: 优势 性能提升:将耗时的渲染…...

Android学习21 -- launcher

1 前言 之前在工作中,第一次听到launcher有点蒙圈,不知道是啥,当时还赶鸭子上架去和客户PK launcher的事。后来才知道其实就是安卓的桌面。本来还以为很复杂,毕竟之前接触过windows的桌面,那叫一个复杂。。。 后面查了…...

antd pro框架,使用antd组件修改组件样式

首先用控制台的指针找到组件的类名 然后找到项目的src/global.less文件 在里面进行修改,切记:where(.css-dev-only-do-not-override-5fybr3).ant-input:placeholder-shown这种格式,把where(.css-dev-only-do-not-override-5fybr3)删掉,使用…...

响应式编程_05 Project Reactor 框架

文章目录 概述响应式流的主流实现框架RxJavaReactor Project Reactor 框架Reactor 异步数据序列Flux 和 Mono 组件FluxMono 操作符背压处理 小结 概述 响应式编程_02基本概念:背压机制 Backpressure介绍了响应式流规范以及 Spring 框架中的响应式编程技术&#xff…...

RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)

#作者:闫乾苓 文章目录 RabbitMQ简介RabbitMQ与VMware的关系架构工作流程RabbitMQ 队列工作模式及适用场景简单队列模式(Simple Queue)工作队列模式(Work Queue)发布/订阅模式(Publish/Subscribe&#xff…...

导出依赖的几种方法

在 Python 中,你可以使用以下方法导出项目的依赖: 1. 使用 pip freeze pip freeze 可以列出当前环境中安装的所有包及其版本,并将结果保存到 requirements.txt 文件中。 pip freeze > requirements.txt2. 使用 pipreqs pipreqs 可以根…...

CS 与 BS 架构的差异

在数字化的今天,选择软件架构模式对系统的性能、维护、安全和成本都有很大影响。BS架构和CS架构是最常见的两种模式,了解它们的区别和特点对开发人员和企业决策者都很重要。 CS架构最早出现,当时用户直接从主机获取数据。随着客户端和服务端…...

OpenCV YOLOv11实时视频车辆计数线:让车辆进出有条理!

前言 大家好!今天我们聊个超级有趣的课题——如何用OpenCV结合YOLOv11进行实时视频车辆计数。是不是很炫酷?车辆进出全都清晰可见,连“跑车”都能精确统计!不过,别急,这可不仅仅是数车那么简单,背后还有许多实际问题等着你去搞定,比如计数线、车速、误检这些麻烦的小问…...

配置@别名路径,把@/ 解析为 src/

路径解析配置 webpack 安装 craco npm i -D craco/craco 项目根目录下创建文件 craco.config.js ,内容如下 const path require(path) module.exports {webpack: {// 配置别名alias: {// 约定: 使用 表示src文件所在路径: path.resolve(__dirname,src)…...

java 进阶教程_Java进阶教程 第2版

第2版前言 第1版前言 语言基础篇 第1章 Java语言概述 1.1 Java语言简介 1.1.1 Java语言的发展历程 1.1.2 Java的版本历史 1.1.3 Java语言与C/C 1.1.4 Java的特点 1.2 JDK和Java开发环境及工作原理 1.2.1 JDK 1.2.2 Java开发环境 1.2.3 Java工作原理 1.…...

Windows Docker笔记-安装docker

安装环境 操作系统:Windows 11 家庭中文版 docker版本:Docker Desktop version: 4.36.0 (175267) 注意: Docker Desktop 支持以下Windows操作系统: 支持的版本:Windows 10(家庭版、专业版、企业版、教育…...

hot100(7)

61.31. 下一个排列 - 力扣(LeetCode) 数组问题,下一个更大的排列 题解:31. 下一个排列题解 - 力扣(LeetCode) (1)从后向前找到一个相邻的升序对(i,j),此时…...

DeepSeek辅助学术写作【对比概念】效果如何?

DeepSeek-R1在论文写作细节方面有很多好的应用。我们下面通过具体案例来逐一展示这些功能。 DeepSeek-R1在提问方面,可以简化提示词也能给出精准得答案。我们来一探究竟! 对比概念(功能指数:★★★★★) DeepSeek-R1在概念对比方面的功能也非常强大。由…...

基础相对薄弱怎么考研

复习总体规划 明确目标 选择专业和院校:根据你的兴趣、职业规划和自身实力,选择适合自己的专业和院校。可以参考往年的分数线、报录比、复试难度等。了解考试科目:不同专业考试科目不同,一般包括: 公共课&#xff1a…...

kakailio官网推荐的安装流程ubuntu 22.04

https://kamailio.org/docs/tutorials/6.0.x/kamailio-install-guide-git/ # 非必须项 wget -O- https://deb.kamailio.org/kamailiodebkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/kamailio.gpg在/etc/apt/sources.list文件追加以下内容 deb [signed-by/usr/sh…...

DeepSeek:全栈开发者视角下的AI革命者

目录​​​​​​​ DeepSeek:全栈开发者视角下的AI革命者 写在前面 一、DeepSeek的诞生与定位 二、DeepSeek技术架构的颠覆性突破 1、解构算力霸权:从MoE架构到内存革命 2、多模态扩展的技术纵深 3、算法范式的升维重构 4、重构AI竞争规则 三、…...

协同探索与导航文献整理

文章目录 1.SOAR:异构无人机协同探索与拍摄以实现快速自主重建2. RACER: 一种使用分散式无人机群进行快速协同探索的方法3. 使用协作式纳米无人机在非结构化环境中进行最小感知探索4.GVP-MREP:通过动态拓扑图上的 Voronoi 分区进行快速且通信高效的多无人机探索5.森林的快速多无…...

C#结合html2canvas生成切割图片并导出到PDF

目录 需求 开发运行环境 实现 生成HTML范例片断 HTML元素转BASE64 BASE64转图片 切割长图片 生成PDF文件 小结 需求 html2canvas 是一个 JavaScript 库,它可以把任意一个网页中的元素(包括整个网页)绘制到指定的 canvas 中&#xf…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

【单片机期末】单片机系统设计

主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

浅谈不同二分算法的查找情况

二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况&#xf…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...