批归一化(BN)在神经网络中的作用与原理

文章目录

    • 1. 批归一化(BN)在神经网络中的作用与原理
      • 1.1 作用与优势
      • 1.2 原理与推导
    • 2. 将BN应用于神经网络的方法
      • 2.1 训练时的BN
    • 2. 将BN应用于神经网络的方法
      • 2.1 训练时的BN
      • 2.2 测试时的BN
        • 代码示例(Python):
    • 3. BN的优缺点与适用场景
      • 3.1 优点
      • 3.2 缺点
      • 3.3 适用场景
    • 4. 结语


1. 批归一化(BN)在神经网络中的作用与原理

1.1 作用与优势

批归一化(Batch Normalization,BN)是一种用于神经网络的技术,通过对每个训练批次的输入进行归一化,加速了神经网络的训练过程。它的作用主要体现在以下几个方面:

  • 加速收敛:通过归一化输入特征值,减少了网络训练的迭代次数,加快了收敛速度。
  • 改善梯度传播:缓解了梯度消失和爆炸问题,使得深层网络的训练更加稳定。
  • 提高泛化能力:降低了网络对超参数的敏感度,提高了模型的泛化能力。

这其实就是一个问题——把学习问题的轮廓,从很长的东西,变成更圆的东西,变得更易于算法优化。

在这里插入图片描述

1.2 原理与推导

BN的核心思想是对每个特征进行归一化,以使其均值接近于0,方差接近于1。其具体过程如下:

  • 对于每个训练批次,计算该批次输入的均值和方差。
  • 使用得到的均值和方差对输入进行归一化。
  • 引入可学习的缩放参数和偏移参数,使网络能够学习适应不同数据分布的特征。

数学公式如下:
在这里插入图片描述
所以现在 值已经被标准化了(平均值0和标准单位方差),但我们不想让隐藏单元总是如此,也许隐藏单元有了不同的分布会有意义,所以一个很牛的计算是:

其中 和 是模型需要学习的参数,请注意 和 的作用,是无论如何随意设置 的平均值,事实上,如果 ,如果 等于这个分母项( 中的分母), 等于 ,这里的 中的 ,那么 的作用在于,它会精确转化这个方程,如果这些成立(),那么 。

归一化输入特征 是有助于神经网络中的学习的,批归一化(BN) 的作用是一个适用的归一化过程,不只是输入层,甚至同样适用于神经网络中的深度隐藏层。

有了 和 两个参数后,就可以确保所有的 值都是想赋予的值,或者是保证隐藏的单元已使均值和方差标准化,即 无论数据归一化计算时出现多大问题,通过参数都可以调整回来。

2. 将BN应用于神经网络的方法

2.1 训练时的BN

在训练时,BN的操作如下:

  • 对每个训练批次进行正向传播,并计算均值和方差。
  • 使用计算得到的均值和方差对批次输入进行归一化。
  • 引入可学习的缩放参数和偏移参数,调整归一化后的值。
  • 在反向传播时,根据梯度更新参数。

2. 将BN应用于神经网络的方法

2.1 训练时的BN

在训练时,BN的操作如下:

  • 对每个训练批次进行正向传播,并计算均值和方差。
  • 使用计算得到的均值和方差对批次输入进行归一化。
  • 引入可学习的缩放参数和偏移参数,调整归一化后的值。
  • 在反向传播时,根据梯度更新参数。

数学公式
设输入的批次为 ( X = {x_1, x_2, ..., x_m} ),其中 (m) 是批次大小。则批次的均值 ( \mu ) 和方差 ( \sigma^2 ) 分别计算如下:
上面这些公式都是用来执行 BN。在一个 mini-batch 中,

先对 值求和,计算均值,所以这里只把一个 mini-batch 中的样本都加起来,假设用m来表示这个 mini-batch 中的样本数量,而不是整个训练集。
然后计算方差,再算 ,即用均值和标准差来调整,加上 是为了数值稳定性。 是用 和 再次调整 得到的。
请注意,用于调节计算的 和 是在整个 mini-batch 上进行计算的,但是在测试时,可能不能将一个 mini-batch 中的很多个样本同时处理,因此,需要用其它方式来得到 和 ,而且如果只有一个样本的话,一个样本的均值和方差是没有意义的。

所以实际上,为了将神经网络运用于测试,就需要单独估算 和 ,在典型的 BN 运用中,需要用一个指数加权平均来估算。

总结来说就是,在训练时, 和 是在整个 mini-batch 上计算出来的包含了一定数量的样本,但在测试时,可能需要逐一处理样本,方法是根据训练集估算 和 。

