1-9 归一化输入

归一化输入( Normalizing inputs

训练神经网络,其中一个加速训练的方法就是归一化输入。
归一化的两个步骤:

  • 零均值
  • 归一化方差

第一步是零均值化, $u = \frac{1}{m}\sum\nolimits_{i = 1}^m {{x^{(i)}}}$,它是一个向量,x等于每个训练数据x减去u,意思是移动训练集,直到它完成零均值化。
第二部就是归一化方差,${\sigma ^2} = \frac{1}{m}\sum\nolimits_{i = 1}^m {({x^{(i)}}} {)^2}$,${\sigma ^2}$是一个向量,把所有的数据除以${\sigma ^2}$。

假设输入特征有两个,则整个过程的示意如下图所示:

为什么使用归一化

代价函数:

如果你使用非归一化的输入特征,代价函数会像这样:

 

代价函数就有点像狭长的碗一样,如果你在上图这样的代价函数上运行梯度下降法,你必须使用一个非常小的学习率。因为如果是在这个位置,梯度下降法可能需要多次迭代过程,直到最后找到最小值。

但如果函数是一个更圆的球形轮廓,那么不论从哪个位置开始,梯度下降法都能够更直接地找到最小值,你可以在梯度下降法中使用较大步长,而不需要像在左图中那样反复执行。
当然,实际上 w是一个高维向量,因此用二维绘制 w并不能正确地传达并直观理解,但总地直观理解是代价函数会更圆一些,而且更容易优化,前提是特征都在相似范围内,而不是从 1 10000 1 的范围,而是在-1 1 范围内或相似偏差,这使得代价函数 。
所以如果输入特征处于不同范围内,可能有些特征值从 0 1,有些从 1 1000,那么归一化特征值就非常重要了。如果特征值处于相似范围内,那么归一化就不是很重要了。执行这类归一化并不会产生什么危害,我通常会做归一化处理,虽然我不确定它能否提高训练
或算法速度。

posted @ 2018-09-09 21:52  刘-皇叔  阅读(907)  评论(0编辑  收藏  举报