3.1 归一化的引入
我们以客户信息为例
可以看出表中存在两个维度:年龄、收入,不考虑截距项,其目标变量y = θ_1*X_1 + θ_2*X_2,表中每一条样本的不同维度对应的数量级不同(对应的物理含义不同)。
机器学习就是知道X,Y的情况下求解方程组调整出最优解的过程,假设这两个维度对于最终的目标变量y同样重要,即θ_1*X_1 = θ_2*X_2,如果X1 << X2,则最终的θ_1‘ >> θ_2’
左图为归一化后的俯瞰图,右图为未做归一化的俯瞰图
所以,右图中θ_1轴的长度长于θ_2。其实,梯度下降前,按照正态分布生成的θ,其所有维度的θ都是在期望μ为0方差σ为1的正太分布随机在0附近的(即一开始的θ_1与θ_2的数值是差不多的),从上图可以看出,①初始值θ_1到最终的目标位置θ_1’的距离是远大于初始值θ_2到最终的目标位置θ_2’的距离。
由于第j个维度的梯度计算公式如下:
第j个维度的梯度更新计算公式如下:
且如上文所提到的,X1<<X2,则g_1 << g_2,②可以知道每次梯度更新时,θ_1的调整幅度要远小于θ_2
那么,结论①与②是互相矛盾的!!!尽管θ_1到θ_1’的距离较大,但是θ_1每次梯度更新时调整的幅度非常小。这样意味着θ_2最后需要比θ_1更少的迭代次数就可以收敛,而我们要最终求得最优解,就必须每个维度θ都收敛才可以,所以会出现θ_2等待θ_1收敛的情况(导致了右图梯度下降的方式是这样的:先顺着θ_2的坐标轴往下走再往右走)
3.2 归一化的目的
-
结论 归一化的目的是使得不同维度的θ参数在梯度下降时处在接近的调整幅度上(优化步伐一致)
-
拓展
归一化带来的一个好处是可能提高精度
一些分类器如KNN(K邻近神经网络)需要计算样本之间的距离(欧式距离)。可能我们主观上认为“一个特征值域范围非常大,那么距离计算就主要取决于这个特征”,但可能实际情况与之相反。
由于特征维度的量纲(数量级、单位)不同,所以很可能X1在10000到20000的区间,X2在1到2的区间,这样所有点都在一条直线上,出现无法找到分界线的情况。
3.3 归一化的本质
归一化的本质就是将特征维度X1...Xn的数量级统一,做到无量纲化(梯度更新时各个维度步调一致)。
所以如何归一化就是,怎么去将数据X1……Xn的数量级统一。
3.4 归一化的方法
3.4.1 最大最小值归一化
xij为样本X中的第i行,第j列的元素,xj^(min)为第j列的最小值,xj(max)为第j列的最大值。
举个例子,比如第j列的数值是[1, 2, 3, 5, 5],就是x_j^(min)=1,就是x_j^(max)=5,那么归一化之后是[0, 0.25, 0.75, 1, 1]。如果第j列的数值是[1, 2, 3, 5, 50001],那么归一化之后是[0, 0.00004, 0.00006, 0.0001, 1],此时存在一离群值50001。
上面可以看出,使用“最大值最小值归一化”方法时,优点:可以将数值归一化到0,1之间,缺点:若存在离群值,会使得一个数值为1,其余数值无限接近于0
3.4.2 标准归一化
通常,标准归一化中包含了均值归一化和方差归一化。经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:
相对于最大值最小值归一化来说,因为标准归一化是除以的是标准差,而标准差的计算会考虑到所有样本数据,所以受到离群值的影响会小一些,这就是除以方差的好处!但是如果是使用标准归一化不一定会把数据缩放到0到1之间了。
对于xij来说,αA的符号是一致的,大部分数据集中的X矩阵中的数据是正数,,那么每次迭代更新权重时,w的更新幅度符号也是一致的。如下图所示,如果想要将w更新到w‘,必然要么W1和W2同时变大再同时变小,或者就W1和W2同时变小再同时变大。不能如图上所示蓝色的最优解路径,即W1变小的时候W2变大。
想做到“W1变小的时候W2变大”,就需要让xij的符号不一致(有正有负),那么减去均值是一个不错的方法,即在做梯度下降的时候有更多的可能性去让更新尽可能沿着最优解路径去做。