在深度学习的世界里,神经网络的训练常常充满了挑战。从复杂的梯度问题到漫长的收敛过程,每一个环节都可能成为阻碍我们前进的绊脚石。

而今天,我们要深入探讨的 BatchNormalizationBatch NormalizationBatchNormalization(批量归一化),正是这样一种能够显著提升训练效率和模型性能的“神技”。

那么,BatchNormalizationBatch NormalizationBatchNormalization 究竟是如何工作的?它背后的数学原理又是什么?

接下来,就让我们一起揭开它的神秘面纱。

一、数据归一化的数学意义


在正式进入Batch Normalization之前,我们先来聊聊数据归一化

归一化,顾名思义,就是将数据缩放到一个统一的范围,让它们在同一个尺度上“公平竞争”。

想象一下,如果你有一个数据集,其中一部分特征的数值范围是0到1,而另一部分特征的数值范围是0到1000。 那么在训练过程中,数值范围更大的特征可能会“淹没”其他特征,导致模型对它们过度依赖,而忽略了其他重要的信息。

图1. 归一化处理

为了避免这种情况,我们需要对数据进行归一化处理。常见的归一化方法有两种:Min-Max归一化和Z-Score归一化。

  • 👮 Min-Max归一化的公式是: xMin-Max=x−xminxmax−xminx_{\text{Min-Max}} = \frac{x - x_{\text{min}}}{x_{\text{max}} - x_{\text{min}}}xMin-Max=xmaxxminxxmin,它的作用是将数据缩放到0到1之间。

  • 👮 Z-Score归一化的公式是: xZ-Score=x−μσx_{\text{Z-Score}} = \frac{x - \mu}{\sigma}xZ-Score=σxμ,其中 μ\muμ 是数据的均值,σ\sigmaσ是标准差。

这种归一化方法不仅考虑了数据的范围,还考虑了数据的分布情况,使得归一化后的数据具有均值为0、方差为1的特性。

归一化在神经网络中的作用是显而易见的。它可以减少特征间的量纲差异,让网络的输入更加均匀,从而提高训练的稳定性和收敛速度。

如果没有归一化,网络可能会陷入梯度消失或梯度爆炸的困境,导致训练过程异常艰难。


二、Batch Normalization的基本原理


那么,Batch Normalization又是如何在归一化的基础上进一步优化神经网络的呢?

这就要从它的提出背景说起。在深度学习中,有一个问题一直困扰着研究人员,那就是内部协变量偏移(Internal Covariate Shift)

简单来说,随着网络层数的加深或训练的进行,输入数据的分布会发生变化。

这种变化会导致训练过程变得非常缓慢,因为每一层都需要不断地调整自己的参数来适应新的输入分布。

2.1 设计思想

为了解决这个问题,Batch Normalization应运而生。它的核心思想是:既然输入数据的分布会不断变化,那我们就在每一层的输入处进行归一化处理,让数据始终保持在一个相对稳定的分布上

图2. 数据分布

这样一来,每一层的训练过程就会变得更加平稳,收敛速度也会大大加快。

在神经网络中,Batch Normalization通常放在卷积层或全连接层之后、激活函数之前。这是因为归一化后的数据更适合进行非线性变换,而激活函数的作用正是引入非线性。

通过在激活函数之前进行归一化,我们可以让激活函数的输入始终保持在一个相对稳定的分布上,从而提高网络的训练效率。

2.2 基本流程

Batch Normalization的基本流程可以分为四个步骤。

首先,我们需要计算当前批次数据的均值 μ\muμ。这个均值是通过将当前批次的所有数据相加,然后除以数据的总数得到的。

接着,我们计算当前批次数据的方差 σ2\sigma^2σ2。方差的计算公式是:

σ2=1N∑i=1N(xi−μ)2\sigma^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2σ2=N1i=1N(xiμ)2

其中 NNN是当前批次的数据数量,xix_ixi 是第 iii 个数据点。

图3. Batch Normalization基本原理

有了均值和方差之后,我们就可以对数据进行归一化处理了。归一化公式是:

x′=x−μσ2+ϵx' = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}x=σ2+ϵxμ

其中 ϵ\epsilonϵ 是一个极小值,用于防止除零。

最后,为了恢复网络的非线性表达能力,我们引入了两个可学习参数 γ\gammaγβ\betaβ,对归一化后的数据进行缩放和平移。最终的公式是:y=γx′+βy = \gamma x' + \betay=γx+β


