为什么使用归一化
如果输入有多个feature,且它们的数值范围有很大差异,这样训练时学习率就不能设置得太大,以免大幅调参引发越界。反之,如果各个feature有相同的均值和方差,则可使用更高的学习率,使收敛更快。归一化解决了梯度爆炸和梯度消失的问题,使构建更深层的网络成为可能,还避免了梯度爆炸和梯度消失。
使用模型时需要保证训练数据和测试数据同分布。在机器学习中往往对输入数据进行归一化处理,在深度学习中则常对网络的每一层都做归一化处理,以保证每次处理的数据分布一致。这也使得层与层之间更加独立,依赖更小。Batch-Normalize(BN)论文中描述:加入BN方法后,模型训练提速14倍,且精度也有所提升。
Convariate shift(漂移)问题
从原理上看,归一化缓解了内部协变量的移位问题,即漂移问题。深度神经网络中每一层输入都依赖之前层的输出,在训练的不同阶段,前层输出的分布也不相同。调参幅度越大越可能使分布变化,因此,只能使用较小的学习率,这样又使得收敛变慢。
由调参引发的内部数据分布变化的问题叫做内部协变量的移位问题,也被称作漂移问题。归一化方法可以有效地缓解该问题,它将特定特征的数据表示为均值为0,标准差为1的数据。其物理意义是把数据集映射到原点周围,除了缩放(除标准差)和平移(减均值),一般工具库提供的归一化函数包括affine参数实现仿射变换。其公式如下:
其中x为归一化层的输入,y为归一化层的输出,E[x]是均值,Var[x]是方差,weight(γ)和bias(β)是模型的参数,通过训练求得,用于实现仿射变换。ε(eps)是个很小的数用于防止分母为0。在γ为标准差,β为均值的情况下,上述公式未对x进行变换,而这两个参数通过训练求得,可以说在多大程度上进行归一化由模型训练决定。
常用的归一化方法
Batch-Normalize(BN)
Batch-Normalize最早提出,也是最常用的归一化方法,其原理已经在前面介绍。在图像处理时,它在batch上,对NHW做归一化。它的缺陷是在batch size较小的情况下效果不好,而目标检测或者在图片分辨率较大的情况下,又只能使用较小的batch size。
理论上,上述公式应该对整个训练集计算均值和方差,而实际操作中,每一次只对一个batch中的数据计算统计量(均值/方差),由此引起了噪声,这种噪声类似于Dropout,因此有时BN也能部分实现Dropout的功能,降低模型对某些连接的依赖性,提高模型的泛化能力。但是当batch size很小时,归一化引入了太多的噪声,导致模型效果变差。为解决这一问题,开发者在BN基础上提出了更多的归一化算法。
Layer-Normalize(LN)
基于BN,在通道方向上,对CHW归一化。常用于RNN任务,但在机器视觉方面达不到BN的精度。
Instance-Normalize(IN)
基于BN,在图像像素上,对HW做归一化,常用于迁移学习,风格转换,在机器视觉方面达不到BN的精度。
Group-Normalize(GN)
基于BN,GroupNorm将channel分组,计算每一组数据的统计值做归一化处理,解决了BN在 batchSize较小的情况下引入大量噪声的问题。
Switchable-Normalize(SN)
将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。
SN结合了BN、LN、IN几种方法,可用于不同任务及不同场景,SN计算了BN,LN,IN三种统计量,然后对统计量加权(权值通过softmax计算),最终计算出归一化值。通过训练动态调节权值,使模型具有更强的鲁棒性,以适应各种场景。
测试阶段的归一化
需要注意的是训练集和测试集需要使用同样的归一化方法。以BN为例,训练时,用当前batch中的所有数据计算均值和方差(一般包含32,64,128个样本)。在预测时,如果只对单个样本做预测,只计算单个样本的统计值会产生偏差。可使用如下几种解决方法:
- 使用整个训练集的数据计算统计值。
- 从训练集中随机抽取一批数据计算统计值。
- 记录训练阶段计算的统计值,使用指数加权平均法计算训练阶段的统计值。
一般深度学习框架(如Pytorch)都提供默认的处理方法,如无特殊情况,不用自己写程序实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具