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

批归一化(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.rhkb.cn/news/440430.html

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

相关文章

D29【python 接口自动化学习】- python基础之输入输出与文件操作

day29 格式化输出 学习日期:20241006 学习目标:输入输出与文件操作﹣-41 格式化输出:如何将执行结果通过屏幕输出? 学习笔记: 三种常用的格式化输出方式 百分号方式 format函数方式 总结 1. 格式化输出…

在ubuntu好部署jenkins发布vue项目时遇到的一些问题及解决方法以及使用jenkins发布vue项目-npm自动打包发布的实现

一、在ubuntu好部署jenkins发布vue项目时遇到的一些问题及解决方法 1. 问题:webpack-dev-server不是内部或外部命令,也不是可运行的程序 解决:使用webpack要安装webpack-cli这个包,才可以调用webpack和webpack-dev-server这些命…

Hive3.x版本调优总结

文章目录 第 1 章 Explain 查看执行计划(重点)1.1 创建测试用表1)建大表、小表和 JOIN 后表的语句2)分别向大表和小表中导入数据 1.2 基本语法1.3 案例实操 第 2 章 Hive 建表优化2.1 分区表2.1.1 分区表基本操作2.1.2 二级分区2.…

虚拟机 VMware 安装 macOS

macOS 界面 MAC OS IOS下载: amacOS Monterey by Techrechard.comwmacOS Monterey by Techrechard.com 下载:Unlocker-v2.0.1-x64 Mac OS X 虚拟机中更改屏幕分辨率 终端输入命令: sudo defaults write /Library/Preferences/com.apple.w…

2-114 基于matlab的CA模型

基于matlab的CA模型,Singer模型对单机动目标进行跟踪算法,具有10页实验文档。采用蒙特卡罗方法对一个二坐标雷达对一平面上运动的目标进行观测,得到跟踪滤波结果。程序已调通,可直接运行。 下载源程序请点链接:2-114 …

Linux:进程的创建、终止和等待

一、进程创建 1.1 fork函数初识 #include pid_t fork(void); 返回值:子进程中返回0,父进程返回子进程id,出错返回-1 调用fork函数后,内核做了下面的工作: 1、创建了一个子进程的PCB结构体、并拷贝一份相同的进程地址…

Stable Diffusion绘画 | IP角色多视图生成技巧

在游戏设计、小说推文、角色设计里面,很多场景都运用到IP角色的多视图。 人物角色多视图 第1步,输入提示词: 第2步,由于要在同一张图片中生成多角度的并排展示,需要修改图片的分辨率(尤其是宽度&#xff…

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型)

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型) 目录 Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型) 1. 项目说明 2. 数据说明 (1)心跳信号分类预测数据集 3. 模型训练 (1)项目安装 &am…

MoveIt2-humble----在 RViz 中实现可视化

官方文档上的教程,从moveit1的melodic到moveit2的foxy基本一致,但是从最新的humble开始有了很大的变化,其中之一便是 lambda表达式 的广泛使用。 本节为教程的第二节,会介绍一个工具(moveit_visual_tools)…

运动员场景分割系统源码&数据集分享

运动员场景分割系统源码&数据集分享 [yolov8-seg-HGNetV2&yolov8-seg-aux等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al lnnovati…

麒麟 操作系统介绍| 银河麒麟和中标麒麟操作系统| Kylin 麒麟iso 镜像下载地址 银河麒麟操作系统v10 |

目录 #申请试用小技巧, 所有麒麟系列的版本如下 详细介绍如下: 银河麒麟高级服务器操作系统 V10 1. 龙芯-MIPS64el 版 2. 申威版 3. 兆芯版 4. 海光版 5. 飞腾版 6. 鲲鹏版 7. AMD64版 8. 龙芯-LoongArch64 版 9. ARM64版 银河麒麟桌面操作…

SpringMVC源码-AbstractUrlHandlerMapping处理器映射器将实现Controller接口的方式定义的路径存储进去

DispatcherServlet的initStrategies方法用来初始化SpringMVC的九大内置组件 initStrategies protected void initStrategies(ApplicationContext context) {// 初始化 MultipartResolver:主要用来处理文件上传.如果定义过当前类型的bean对象,那么直接获取&#xff0…

【学习笔记】kruskal重构树

前言 最近一场div2没开出C2,猛掉104分。 赛后补E,发现自己连E1都没思路,一问才知道是kruskal重构树。 好吧,OI时期欠下的债该还了。 kruskal重构树是什么 它是一棵 2 n − 1 2n-1 2n−1 个点的二叉树。点有点权,下…

异常场景分析

优质博文:IT-BLOG-CN 为了防止黑客从前台异常信息,对系统进行攻击。同时,为了提高用户体验,我们都会都抛出的异常进行拦截处理。 一、异常处理类 Java把异常当做是破坏正常流程的一个事件,当事件发生后,…

https访问报错:net::ERR_CERT_DATE_INVALLD

目录 简介异常排查原因解决补充 简介 访问https资源出现报错 异常 排查 将地址拿到浏览器进行访问,可以很清晰的看到出现该问题的原因 原因 1、SSL证书已过期 2、服务器日期不准,不在证书有效期 解决 1、重新申请SSL证书,并配置 2、校正…

VMware桥接模式无法连接网络

windows下打开控制面板,找到WLAN,记住下面的名称(带有VMware的都是虚拟机的网卡,要找到物理主机的网卡) 回到VMware,编辑——打开虚拟网络编辑器 桥接选择上面的WLAN下的网络名称,确定即可。&…

【学习笔记】手写一个简单的 Spring MVC

目录 一、什么是Spring MVC ? Spring 和 Spring MVC 的区别? Spring MVC 的运行流程? 二、实现步骤 1. DispatcherServlet 1. 创建一个中央分发器 拦截所有请求 测试 2. 接管 IOC 容器 1. 创建配置文件 2. 修改 web.xml 配置文件 …

输电线路悬垂线夹检测无人机航拍图像数据集,总共1600左右图片,悬垂线夹识别,标注为voc格式

输电线路悬垂线夹检测无人机航拍图像数据集,总共1600左右图片,悬垂线夹识别,标注为voc格式 输电线路悬垂线夹检测无人机航拍图像数据集介绍 数据集名称 输电线路悬垂线夹检测数据集 (Transmission Line Fittings Detection Dataset) 数据集…

在mac中通过ip连接打印机并实现双面打印

首先需要找到电脑自带的打印。添加打印机。 填写好打印机的ip地址,然后添加。 填写好ip地址后,直接添加就行 添加完打印机后其实就可以打印了。但是有些功能可能实现不了,比如说双面打印。为了实现双面打印的功能,需要再进行设置…

代码随想录算法训练营第五十四天|LeetCode42 接雨水、LeetCode84 柱状图中最大的矩形

LeetCode42 接雨水 代码随想录题目链接/文章讲解/视频讲解: 代码随想录代码随想录PDF,代码随想录网站,代码随想录百度网盘,代码随想录知识星球,代码随想录八股文PDF,代码随想录刷题路线,代码随…