深度学习基础知识-Batch Normalization(BN)超详细解析

一、背景和问题定义

在深层神经网络(Deep Neural Networks, DNNs)中,层与层之间的输入分布会随着参数更新不断发生变化,这种现象被称为内部协变量偏移(Internal Covariate Shift)。具体来说,由于网络层逐层堆叠,各层参数的更新可能会导致前一层的输出分布发生变化,进而影响到下一层的输入分布。这种变化在训练过程中会造成以下几个问题:

  1. 不稳定的梯度传播:随着层数的加深,输出的分布在层与层之间逐渐偏离原始的分布,使得梯度变得不稳定,从而导致梯度消失或梯度爆炸等问题。
  2. 训练收敛速度变慢:当每一层的输入分布不稳定时,模型的参数更新会变得难以适应这种分布的变化,导致训练收敛速度减慢,甚至可能无法有效收敛。
  3. 超参数选择复杂:内部协变量偏移导致模型对学习率、初始化方法、正则化参数等超参数变得极其敏感,调参难度较大。

内部协变量偏移是一种层间输入分布的不断变化问题。其根本原因在于随着模型参数的迭代更新,不同层的输入(即前层的输出)分布会不断改变,特别是在深层神经网络中,叠加的误差会随着层数的增加逐步放大,导致训练过程不稳定。BN 正是通过在每一层应用归一化来抑制这种现象,以确保模型在训练过程中不会因输入分布的变化而陷入梯度消失或爆炸的困境。

BN核心思想是让每一层的输入保持一个稳定的分布,这样模型在训练时可以减少对输入分布变化的依赖,从而加速收敛并提升稳定性。

二、BN的核心思想与数学原理

Batch Normalization 主要分为以下几个步骤来完成输入数据的标准化。

1. Mini-Batch 均值和方差计算

在每一层的输入特征图上,BN会在 mini-batch 的数据上计算其均值和方差。假设当前的 mini-batch 样本为 {x1,x2,…,xm},则对于每一个神经元的输出 xi(这里的 xi 是每个样本在这一层的输出特征)计算均值和方差:

  • 均值 μ:

    其中 m 表示 mini-batch 的样本数。

  • 方差 σ2:

这些 mini-batch 层面的均值和方差用于将数据归一化。

2. 数据归一化

BN 对每一个样本的输出进行归一化处理,通过减去均值后再除以标准差,使得归一化后的输出数据具有零均值和单位方差的标准正态分布。

归一化过程如下:

其中 ϵ 是一个极小值(例如10^{-5}),用于防止分母为零,确保计算的稳定性。

3. 缩放和平移(Scale and Shift)

直接归一化会使得模型的学习能力受到一定限制,因为归一化后的输出被严格限制在均值为 0 和方差为 1 的分布中。为了恢复模型的表达能力,BN 引入了两个可学习的参数:缩放参数 γ 和偏移参数 β,将归一化后的数据进行线性变换:

其中:

  • γ控制归一化后的数据分布的尺度(scale)。
  • β控制归一化后的数据分布的平移(shift)。

最终输出 yi​ 保留了归一化带来的优势,同时通过 γ 和 β 恢复模型的表达能力。

4. BN的输出公式

BN 层的完整输出公式为:

5.BN 的反向传播推导

在训练深度神经网络的过程中,BN 层通过链式法则参与反向传播,影响梯度计算。对于 BN 层的每个参数(均值、方差、缩放参数 γ 和偏移参数 β),反向传播过程中的梯度会通过以下步骤计算:

  • 对均值 μ 的梯度:由于均值是 mini-batch 中所有样本的平均值,因此对均值的梯度涉及到对每个样本的梯度求和。
  • 对方差 σ2 的梯度:在均值的梯度计算之后,方差的梯度可以通过对每个样本归一化结果与均值的偏离程度进行二次求和计算。
  • 对缩放参数 γ 和偏移参数 β 的梯度:这两个参数是可学习的,因此它们的梯度会直接来自于 mini-batch 归一化输出结果的梯度,简单而言,γ 的梯度等于归一化后的输入乘上输出梯度,β 的梯度为输出梯度的和。

通过这套反向传播计算,BN 能够自适应地调节均值和方差,使得模型在多次迭代过程中能动态适应输入分布的微小变化。

三、BN的实现步骤

  1. 在 mini-batch 上计算均值和方差
  2. 对 mini-batch 的数据进行标准化,使得标准化后的数据符合零均值和单位方差的分布。
  3. 引入可学习的参数 γ 和 β,通过线性变换来恢复模型的表达能力。
  4. 将标准化后的数据重新缩放和平移,得到输出。

