ximingri 2018-12-08
数据的归一化操作是数据处理的一项基础性工作,在一些实际问题中,我们得到的样本数据都是多个维度的,即一个样本是用多个特征来表示的,数据样本的不同特征可能会有不同的尺度,这样的情况会影响到数据分析的结果。为了解决这个问题,需要进行数据归一化处理。原始数据经过数据归一化后,各特征处于同一数量级,适合进行综合对比评价。我们可以将归一化操作进行可视化:
归一化操作可视化
左图表示的是原始数据,右图是归一化之后的数据,可以看出每个特征维度上的尺度是一致的(红色箭头的长度表示尺度)。
我们常用的归一化方法是0均值归一化方法,具体来说就是将原始数据集归一化为均值为0、方差1的数据集,归一化公式如下:
归一化公式
其中μ为所有样本数据的均值,σ为所有样本数据的标准差。
首先我们需要知道的是神经网络的训练速度是由梯度下降算法的速度决定的,只要梯度下降的速度变快,那么神经网络的训练速度也会相应的变快。所以为了解释这个问题,我们从损失函数梯度下降的角度来分析这个问题。
假如我们的样本只有两个特征x1、x2,这两个特征尺度相差很大,假设特征X1区间是[0,2000],而X2区间是[1,5],我们不对其进行归一化处理,我们针对这两个特征设计机器学习算法,然后我们画出它的损失函数的图像,如下图所示
没有归一化的损失函数的图像
红色的圈代表的是两个特征的等高线。因为两个特征X1和X2的区间相差非常大,其所形成的等高线为长椭圆形,非常尖。使用梯度下降法寻求最优解的过程也就是在寻找使得损失函数值最小的 参数θ1,θ2,当数据没有归一化的时候,梯度下降很有可能走之字型路线(它会垂直等高线走,因为梯度的方向与等高线切线方向垂直),因为梯度下降路线波动很大,从而导致需要迭代很多次才能收敛,这就是非归一化操作的神经网络训练速度慢的直观体现。
现在我们对训练集数据进行归一化处理,此时我们画出损失函数的图像,如下所示
归一化之后的损失函数的图像
而数据归一化后,损失函数变量θ前面的系数差距已不大,这样的话,图像的等高面近似圆形,此时求解得到的梯度方向更能直指圆心,在梯度下降进行求解时能较快的收敛,效率也就更高了,这样神经网络的训练速度也会相应加快。
这就是数据归一化操作加快神经网络训练速度的直观体现,因此如果机器学习模型使用梯度下降法求最优解时,归一化往往非常有必要,否则收敛速度会很慢,甚至不能收敛。