Batch Normalization为什么有效?

在论文《An empirical analysis of the optimization of deep network loss surfaces》中,作者绘制了VGG和NIN网络在有无BN层的情况下,Loss surface的差异,包含初始点位置以及不同优化算法最终收敛到的local minima位置。

图4. Batch Normalization对模型训练的影响

研究发现:没有BN层时,网络的损失曲面存在较大高原,优化困难;加入BN层后,损失曲面变为山峰状,优化更容易。

原因在于,无BN层时,输入分布的均值和方差隐藏在前面层的权重中,调整分布需复杂反向传播。而BN层通过参数γ和β直接调整分布的均值和方差,简化了优化过程,使网络训练更高效。


2.3 数学推导

了解了Batch Normalization的基本原理和流程之后,我们再来看看它的数学推导。

首先,我们来推导均值和方差的计算公式

对于一个维度为N,C,H,WN, C, H, WN,C,H,W的输入张量,均值和方差的计算公式分别为:
μ=1N×H×W∑n=0N−1∑h=0H−1∑w=0W−1X[n,c,h,w]\mu = \frac{1}{N \times H \times W} \sum_{n=0}^{N-1} \sum_{h=0}^{H-1} \sum_{w=0}^{W-1} X[n, c, h, w]μ=N×H×W1n=0N1h=0H1w=0W1X[n,c,h,w]
σ2=1N×H×W∑n=0N−1∑h=0H−1∑w=0W−1(X[n,c,h,w]−μ)2\sigma^2 = \frac{1}{N \times H \times W} \sum_{n=0}^{N-1} \sum_{h=0}^{H-1} \sum_{w=0}^{W-1} (X[n, c, h, w] - \mu)^2σ2=N×H×W1n=0N1h=0H1w=0W1(X[n,c,h,w]μ)2
这两个公式的作用是计算当前批次数据的均值和方差,为后续的归一化处理提供依据。

接下来,我们来看归一化公式的推导

归一化公式是 x′=x−μσ2+ϵx' = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}}x=σ2+ϵxμ,它的目的是将数据转换为均值为0、方差为1的分布。


为什么要加一个极小值 ϵ\epsilonϵ

这是因为当方差 σ2\sigma^2σ2 非常接近0时,分母可能会变成0,导致除零错误。

为了避免这种情况,我们在分母中加入一个极小值 ϵ\epsilonϵ,使得分母始终大于0。


图5. Batch Normalization数学原理

最后,我们来推导可学习参数 γ\gammaγβ\betaβ 的作用

在归一化之后,数据的分布虽然更加稳定,但同时也失去了原来的尺度和偏移。

为了恢复网络的非线性表达能力,我们需要引入两个可学习参数 γ\gammaγβ\betaβ,对归一化后的数据进行缩放和平移。

Batch Normalization公式是:
y=γx−μσ2+ϵ+βy = \gamma \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \betay=γσ2+ϵxμ+β
其中,γ\gammaγ 的作用是对数据进行缩放,β\betaβ 的作用是对数据进行平移。

通过这两个参数,我们可以将归一化后的数据调整到更适合网络学习的分布上。

三、Batch Normalization对模型训练的影响


Batch Normalization对模型训练的影响是多方面的。

首先,它可以加速训练收敛

Batch Normalization通过将激活输入值分布在非线性函数的梯度敏感区域,可以避免梯度消失问题,从而加快训练速度。

其次,它可以提升模型的泛化能力

Batch Normalization通过归一化操作减少模型对特定数据分布的依赖,使得模型在面对新的数据时能够更好地适应,从而增强模型的泛化能力。

图6. Batch Normalization在模型中的位置

除了这些优点之外,Batch Normalization还可以简化调参过程

由于它对学习率和参数初始化的宽容性,我们在训练过程中不需要花费太多时间去调整这些参数,大大减少了调参的复杂度,提高了训练的效率。


然而,Batch Normalization也并非万能的。它也有一些局限性。

例如,它对小批量数据比较敏感。当批量大小较小时,计算得到的均值和方差可能会不够准确,从而影响Batch Normalization的效果。

此外,在某些情况下,Batch Normalization可能会导致训练过程不稳定。

因此,在实际应用中,我们需要根据具体的情况来选择是否使用Batch Normalization,以及如何调整它的参数。




