【AI知识点】批归一化(Batch Normalization)

news2024/11/24 3:06:59

批归一化(Batch Normalization,BN) 是一种用于加速神经网络训练并提高模型稳定性的方法,最早由 Sergey Ioffe 和 Christian Szegedy 在 2015 年提出。批归一化通过在每一层对神经网络中的激活值进行标准化,使得每一层的输入保持在一个稳定的分布中,从而缓解梯度消失和梯度爆炸的问题,并加快训练过程。


1. 为什么需要批归一化?

在神经网络训练过程中,尤其是深度神经网络,层与层之间的参数不断更新,这导致网络中的每一层的输入分布会发生变化。这种现象被称为内部协变量偏移(Internal Covariate Shift)。它会导致训练变得更加困难,因为每一层的输入分布不稳定,会使得模型需要不断适应新的数据分布,从而影响模型的训练速度。

为了解决这个问题,批归一化被引入。批归一化通过将每一层的激活值标准化为均值为 0、方差为 1 的分布,使得每一层的输入数据保持相对稳定的分布,从而使得网络可以更快地学习和收敛。


2. 批归一化的基本步骤

批归一化的过程主要包括以下几个步骤:

  1. 计算批次的均值
    对于每一层的输入(例如激活值) x x x,计算其在当前 mini-batch 中的均值:
    μ B = 1 m ∑ i = 1 m x i \mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i μB=m1i=1mxi
    其中 m m m 是 mini-batch 的样本数量, x i x_i xi 是第 i i i 个样本的输入。

  2. 计算批次的方差
    接下来计算 mini-batch 中输入的方差:
    σ 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

  3. 对输入进行标准化
    使用批次均值 μ B \mu_B μB 和方差 σ B 2 \sigma_B^2 σB2 对每个输入 x i x_i xi 进行标准化处理:
    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 ϵ 是一个很小的常数,用来避免除以零的情况。

  4. 尺度变换和偏移
    为了保持网络的表达能力,批归一化还会引入可学习的参数 γ \gamma γ β \beta β,用于对标准化后的结果进行线性变换:
    y i = γ x ^ i + β y_i = \gamma \hat{x}_i + \beta yi=γx^i+β
    其中, γ \gamma γ 是缩放参数, β \beta β 是偏移参数。这一步保证了即使数据经过归一化后,网络仍然能够恢复原始的表示能力。


3. 批归一化的整体公式

结合上面几步,批归一化的整体公式可以表示为:
y i = γ ⋅ x i − μ B σ B 2 + ϵ + β y_i = \gamma \cdot \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} + \beta yi=γσB2+ϵ xiμB+β

在这个公式中, x i x_i xi 是神经网络层中的输入, μ B \mu_B μB σ B 2 \sigma_B^2 σB2 是当前 mini-batch 的均值和方差, γ \gamma γ β \beta β 是可学习的参数,而 ϵ \epsilon ϵ 是一个防止除零的小常数。


4. 批归一化的位置

下图展示了批归一化在神经网络中的位置

在这里插入图片描述
图片来源:https://medium.com/@abheerchrome/batch-normalization-explained-1e78f7eb1e8a

下图对比了批归一化网络(Batch Normalized Network)标准神经网络(Standard Network) 在前向传播过程中的区别。


图片来源:https://gradientscience.org/batchnorm/

  • x x x 是输入特征, W W W 是权重矩阵, y = W ⋅ x y = W \cdot x y=Wx 是通过神经网络层(隐藏层)计算得到的线性输出(也就是未经过激活函数的输出)。
  • 在标准网络中,这个 y y y 直接用于损失计算 L ^ \hat{\mathcal{L}} L^ (或者进入激活函数),但在批归一化网络中,会先对 y y y 进行标准化处理。批归一化后的值 z z z 再用于损失计算 L ^ \hat{\mathcal{L}} L^(或者进入激活函数)。

5. 训练与测试时的区别