四、BN的作用和优势

1. 减少内部协变量偏移

BN 的归一化操作将每层的输入分布限制在一个稳定的范围内,减少了各层之间的协变量偏移,使得模型能够在深层网络中保持输入数据分布的稳定性,从而有效加速训练。

2. 加速训练和提高收敛性

由于每一层的输入分布被稳定化,模型在训练时可以采用更高的学习率,同时 BN 也具有一定的正则化效果,使得模型更容易收敛。此外,BN 在一定程度上减轻了深度模型对参数初始化的敏感性,即使权重初始化较为随意,经过 BN 层后数据分布也能被重新调整到合理范围,从而加快收敛速度。

3. 增加泛化能力,减少过拟合

BN 在每个 mini-batch 上动态计算均值和方差,这一过程中引入了随机性,具有一定的正则化效果,可以减少模型的过拟合。通常,采用 BN 的模型在不使用其他正则化方法(例如 dropout)的情况下也能够获得较好的泛化效果。

4. 减小模型对超参数的敏感性

通过将输入分布标准化,BN 减少了模型对学习率、权重初始化和网络深度的敏感性。这样可以简化网络的超参数调优过程,减轻调参的工作量。

5. 提高梯度传播的稳定性

BN 通过稳定每层的输入分布,确保了梯度的数值稳定性,减少梯度消失和爆炸的风险。这对于训练深层神经网络尤为重要,因为在没有 BN 的情况下,梯度可能在反向传播时逐渐消失或爆炸,导致模型难以有效训练。

五、训练与推理的不同处理方式

BN在训练和推理阶段的处理方式有所不同,这是因为推理阶段不能依赖 mini-batch 上的动态均值和方差计算:

  1. 训练阶段:在每个 mini-batch 上实时计算均值和方差,进行归一化和再缩放。这一过程能更好地适应输入数据的变化。
  2. 推理阶段:在推理阶段使用的是训练过程中累积的全局均值和方差,通常通过滑动平均在训练阶段累计。这种处理方式确保推理时的稳定性,并避免动态计算对模型性能的影响。

六、Batch Normalization 的改进方法

1. Layer Normalization (LN)

Layer Normalization(层归一化)针对小 batch size 训练场景提出,它在每个单一样本上计算均值和方差,而非在 mini-batch 上,特别适用于 RNN 等时序模型。LN 可以有效解决 RNN 中的输入分布偏移问题,但在 CNN 中效果不如 BN 明显,因为 CNN 的数据具有更强的空间结构性,使用 LN 会破坏特征图的空间一致性。

2. Instance Normalization (IN)

Instance Normalization(实例归一化)主要用于风格迁移任务中。IN 仅在每个样本的每个通道上进行归一化,忽略了 batch 维度上的信息,适合图像生成任务,尤其是图像风格迁移中的应用。

3. Group Normalization (GN)

Group Normalization(组归一化)是针对小 batch size 训练而设计的另一种方法。GN 将每个特征通道划分为若干组,并在组内进行归一化,从而在小 batch size 条件下仍然获得较好的效果。GN 不依赖于 batch 的大小,因此在批次数据量较小时表现优越。

4. Switchable Normalization (SN)

Switchable Normalization(可切换归一化)是一种动态选择不同归一化方法的策略。SN 根据任务的需求在 BN、LN 和 IN 之间切换,选择合适的归一化操作来提高模型性能。这种动态切换机制通过在训练过程中学习不同归一化方法的权重,从而找到最优的归一化组合。

5. Batch-Instance Normalization (BIN)

Batch-Instance Normalization(批量-实例归一化)结合了 BN 和 IN 的优势。通过同时对 mini-batch 和每个样本进行归一化,BIN 在小 batch size 训练中仍能获得较好的泛化效果,适用于某些生成任务和图像处理任务。

七、BN的局限性

尽管 BN 为深度学习模型带来了显著的训练稳定性提升,但也存在一定的局限性:

1. 对小 batch size 的敏感性

BN 的归一化操作基于 mini-batch 的均值和方差,当 batch size 较小时,均值和方差的估计会变得不稳定,导致 BN 效果变差。为此,通常会使用大于 16 的 batch size 或改用 Layer Normalization(LN)、Instance Normalization(IN)和 Group Normalization(GN)等替代方法。

2. 在循环神经网络(RNN)中的应用效果有限

BN 在循环神经网络中效果不如在卷积神经网络中显著。这是因为 RNN 的数据序列特性较强,batch 内不同样本在时间上的依赖性会影响均值和方差的稳定性。

3. 推理阶段计算成本较高