- 结语 -

通过以上内容的介绍,我们对Batch Normalization的数学原理及其在神经网络中的作用有了一个全面的了解。

Batch Normalization通过归一化操作解决了内部协变量偏移的问题,加速了训练收敛,提升了模型的泛化能力,并简化了调参过程。

目前,Batch Normalization已经成为深度学习中一种不可或缺的技术,被广泛应用于各种神经网络模型中。

注:本文中未声明的图片均来源于互联网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95973.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95973.shtml
英文地址,请注明出处:http://en.pswp.cn/web/95973.shtml

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

相关文章

软考备考①

一、数值及其转换和数据的表示1、数值及其转换①任意进制到十进制以二进制为例,以小数点做分割,小数点以左从二的零次方开始,小数点以右从二的负一次方开始。②十进制到任意进制利用短除法③二进制到十六进制分为小数点前和小数点后&#xff…

小程序缓存数据字典

import { getDict } from /api/profile;const CACHE_KEY DICT_CACHE;let dictCache new Map();// 初始化时加载缓存const loadCache () > {const cache uni.getStorageSync(CACHE_KEY);if (cache) {dictCache new Map(JSON.parse(cache));}};// 保存缓存到Storageconst…

Java对象在内存中的布局详解

1、Java 对象内存布局(HotSpot 虚拟机)在 ​HotSpot 虚拟机​ 中,一个 Java 对象在堆内存中的存储布局可以分为以下几个部分:1、对象头(Object Header)​对象头是对象内存布局中最重要的部分之一&#xff0…

钾元素:从基础认知到多元应用与前沿探索

一、钾元素的基础认知1.1 钾元素的发现历程在人类历史的长河中,钾的化合物早早就进入了人们的视野,并在生活和生产中得到了应用。古代时期,人们就知晓草木灰里含有钾草碱,即碳酸钾 。在日常的洗涤活动中,碳酸钾发挥了重…

JAiRouter 配置文件重构纪实 ——基于单一职责原则的模块化拆分与内聚性提升

JAiRouter 配置文件重构纪实 ——基于单一职责原则的模块化拆分与内聚性提升 文章目录JAiRouter 配置文件重构纪实 ——基于单一职责原则的模块化拆分与内聚性提升一、背景:单体 YAML 的“熵增”困境二、重构策略:高内聚、低耦合的模块化方案2.1 拆分原则…

惊!printf 不往屏幕输?都是 fd 在搞鬼!爆肝拆解 Linux 文件描述符 + 重定向底层,学会直接在终端横着走

文 章 目 录一、文 件1、基 础 知 识2、C 文 件 接 口(1)代 码 示 例(2)当 前 路 径(3)文 件 权 限(4)w(5)a(6)三 个 输 入 输 出 流3…

【高分论文密码】大尺度空间模拟与不确定性分析及数字制图技术应用

大尺度模拟技术能够从不同的时空尺度揭示农业生态环境领域的内在机理和时空变化规律,为复杂过程模型的模拟提供技术基础。一:R语言空间数据及数据挖掘关键技术1、R语言空间数据讲解及应用特点 1)R语言基础与数据科学 2)R空间矢量数据 3)R栅格数据2、R语言…

Git 工作流与分支管理实战:rebase vs merge 对比、冲突解决、规范 Commit Message 与主干稳定性最佳实践

1. 版本控制与协作流程(Git 工作流、分支管理、合并冲突) 虽然 Git 用得多,但“rebase vs. merge”、如何解决冲突、如何编写规范的 commit message、如何维护主干的稳定性,都需要一段时间才能形成体系化的理解。 摘要 在日常团队…

调试 cuda kernel

调试 CUDA Kernel 并进入 __device__ 函数是 CUDA 开发中一项非常重要的技能。这主要依赖于 NVIDIA 的官方调试器 NVIDIA Nsight Systems (用于系统级分析) 和 NVIDIA Nsight Compute (用于内核级分析) 以及经典的 cuda-gdb (命令行调试器)。 这里将重点介绍两种最常用和强大的…

GD32自学笔记:4.ADC

while(1)里测试ADC是否正常首先,ADC引脚说明如下:ADC 通道引脚描述ADC_CHANNEL_0PA0端口 A 的引脚 0,可用于模拟信号输入,如传感器或外部电压。ADC_CHANNEL_1PA1端口 A 的引脚 1,常用于模拟输入,适用于一般…

