标准化数据集
标准化数据集
训练神经网络,其中一个加速训练的方法就是归一化输入。
归一化的两个步骤:
- 零均值
- 归一化方差
对训练及测试集进行标准化的过程为:
\[\bar{x} = \frac{1}{m} \sum_{i=1}^m x^{(i)}
\]
\[x^{(i)} := x^{(i)} - \bar{x}
\]
\[\sigma^2 = \frac{1}{m} \sum_{i=1}^m {x^{(i)}}^2
\]
\[x^{(i)}:= \frac{x^{(i)}}{\sigma^2}
\]
原始数据:
零均值:
归一化方差后:
数据集未进行标准化时,成本函数的图像及梯度下降过程将是:
代价函数就有点像狭长的碗一样,如果你在上图这样的代价函数上运行梯度下降法,你必须使用一个非常小的学习率。因为如果是在这个位置,梯度下降法可能需要多次迭代过程,直到最后找到最小值。
数据标准化后:
但如果函数是一个更圆的球形轮廓,那么不论从哪个位置开始,梯度下降法都能够更直接地找到最小值,你可以在梯度下降法中使用较大步长。
所以如果输入特征处于不同范围内,可能有些特征值从 0 到 1,有些从 1 到 1000,那么归一化特征值就非常重要了。如果特征值处于相似范围内,那么归一化就不是很重要了。执行这类归一化并不会产生什么危害,我通常会做归一化处理。