Batch normalization理解

本文深入探讨了批量归一化(Batch Normalization,BN)在神经网络中的应用,解释了BN如何通过标准化输入数据改善网络性能,防止梯度消失,并加速训练过程。此外,还详细介绍了PyTorch中BatchNorm2d()函数的使用方法及其参数设置。
部署运行你感兴趣的模型镜像

学习时候发现了有的网络结构中将BN作为单独的一层进行设计,因此学习了一下BN。

1. Batch normalization理解

BN可以作为激活层之前一层,将输入数据进行标准化,

 BN计算公式如下:

 其中,E[x]为均值,sqrt(var)为标准差,可知BN层的输出其实是将输入的数据标准化成为均值为0方差为1的正态分布。

 

这样做的原因呢?

 

这里我们假设使用sigmoid函数作为网络激活函数:

可见,如果激活层的输入数据是标准分布的话,激活层能够有更好的效果,

那么如果输入层数据没有进行BN标准话,假设其均值为7,方差为2的正态分布,那么sigmoid函数就无法有效的区分数据,出现梯度消失问题。

同时,将数据标准化,还可以帮助网络加速收敛。

更多BN参考:https://www.cnblogs.com/guoyaohua/p/8724433.html

2. pytorch中的BN BatchNorm2d()

我们知道BN可以将数据进行标准化,但是我们有的时候并不需要完全标准化的数据分布,因此可以将标准化的数据进行一定的线性变化,BatchNorm2d()数学原理如下:

 其中γ与β是可以学习的系数矩阵。

BatchNorm2d()作为神经网络的一层,拥有一下参数:

BatchNorm2d()内部的参数如下:

1.num_features:一般输入参数为batch_size*num_features*height*width,即为其中特征的数量

2.eps:分母中添加的一个值,目的是为了计算的稳定性,默认为:1e-5

3.momentum:期望和方差的更新参数,与动量梯度下降法类似,期望和方差的更新公式:

为模型的均值或方差,

为当前观测值的均值或方差,

为更新后的均值或方差,momentum为更新参数。

4.affine:当设为true时,会给定可以学习的系数矩阵gamma和beta

更多关于BatchNorm2d()参考:

https://blog.youkuaiyun.com/bigFatCat_Tom/article/details/91619977

https://blog.youkuaiyun.com/algorithmPro/article/details/103982466

 

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值