4

我编写了一个简单的循环神经网络(7 个神经元,每个神经元最初都连接到所有神经元)并使用遗传算法对其进行训练,以学习“复杂”的非线性函数,如 1/(1+x^2)。作为训练集,我使用了 [-5,5] 范围内的 20 个值(我尝试使用超过 20 个但结果并没有显着变化)。

网络可以很好地学习这个范围,当给出这个范围内的其他点的例子时,它可以预测函数的值。但是,它无法正确推断和预测 [-5,5] 范围之外的函数值。造成这种情况的原因是什么?我可以做些什么来提高它的推断能力?

谢谢!

4

3 回答 3

20

神经网络不是外推方法(无论是否循环),这完全超出了它们的能力。它们用于在提供的数据上拟合函数,它们可以完全自由地在填充有训练点的子空间之外构建模型。因此,在非常严格的意义上,人们应该将它们视为一种插值方法。

为了清楚起见,神经网络应该能够在训练样本跨越的子空间内泛化函数,但不能在训练样本之外泛化 来源 www.vias.org/tmdatanaleng/cc_ann_extrapolation.html

神经网络仅在与训练样本一致的意义上进行训练,而外推则完全不同。来自“H.Lohninger: Teach/Me Data Analysis, Springer-Verlag, Berlin-New York-Tokyo, 1999. ISBN 3-540-14743-8”的简单示例显示了 NN 在这种情况下的行为方式 来源 www.vias.org/tmdatanaleng/cc_ann_extrapolation.html

所有这些网络都与训练数据一致,但可以在这个子空间之外做任何事情

您应该重新考虑问题的表述,如果它可以表示为回归或分类问题,那么您可以使用 NN,否则您应该考虑一些完全不同的方法。

唯一可以以某种方式“纠正”在训练集之外发生的事情是:

  • 在所需的子空间中添加人工训练点(但这只会增加训练集,并且再次 - 在这个新集之外,网络的行为是“随机的”)
  • 添加强正则化,这将迫使网络创建非常简单的模型,但模型的复杂性并不能保证任何外推强度,因为完全相同复杂性的两个模型可能在 -/+ 无穷大中具有完全不同的限制。

结合以上两个步骤可以帮助构建在某种程度上“外推”的模型,但是,如前所述,这不是神经网络的目的

于 2013-08-19T09:42:44.630 回答
2

据我所知,这仅适用于具有echo属性的网络。请参阅schopedia.org 上的Echo State Networks 。

这些网络专为任意信号学习而设计,并且能够记住它们的行为。 在此处输入图像描述

你也可以看看这个教程

于 2014-02-17T15:05:18.427 回答
0

您的帖子的性质表明,您所说的“外推”将更准确地定义为“序列识别和复制”。训练网络识别有或没有时间序列 (dt) 的数据序列几乎是循环神经网络 (RNN) 的目的。

您帖子中显示的训练函数的输出限制由 0 和 1(或 -1,因为 x 在该函数的上下文中实际上是 abs(x))控制。因此,首先要确定您的输入层可以轻松区分负输入和正输入(如果必须)。

其次,神经元的数量并不像它们如何分层和互连那么重要。7 个中有多少个用于序列输入?使用的是什么类型的网络以及它是如何配置的?网络反馈将揭示比率、比例、关系等,并帮助调整网络权重调整以匹配序列。根据用于创建 RNN 的网络类型,反馈也可以采用前馈的形式。

为指数衰减函数生成一个“可观察”网络:1/(1+x^2),应该是一个体面的练习,可以让你在 RNN 上有所收获。“可观察”,意味着网络能够为任何输入值产生结果,即使其训练数据(远)小于所有可能的输入。我只能假设这是您的实际目标,而不是“外推”。

于 2014-04-04T23:41:43.687 回答