深度学习-BN(Batch Normalization)

news/2025/1/30 12:27:46/

1. 介绍
Batch Normalization是2015年一篇论文中提出的数据归一化\color{blue}{数据归一化}方法,往往用在深度神经网络中激活层之前。其作用可以加快模型训练时的收敛速度,使得模型训练过程更加稳定,避免梯度爆炸或者梯度消失。并且起到一定的正则化作用,几乎代替了Dropout。
2. 公式
Input:B={x1...m};λ,β(parameterstobelearned)Input:B = \lbrace x_{1...m}\rbrace;\lambda,\beta(parameters\quad to\quad be\quad learned) Input:B={x1...m};λ,β(parameterstobelearned) Output:{yi=BNλ,β(xi)}Output:\lbrace{y_i=BN_{\lambda,\beta}(x_i)}\rbraceOutput:{yi=BNλ,β(xi)} μB←1m∑i=1mxi\mu_B\leftarrow\cfrac{1}{m}\sum_{i=1}^mx_iμBm1i=1mxi σB2←1m∑i=1m(xi−μB)2\sigma_B^2\leftarrow\cfrac{1}{m}\sum_{i=1}^m(x_i-\mu_B)^2σB2m1i=1m(xiμB)2 xi‾←xi−μBσB2+ϵ\overline{x_i}\leftarrow\cfrac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}xiσB2+ϵxiμB yi←γxi‾+βy_i\leftarrow\gamma \overline{x_i}+\betayiγxi+β

BN的具体操作为:先计算BBB的均值和方差,之后将BBB集合的均值、方差变换为0、1,最后将BBB中每个元素乘以γ\gammaγ再加β\betaβ,输出。γ\gammaγβ\betaβ是可训练参数,参与整个网络的BP;
归一化的目的:将数据规整到统一区间,减少数据的发散程度,降低网络的学习难度。BN的精髓在于归一之后,使用 γ\gammaγβ\betaβ作为还原参数,在一定程度上保留原数据的分布。
3. BBB的组成

神经网络中传递的张量数据,其维度通常记为[N, H, W, C],其中N是batch_size,H、W是行、列,C是通道数。那么上式中BN的输入集合BBB就是下图中蓝色的部分。
在这里插入图片描述
均值的计算,就是在一个批次内,将每个通道中的数字单独加起来,再除以N×H×WN \times H \times WN×H×W。举个例子:该批次内有10张图片,每张图片有三个通道RBG,每张图片的高、宽是H、W,那么均值就是计算10张图片R通道的像素数值总和除以10×H×W10 \times H \times W10×H×W ,再计算B通道全部像素值总和除以10×H×W10 \times H \times W10×H×W,最后计算G通道的像素值总和除以10×H×W10 \times H \times W10×H×W。方差的计算类似。
可训练参数 γ\gammaγβ\betaβ的维度等于张量的通道数,在上述例子中,RBG三个通道分别需要一个 γ\gammaγ和一个β\betaβ,所以 γ\gammaγβ\betaβ的维度等于3。
4. 训练与推理时BN中的均值、方差
训练时,均值、方差分别是该批次内数据相应维度的均值与方差;\color{blue}{训练时,均值、方差分别是该批次内数据相应维度的均值与方差;}
推理时,均值、方差是基于所有批次的期望和方法的期望计算所得,公式如下:\color{blue}{推理时,均值、方差是基于所有批次的期望和方法的期望计算所得,公式如下:}
E[x]←EB[μB]E[x]\leftarrow E_B[\mu_B]E[x]EB[μB] Var[x]←mm−1EB[σB2]Var[x]\leftarrow \cfrac{m}{m-1}E_B[\sigma_B^2]Var[x]m1mEB[σB2]
参考:
https://zhuanlan.zhihu.com/p/93643523


http://www.ppmy.cn/news/1869.html

相关文章

learnOpenGl

LearnOpenGl 1,入门 1.1.hello_window 创建一个800x600 的window; 1.2.hello_window_clear 利用glClearColor()/glclear() 设置窗口颜色; 2.1.hello_triangle 画一个三角形; 2.2.hello_triangle_indexed 用EBO 画一个三角形; 2.3.hello_triangle_exerc…

MySQL分区表对NULL值的处理

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:王权富贵 1.概述 MySQL的分区表没有禁止NULL值作为分区表达式的值,无论它是列值还是用户提供的表…

【docker】配置深度学习环境

目录基本环境搭建问题与解决容器启动后添加端口映射安装完虚拟环境后 CUDA调用不了opencv的使用问题自定义软件包的使用基本环境搭建 容器基本操作: # 按照服务器配置拉取对应的镜像 docker pull pytorch/pytorch:1.9.0-cuda10.2-cudnn7-devel# 查看主机端口 没有信…

JAVA中如何精确取到时间间隔

文章目录0 写在前面1 使用方法2 举例3 写在最后0 写在前面 做业务的时候,总要统计数据,几月份到几月份的全部数据。这个时候就要找到起始月份的具体时间和终止月份的具体时间。 此时我们用原始的Date类去处理就比较麻烦,可以自己写一个工具类…

校园论坛(Java)—— 校园周边模块

校园论坛(Java)—— 校园周边模块 文章目录校园论坛(Java)—— 校园周边模块1、写在前面2、系统结构设计2.1 各个页面之间的调用关系2.2 校园周边页面设计3、校园周边模块设计3.1 校园周边主界面的实现3.2 增加附近的交通信息4. 总…

微服务守护神-Sentinel-概念

引言 书接上篇 微服务应对雪崩的容错方案 ,大概知道微服务容错方案可以从隔离、超时、限流、熔断、降级这几方面入手。好了,理论了解了,那代码落地方案?这是后本篇的主角要登陆场:Sentinel,微服务的守护神…

(Java)Mybatis学习笔记(四)

前言 继续学习自定义映射,今天便是mybatis初步学完的最后一天了,加油,奥里给~ 搭建MyBatis框架 步骤说明 创建表时把email打成了eamil,导致报了下错 1️⃣在mybatis下创建一个module 2️⃣配置pom.xml文件,导入相…

SpringCloud框架(三):微服务优化,Feign的最佳实现方案

SpringCloud环境搭建:生产和消费 RestTemplate Spring章节复习已经过去,新的章节SpringCloud开始了,这个章节中将会回顾微服务相关 主要依照以下几个原则 每一个组件的Demo和Coding上传到我的代码仓库在原有基础上加入一些设计模式&#xf…