为什么我们要对人工神经网络的输入进行标准化?

为什么我们要对神经网络的输入进行标准化?

我明白有时候,例如,当输入值是非数值的时候,必须进行某种转换,但是当我们有一个数值输入时?为什么数字必须在一定的时间间隔内?

如果数据没有规范化,会发生什么?

131567 次浏览

给你解释得很好。

如果输入变量是线性组合的,就像在 MLP [多层感知机]中一样,那么它就是 很少严格必要的标准化输入,至少在理论上 原因是任何输入向量的缩放都可以通过 改变相应的权重和偏差,给你留下精确的 不过,有多种实用的 为什么标准化的投入可以使培训更快和减少 同时,权重衰减和贝叶斯 使用标准化的输入可以更方便地进行估计。

从外部看神经网络,它只是一个接受一些参数并产生结果的函数。与所有函数一样,它有一个域(即一组法律参数)。您必须规范化要传递给神经网络的值,以确保它在域中。与所有函数一样,如果参数不在域中,则不能保证结果是适当的。

神经网络对域外参数的确切行为取决于神经网络的实现。但总的来说,如果参数不在域内,则结果是无用的。

神经网络的一些输入可能没有“自然定义”的值范围。例如,平均值可能很慢,但是随着时间的推移会不断增加(例如数据库中的一些记录)。

在这种情况下,将这个原始价值输入到您的网络将不会很好地工作。您将从范围的较低部分教授您的网络的值,而实际的输入将来自该范围的较高部分(并且很可能高于范围,该网络已经学会使用)。

您应该将此值标准化。例如,您可以通过自前一个输入以来值的变化量来告诉网络。这种增量通常可以在特定的范围内以较高的概率定义,这使它成为网络的一个很好的输入。

根据数据的复杂性使用隐层。如果我们有一个线性可分的输入数据,那么我们不需要使用隐藏层,例如 OR 门,但是如果我们有一个非线性可分的数据,那么我们需要使用隐藏层,例如 ExOR 逻辑门。 在任何层采取的节点数量取决于我们的输出交叉验证的程度。

需要规范化的原因是,如果你看一个自适应步骤是如何在函数域的一个地方进行的,你只是简单地将问题传输到同一个步骤的等价物,在该域的某个方向上由某个大值进行转换,那么你会得到不同的结果。它可以归结为一个问题,即如何使一个线性片段适应一个数据点。在不转动的情况下,作品应该移动多少? 作为对那一个训练点的回应,作品应该转动多少?在领域的不同部分更改适应过程是没有意义的!因此,需要规范化,以减少训练结果的差异。我还没有写出来,但是你们可以看看一个简单的线性函数的数学,以及它是如何在两个不同的地方,被一个训练点训练出来的。这个问题可能已经在某些地方得到了纠正,但我对它们并不熟悉。在 ALN 中,这个问题已经被纠正了,如果你写信给沃姆斯特朗公司,我可以给你发一篇论文

在神经网络中,不仅对数据进行标准化,而且对数据进行缩放都是一个好主意。这是为了更快地接近全局最小误差曲面。请看以下图片: error surface before and after normalization

error surface before and after scaling

图片来自 Coursera 课程神经网络。 当然的作者是杰弗里辛顿。

我认为答案取决于具体情况。

考虑神经网络作为算子 F,使 F (输入) = 输出。在这种情况下,这种关系是线性的,所以 F (A * 输入) = A * 输出,那么你可以选择要么留下非规范化的输入/输出在他们的原始形式,或规范化两者,以消除 A。显然,这种线性假设是违反分类任务,或几乎任何任务,输出一个概率,其中 F (A * 输入) = 1 * 输出

在实践中,规范化允许不适合的网络是适合的,这对于实验者/程序员至关重要。然而,标准化的确切影响不仅取决于网络结构/算法,而且还取决于输入和输出的统计优先级。

更重要的是,神经网络经常被用来解决非常困难的问题,这意味着潜在的问题可能有一个非常糟糕的统计公式,使其难以评估正常化的影响,导致技术优势(变得适合)主导其对统计的影响。

在统计学意义上,归一化消除了在预测输出时被认为是非因果的变异,从而防止神经网络学习这种变异作为预测因子(NN 没有看到这个变化,因此不能使用它)。

在将输入特征输入到神经网络之前,我们必须对其进行标准化有两个原因:

原因1 : 如果 Dataset中的 Feature与其他 Dataset中的 Feature相比规模较大,那么这种规模较大的特征将占主导地位,结果是,神经网络的预测将不准确。

示例 : 在员工数据的情况下,如果我们考虑年龄和工资,年龄将是一个两位数,而工资可以是7或8位数(100万等).在这种情况下,薪水将主导神经网络的预测。但是如果我们将这些特征标准化,那么这两个特征的值将位于(0到1)的范围内。

理由2: 神经网络的前向传播涉及具有输入特征的权重的点乘。因此,如果值很高(对于图像和非图像数据) ,计算输出需要很大的计算时间和内存。反向传播也是如此。因此,如果输入没有规范化,模型收敛得很慢。

示例 : 如果我们执行图像分类,图像的大小将非常巨大,因为每个像素的值范围从0到255。在这种情况下,标准化非常重要。

下面提到的是标准化非常重要的情况:

  1. K-Means
  2. 最近的邻居
  3. 主成分分析
  4. 梯度下降法

当使用非规范化输入特征时,损失函数可能有非常长的谷。在使用梯度下降法优化时,这会成为一个问题,因为在某些参数方面,梯度会很陡峭。这导致了搜索空间的大幅振荡,因为你在陡峭的斜坡之间跳跃。为了补偿,您必须用较小的学习率来稳定优化。

考虑特性 x1和 x2,它们的范围分别从0到1和0到100万。结果表明,相应参数(比如 w1和 w2)的比值也会很大。

归一化使损失函数更加对称/球形。这些更容易优化,因为梯度往往指向全局最小值,您可以采取更大的步骤。

在高层次上,如果你观察规范化/标准化最常用的地方,你会注意到,任何时候在模型建立过程中使用数量级差异,就有必要对输入进行标准化,以确保小数量级的重要输入不会在模型建立过程中失去其重要性。

例如:

√(3-1) ^ 2 + (1000-900) ^ 2≈√(1000-900) ^ 2

在这里,(3-1)对结果几乎没有贡献,因此对应于这些值的输入被模型认为是徒劳的。

考虑以下几点:

  1. 聚类使用欧几里得或其他距离度量。
  2. 神经网络使用优化算法来最小化成本函数(例如-MSE)。

距离度量(聚类)和代价函数(NN)都在某种程度上使用了幅度差,因此标准化保证了幅度差不能控制重要的输入参数,算法也能正常工作。