批归一化Batch Normalization(BN)--李宏毅机器学习笔记

Batch Normalization(BN) 是一种加速神经网络训练、稳定优化过程的技术。核心思想是对每一层的输入特征进行归一化处理,使它们分布在固定范围内(均值为 0,方差为 1),从而平滑 error surface(误差曲面),提升训练效率。

1、为什么需要 BN?

  • 神经网络训练难的原因之一是 error surface 形状复杂,不同方向上的梯度差异大,导致训练震荡或收敛慢。

  • 这通常源于输入特征的 不同尺度(scale)差异大

  • Feature Normalization(特征归一化)可以改善这一问题,让 loss surface 更“圆滑”,更易训练。形象一点来说就是把山铲平。

 

 其实就和mpc里那个J一样,图里x1单位小,对loss影响很小,error surface平缓,x2大对loss影响大,error surface陡峭,这就是error surface形状千奇百怪的原因。归一化就是一视同仁,感觉有点想安装百分比计算。

2、特征归一化 

把不同比资料的同一个维度的数值进行以下计算,其中m是该维度的平均值,σ是标准差,下面的式子就是归一化过程

具体到网络中,老师提到有个有趣的知识点说是,之前的x1,x2,x3是独立分开处理但在归一化后他们就彼此关联了,通过学习导致W变化,再导致z变化,μ和σ变化,后面那个戴帽子的z1也变化,大概是这么个意思

归一化之后还有一步,GPT说是恢复可调性(避免过度限制),此处 β 和 γ 不会搞乱归一化的理由:初始γ里全是1,初始β里全是0 ,它们是一个由训练更新的值,大概是这个意思,这块没太听懂,b站上的课断断续续的,讲的也比较笼统。

老师原话:让你的 network 在一开始训练的时候,每一个 dimension 的分布,是比较接近的,也许训练到后来,你已经训练够长的一段时间,已经找到一个比较好的 error surface,走到一个比较好的地方以后,那再把 β 跟 γ 慢慢地加进去

### 批量归一化的作用与原理 批量归一化(Batch Normalization, BN)旨在解决深层神经网络训练过程中遇到的内部协变量偏移(Internal Covariate Shift)问题。通过使每一层输入数据分布保持相对稳定,从而加速模型收敛并提高性能[^1]。 #### 原理说明 BN的核心在于对每个批次(batch)内的特征进行标准化处理,即调整各维度上的均值接近0、方差趋近于1。具体操作如下: - 对于给定的一批样本\( \{x_1,x_2,...,x_m\} \),先计算这批样本关于某个特定神经元输出的整体均值μ和标准差σ; \[ μ_B=\frac {1}{m}\sum_{i=1}^{m}x_i,\quad σ_B^2=\frac {1}{m}\sum _{i=1}^{m}(x_i−μ_B)^2 \] - 接着利用上述统计信息对该批内所有样例执行线性转换: \[ y_i = \gamma (\frac{x_i - μ_B }{\sqrt{{σ}_B ^2+\epsilon}})+β \] 其中γ(缩放参数), β (位移参数) 是两个可学习参数; ε是一个很小常数用于防止除零错误[^3]。 此过程不仅实现了feature scaling的效果,还允许后续层次更好地适应前一层的变化模式,减少了因权重更新引起的数据分布变动带来的负面影响[^2]。 #### 应用场景 在深度学习领域中,BN广泛应用于各种类型的卷积神经网络(CNNs)以及循环神经网络(RNNs)结构里。特别是在图像识别任务方面表现出色,能够有效提升分类准确性的同时加快收敛速度。此外,在自然语言处理(NLP)等领域也有成功案例报道[^4]。 ```python import torch.nn as nn model = nn.Sequential( nn.Conv2d(in_channels=3, out_channels=64, kernel_size=(3, 3)), nn.BatchNorm2d(num_features=64), ... ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值