2012-05-04 35 views
0

这里有谁熟悉回声状态网络?我在c#中创建了一个回声状态网络。目的只是将输入分为GOOD和NOT GOOD。输入是一个双数字数组。我知道,也许这种分类回声状态网络不是最好的选择,但我必须用这种方法来做。回声状态神经网络?

我的问题是,培训网络后,它不能一概而论。当我用外国数据(而不是教学输入)运行网络时,我只得到50-60%的好结果。

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

所以我创建了一个网络。它包含一个具有17个神经元的输入层,一个储层图层,该层的neron数量是可调的,输出层包含1个神经元,用于输出需要0或1.在一个更简单的例子中,没有使用输出反馈(我试图使用输出反馈也没有改变)。

储层的内部矩阵也是可调的。我使用可调整的稀疏比率在两个双精度值(最小值,最大值)之间生成权重。如果值太大,则将矩阵规范为具有低于1的谱半径。储层可以具有S形和tanh激活函数。

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

问题是,我如何调整网络,以便推广更好?使用外部数据集(不是训练数据集)打击超过50-60%的期望输出。如果我再次使用训练数据集运行网络,它可以提供非常好的结果,80-90%,但是我想要更好地推广。

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

+0

“如果有人可以,请回复,以便我可以更彻底地解释我的问题。”你如何更彻底地解释,然后我们回应? – Annabelle

回答

2

如果我理解正确,你有一套已知的,保密的数据,你训练,然后你有一些未知的数据,你随后分类。你发现在训练之后,你可以很好地重新分类你的已知数据,但是对未知数据不能很好地完成。我相信这就是所谓的overfitting--您可能想要考虑对网络不太严格,减少节点数量和/或基于隐藏数据集进行培训。

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

通常人们似乎将4/5的数据拆分成A和1/5的数据到B中,但是当然你可以尝试不同的比例。

最后,你完成了训练,并看看网络会对你未知的设置C说些什么。

对不起,一般的基本答案,但也许它会帮助更好地描述问题。

+0

感谢您的回答,但我不知道我的理解是否正确。所以你说,在我用A训练网络并计算出水库输出连接后,用A和B运行网络,并从中计算出成功率。这样,内部油藏状态X(n)将以对数据集C“良好”的方式改变? 我会尽力谢谢你! :)希望它会有所帮助。 –

+0

不客气。也许这将是有益的:http://stackoverflow.com/questions/2976452/whats-the-diference-between-train-validation-and-test-set-in-neural-networks – Superbest

+0

嗯,问题是我不使用反向传播。我的方法是diffrenet.I使用离线算法来计算输出权重。 –

0

如果你的网络没有泛化,那就意味着它过度配合。

为了减少过度拟合一个神经网络,有两种方式:

  • 得到更多的训练数据
  • 减少神经元

你也可能会认为你是特征的数量喂养网络。例如,如果是每周重复的时间序列,那么其中一个特征就像“星期几”或“一周中的小时”或“一周中的分钟”。

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

0

和其他答案一样,这里有一个经典的过度拟合的例子:你的模型在你的训练数据上表现良好,但是它不能很好地推广到新的测试数据。

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

Superbest的解决方案是在验证集的性能停止改进时立即使用验证集来停止培训,该技术称为early stopping。但是,正如您所指出的那样,因为您使用离线回归来计算ESN的输出权重,所以您不能使用验证集来确定何时停止更新模型参数 - 早期停止仅适用于在线训练算法。

但是,您可以以另一种方式使用验证集:调整回归的系数!以下是它的工作方式:

  • 将您的培训数据分为“培训”部分(通常为可用数据的80-90%)和“验证”部分(剩下的10-20%)。
  • 当您计算回归而不是使用vanilla线性回归时,请使用正则化技术,如ridge regression,lasso regressionelastic net regression。只使用数据集的“训练”部分来计算回归。
  • 所有这些正则化回归技术都有一个或多个“超参数”来平衡适合其复杂性的模型。 “验证”数据集用于设置这些参数值:您可以使用grid search,演化方法或任何其他超参数优化技术来执行此操作。一般来说,这些方法通过选择超参数的值,使用“训练”数据集拟合模型,并在“验证”数据集上测量拟合模型的性能来工作。重复N次并选择在“验证”集合上执行得最好的模型。

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

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