当前位置: 首页 > news >正文

深度学习中Batch Normalization(BN)原理、作用浅析

最近做剪枝学习,其中一种是基于BN层的γ作为缩放因子进行剪枝的,那么我想搞懂BN的工作原理更好的理解网络、剪枝等,所以有了该文。

  • 首先先说BN的作用在详细拆解,理解。以知乎一条高赞评论说明BN层到底在干什么。
    在这里插入图片描述

Batch Norm 为什么有效

内部协变量偏移(Internal Covariate Shift)
  • 其反映的问题就是源域与目标域存在偏差。在深度神经网络的训练过程中,随着网络层数的增加,前一层输出的分布会发生变化,这种变化通常会使得下一层的输入分布发生偏移,导致训练过程中的梯度下降变得不稳定,从而影响模型的收敛速度和性能。这种现象被称为“内部协变量偏移”。

  • 内部协变量偏移,使得网络在训练时需要不断适应新的输入分布,这会消耗大量的计算资源并延长训练时间。而Batch Normalization(BN)层正是针对这一问题提出的解决方案。BN的核心思想是对每一层的输入进行归一化,使其均值为0,方差为1,从而减小输入数据的分布变化,使得网络在训练过程中能够更加稳定和高效地学习。

  • 这就是协变量偏移的问题 — 模型输入的数据与之前训练的数据分布非常不同 — 即使新数据仍然符合相同的目标函数。

损失和梯度平滑
  • 麻省理工学者质疑了解决协变量偏移是 Batch Norm 性能的原因的说法:论文
  • BN有效的本质原因在于其能够使优化空间optimization landscape变得平滑,其他的Normalization方法,例如L1,L2,L无穷大,也可以起到和BN一样的效果
  • 该论文提出,Batch Norm 所做的是通过改变网络权重的分布来大幅平滑损失情况。这意味着 gradient descent 可以自信地朝着某个方向迈出一步,因为它知道它不会在途中发现突然的中断。因此,它可以通过使用更大的学习率来采取更大的步骤。

Batch Normalization 的原理

BN 层的核心操作是在每一层的输入上进行归一化处理。具体来说,BN会对每一批次(mini-batch)的输入进行均值和方差的计算,然后使用这些统计量对输入进行归一化。归一化后的数据会被乘以一个可学习的缩放参数(gamma),并加上一个可学习的偏移参数(beta)。通过这种方式,BN不仅对输入进行了标准化处理,还通过学习到的参数对其进行了适当的尺度和位置调整,使得网络能够适应不同的数据分布。

数学上,BN操作可以表示为:
图片来自https://github.com/Captain1986/CaptainBlackboard/blob/master/D%230020-Batch-Normalization%E5%B1%82%E5%8E%9F%E7%90%86%E4%B8%8E%E5%88%86%E6%9E%90/D%230020.md
计算当前mini-batch所有样本的均值;计算当前mini-batch所有样本的方差;对当前mini-batch内每个样本用前面的均值和方差做归一化;对归一化后的样本,乘以一个缩放系数,再做一次平移;

  • 可学习缩放参数γ、可学习偏移参数β
    • 𝛾是一个缩放因子,它对标准化后的数据进行线性变换,控制了数据的尺度。通过学习网络能够自动调整每一层输出的方差大小,以适应不同的数据分布。𝛽这是一个偏移因子,它对标准化后的数据加上一个常数,控制了数据的均值。通过学习网络能够调整每一层输出的均值,使其更适合特定任务的需求
    • 参数由网络学习得到, 每个 Batch Norm 层都能够以最佳方式找到适合自己的最佳因子,因此可以移动和缩放归一化值以获得最佳预测
    • 对标准化后的数据进行缩放和偏移。这一步骤是在标准化之后进行的,目的是使得网络能够恢复标准化过程中可能丢失的特征,避免标准化导致模型表达能力的下降
    • 对一些重要的通道会学习到较大的γ值,不重要的通道会学到接近于0的γ值,我认为这可能是另一篇网络剪枝论文的理论基础。

Batch Norm 的作用