估算的方式有很多种,

理论上可以在最终的网络中运行整个训练集来得到 和 ,但在实际操作中,通常运用指数加权平均来追踪在训练过程中的 和 的值。
还可以用指数加权平均,有时也叫做流动平均,来粗略估算 和 ,然后在测试中使用 和 的值来进行所需的隐藏单元 值的调整。
在实践中,不管用什么方式估算 和 ,这套过程都是比较稳健的,而且如果使用的是某种深度学习框架,通常会有默认的估算 和 的方式,应该会起到比较好的效果。

2.2 测试时的BN

在测试时,需要对每个样本逐一处理,无法使用整个训练集的均值和方差。因此,需要使用一种估算方式来得到均值和方差。
在这里插入图片描述

代码示例(Python):
# 在测试时估算均值和方差
def estimate_mean_and_variance(X):
    mean = np.mean(X, axis=0)
    variance = np.var(X, axis=0)
    return mean, variance

# 使用估算的均值和方差对输入进行归一化
def normalize_input(X, mean, variance, epsilon=1e-5):
    normalized_X = (X - mean) / np.sqrt(variance + epsilon)
    return normalized_X

# 使用缩放参数和偏移参数对归一化后的值进行调整
def scale_and_shift(normalized_X, gamma, beta):
    scaled_X = gamma * normalized_X + beta
    return scaled_X

在实际应用中,可以根据训练集的均值和方差的估计值来进行归一化。

3. BN的优缺点与适用场景

3.1 优点

  • 加速了神经网络的训练过程,提高了收敛速度。
  • 提高了模型的泛化能力,降低了过拟合的风险。
  • 缓解了梯度消失和爆炸问题,使得深层网络的训练更加稳定。

3.2 缺点

  • 需要额外的计算成本,在推理阶段需要对均值和方差进行估算。
  • 引入了额外的参数,增加了模型的复杂度。

3.3 适用场景

  • 对于深层网络和大规模数据集,BN效果显著,可以加快训练速度。
  • 在需要提高模型泛化能力的场景下,BN也是一种有效的正则化方法。

4. 结语

批归一化作为一种有效的神经网络技术,在加速训练、提高泛化能力等方面发挥了重要作用。在实际应用中,需要根据具体情况权衡其优缺点,选择合适的方法和参数设置。同时,对其原理和实现方式的深入理解,有助于更好地应用于实际问题中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习-09-图像处理01-理论

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中图像处理技术。 参考 02图像知识 色彩基础知识整理-色相、饱和度、明度、色调 图像特征提取(VGG和Resnet特征提取卷积过程详解) Python图像处理入门 【人工智能】PythonOpenCV…

基于python的天气数据可视化系统、Flask框架,爬虫采集天气数据,可视化分析

