- [ 1] 为什么要进行归一化:
因为不同的参数变换范围和大小可能不一样,取值大的影响因素大取值小的影响因素小,所以需要归一化来均衡他们之间的影响因素。
很多时候需要乘以尺度因子,尺度因子是为了放大结果的差异。
- [2 ] 归一化的方法有哪些:
- 1:Rescaling (min-max normalization、range scaling)
将每一维特征线性映射到目标范围[a,b],即将最小值映射为a,最大值映射为b,常用目标范围为[0,1]和[−1,1],特别地,映射到[0,1]计算方式为:
- 2:Mean normalization:
将均值映射为0,同时用最大值最小值的差对特征进行归一化,一种更常见的做法是用标准差进行归一化 - 3:Standardization (Z-score Normalization)
每维特征0均值1方差(zero-mean and unit-variance)。 - 4:Scaling to unit length:
将每个样本的特征向量除以其长度,即对样本特征向量的长度进行归一化,长度的度量常使用的是L2 norm(欧氏距离)
- [3 ] 方法分析
前3种feature scaling的计算方式为减一个统计量再除以一个统计量,最后1种为除以向量自身的长度。
- 减一个统计量可以看成选哪个值作为原点,是最小值还是均值,并将整个数据集平移到这个新的原点位置。
- 除以一个统计量可以看成在坐标轴方向上对特征进行缩放,用于降低特征尺度的影响,可以看成是某种尺度无关操作。
- 除以长度相当于把长度归一化,把所有样本映射到单位球上,可以看成是某种长度无关操作。
总的来说,归一化/标准化的目的是为了获得某种“无关性”——偏置无关、尺度无关、长度无关……当归一化/标准化方法背后的物理意义和几何含义与当前问题的需要相契合时,其对解决该问题就有正向作用,反之,就会起反作用。所以,“何时选择何种方法”取决于待解决的问题,即problem-dependent。
对于传统的神经网络,对输入做feature scaling也很重要,因为采用sigmoid等有饱和区的激活函数,如果输入分布范围很广,参数初始化时没有适配好,很容易直接陷入饱和区,导致梯度消失,所以,需要对输入做Standardization或映射到[0,1]、[−1,1],配合精心设计的参数初始化方法,对值域进行控制。但自从有了Batch Normalization,每次线性变换改变特征分布后,都会重新进行Normalization,似乎可以不太需要对网络的输入进行feature scaling了?但习惯上还是会做feature scaling。
参考:https://blog.csdn.net/lgzlgz3102/article/details/109733761