2020-5-22 吴恩达-改善深层NN-w1 深度学习的实用层面(1.9 归一化输入(特征)-加速训练,优化J简单-因为任何位置都可以快速下降,步长大)

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

1.9 归一化输入 Normalizing inputs

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

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

  • step1:零均值

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

  • step2:归一化方差

注意:上图中特征x1x_1的方差比特征x2x_2的方差要大得多
在这里插入图片描述

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

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

此时x1x_1x2x_2的方差都等于1,如下图。
在这里插入图片描述

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

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

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

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

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

  • 非归一化的输入特征

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

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

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

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

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

  • 归一化特征

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

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

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

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

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

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

总结

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章