Batch Norm 帮助模型更快地收敛并加快训练速度。它使训练对权重的初始化方式和超参数的精确调整不太敏感。
Batch Norm 可以使用更高的学习率。如果没有 Batch Norm,学习率必须保持较小,以防止较大的异常值梯度影响梯度下降。Batch Norm 有助于减少这些异常值的影响。
Batch Norm还减少了梯度对初始权重值的依赖性。由于权重是随机初始化的,因此训练早期阶段的异常值权重值可能会扭曲梯度。因此,网络收敛需要更长的时间。Batch Norm 有助于抑制这些异常值的影响。
提高模型的泛化能力(正则化作用)在一定程度上起到了正则化的作用,减少了过拟合的风险。由于每一批次的统计量是基于当前批次数据计算的,这种变化引入了微小的噪声,有助于提高模型的泛化能力。
标准化输入数据,减少内部协方差偏移
BN通过使每一层的激活值在训练过程中保持稳定,避免了大幅度的梯度波动,从而提高了网络训练的稳定性。每一层的输入分布在训练过程中几乎不变,有助于减少训练过程中梯度的剧烈波动。

Batch Norm 何时不适用?

Batch Norm 不适用于较小的批量。这会导致每个小批量的均值和方差中出现过多的噪声。有人提出的Group Normalization等方法可以改善这些问题
Batch Norm 不用于循环网络。每个时间步之后的激活具有不同的分布,因此对其应用 Batch Norm 是不切实际的。但提出的Layer Normalization等方法也可以适用于循环网络

总结

本文主要参考了

  1. 部分内容翻译自Batch Norm Explained Visually — Why does it work?
  2. 部分图像来自BN原理分析

相关文章:

深度学习中Batch Normalization(BN)原理、作用浅析

最近做剪枝学习,其中一种是基于BN层的γ作为缩放因子进行剪枝的,那么我想搞懂BN的工作原理更好的理解网络、剪枝等,所以有了该文。 首先先说BN的作用在详细拆解,理解。以知乎一条高赞评论说明BN层到底在干什么。 Batch Norm 为什…...

C语言常用字符串处理函数

头文件&#xff1a;#include <string.h> strlen size_t strlen( char *str ); 功能&#xff1a;函数返回一个整数值&#xff0c;表示给定字符串的长度&#xff08;不包括结束符\0&#xff09; strcat char *strcat( char *str1, const char *str2 )&#xff1b; 功能&a…...

文件上传漏洞详解

第一关&#xff08;JS绕过&#xff09; 1.1使用bp进行绕过 先将要上传的php文件的后缀改为png&#xff0c;然后在上传时抓包&#xff0c;将png后缀再改为php&#xff0c;发包&#xff0c;此时上传成功 1.2使用js进行绕过 打开浏览器的检查&#xff0c;将其中的checkFile函数…...

关于linux的ld.so.conf.d

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

pytest执行报错:found no collectors

今天在尝试使用pytest运行用例的时候出现报错&#xff1a;found no collectors&#xff1b;从两个方向进行排查&#xff0c;一是看文件名和函数名是不是符合规范&#xff0c;命名要是"test_*"格式&#xff1b;二是是否存在修改文件名的情况&#xff0c;如果修改过文件…...

如何实现网页不用刷新也能更新

要实现用户在网页上不用刷新也能到下一题&#xff0c;可以使用 前端和后端交互的技术&#xff0c;比如 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;、Fetch API 或 WebSocket 来实现局部页面更新。以下是一个实现思路&#xff1a; 1. 使用前端 AJAX 或 Fetch…...

c#调用c++的dll,字符串指针参数问题

一.背景 在 C# 中没有 char* 类型&#xff0c;因为 C# 是一种托管语言&#xff0c;它的设计目标是提供更高级别的安全性和内存管理&#xff0c;避免使用像 C 或 C 中的指针操作&#xff0c;以防止常见的指针相关错误&#xff0c;如内存泄漏和悬空指针。 二.c#调用c的dll&#x…...

HTML5 新表单属性详解

HTML5 为 <form> 和 <input> 标签引入了一系列新属性&#xff0c;极大地增强了表单的功能和用户体验。这些新属性不仅简化了开发者的工作&#xff0c;还为用户提供了更友好、更高效的交互方式。本文将详细介绍这些新属性&#xff0c;并结合代码示例帮助大家更好地理…...

JAVA 使用反射比较对象属性的变化,记录修改日志。使用注解【策略模式】,来进行不同属性枚举值到中英文描述的切换,支持前端国际化。

1.首先定义一个接口&#xff0c;接口中有两个方法&#xff0c;分别是将属性转换成英文描述和中文描述。 其实就是将数据库中记录的 0 1 &#xff0c;转换成后面的描述 这边定义了中文转换为默认方法&#xff0c;是因为有些属性不需要进行中文转换&#xff0c;或者该属性的枚举…...

