【标准化方法】(1) Batch Normalization 原理解析、代码复现,附Pytorch完整代码

文章介绍了深度学习中批归一化(BatchNormalization)的概念和作用,解释了内部协方差变化问题,以及BN如何通过计算统计值、归一化和线性变换来解决这一问题。BN有助于加速训练,减少梯度消失,并在前馈网络和卷积网络中应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,今天和各位分享一下深度学习中常见的标准化方法,先介绍一下最常用的 Batch Normalization,从数学公式的角度复现一下代码。


1. 原理解析

深层网络训练时,前面层训练参数的更新将导致后面层输入数据分布的变化,以网络第二层为例:网络的第二层输入,是由第一层的参数和输入数据计算得到的,而第一层的参数在整个训练过程中一直在变化,因此必然会引起后面每一层输入数据分布的改变。

由于模型参数在不断修改且不断的往前传播,所以各层的输入分布在不断变化,即网络每一层的输入数据分布是一直在变化的。研究人员把网络中间层在训练过程中,数据分布的变化称为内部协方差变化(internal covariate shift,ICS),这要求模型训练时必须使用较小的学习率,且需要慎重地选择权重初值。ICS 导致训练速度减慢,同时也导致使用饱和的非线性激活函数(如sigmoid,正负两边都会饱和梯度为 0)时出现梯度消失问题。

针对内部协方差变化这一普遍现象,解决办法是:对每层的输入进行归一化。即批归一化算法(Batch Normalization,BN),BN 算法主要包含以下三个步骤:

(1)计算统计值。在小批次样本上计算归一化所需的统计值,包括均值和方差。假设输入为x \in R^{m*d},其中 m 指当前批次(batch size)的大小,即当前批次共有多少个训练样本。 d 指输入的特征图的大小

E\left(x^{k}\right)=\frac{1}{m} \sum_{i=1}^{m} x_{i}^{k}

\operatorname{Var}\left[x^{k}\right] \leftarrow \frac{1}{m} \sum_{i=1}^{m}\left(x_{i}^{k}-E\left[x^{k}\right]\right)^{2}

(2)归一化操作把输入向量中每个元素当成独立随机变量单独进行归一化,向量中各变量独立了,也就没有协方差矩阵了。这种归一化在各变量相关的情况下依然能加速收敛,使用了下面的公式进行处理,也就是近似白化处理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立Sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值