在推理时,BN 需要使用训练阶段积累的均值和方差进行归一化操作,这增加了额外的计算成本。特别是对推理速度要求较高的应用场景,BN 可能会成为计算瓶颈。

八、Batch Normalization 在不同神经网络中的应用

BN 在不同类型的神经网络中表现有所差异,这与不同网络架构对数据归一化的需求和特性相关。

1. 卷积神经网络(CNN)

在卷积神经网络中,BN 是常用的标准化方法之一。在 CNN 中,BN 操作通常位于卷积层之后和激活函数之前,因为在卷积层之后立即进行归一化有助于保持每个通道的特征分布稳定,从而保证特征图中的空间结构不会因激活函数造成的非线性变化而失真。

2. 全连接神经网络(FCN)

在全连接神经网络中,BN 的使用较为直接。在每一个隐藏层的输出中,直接进行批量归一化操作,即可在各层之间实现有效的输入分布稳定化。BN 的引入显著减少了全连接网络中参数初始化和学习率选择的敏感性,训练收敛速度得到了大幅提升。

3. 循环神经网络(RNN)

在 RNN 中,BN 的应用效果相对有限,因为 RNN 中的数据具有时序相关性,即不同时间步的输入具有一定的依赖性,传统的 BN 操作难以捕捉这种时序特性。针对 RNN 的 BN 变体,诸如层归一化(Layer Normalization) 和实例归一化(Instance Normalization)等更适合处理时序数据。此外,BN 在 RNN 中的使用通常仅限于输入和输出部分的标准化,而非在每个时间步都进行归一化处理。

4. 生成对抗网络(GAN)

在 GAN 中,BN 被广泛应用于生成器和判别器网络中。生成器使用 BN 可以避免梯度消失并提升训练稳定性,而判别器使用 BN 能帮助网络在不同的输入分布之间保持稳定性,尤其是在 GAN 的训练过程中,由于生成样本的不断变化,使得判别器的输入分布也会变化,BN 有助于减轻这种影响。

九、总结

Batch Normalization 通过动态调整神经网络每一层的输入数据分布,有效解决了深度学习中的内部协变量偏移问题。BN 的引入不仅提高了训练效率和模型的稳定性,还在一定程度上提升了模型的泛化能力。

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

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

相关文章

NLP算法工程师精进之路:顶会论文研读精华

1.学术能力培养 全部论文资料下载: 将论文和 GitHub 资源库匹配 papers with code https://paperswithcode.com/OpenGitHub 新项目快报Github pwc:https://github.com/zziz/pwc GitXiv:http://www.gitxiv.com/ 文章撰写 Overleaf [Autho…

从倍压整流到二极管钳位与限幅

何为倍压整流?这里直接引用“百度百科”解释,如下述。 在一些需用高电压、小电流的地方,常常使用倍压整流电路。倍压整流,可以把较低的交流电压,用耐压较高的整流二极管和电容器,“整”出一个较高的直流电…