批归一化的行为在训练阶段测试阶段是不同的:

  • 训练阶段:每个 mini-batch 内的数据被标准化,使用 mini-batch 的均值和方差进行归一化。
  • 测试阶段:由于测试时无法使用 mini-batch 的均值和方差(因为测试是单独进行的),因此在训练过程中,通常会维护一个全局的均值和方差(通过对所有 mini-batch 的均值和方差进行指数加权平均计算得出)。在测试时,使用这个全局均值和方差进行归一化,而不是使用单个 mini-batch 的均值和方差。

6. 批归一化的优点

  • 加快收敛速度:批归一化能够稳定输入分布,从而加快模型的收敛速度。在实际应用中,批归一化常常使得模型在更少的迭代次数内达到同样甚至更好的效果。
  • 缓解梯度消失/爆炸问题:通过将数据标准化,批归一化可以有效防止梯度消失或梯度爆炸的问题,这对于训练深层神经网络尤其重要。
  • 允许使用更大的学习率:在梯度下降过程中,批归一化减少了权重更新的波动,因此可以使用更大的学习率,从而进一步加速模型的训练。
  • 一定的正则化效果:在一定程度上,批归一化对每个 mini-batch 的操作引入了噪声,这种噪声类似于 Dropout 的作用,能够减少模型过拟合。

7. 批归一化的缺点

  • 对小批量数据效果较差:批归一化依赖于 mini-batch 内的均值和方差。当 mini-batch 的大小较小时,均值和方差可能无法很好地代表整体数据分布,从而影响归一化效果。
  • 引入额外的计算开销:批归一化会增加额外的计算量,特别是在进行大量卷积操作或多层网络时,这可能会对训练时间造成一定影响。
  • 在某些模型中的表现不稳定:批归一化虽然通常提高了模型的稳定性,但在某些极端情况下,特别是序列模型(如 RNN)中,其表现可能不如其他正则化技术(如 Layer Normalization 和 Group Normalization)。

8. 批归一化和其变体的比较

由于批归一化对小批量数据和序列模型效果不佳,一些变体技术被提出,下面这张图形象的解释了几种归一化方法的差别:

在这里插入图片描述

图片来源:https://arxiv.org/abs/1803.08494

这个图展示了四种不同的归一化方法在特征图张量上的操作方式。每个子图展示了一个三维的特征图张量,其中:

  • N 代表 batch 维度(样本数量);
  • C 代表通道(channel)维度,每个通道代表一个特征;
  • H, W 代表空间维度(即图像的高度和宽度)。

蓝色区域代表在归一化过程中使用相同均值和方差的像素点或区域,不同的归一化方法在归一化时对不同维度的数据进行标准化。

  • Batch Norm 批归一化:在批次内所有样本的单个通道上进行归一化。
    • 适合大批量数据,适用于大多数神经网络模型,特别是在卷积神经网络(CNN)和全连接网络(FCN)中广泛使用。
  • Layer Norm 层归一化: 在单个样本的所有通道上归一化。
    • 适合变长序列模型。主要用于循环神经网络(RNN)、自注意力模型(如 Transformer)等序列模型。
  • Instance Norm 实例归一化: 在单个样本的单个通道上归一化。
    • 适合单样本输入的场景。主要用于图像生成任务,特别是在图像风格转换任务中效果较好。
  • Group Norm 组归一化: 在单个样本的多个通道(按照通道分组)上归一化。
    • 适合小批量数据。适用于卷积神经网络(CNN)中的小批量训练,以及 mini-batch 太小无法使用批归一化的情况。特别是在计算资源有限的情况下表现出色。

9. 批归一化的实际应用

在深度学习模型中,批归一化几乎已经成为标准组件之一。特别是在卷积神经网络(CNN)和全连接神经网络(FCNN)中,批归一化的使用能显著提高模型训练速度和性能。

常见的应用场景包括:

  • 图像分类:批归一化常用于卷积层之后,以保证卷积输出的稳定性,避免梯度爆炸。这种应用显著提高了像 ResNet、VGG 等经典图像分类模型的训练速度和准确性。
  • 生成对抗网络(GANs):GAN 模型中的 Generator 和 Discriminator 都需要稳定训练,批归一化能帮助平衡两者的训练。
  • 深度神经网络中的每一层:现代的神经网络模型几乎在每一层都使用批归一化。通常,批归一化会被放置在全连接层或卷积层之后,非线性激活函数之前。这种放置方式能最大程度地稳定激活值,防止模型在深度训练中失去学习能力。