系统介绍 基于Python的天气预测可视化分析系统,该项目的主要流程和功能包括: 数据获取: 使用Python的pandas库从2345天气网(http://tianqi.2345.com/Pc/GetHistory)抓取山东省各市区县在2021年至2023年间的天气历史数…

【方法】PDF密码如何取消?

对于重要的PDF文件,很多人会设置密码保护,那后续不需要保护了,如何取消密码呢? 今天我们来看看,PDF的两种密码,即“限制密码”和“打开密码”,是如何取消的,以及忘记密码的情况要怎…

文献学习-33-一个用于生成手术视频摘要的python库

VideoSum: A Python Library for Surgical Video Summarization Authors: Luis C. Garcia-Peraza-Herrera, Sebastien Ourselin, and Tom Vercauteren Source: https://arxiv.org/pdf/2303.10173.pdf 这篇文章主要关注的是如何通过视频摘要来简化和可视化手术视频&#xff0c…

计算机基础知识-第4章-真值表和逻辑运算、位运算

一、真值表与逻辑运算 真值表 真值表是什么呢?我们来看百度百科的定义。表征逻辑事件输入和输出之间全部可能状态的表格。列出命题公式真假值的表。通常以1表示真,0 表示假。命题公式的取值由组成命题公式的命题变元的取值和命题联结词决定,…

开源监控zabbix对接可视化工具grafana教程

今天要给大家介绍的是开源监控工具zabbix对接可视化工具grafana问题。 有一定运维经验的小伙伴大抵都或多或少使用过、至少也听说过开源监控工具zabbix,更进一步的小伙伴可能知道zabbix在数据呈现方面有着明显的短板,因此需要搭配使用第三方的可视化工具…

Qlik Sense :use Peek function to Group by and Get Rowno

Question Row number based on groups of data Calculate row number for groups 有时候我们需要基于分组来对数据进行内部排序,例如一个iddate,把不同的属性的记录标记为123,又或者把重复记录标记出来 Solved: Calculate row number for…

MacOS安装openMP报错【已解决】

error: Target “WLBG” links to: OpenMP::OpenMP_CXX but the target was not found. Possible reasons include: * There is a typo in the target name. * A find_package call is missing for an IMPORTED target. * An ALIAS target is missing. 最开始是报这个错&#x…

云上配置Hadoop环境

Hadoop概述 Hadoop技术主要是由下面这三个组件组合而成的: HDFS是一个典型的主从模式架构。 HDFS的基础架构 HDFS的集群搭建 一点准备工作 其实这一块没啥内容,就是将Hadoop官网下载下来的Hadoop的tar包上传到我们服务器上的文件目录下: …

2024考研调剂须知

----------------------------------------------------------------------------------------------------- 考研复试科研背景提升班 教你快速深入了解掌握考研复试面试中的常见问题以及注意事项,系统的教你如何在短期内快速提升自己的专业知识水平和编程以及英语…

Vue ElementUI el-input-number 改变控制按钮 icon 箭头为三角形

el-input-number 属性 controls-position 值为 right 时&#xff1b; <el-input-number v-model"num" controls-position"right" :min"1" :max"10"></el-input-number>原生效果 修改后效果 CSS 修改 .el-input-number…

点亮一颗 LED: 单片机 ch32v003 (RISC-V) 使用 rust 编写固件

首发日期 2024-04-09, 以下为原文内容: 使用 rust 编写单片机的程序 ? 很新, 但没问题. 使用 RISC-V CPU 的单片机 (比如 ch32v003) ? 也没问题. 同时使用 ? 哦嚯, 问题出现了 !! ch32v003 是一款使用 rv32ec 指令集的国产单片机, 很便宜 (某宝零卖只要 0.4 元一个, 在同档…

学习JavaEE的日子 Day33 File类,IO流

Day33 1.File类 File是文件和目录路径名的抽象表示 File类的对象可以表示文件&#xff1a;C:\Users\Desktop\hhy.txt File类的对象可以表示目录路径名&#xff1a;C:\Users\Desktop File只关注文件本身的信息&#xff08;文件名、是否可读、是否可写…&#xff09;&#xff0c…

基于SSM的电影网站(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的电影网站&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…

MySQL 全文检索

不是所有的数据表都支持全文检索 MySQL支持多种底层数据库引擎&#xff0c;但是并非所有的引擎支持全文检索 &#xff0c;目前最常用引擎是是MyISAM和InnoDB&#xff1b;前者支持全文检索&#xff0c;后者不支持。 booolean模式操作符 操作符含义必须有-必须不包含>包含对应…

Linux系统使用Docker部署Dashy导航页服务并实现公网环境访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航…

如何使用pgvector为RDS PostgreSQL构建专属ChatBot?

背景 越来越多的企业和个人希望能够利用LLM和生成式人工智能来构建专注于其特定领域的具备AI能力的产品。目前&#xff0c;大语言模型在处理通用问题方面表现较好&#xff0c;但由于训练语料和大模型的生成限制&#xff0c;对于专业知识和时效性方面存在一些局限。在信息时代&…

缓存穿透、缓存雪崩、缓存击穿的区别

缓存三兄弟&#xff08;穿透、雪崩、击穿&#xff09; 缓存穿透 定义 查询一个redis和数据库都不存在的值&#xff0c;数据库不存在则不会将数据写入缓存&#xff0c;所以这些请求每次都达到数据库。 解决办法是缓存空对象&#xff0c;如果数据库不存在则将空对象存入缓存&…

Python数据结构与算法——算法(贪心算法、动态规划

贪心算法 介绍&#xff1a;贪心算法又称贪婪算法&#xff0c;是指在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;它所做出的是在某种意义上的局部最优解。 贪心算法并不保证会得到最优解&#xff0c;但…

qemu源码解析(基于qemu9.0.0)

简介 QEMU是一个开源的虚拟化软件&#xff0c;它能够模拟各种硬件设备&#xff0c;支持多种虚拟化技术&#xff0c;如TCG、Xen、KVM等 TCG 是 QEMU 中的一个组件&#xff0c;它可以将高级语言编写的代码&#xff08;例如 C 代码&#xff09;转换为可在虚拟机中执行的低级代码…