Java项目实战II基于Java+Spring Boot+MySQL的工程教育认证的计算机课程管理平台(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着工程教…

uniapp开发小程序【简单的实现点击下拉选择性别功能】

一、展示效果 二、代码 <template><view><view class="form_box"><view class="item"

硅谷甄选(9)SKU模块

SKU模块 8.1 SKU静态 <template><el-card><el-table border style"margin: 10px 0px"><el-table-column type"index" label"序号" width"80px"></el-table-column><el-table-columnlabel"名称…

Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域

在之前的 3.10 里&#xff0c; Flutter 的 Impeller 在 iOS 上支持了 P3 广色域图像渲染&#xff0c;但是当时也仅仅是当具有广色域图像或渐变时&#xff0c;Impeller 才会在 iOS 上显示 P3 的广色域的颜色&#xff0c;而如果你使用的是 Color API&#xff0c;会发现使用的还是…

动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙

许多企业正面临由混合和多云环境运营复杂性所引发的危机&#xff0c;它们普遍耗巨资于物理和虚拟设备的持续维护、修补和升级上&#xff0c;而针对不同云环境下的应用部署则需要特有的技能来管理众多繁杂的工具和服务。为助力企业应对上述挑战&#xff0c;F5公司发布了BIG-IP N…

如何用Python同时抓取多个网页:深入ThreadPoolExecutor

背景介绍 在信息化时代&#xff0c;数据的实时性和获取速度是其核心价值所在。对于体育赛事爱好者、数据分析师和投注行业而言&#xff0c;能否快速、稳定地抓取到实时比赛信息显得尤为重要。特别是在五大足球联赛中&#xff0c;能够在比赛进行时获得比分、控球率等实时数据&a…

(转载)Tools for Learning LLVM TableGen

前提 最近在学习有关llvm的东西&#xff0c;其中TableGen占了一部分&#xff0c;所以想特意学习下TableGen相关的语法。这里找到了LLVM官网的一篇介绍TableGen的博客&#xff0c;学习并使用机器翻译为中文。在文章的最后也添加了一些学习TableGen的资源。 原文地址&#xff1…

LARGE SCALE GAN TRAINING FORHIGH FIDELITY NATURAL IMAGE SYNTHESIS

ABSTRACT 尽管最近在生成图像建模方面取得了进展&#xff0c;但成功地从复杂的数据集(如ImageNet)生成高分辨率、多样化的样本仍然是一个难以实现的目标。为此&#xff0c;我们在迄今为止尝试的最大规模上训练生成对抗网络&#xff0c;并研究这种规模特有的不稳定性。我们发现…

组队学习专用——task05

目录 一、基本原理 1. 决策树的基本思想 2. 决策树划分过程中可能遇到的特殊情况 (1) 单一类别终止&#xff1a; (2) 属性用尽&#xff1a; (3) 样本空缺&#xff1a; 3. 决策树的结构 二、信息量、信息熵 1. 信息量 2. 信息熵 三、决策树 1. ID3 决策树&#xff08…

Linux RAID 技术详解:原理、配置、管理及故障处理

本文档深入探讨 Linux 软件 RAID 技术&#xff0c;涵盖 RAID 原理、各种 RAID 级别、mdadm 命令详解、配置步骤、管理方法以及高级故障处理和性能调优策略。 一、 RAID 原理与架构 RAID (Redundant Arrays of Independent Disks&#xff0c;独立磁盘冗余阵列) 技术并非单一技…

「C/C++」C/C++标准库 之 <cstring> 字符串操作库

✨博客主页何曾参静谧的博客📌文章专栏「C/C++」C/C++程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明目…

单细胞数据分析(一):10X数据生成seurat数据对象

文章目录 介绍加载R包数据链接导入数据过滤细胞:移除双重细胞合并所有seurat数据对象输出结果系统信息介绍 在单细胞基因组学研究中,Seurat是一个流行的R包,用于单细胞基因表达数据的分析和探索。以下是如何从10X基因注释数据生成Seurat数据对象,并对该数据进行过滤的步骤…

day13:FTP服务

一&#xff0c;FTP概述 概述 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是用于在计算机之间传输文件的协议。它工作在网络的应用层&#xff0c;通过 TCP 协议进行数据传输&#xff0c;默认端口号为 21&#xff08;命令端口&#xff0c;另外…

从0开始的STM32学习之旅:使用中断完成等待型任务(理论部分)

目录 中断 NVIC 中断优先级 先说说一般我们聊到的中断优先级 STM32中的NVIC中断优先级表示 API CubeMx配置说明 很好&#xff0c;我们在之前的学习中已经完成了简单的GPIO输入输出驱动的控制&#xff0c;我们的下一步就是仔细了解一下中断这个事情。 中断 中断这个事情…

使用Python进行数据分析入门

文章目录 Python环境搭建安装Anaconda验证安装 必备库介绍NumPyPandasMatplotlibSciPy 数据导入与清洗导入数据清洗数据 数据探索与分析描述性统计相关性分析 数据可视化绘制直方图 高级主题机器学习深度学习 总结 随着大数据时代的到来&#xff0c;数据分析变得越来越重要。Py…

RabbitMQ + JMeter组合,优化你的中间件处理方式!

RabbitMQ是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息中间件&#xff0c;它是基于Erlang语言编写的&#xff0c;并发能力强&#xff0c;性能好&#xff0c;是目前主流的消息队列中间件之一。 RabbitMQ的安装可参照官网&#xff08; https://www.rabbitmq.c…

python 爬虫 入门 五、抓取图片、视频

目录 一、图片、音频 二、下载视频&#xff1a; 一、图片、音频 抓取图片的手法在上一篇python 爬虫 入门 四、线程&#xff0c;进程&#xff0c;协程-CSDN博客里面其实有&#xff0c;就是文章中的图片部分&#xff0c;在那一篇文章&#xff0c;初始代码的28&#xff0c;29行…

Vulnhub靶机——DC-1

#环境 本次环境是利用VMware15搭建 靶机DC-1( https://download.vulnhub.com/dc/DC-1.zip) --192.168.200.131 Kali2021.1--192.168.200 将以上两个操作系统启动&#xff0c;并设置网卡为NAT模式 #信息收集 使用arp-scan对网段进行扫描&#xff0c;探测存活主机 使用nmap…