10. 批归一化的总结

批归一化(Batch Normalization) 是一种重要的神经网络正则化方法,它通过标准化每一层的输入来加速神经网络的训练过程并提高模型的稳定性。其主要优势包括减少梯度消失和梯度爆炸、加快收敛速度,并提供一定的正则化效果,降低过拟合风险。批归一化在卷积神经网络和全连接神经网络中非常流行,几乎是现代深度学习模型中的标准组件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

半路出家:如何转行成为软件开发者——之找到一份工作

一、前言 一个半路出家的软件开发者,尽管只有短短几年软件开发的相关经验,却可以凭借他在其他领域积累的丰厚经验,最终一举超过单纯拥有更多软件开发经验的同行【有时拥有不同的专业背景(甚至是与软件完全不搭界的行业&#xff09…

SpringBoot赋能旅游管理:系统设计与实现

第三章 系统分析 3.1可行性分析 对所有的系统来说,都有可能会受到时间和空间上的制约。所以,我们在设计每一个项目的时候,必须对该系统实行可行性分析,这样不但能够降低项目的危害,还能改降低人力、物力和财力的损耗。…

弱网(不限于 Wi-Fi)环境的传输优化分析

参见 Wi-Fi弱网传输优化不成功有感 早在几年前还做传输优化时,我就非常不赞同在弱网环境激进传输的优化策略,我一直觉得这是在劣化传输,这观点一直影响着我,我也屡次因为这个与经理发生冲突。这观点如下表述: 弱网环…

【SpringSecurity】基本流程

【中文文档: Spring Security 中文文档 :: Spring Security Reference】 【英文文档&#xff1a;Spring Security】 以下内容只是记录springsecurity最简单的一种验证流程&#xff0c;所有配置基本都是默认的配置。 引入依赖 <dependency><groupId>org.springf…

GPU Puzzles讲解(一)

GPU-Puzzles项目可以让你学习到GPU编程和cuda核心并行编程的概念&#xff0c;通过一个个小问题让你理解cuda的编程和调用&#xff0c;创建共享显存空间&#xff0c;实现卷积和矩阵乘法等&#xff0c;通过每个小问题之后还会奖励一个狗狗小视频&#x1f601; 下面是项目的仓库&…

大模型面试宝典:问题全集及权威解答

导读 自ChatGPT开启大模型时代以来&#xff0c;大模型正迎来飞速发展&#xff0c;现在从事大模型开发相关工作可谓是处在时代的风口。那么大模型面试需要哪些技能和技巧呢&#xff0c;本文详细整理了全套的面试问题及答案&#xff0c;希望对大家有所帮助&#xff01; 目录 [x…

脉冲神经网络(SNN)论文阅读(六)-----ECCV-2024 脉冲驱动的SNN目标检测框架:SpikeYOLO

原文链接&#xff1a;CSDN-脉冲神经网络&#xff08;SNN&#xff09;论文阅读&#xff08;六&#xff09;-----ECCV-2024 脉冲驱动的SNN目标检测框架&#xff1a;SpikeYOLO Integer-Valued Training and Spike-Driven Inference Spiking Neural Network for High-performance …

MySQL数据库专栏(二)SQL语句基础操作

目录 数据库操作 创建数据库 查看数据库 选择数据库 删除数据库 数据表操作 数据表数据类型 数据表列约束 数据表索引 创建表 查看表 查看表结构 删除表 数据表的增删改操作 …

自由学习记录

约束的泛型通配符? Java中的泛型 xiaomi和byd都继承了car&#xff0c;但是只是这两个类是car的子类而已&#xff0c;而arraylist<xiaomi> ,arraylist<byd> 两个没有半毛钱继承关系 所以传入的参数整体&#xff0c;是car的list变形&#xff0c;里面的确都能存car…

YOLO11改进 | 卷积模块 | 添加选择性内核SKConv【附完整代码一键运行】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 在标准卷积神经网络 (CNN) 中&#xff0…

单调栈day54|42. 接雨水(高频面试题)、84. 柱状图中最大的矩形、两道题思维导图的汇总与对比

单调栈day54|42. 接雨水&#xff08;高频面试题&#xff09;、84. 柱状图中最大的矩形、两道题思维导图的汇总与对比 42. 接雨水84. 柱状图中最大的矩形两道题思维导图的汇总与对比 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱…

2025,企业管理平台的理想模型V0.1

1.前言 近期出于综合考虑&#xff0c;准备休息一段时间......... 在这段时间里&#xff0c;准备重新梳理下企业管理平台应该具备的能力.并准备使用开源项目来一次组合式组装&#xff0c;最终形成一个初步可行的运行平台。 2.企业管理平台的主要组成 企业管理平台不是独立存…

《python语言程序设计》2018版第8章20题使用Rational类编写一个程序(上)-修改一下8-4Rational类我认为的错误

首先抄一下Rational类,可以安静的抄一遍 一、抄写中的问号 各种报错的截图1各种报错的截图2各种报错的截图3各种报错的截图4添加一个str我将n和d修改为self 书中214-215页间程序清单8-4的代码如下: class Rational:def __init__(self, numerator1, denominator0):divisor gcd(…

产品经理内容分享(二):AI产品经理的入门路线图

引言 想象这样一个场景&#xff1a;早晨的阳光穿透窗帘&#xff0c;投射在新一代智能机器人上&#xff0c;它正静静等待着你的第一个命令开始全新的一天。这样的场景听起来像是科幻小说里的情节&#xff0c;但实际上&#xff0c;这正是AI产品经理们工作的成果。如果你对这样的…

使用axios封装AJAX

一 、Http 请求报文 包括了三部分: 求情行、请求头,请求体。 1、请求行: 是HTTP请求的第一行,包含了请求方法、请求目标和HTTP协议版本。常用的请求方法有GET、POST、PUT、DELETE等,用于指定客户端希望服务器执行的操作。请求目标是指请求的资源路径,可以是一个具体的…

国外电商系统开发-运维系统资产属性-命令执行功能

当前开发中&#xff0c;还不支持点击拓扑图标打开资产的功能&#xff0c;后期有时间补全对应的开发。 该功能如同Xshell、SecureCRT、Putty一样&#xff0c;可以批量的发送系统命令&#xff0c;让Linux服务器执行。 默认情况下&#xff0c;系统已经选择全部主机&#xff0c;如果…

番外篇 | CRAS-YOLO:基于卫星图像的多类别船舶检测和分类

前言:Hello大家好,我是小哥谈。目前,基于卫星图像的多类别船舶检测和分类由于在军事和民用领域的重要应用而备受关注。针对传统检测效果不佳的情形,我们进一步提出了一种新的多类船检测,称为CRAS-YOLO,它由卷积块注意力模块(CBAM)、感受野块(RFB)和基于YOLOv5s的自适…

2024计算机毕业设计最简单的完成流程

一、计算机专业毕业设计选题-选题推荐 1.基于深度学习的生活垃圾智能分类系统&#xff08;微信小程序YOLOv5训练数据集开题报告中期检查论文&#xff09; &#xff08;1&#xff09;程序界面 &#xff08;2&#xff09;论文大纲 &#xff08;3&#xff09;论文详情链接 基于…

【高等代数笔记】线性空间(十九-二十四上半部分)

课程视频剪辑得太抽象了&#xff0c;一节课不能完整学完&#xff0c;拆的零零散散得。 3. 线性空间 3.19 满秩矩阵 【推论4】设 rank ( A ) r \text{rank}(\boldsymbol{A})r rank(A)r&#xff0c;则 A \boldsymbol{A} A的不为0的 r r r阶子式所在的列&#xff08;行&#x…

75 华三vlan端口隔离

华三vlan端口隔离 为了实现端口间的二层隔离&#xff0c;可以将不同的端口加入不同的VLAN&#xff0c;但VLAN资源有限。采用端口隔离特性&#xff0c;用户只需要将端口加入到隔离组中&#xff0c;就可以实现隔离组内端口之间二层隔离&#xff0c;而不关心这些端口所属VLAN&…