Batch Normalization(批归一化,简称BatchNorm)可能是深度学习里最不起眼却最神奇的小操作之一。它做的事情听起来简单到让人怀疑:把中间层的激活值减去均值、除以标准差,再套用一组可学习的缩放和平移参数。可就是这么一个小技巧,彻底改变了深度神经网络的训练方式。
要理解BatchNorm的价值,先看一个更基础的问题:为什么输入需要归一化?假设一个模型有两个输入特征,一个范围在0到1,另一个范围在0到100000。如果不做任何处理,优化目标的等高线会被拉成一条又长又窄的山谷。梯度下降在山谷里来回震荡,走得很慢。若把输入标准化成均值接近0、方差接近1,优化地形就变得平坦许多,梯度下降能更高效地直达最优解附近。
BatchNorm把这个思路从输入层推广到了网络的所有层。它不只归一化原始特征,而是把网络中间每一层的激活值都拉回均值0方差1的分布。最初提出时,动机是解决所谓“内部协变量偏移”(Internal Covariate Shift):训练中权重不断更新,后层看到的激活分布也跟着变,后层就必须不断适应漂移的输入。BatchNorm把这些分布“钉住”,让每一层面对的数据更稳定。
具体操作并不复杂。对于某个激活值x,BatchNorm先计算当前mini-batch的均值μ和方差σ²,然后做归一化:x_hat=(x-μ)/√(σ²+ε)。最后再乘上可学习的γ(gamma)并加上β(beta),恢复模型需要的表达能力。γ和β的存在很关键:如果网络发现归一化后的分布并不合适,它可以通过学习把有用的表示“放大”或“平移”回来——甚至能把归一化完全还原成恒等映射。
但随着研究深入,人们发现BatchNorm的真正威力可能不止于此。后来的实验和理论表明,它并非只是减少协变量偏移,更重要的作用是让整个损失函数的“地形”变得更加平滑。这种平滑效应让训练可以使用更大的学习率,让网络即使在深层结构中也能快速收敛。此外,每个mini-batch的统计信息带有一定随机性,这让BatchNorm还附带轻微的正则化效果,有时能减少对Dropout的依赖。
如今,从卷积神经网络到Transformer,BatchNorm以及它的近亲LayerNorm、InstanceNorm等,已经是深度学习从业者的标配工具箱。回看这一切的原点,那个“先归一化、再缩放平移”的简单思路,依然给人们带来启发:深度学习中,改变游戏规则的未必是复杂的大模型,也可能只是一件毫不起眼的小工具。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.