为什么我们必须规范化人工神经网络的输入?

时间:2011-01-12 22:16:11

标签: normalization neural-network

这是一个关于神经网络理论的主要问题:

为什么我们必须规范化神经网络的输入?

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

如果数据未规范化会怎样?

10 个答案:

答案 0 :(得分:83)

很好地解释了here

  

如果输入变量是线性组合的,就像在MLP中一样,那么它就是   至少在理论上,很少有必要对输入进行标准化。该   原因是输入向量的任何重新缩放都可以有效地撤消   改变相应的重量和偏差,让你准确   与之前相同的输出。但是,有各种实用的   标准化输入的原因可以使培训更快,减少   陷入局部最优的可能性。此外,体重衰减和贝叶斯   使用标准化输入可以更方便地进行估算。

答案 1 :(得分:47)

在神经网络中,不仅要对数据进行标准化,还要对其进行扩展,这是一个好主意。这旨在更快地接近错误表面的全局最小值。见下图: error surface before and after normalization

error surface before and after scaling

图片来自coursera course神经网络。 course的作者是杰弗里·辛顿。

答案 2 :(得分:18)

NN的某些输入可能没有“自然定义”的值范围。例如,平均值可能缓慢,但随着时间的推移不断增加(例如数据库中的多个记录)。

在这种情况下,将此原始值提供给您的网络将无法正常工作。您将使用范围较低部分的值来教您的网络,而实际输入将来自此范围的较高部分(并且很可能在网络已学会使用的范围之上)。

您应该规范化此值。例如,您可以告诉网络自上一次输入以来值的变化程度。这种增量通常可以在特定范围内以高概率定义,这使其成为网络的良好输入。

答案 3 :(得分:11)

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

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

答案 4 :(得分:8)

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

原因1 :如果Feature中的Dataset在规模上比其他人大,那么这个大比例尺的功能就占主导地位,因此,神经网络将不准确。

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

原因2 :神经网络的前传播涉及具有输入特征的权重的点积。因此,如果值很高(对于图像和非图像数据),则输出的计算会占用大量的计算时间以及内存。反向传播期间也是如此。因此,如果输入未标准化,则模型收敛会很慢。

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

下面提到的是规范化非常重要的实例:

  1. K-均值
  2. 最近的邻居
  3. 主成分分析(PCA)
  4. 梯度下降

答案 5 :(得分:4)

当使用非归一化的输入功能时,损失函数可能会具有非常长的谷值。当使用梯度下降进行优化时,这会成为一个问题,因为相对于某些参数而言,梯度会很陡。当您在陡峭的斜坡之间跳动时,这会导致搜索空间出现较大的振荡。作为补偿,您必须以较低的学习率稳定优化。

考虑特征x1和x2,其中范围分别从0到1和0到1百万。事实证明,相应参数(例如w1和w2)的比率也会很大。

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

答案 6 :(得分:1)

需要归一化的原因是因为如果你看一下自适应步骤如何在函数域中的某个位置进行,你只需简单地将问题传递到相同的步骤,该步骤由一些大的值转换成一些在域中的方向,然后你得到不同的结果。它归结为使线性片适应数据点的问题。这件作品应该在没有转动的情况下移动多少,以及它应该响应那一个训练点转动多少?在域的不同部分中改变适应程序是没有意义的!因此需要进行标准化以减少训练结果的差异。我还没有写完这篇文章,但你可以看一下简单的线性函数的数学,以及它是如何在两个不同的地方通过一个训练点训练的。在某些地方可能已经纠正了这个问题,但我对它们并不熟悉。在ALN中,问题已经得到纠正,如果你写信给wwarmstrong,我可以给你发一篇论文AT shaw.ca

答案 7 :(得分:0)

我相信答案取决于情景。

将NN(神经网络)视为运算符F,以便 F(输入)=输出。如果此关系是线性的,以便 F(A *输入)= A *输出,那么您可以选择将输入/输出保持原始形式的非标准化,或者将两者标准化以消除A.显然,这种线性假设在分类任务中被违反,或者几乎任何输出概率的任务都被违反,其中 F(A *输入)= 1 *输出

在实践中,规范化允许不适合的网络适合,这对实验者/程序员来说至关重要。然而,归一化的精确影响不仅取决于网络架构/算法,还取决于输入和输出的统计先验。

更重要的是,NN通常用于以黑盒方式解决非常困难的问题,这意味着潜在的问题可能具有非常差的统计公式,使得很难评估规范化的影响,从而产生技术优势(变得适合)控制其对统计数据的影响。

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

答案 8 :(得分:0)

在高层次上,如果您观察最常使用归一化/标准化的地方,您会注意到,无论何时在模型构建过程中使用量级差异,都必须对输入进行标准化以确保小幅度的重要输入不会在模型构建过程中失去其重要性。

<块引用>

示例:

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

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

考虑以下事项:

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

距离度量(聚类)和成本函数(NN)都以某种方式使用幅度差异,因此标准化确保幅度差异不会控制重要的输入参数,并且算法按预期工作。

答案 9 :(得分:-9)

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