这里有人熟悉回声状态网络吗?我在c#中创建了一个echo状态网络。目的只是将输入分为GOOD而非GOOD。输入是一个双数组。我知道也许对于这种分类,回声状态网络不是最好的选择,但我必须用这种方法来做。
我的问题是,在训练网络后,它无法概括。当我使用外国数据(而不是教学输入)运行网络时,我得到的结果只有50-60%左右。
更多细节:我的回声状态网络必须像函数逼近器一样工作。函数的输入是一个包含17个双精度值的数组,输出为0或1(我必须将输入分类为错误或良好的输入)。
所以我创建了一个网络。它包含一个带有17个神经元的输入层,一个储存层,神经元数可调,输出层包含1个神经元,输出需要0或1.在一个更简单的例子中,没有使用输出反馈(我尝试使用输出反馈同样,但没有改变。)
储层的内部基质也是可调节的。我在两个双值(最小值,最大值)之间生成权重,并具有可调节的稀疏比率。如果值太大,它将矩阵规范为光谱半径小于1.储层可以具有S形和tanh激活函数。
输入层使用随机值完全连接到储层。因此,在训练状态下,我运行用训练数据计算内部X(n)储存器激活,将它们收集到矩阵行中。使用所需的输出数据矩阵(现在是具有1个0值的向量),我计算输出权重(从库到输出)。水库完全连接到输出。如果有人使用回声状态网络,那么我正在谈论什么。我是伪逆方法。
问题是,我如何调整网络以便更好地推广?使用外部数据集(不是训练数据集)达到超过50-60%的所需输出。如果我再次使用训练数据集运行网络,它会给出非常好的结果,80-90%,但我想要的是更好地推广。
我希望有人在回声状态网络中遇到这个问题。
答案 0 :(得分: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的评论。
对于非常一般和基本的答案感到抱歉,但也许这有助于更好地描述问题。
答案 1 :(得分:1)
如果您的网络没有概括,那意味着它过度拟合。
为了减少神经网络上的过度拟合,有两种方法:
您也可以考虑为网络提供的功能。例如,如果它是一个每周重复的时间序列,那么一个特征就像是“星期几”或“一周中的小时”或“一周中的分钟”。
神经网络需要大量数据。很多很多例子。数千人。如果你没有数千个,你应该选择一个只有少数神经元的网络,或者使用其他东西,比如回归,参数更少,因此不太容易过度拟合。
答案 2 :(得分:1)
与此处提出的其他答案一样,这是过度拟合的典型案例:您的模型在您的训练数据上表现良好,但它并不能很好地概括为新的测试数据。
休的答案有一个很好的建议,即减少模型中的参数数量(即缩小水库的大小),但我不确定它是否对ESN有效,因为ESN可以解决的问题复杂性与储层大小的对数成比例增长。减小模型的大小实际上可能会使模型不能正常工作,但这可能是避免过度拟合此类模型的必要条件。
Superbest的解决方案是使用验证集在验证集上的性能停止改进后立即停止训练,这种技术称为early stopping。但是,正如您所指出的,因为您使用离线回归来计算ESN的输出权重,所以您无法使用验证集来确定何时停止更新模型参数 - 提前停止仅适用于在线培训算法。
但是,您可以以另一种方式使用验证集:规范回归的系数!以下是它的工作原理:
您可以在http://en.wikipedia.org/wiki/Least_squares#Regularized_versions了解有关正则化和回归的更多信息,或者在机器学习或统计教科书中查找。
另外,请在http://en.wikipedia.org/wiki/Cross-validation_(statistics)了解有关交叉验证技术的更多信息。