前言
最近在学习吴恩达的深度学习,对于特征缩放的知识点很是困惑,不明白为什么它会加快收敛速度,在网上看大佬们的解答,大佬们也都是给了两个对比图之后就把这个问题带过去了,于是我认认真真,反复看了吴恩达的optinal lab中关于特征缩放的detail。终于明白了其中的原理,将其记录在我的博客中,方便我忘记时回来查看。
为什么要采用特征缩放?
在说明为什么要采用特征缩放前,我们先阐明应该什么时候采用特征缩放?
特征缩放的使用是基于给出的所有输入x的单位不同,导致两者数值相差甚远,这时我们便需要使用特征缩放,消除掉单位对于数值的影响。
以线性回归经典样例房屋预测举例说明,影响房价的因素假设有房屋面积,卧室数量等,显然,房屋面积可以表示的范围为几十/几百/几千平米,而卧室的数量,普遍应该在个位数间波动,因此,有可能会出现房屋面积100平米,而卧室数量可能仅为2,100的数值比2大了足足有50倍!
那么为什么样例的数值差大我们就要采用特征缩放呢?
我们不妨就上面这个例子,继续讨论,在下面我们给出两个公式,分别是平方误差成本函数的导数(即梯度)以及w的更新公式
公式(1) 平方误差成本函数:
公式(2)w更新公式:
由上面公式(1)、(2)红色字母的值对于每一个W来说都是一样的,对于W来讲,不同的就是公式(1)中的绿色符号—
因此,若的值大,那么这个w的梯度就会大,它的更新变化就大。对于给定的一组初始化w的向量值,
值大的那个会更快的收敛,而在它收敛后,其他的值还在继续梯度下降。
同时,还会出现一个问题,就是因为每一次的梯度都很大,就会导致值大的对应的这个W在收敛过程中反复横跳。如下图所示:
注:上图摘自吴恩达老师的optinal lab的内容,W0即代表对应的X值大的那个权重。
而造成这些情况的都是因为,某一项的特征值远比其他的特征大太多啦,因此,我们就需要特征缩放的方法,来讲所有的特征 划分到一个相同范围,通俗一点来讲就是消除掉单位对于数值的影响。
特征缩放的方法:
1、最大最小值归一化:将数值缩小到范围【0,1】
2、均值归一化:将数值范围缩放到 [-1, 1] 区间里,且数据的均值变为0
3、z-score归一化(吴老师推荐的):数值缩放到0附近,且数据的分布变为均值为0,标准差为1的标准正态分布(先减去均值来对特征进行 中心化 mean centering 处理,再除以标准差进行缩放):
4、最大绝对值归一化:也就是将数值变为单位长度(scaling to unit length),将数值范围缩放到 [-1, 1] 区间里