Batch Norm (针对面试问题总结)

Batch Normalization(BN)是为了解决深度学习中内部协变量偏移问题,加速训练并提高模型泛化能力。BN通过归一化处理减小数据内部差异,但仅归一化会导致学习停滞,因此引入可学习的γ和β参数来保持特征学习。BN在训练和测试阶段有不同的计算方式,同时具有正则化效果,防止过拟合。BN的优缺点包括加速训练、替代正则化、降低绝对差异,但在某些任务如图像超分辨率中可能不适用。

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

参考:

基础 | batchnorm原理及代码详解 https://blog.csdn.net/qq_25737169/article/details/79048516

详解机器学习中的梯度消失、爆炸原因及其解决方法 https://blog.csdn.net/qq_25737169/article/details/78847691

Pytorch Batch Normalizatin layer的坑  https://zhuanlan.zhihu.com/p/65439075

 


1. Batch Norm 为什么有效?

深度学习的话尤其是在CV上都需要对数据做归一化,因为深度神经网络主要就是为了学习训练数据的分布,并在测试集上达到很好的泛化效果

但是,如果我们每一个batch输入的数据都具有不同的分布,显然会给网络的训练带来困难。

另一方面,数据经过一层层网络计算后,其数据分布也在发生着变化,此现象称为Internal Covariate Shift(内部协变量偏移),接下来会详细解释,会给下一层的网络学习带来困难。

batchnorm 直译过来就是批规范化,就是为了解决这个分布变化问题

 

补充两个知识点:

1.1 Internal Covariate Shift


Internal Covariate Shift :此术语是google小组在论文Batch Normalizatoin中提出来的,其主要描述的是:训练深度网络的时候经常发生训练困难的问题,因为,每一次参数迭代更新后,上一层网络的输出数据经过这一层网络计算后,数据的分布会发生变化,为下一层网络的学习带来困难(神经网络本来就是要学习数据的分布,要是分布一直在变,学习就很难了),此现象称之为Internal Covariate Shift。

Batch Normalizatoin 之前的解决方案就是使用较小的学习率,和小心的初始化参数,对数据做白化处理&

### Batch Normalization 的概念 Batch Normalization 是一种用于加速神经网络训练的技术,通过标准化每一层输入来帮助维持稳定的梯度[^2]。具体来说,在前向传播过程中,对于给定的小批量数据(mini-batch),该技术会计算这些激活值的均值和方差,并据此调整并缩放激活函数之前的数值。 这种处理使得模型能够在更宽泛的学习率范围内工作,并减少了内部协变量偏移的影响——即由于参数更新而导致各层分布发生变化的现象。这有助于提高收敛速度以及最终模型的表现效果。 ### 实现方式 在实际应用中,可以利用 PyTorch 或 TensorFlow 等框架内置的功能轻松实现批规范化操作: #### 使用PyTorch实现Batch Normalization ```python import torch.nn as nn class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3) self.bn1 = nn.BatchNorm2d(num_features=64) def forward(self, x): x = self.conv1(x) x = self.bn1(x) # 应用BN层 return x ``` 上述代码展示了如何在一个简单的卷积神经网络架构里加入 BN 层;`nn.BatchNorm2d()` 函数创建了一个适用于二维张量(如图像特征图)上的批正则化实例。 #### 使用TensorFlow/Keras实现Batch Normalization ```python from tensorflow.keras.layers import Conv2D, BatchNormalization model = tf.keras.Sequential([ Conv2D(filters=64, kernel_size=(3, 3), padding='same', input_shape=[28, 28, 3]), BatchNormalization(), # 添加BN层到模型结构中 ]) ``` 这里同样定义了一种包含单个卷积层加上其后的批正则化的序列式 Keras 模型。 ### 使用方法 为了使 Batch Normalization 发挥最佳效能,通常建议将其放置于非线性变换之前的位置上,比如 ReLU 激活函数前面。此外,还需要注意设置适当大小的小批次数量以确保统计估计的有效性和稳定性。对于某些特定应用场景下的特殊需求,则可能需要进一步微调超参配置,例如增大 batch size 来改善信道噪声抑制能力[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值