0

这里有熟悉回声状态网络的人吗?我在 C# 中创建了一个回声状态网络。目的只是将输入分为好和不好的输入。输入是一个双精度数数组。我知道对于这个分类,回声状态网络可能不是最好的选择,但我必须用这种方法来做。

我的问题是,在训练网络之后,它无法泛化。当我用外国数据(不是教学输入)运行网络时,我只能得到大约 50-60% 的好结果。

更多细节:我的回声状态网络必须像函数逼近器一样工作。该函数的输入是一个包含 17 个双精度值的数组,输出是 0 或 1(我必须将输入分类为坏输入或好输入)。

所以我创建了一个网络。它包含一个具有 17 个神经元的输入层、一个存储层,其神经元数量是可调的,以及包含 1 个神经元的输出层,输出需要 0 或 1。在一个更简单的示例中,不使用输出反馈(我尝试使用输出反馈也一样,但没有任何改变)。

储层的内矩阵也是可调的。我在两个双精度值(最小值,最大值)之间生成权重,稀疏度可调节。如果值太大,它会使矩阵的光谱半径低于 1。储层可以具有 sigmoid 和 tanh 激活函数。

输入层以随机值完全连接到存储层。因此,在训练状态下,我使用训练数据计算内部 X(n) 储存器激活,将它们收集到矩阵 rowvise 中。使用所需的输出数据矩阵(现在是具有 1 或 0 个值的向量),我计算输出权重(从水库到输出)。水库完全连接到输出。如果有人使用回声状态网络现在我在说什么。我为此使用了伪逆方法。

问题是,我如何调整网络以便更好地泛化?使用外国数据集(不是训练数据集)达到超过 50-60% 的期望输出。如果我用训练数据集再次运行网络,它会给出非常好的结果,80-90%,但我想要的是更好地泛化。

我希望有人对回声状态网络也有这个问题。

4

3 回答 3

2

如果我理解正确,你有一组已知的、分类的数据,你可以训练这些数据,然后你有一些未知的数据,你随后会对其进行分类。你发现训练后,你可以很好地重新分类你的已知数据,但不能很好地对未知数据进行分类。我相信这被称为过度拟合——您可能想要考虑对网络不那么严格,减少节点数量,和/或基于隐藏数据集进行训练。

人们这样做的方式是,他们有一个训练集 A、一个验证集 B 和一个测试集 C。您知道 A 和 B 的正确分类,但不知道 C(因为您将已知数据分为 A 和 B,和 C 是您希望网络为您找到的值)。训练时,您只显示网络 A,但在每次迭代中,为了计算成功,您同时使用 A 和 B。因此,在训练时,网络试图通过仅查看 A 来理解 A 和 B 中存在的关系。因为它看不到 B 中的实际输入和输出值,而只知道它的当前状态是否准确地描述了 B,这有助于减少过度拟合。

通常人们似乎将 4/5 的数据拆分为 A,将 1/5 的数据拆分为 B,但当然您可以尝试不同的比率。

最后,你完成了训练,看看网络会对你的未知集合 C 说什么。

对不起,非常笼统和基本的答案,但也许它会帮助更好地描述问题。

于 2012-05-05T12:14:33.127 回答
1

就像这里的其他答案所建议的那样,这是一个典型的过度拟合案例:您的模型在您的训练数据上表现良好,但它不能很好地推广到新的测试数据。

Hugh 的回答有一个很好的建议,那就是减少模型中的参数数量(即通过缩小水库的大小),但我不确定它是否对 ESN 有效,因为问题的复杂性ESN 可以解决的增长与水库大小的对数成正比。减小模型的大小实际上可能会使模型无法正常工作,尽管这可能是避免此类模型过度拟合所必需的。

Superbest 的解决方案是,一旦验证集的性能停止提高,就使用验证集停止训练,这种技术称为提前停止。但是,正如您所指出的,由于您使用离线回归来计算 ESN 的输出权重,因此您无法使用验证集来确定何时停止更新模型参数——提前停止仅适用于在线训练算法。

但是,您可以通过另一种方式使用验证集:正则化回归系数!以下是它的工作原理:

  • 将您的训练数据分成“训练”部分(通常是您可用数据的 80-90%)和“验证”部分(剩余的 10-20%)。
  • 当您计算回归时,不要使用普通线性回归,而是使用正则化技术,如岭回归套索回归弹性网络回归。仅使用数据集的“训练”部分来计算回归。
  • 所有这些正则化回归技术都有一个或多个“超参数”,可以平衡模型拟合与其复杂性。“验证”数据集用于设置这些参数值:您可以使用网格搜索、进化方法或任何其他超参数优化技术来执行此操作。一般来说,这些方法通过选择超参数的值、使用“训练”数据集拟合模型以及测量拟合模型在“验证”数据集上的性能来工作。重复 N 次并选择在“验证”集上表现最佳的模型。

您可以在http://en.wikipedia.org/wiki/Least_squares#Regularized_versions了解更多关于正则化和回归的信息,或者在机器学习或统计教科书中查找。

此外,请在http://en.wikipedia.org/wiki/Cross-validation_(statistics)阅读有关交叉验证技术的更多信息。

于 2015-01-27T20:42:36.397 回答
1

如果您的网络没有泛化,则意味着它过度拟合。

为了减少神经网络上的过拟合,有两种方法:

  • 获取更多训练数据
  • 减少神经元的数量

您还可以考虑为网络提供的功能。例如,如果它是一个每周重复的时间序列,那么一个特征就是“星期几”或“星期几”或“星期几”之类的东西。

神经网络需要大量数据。很多很多的例子。数千。如果你没有数千个,你应该选择一个只有少数神经元的网络,或者使用其他的东西,比如回归,它的参数更少,因此不太容易过度拟合。

于 2012-10-30T11:28:54.653 回答