归一化输入特征加快模型训练

转自:https://blog.csdn.net/weixin_42555985/article/details/106278473

1.9 归一化输入 Normalizing inputs

训练NN,其中一个加速训练的方法就是归一化输入。
在这里插入图片描述

如上图,数据集的散点图。
假设一个训练集有两个特征,输入特征为2维,归一化需要两个步骤:

  • step1:零均值

μ = 1 m ∑ i = 1 m x ( i ) \mu =\frac 1m\sum_{i=1}^mx^{(i)}μ=m1​i=1∑m​x(i)
向量X等于每个训练数据 x 减去μ \muμ,即X := x-μ,意思是移动训练集,直到它完成零均值化。如下图。
在这里插入图片描述

  • step2:归一化方差

注意:上图中特征x 1 x_1x1​的方差比特征x 2 x_2x2​的方差要大得多
在这里插入图片描述

我们要做的是给σ \sigmaσ赋值。
σ 2 = 1 m ∑ i = 1 m ( x ( i ) ) 2 \sigma^2=\frac 1m\sum_{i=1}^m(x^{(i)})^2σ2=m1​i=1∑m​(x(i))2
这是元素y yy的平方。σ 2 \sigma^2σ2是一个向量,它的每个特征都有方差。

到此,我们已经完成零值均化,( x ( i ) ) 2 (x^{(i)})^2(x(i))2或者说元素y 2 y^2y2就是方差。我们把向量X所有数据除以向量σ 2 \sigma^2σ2,即X /=σ**2,最后变成下图形式。
在这里插入图片描述

此时x 1 x_1x1​和x 2 x_2x2​的方差都等于1,如下图。
在这里插入图片描述

提示一下,如果你用它来调整训练数据,那么也用相同的μ \muμ和σ 2 \sigma^2σ2来归一化测试集。尤其是,你不希望训练集和测试集的归一化有所不同。所以你要用同样的方法调整测试集,而不是在训练集和测试集上分别预估μ \muμ和σ 2 \sigma^2σ2。

训练数据和测试数据都是通过相同μ \muμ和σ 2 \sigma^2σ2定义的相同数据转换,其中μ \muμ和σ 2 \sigma^2σ2是由训练集数据计算得来的。

为什么我们想要归一化输入特征?

J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) J(w,b)=\frac 1m\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})J(w,b)=m1​i=1∑m​L(y^​(i),y(i))
上面是代价函数J公式。

我们来对比一下非归一化和归一化代价函数有什么不同。

  • 非归一化的输入特征

如果你使用非归一化的输入特征,代价函数会像这样
在这里插入图片描述

这是一个非常细长狭窄的代价函数,最小值应该在原点。
但如果特征值在不同范围,假如x 1 x_1x1​取值范围从1到1000,特征x 2 x_2x2​的取值范围从0到1,结果是参数w 1 w_1w1​和w 2 w_2w2​值的范围或比率将会非常不同。

上图数据轴应该是w 1 w_1w1​和w 2 w_2w2​,但为了便于直观理解,图中标记为w和b。代价函数就有点像狭长的碗一样,如果你能画出该函数的部分轮廓,它会是这样一个狭长的函数,如下图。
在这里插入图片描述

如果你在上图这样的代价函数上运行梯度下降法,你必须使用一个非常小的学习率。
在这里插入图片描述

如上图,梯度下降法可能从图中左下方开始,需要多次迭代过程,直到最后找到最小值。

  • 归一化特征

然而如果你归一化特征,代价函数平均起来看更对称。
在这里插入图片描述
在这里插入图片描述

此时代价函数是一个更圆的球形轮廓。如上图,不论从哪个位置开始,梯度下降法都能够更直接地找到最小值,你可以在梯度下降法中使用较大步长,而不需要像在非归一化狭长图中那样反复执行。

当然,实际上w是一个高维向量,因此用二维绘制并不能正确地传达并直观理解。但总得来说,代价函数更圆一些,就更容易优化。前提是特征都在相似范围内,而不是一个特征从1到1000,另外特征从0到1的范围,而是特征都在-1到1范围内或相似偏差,这使得代价函数优化起来更简单快速。

实际上如果假设特征x 1 x_1x1​范围在0-1之间,x 2 x_2x2​的范围在-1到1之间,x 3 x_3x3​范围在1-2之间,它们是相似范围,所以算法运行会表现得很好。

当它们在非常不同的取值范围内,如其中一个从1到1000,另一个从0到1,这对优化算法非常不利。但是仅将它们设置为均化零值,假设方差为1,确保所有特征都在相似范围内,通常可以帮助学习算法运行得更快。

所以如果输入特征处于不同范围内,可能有些特征值从0到1,有些从1到1000,那么归一化特征值就非常重要了。如果特征值处于相似范围内,那么归一化就不是很重要了。执行这类归一化并不会产生什么危害,我通常会做归一化处理,虽然我不确定它能否提高训练或算法速度。

总结

  • 输入特征处于相似范围内,不一定要归一化。
  • 输入特征处于不同范围内,一定要归一化。

执行这类归一化并不会产生什么危害,所以别管范围,都做吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值