当前位置: 首页 > 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;构造…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...