什么是归一化
归一化是一种数据处理方式,能将数据经过处理后限制在某个固定范围内。
归一化存在两种形式,一种是在通常情况下,将数处理为 [0, 1] 之间的小数,其目的是为了在随后的数据处理过程中更便捷。例如,在图像处理中,就会将图像从 [0, 255] 归一化到 [0, 1]之间,这样既不会改变图像本身的信息储存,又可加速后续的网络处理。其他情况下,也可将数据处理到 [-1, 1] 之间,或其他的固定范围内。另一种是通过归一化将有量纲表达式变成无量纲表达式。那么什么是量纲,又为什么需要将有量纲转化为无量纲呢?具体举一个例子。当我们在做对房价的预测时,收集到的数据中,如房屋的面积、房间的数量、到地铁站的距离、住宅附近的空气质量等,都是量纲,而他们对应的量纲单位分别为平方米、个数、米、AQI等。这些量纲单位的不同,导致数据之间不具有可比性。同时,对于不同的量纲,数据的数量级大小也是不同的,比如房屋到地铁站的距离可以是上千米,而房屋的房间数量一般只有几个。经过归一化处理后,不仅可以消除量纲的影响,也可将各数据归一化至同一量级,从而解决数据间的可比性问题。
为什么要归一化
归一化可以将有量纲转化为无量纲,同时将数据归一化至同一量级,解决数据间的可比性问题。在回归模型中,自变量的量纲不一致会导致回归系数无法解读或错误解读。在KNN、Kmeans等需要进行距离计算的算法中,量纲的量级不同可能会导致拥有较大量级的特征在进行距离计算时占主导地位,从而影响学习结果。
数据归一化后,寻求最优解的过程会变得平缓,可以更快速的收敛到最优解。
为什么归一化能提高求解最优解的速度
之前我们提到一个对房价进行预测的例子,假设自变量只有房子到地铁站的距离 x 1 x_1 x1 和房子内房间的个数 x 2 x_2 x2,因变量为房价,预测公式和损失函数分别为: y = θ 1 x 1 + θ 2 x 2 J = ( θ 1 x 1 + θ 2 x 2 − y l a b e l ) 2 \begin{aligned} y &= \theta_1x_1 + \theta_2x_2 \\ J &= (\theta_{1}x_{1} + \theta_{2}x_{2} - y_{label})^2 \end{aligned} yJ=θ1x1+θ2x2=(θ1x1+θ2x2−ylabel)2 在未归一化时,房子到地铁站的距离的取值在 0~5000 之间,而房间个数的取值范围仅为0~10。假设 x 1 = 1000 , x 2 = 3 x_{1} = 1000,x_{2} = 3 x1=1000,x2=3, 那么损失函数的公式可以写为: J = ( 1000 θ 1 + 3 θ 2 − y l a b e l ) 2 J = (1000\theta_{1}+3\theta_{2} - y_{label})^2 J=(1000θ1+3θ2−ylabel)2可将该损失函数寻求最优解过程可视化为下图:
左图的红色椭圆代表归一化前的损失函数等高线,蓝色线段代表梯度的更新,箭头的方向代表梯度更新的方向。寻求最优解的过程就是梯度更新的过程,其更新方向与登高线垂直。由于x1 和 x2 的量级相差过大,损失函数的等高线呈现为一个瘦窄的椭圆。因此如图(左)所示,瘦窄的椭圆形会使得梯度下降过程呈之字形呈现,导致梯度下降速度缓慢。
当数据经过归一化后, x 1 ′ = 1000 − 0 5000 − 0 = 0.2 x_{1}^{'} =\displaystyle \frac{1000-0}{5000-0}=0.2 x1′=5000−01000−0=0.2, x 2 ′ = 3 − 0 10 − 0 = 0.3 x_{2}^{'} =\displaystyle \frac{3-0}{10-0}=0.3 x2′=10−03−0=0.3,那么损失函数的公式可以写为: J ( x ) = ( 0.2 θ 1 + 0.3 θ 2 − y l a b e l ) 2 J(x) = (0.2\theta_{1} + 0.3\theta_{2} - y_{label})^2 J(x)=(0.2θ1+0.3θ2−ylabel)2 我们可以看到,经过归一化后的数据属于同一量级,损失函数的等高线呈现为一个矮胖的椭圆形(如图(右)所示),求解最优解过程变得更加迅速且平缓,因此可以在通过梯度下降进行求解时获得更快的收敛。
归一化有哪些类型
1、Min-max normalization (Rescaling): x ′ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x^{'} = \frac{x - min(x)}{max(x) - min(x)} x′=max(x)−min(x)x−min(x) 归一化后的数据范围为 [0, 1],其中 m i n ( x ) 、 m a x ( x ) min(x)、max(x) min(x)、max(x) 分别求样本数据的最小值和最大值。
2、Mean normalization: x ′ = x − m e a n ( x ) m a x ( x ) − m i n ( x ) x^{'} = \frac{x - mean(x)}{max(x) - min(x)} x′=max(x)−min(x)x−mean(x) 归一化后的数据范围为 [-1, 1],其中 m e a n ( x ) mean(x) mean(x) 为样本数据的平均值。
3、Z-score normalization (Standardization): x ′ = x − μ σ x^{'} = \frac{x - \mu}{\sigma} x′=σx−μ 归一化后的数据范围为实数集,其中 μ 、 σ μ、σ μ、σ 分别为样本数据的均值和标准差。
4、非线性归一化:
- 对数归一化: x ′ = lg x lg m a x ( x ) x^{'} = \frac{\lg x}{\lg max(x)} x′=lgmax(x)lgx
- 反正切函数归一化: x ′ = arctan ( x ) ∗ 2 π x^{'} = \arctan(x) * \frac{2}{\pi} x′=arctan(x)∗π2 归一化后的数据范围为 [-1, 1]
- 小数定标标准化(Demical Point Normalization): x ′ = x 1 0 j x^{'} = \frac{x}{10^j} x′=10jx 归一化后的数据范围为 [-1, 1], j j j 为使 m a x ( ∣ x ′ ∣ )