规范化和标准化

已完成

功能缩放是一种技术,用于更改功能所具有的值的范围。 这样做有助于使模型更快、更稳健地学习。

规范化与标准化

规范化是指对数值进行缩放,使它们都符合特定范围,通常是 0–1。 例如,如果你有一个年龄为 0、50 和 100 岁的人员列表,则可以通过将年龄除以 100 来实现规范化,这样数值就是 0、0.5 和 1。

标准化是类似的,但相反,我们减去值的均值(也称为平均值),然后除以标准偏差。 如果你不熟悉标准偏差,不必担心,这意味着标准化后,我们的平均值为零,并且约 95% 的值介于 -2 和 2 之间。

还有一些其他方法可以缩放数据,但这些方法的细微差别不在我们目前需要了解的范畴内。 我们来探讨一下为什么要应用规范化或标准化。

为什么需要缩放?

我们在训练之前规范化或标准化数据有很多原因。 可以通过示例更轻松地了解这些内容。 假设我们想要训练一个模型,以预测救援犬是否可以在雪天成功完成任务。 我们的数据在下图中显示为点,我们尝试查找的趋势线显示为实线:

此图显示了从 50 开始的犬只身高和救援信息图中的缩放。

缩放为学习提供了更好的起点

上图中最优线有两个参数:截距为 50,即 x=0 处的线,斜率为 0.01;每增加 1000 毫米,救援能力就增加 10 倍。 假设我们开始训练时这两个参数的初始估值都是 0。

如果训练迭代平均每次迭代更改参数约 0.01,则至少需要 5000 次迭代才能找到截距:50 / 0.01 = 5000 次迭代。 标准化可以使此最佳截距更接近于零,这意味着我们可以更快地找到它。 例如,如果我们从标签(年度救援情况)和特征(高度)中减去平均值,则截距为 -0.5,而不是 50,可以发现这大约加快了 100 倍。

此图显示了从 0 开始的犬只身高和救援信息图中的缩放。

还有其他原因,当初始猜测与标记相差很远时,复杂模型的训练速度会非常慢,但解决方案仍然是一样的:通过偏移特征实现更接近于初始猜测的位置。

标准化允许参数以相同的速度进行训练

在我们的新偏移数据中,理想偏移量为 -0.5,理想斜率为 0.01。 虽然偏移有助于加快速度,但训练偏移量比训练斜率要慢得多。 这会减缓速度,使训练不稳定。

例如,我们的偏移量和斜率的初始猜测值都是零。 如果我们在每次迭代中将参数更改约 0.1,可以快速找到偏移量,但很难找到正确的斜率,因为斜率的增加值将过大 (0 + 0.1 > 0.01) 并且可能会超出理想值。 我们可以进行小幅调整,但这会放慢找到截距所需的时间。

如果缩放身高特征,会发生什么?

此图显示了缩放的犬只身高和救援信息图中的标准化。

线条斜率现在为 0.5。 请注意 x 轴。 -0.5 的最佳截距和 0.5 的斜率是相同的比例! 现在可以轻松地选择合理的步长,即梯度下降更新参数的速度。

缩放有助于使用多个特征

当我们使用多个特征时,在不同的比例上使用这些特征可能会导致拟合问题,就像我们刚才看到的截距和斜率的示例那样。 例如,如果我们训练一个模型,接受以毫米为单位的身高和以公吨为单位的体重,许多类型的模型将难以理解体重特征的重要性,仅仅是因为它相对于身高特征来说太小了。

我是否始终需要缩放?

我们不总是需要缩放。 某些类型的模型(包括前面含直线的模型)无需迭代过程(如梯度下降)即可拟合,因此,不必介意特征的大小是错误的。 其他模型需要缩放才能进行良好训练,但其库通常会自动执行特征缩放。

一般而言,规范化或标准化的唯一实际缺点是,它会使解释模型变得更加困难,并且必须编写更多代码。 因此,特征缩放是创建机器学习模型的一个标准部分。