Docker入门学习

一、容器 1. 将单个操作系统中的资源划分到孤立的组中&#xff0c;在孤立的组中平衡有冲突的资源使用需求 2. Docker提供了容器管理的工具可以无需关注底层操作&#xff0c;使用效果类似于轻量级的虚拟机&#xff0c; 并且容器的创建和停止相对于虚拟机来说比较快&am…...

吴恩达深度学习——神经网络介绍

文章内容来自BV11H4y1F7uH&#xff0c;仅为个人学习所用。 文章目录 什么是神经网络引入神经网络神经元激活函数ReLU隐藏单元 用神经网络进行监督学习监督学习与无监督学习举例 什么是神经网络 引入 已经有六个房子的数据集&#xff0c;横轴为房子大小&#xff0c;纵轴为房子…...

STM32之CubeMX新建工程操作(十八)

STM32F407 系列文章 - STM32CubeMX&#xff08;十八&#xff09; 目录 前言 一、STM32CubeMX 二、新建工程 ​编辑 1.创建工程 2.选择芯片型号 3.Pinout引脚分配 1.SYS配置 2.RCC配置 3.定时器配置 4.GPIO引脚配置 5.中断配置 6.通讯接口配置 7.插件Middleware配…...

Postgresql源码(140)理解PG的编译流程(make、Makefile、Makefile.global.in)

PG16 PG中使用的makefile看起来代码比较多&#xff0c;但是实际逻辑比较简单&#xff0c;这里做一些抽象总结。 总结 Makefile.global.in的$(recurse)宏自动生成了target&#xff0c;可以方便的进入内存目录进行编译。 all: all-common-recurse all-common-recurse: submak…...

logback日志自定义占位符

前言 在大型系统运维中&#xff0c;很大程度上是需要依赖日志的。在java大型web工程中&#xff0c;一般都会使用slf4jlogback这一个组合来实现日志的管理。 logback中很多现成的占位符可以可以直接使用&#xff0c;比如线程号【%t】、时间【%d】、日志等级【%p】&#xff0c;…...

Vue平台开发三——项目管理页面

前言 对于多个项目的使用&#xff0c;可能需要进行项目切换管理&#xff0c;所以这里创建一个项目管理页面&#xff0c;登录成功后跳转这个页面&#xff0c;进行选择项目&#xff0c;再进入Home页面展示对应项目的内容。 一、实现效果图预览 二、页面内容 功能1、项目列表展…...

用于牙科的多任务视频增强

Multi-task Video Enhancement for Dental Interventions 2022 miccai Abstract 微型照相机牢牢地固定在牙科手机上&#xff0c;这样牙医就可以持续地监测保守牙科手术的进展情况。但视频辅助牙科干预中的视频增强减轻了低光、噪音、模糊和相机握手等降低视觉舒适度的问题。…...

【Node.js]

一、概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 &#xff0c;使用了一个事件驱动、非阻塞式I/O模型&#xff0c; 让JavaScript 运行在服务端的开发平台&#xff0c;它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。 官网地…...

【Elasticsearch】腾讯云安装Elasticsearch

Elasticsearch 认识Elasticsearch安装Elasticsearch安装Kibana安装IK分词器分词器的作用是什么&#xff1f;IK分词器有几种模式&#xff1f;IK分词器如何拓展词条&#xff1f;如何停用词条&#xff1f; 认识Elasticsearch Elasticsearch的官方网站如下 Elasticsearch官网 Ela…...

【网络协议】ACL(访问控制列表)第一部分

概述 网络安全在网络中的重要性不言而喻。本文&#xff08;即第一部分&#xff09;将介绍ACL的基本概念以及标准ACL的配置。第二部分将重点讨论扩展ACL、其他相关概念以及ACL的故障排除。 文章目录 概述ACL定义数据包过滤ACLACL配置指导原则配置ACL的三条规则ACL功能ACL工作原…...

2025.1.20——一、[RCTF2015]EasySQL1 二次注入|报错注入|代码审计

题目来源&#xff1a;buuctf [RCTF2015]EasySQL1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;初步思路为二次注入&#xff0c;在页面进行操作 step 2&#xff1a;尝试二次注入 step 3&#xff1a;已知双引号类型的字符型注入&#xff0c;构造…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...