为什么我们必须规范人工neural network的input?

这是关于neural network理论的一个主要问题:

为什么我们必须规范neural network的input?

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

如果数据没有正常化会发生什么?

这里解释得很好。

如果inputvariables是线性组合的,就像在一个MLP中一样,那么至less在理论上对input进行标准化是很less必要的。 原因在于,通过改变相应的权重和偏差,可以有效地撤销input向量的任何重新缩放,使您获得与以前完全相同的输出。 然而,为什么标准化input可以使训练更快并减less陷入局部最优的机会有多种实际的原因。 而且,使用标准化input可以更加方便地进行权重衰减和贝叶斯估计。

在neural network中,不仅要对数据进行归一化,还要对其进行缩放。 这是为了更快地接近误差表面的全局最小值。 看下面的图片: 标准化前后的误差曲面

缩放之前和之后的误差表面

NN的某些input可能没有“自然定义”的值范围。 例如,平均值可能是缓慢的,但随着时间的推移会不断增加(例如数据库中的一些logging)。

在这种情况下,将这个原始价值投入到您的networking将不会工作得很好。 您将在范围较低的部分教授您的networking,而实际的input将来自此范围的较高部分(很可能超出范围,networking已经学会了使用)。

你应该规范化这个值。 例如,您可以通过自上次input后值的变化来告诉networking。 这个增量通常可以在一个特定的范围内以很高的概率来定义,这对于networking来说是一个很好的input。

从外部看neural network,它只是一个函数,需要一些论证,并产生一个结果。 与所有function一样,它有一个域(即一组合法的论点)。 你必须规范你想传递给neural network的值,以确保它在域中。 与所有函数一样,如果参数不在域中,结果也不能保证是合适的。

neural network在域外的参数的确切行为取决于neural network的实现。 但总的来说,如果参数不在域内,结果是无用的。

需要归一化的原因是因为如果你看看自适应步骤是如何在函数域的某个地方进行的,而你只是简单地把问题转移到相同步骤的等价物上,域,那么你会得到不同的结果。 归结为将线性片段适配到数据点的问题。 这件作品应该在不转弯的情况下移动多less?为了响应这个训练点,它应该转多less? 在域的不同部分改变适应程序是没有意义的! 所以需要规范化来减less训练结果的差异。 我没有写这个,但你可以看一个简单的线性函数的math,以及如何在两个不同的地方训练一个训练点。 这个问题在一些地方可能已经得到纠正,但我不熟悉它们。 在ALN中,问题已经得到纠正,如果你给wwarmstrong AT shaw.ca写信,我可以给你发一篇论文。

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

Interesting Posts