渐变背景色和渐变字体颜色的实现方法

一、渐变背景色&#xff08;Gradient Background&#xff09;1. 线性渐变&#xff08;Linear Gradient&#xff09;通过 linear-gradient 创建从一种颜色到另一种颜色的线性渐变。代码示例<div class"linear-gradient"></div><style> .linear-grad…

Wi-Fi技术——传播与损耗

一、频段和信道 Wi-Fi通过发射无线电进行传输&#xff0c;而无线电的一个重要特性是频率。 频段&#xff1a;一个大的频率范围&#xff0c;如Wi-Fi工作在2.4GHz、5GHz、6GHz&#xff0c;其并不是一个值&#xff0c;而是一个范围信道&#xff1a;在每个频段中划分小的频率范围…

【Mysql-installer-community-8.0.26.0】Mysql 社区版(8.0.26.0) 在Window 系统的默认安装配置

ℹ️大家好&#xff0c;我是练小杰&#xff0c;好久不见了&#xff0c;周末愉快&#xff0c;今天周六了&#xff01;&#xff01;做了CSDN博客才发现&#xff0c;坚持不断发文是那么的困难&#xff0c;大家都是好样的&#xff01;&#xff01;&#x1f606; 本文是针对 Mysql 的…

【RabbitMQ】----初识 RabbitMQ

1. MQ 是什么&#xff1f; 在互联网中&#xff0c;会经常使用 MQ 来作为消息通信服务&#xff0c;我们一起来看一下什么是 MQ 吧&#xff01; 1.1 MQ 本质 【MQ】&#xff08;Message queue&#xff09;&#xff0c;消息队列&#xff0c;字面意思来看&#xff0c;本质是一个…

深度学习:归一化技术

在深度学习中&#xff0c;归一化技术是提高模型训练效率和性能的重要手段。归一化通过调整输入数据的分布&#xff0c;使得模型在训练过程中更易于收敛&#xff0c;减少过拟合的风险。本文将介绍几种常见的归一化技术&#xff0c;包括特征归一化、批归一化、层归一化和实例归一…

【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)

开学前三周先进行企业实训&#xff0c;主要学习Javaweb并实现一些小的项目&#xff0c;本篇笔记主要记录第一周实训的知识总结以及个人遇到的问题及解答&#xff0c;用于日后复习回顾和知识巩固&#xff0c;希望可以帮到同样在学Javaweb的大家 文章目录D1html基础D2块元素与行…

SQL 拓展指南:不同数据库差异对比(MySQL/Oracle/SQL Server 基础区别)

在学习 SQL 的过程中&#xff0c;你可能会发现&#xff1a;同样的 “建表语句” 在 MySQL 能运行&#xff0c;在 Oracle 却报错&#xff1b;“分页查询” 的写法在 SQL Server 和 MySQL 完全不同。这是因为 MySQL、Oracle、SQL Server 是三大主流关系型数据库&#xff0c;虽都支…

论文阅读:DMD | Improved Distribution Matching Distillation for Fast Image Synthesis

论文地址&#xff1a;https://arxiv.org/abs/2405.14867 项目官网&#xff1a;https://tianweiy.github.io/dmd2/ 代码地址&#xff1a;https://github.com/tianweiy/DMD2 发表时间&#xff1a;2024年5月24日 分布匹配蒸馏&#xff08;DMD&#xff09;生成的一步生成器能够与教…

嵌入式 Linux 启动流程详解 (以 ARM + U-Boot 为例)

嵌入式 Linux 启动流程详解 (以 ARM U-Boot 为例) 对于嵌入式开发者而言&#xff0c;深入理解系统的启动流程至关重要。这不仅有助于进行底层驱动开发和系统移植&#xff0c;还能在遇到启动失败等问题时&#xff0c;快速定位和解决。本文将详细分解基于 ARM 架构的嵌入式 Linu…

在前端开发中,html中script 的type分别有哪几种?分别什么情况用到?

以下是 HTML 中<script>标签type属性的常见取值、说明及使用场景&#xff1a;type 值说明使用场景不写&#xff08;空值&#xff09;HTML5 中默认等同于text/javascript&#xff0c;表示普通 JavaScript 脚本绝大多数传统 JavaScript 代码&#xff0c;包括内联脚本和外部…