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

news2024/11/30 5:02:12

文章目录

    • 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. 结语

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

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

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

相关文章

QT学习day5

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),socket(new QTcpSocket(this)) {ui->setupUi(this);//初始化界面ui->msgEdit->setEnabled(false);//不可用ui->sendBtn-&g…

软考121-上午题-【软件工程】-敏捷方法

一、敏捷方法 敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性,敏捷方法使用户能够在开发周期的后期增加或改变需求。 敏捷过程的典型方法有很多,每一种方法基于一套原则,这…

初始C++之缺省参数 函数重载 引用

初始C之缺省参数 函数重载 引用& 文章目录 初始C之缺省参数 函数重载 引用&一、缺省参数1.1 缺省参数的定义1.2 缺省参数的分类1.3 注意事项 二、 函数重载2.1 函数重载的定义2.2 参数个数不同2.3 参数类型不同2.4 类型顺序不同2.5 为什么C语言不支持函数重载 三、引用…

百度Create AI开发者大会剧透丨用好三大AI神器 ,人人都是开发者

程序员会消失,真的吗?大模型的下一站是什么?开发者的机会在哪里?什么才是最好用的AI应用开发工具?在4月16日举办的2024百度Create AI开发者大会上,百度创始人、董事长兼首席执行官李彦宏将就这些备受瞩目的…

蓝桥杯第十三届电子类单片机组决赛程序设计

前言 一、决赛题目 1.比赛题目 2.题目解读 二、功能实现 1.关于定时器资源 1)超声波和NE555需要的定时器资源 2)定时器2 2.单位切换 3.数据长度不足时,高位熄灭 4.AD/DA多通道的处理 5.PWM输出 6.长按功能的实现 三、完整代码演…

心法利器[112] | 考古RAG-20年RAG概念提出的论文

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。 2023年新的文章合集已经发布,获取方式看这里:又添十万字-CS的陋室2023年文章合集来袭,更…

瑞_23种设计模式_访问者模式

文章目录 1 访问者模式(Visitor Pattern)1.1 介绍1.2 概述1.3 访问者模式的结构1.4 访问者模式的优缺点1.5 访问者模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 拓展——双分派4.1 分派4.2 动态分派(多态&am…

ubuntu 20.04 更新显卡驱动

1. 问题描述 $ watch -n 1 nvidia-smi画面不动 而且运行 pytorch 代码时出现问题: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 11070). Please update your GPU driver by downloading and installing a new…

libVLC 视频窗口上叠加透明窗口

很多时候,我们需要在界面上画一些三角形、文字等之类的东西,我们之需要重写paintEvent方法,比如像这样 void Widget::paintEvent(QPaintEvent *event) 以下就是重写的代码。 void Widget::paintEvent(QPaintEvent *event) {//创建QPainte…

家居网购项目(一)

文章目录 1.前置知识1.项目开发阶段2.Java经典三层架构3.项目具体分层(包方案)4.MVC 2.开发环境搭建1.新建普通javaweb项目,导入jar包2.创建项目结构3.搭建前端页面 3.会员注册前端js校验1.需求分析2.代码login.html 3.结果4.调试阶段1.验证信…

算法训练营第24天回溯(组合)

回溯(组合) 模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯&…

6.11物联网RK3399项目开发实录-驱动开发之定时器的使用(wulianjishu666)

嵌入式实战开发例程【珍贵收藏,开发必备】: 链接:https://pan.baidu.com/s/1tkDBNH9R3iAaHOG1Zj9q1Q?pwdt41u 定时器使用 前言 RK3399有 12 个 Timers (timer0-timer11),有 12 个 Secure Timers(stimer0~stimer11) 和 2 个 …

LC 501.二叉搜索树中的众数

501.二叉搜索树中的众数 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 …

深入浅出 -- 系统架构之在Java体系中的微服务标准组件

前面我们介绍了微服务架构的各个组件以及各组件的职责,在Java领域中,Spring可以说是无人不知无人不晓的,我们现代的企业级应用和互联网应用,很大一部分都是构建在Spring生态体系上的,同样,实现微服务架构的…

MySQL高级详解

文章目录 约束概述分类主键约束概述特点定义及删除主键自增 唯一约束作用语法 非空约束作用语法 面试题:非空唯一约束与主键约束有什么区别默认值约束作用语法 总结 表关系及外键约束表关系概述分类一对多关系表设计外键字段设计原则 多对多关系表设定设计原则 一对…

【图论】Dijkstra单源最短路径-朴素方法-简单模板(迪杰斯特拉算法)

Dijkstra单源最短路径 问题描述 输入n 表示n个结点,m表示m条边,求编号1的结点到每个点的最短路径 输出从第一个点到第n个点的最短路径 思路 将图g[][]中所有的权值初始化为0x3f表示正无穷 将dist[]中所有的值初始化为0x3f表示从第一个点到所有点的距离…

一辆新能源汽车需要多少颗传感器?

随着科技的发展和环保意识的日益提高,新能源汽车(包括纯电动汽车、混合动力汽车等)在全球范围内越来越受到欢迎。这些汽车不仅减少了碳排放,还推动了汽车产业的创新。然而,这些高科技汽车的背后,隐藏着许多…

Qt中播放GIF动画

在Qt应用程序中,如果你想在QLabel控件上播放GIF动画,可以使用QMovie类与QLabel配合来实现。以下是详细步骤和代码示例: 步骤1:引入必要的头文件 首先,在你的源代码文件中包含QMovie和QLabel相关的头文件:…

Java官网下载JDK21版本详细教程(下载、安装、环境变量配置)

文章目录 前言:一、下载(一).链接(直达JDK21)(二).官网搜索(可选其他版本) 二、安装三、环境变量配置四、验证安装和配置五、常见问题解答 前言: 本文将为您提供关于Java官网下载JDK21版本的详细教程。作为…

springboot在使用 Servlet API中提供的javax.servlet.Filter 过滤器 对请求参数 和 响应参数 进行获取并记录日志方案

不多说 直接上代码 第一步 package com.xxx.init.webFilter;import com.alibaba.fastjson.JSONObject; import com.xxx.api.constant.CommonConstant; import com.xxx.api.entities.log.OperationLog; import com.xxx.init.utils.JwtHelper; import com.xxx.init.utils.Reques…