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,走到一个比较好的地方以后,那再把 β 跟 γ 慢慢地加进去