【发布时间】:2014-08-05 10:15:56
【问题描述】:
我正在开发一个使用前馈网络的预测应用程序。我遇到的问题是,我想预测的数据大多是趋势数据。因此,我正在尝试开发的模型如下:
y_model = f(x) + g(t)
其中x是输入向量,f(x)是神经网络,g(t)是一些随时间变化的趋势函数(即线性、指数)。
最直接的方法是修改误差函数,使其包含趋势:
E=1/2 * sum(y_ideal - y_model)^2 = 1/2 * sum(y_ideal - f(x) - g(t))^2
据我了解,解决方案在理论上非常简单,因为根据模型参数(神经网络权重 + 趋势模型参数)的梯度可以计算为:
grad E = - sum[(y_ideal-y_model)*(grad f + grad g)]
我认为,使用神经网络优化技术来搜索 NN 和趋势,并以与更新神经权重相同的方式更新趋势模型参数,在理论上没有问题。
问题是,我没有管理如何在 Encog 中执行此操作。学习规则很难理解,因为它们被写得越快越好。我也觉得,Encog中的神经网络结构是固定的,所以仅仅扩展参数向量并重写误差函数和梯度公式并不是那么简单。
【问题讨论】:
-
我不知道encog,但你的问题是有时间进去吗?为什么不扩展
x并将时间包含在您的输入中? -
将时间作为输入会给出非常糟糕的结果,因为它基本上是外推,而神经网络在外推数据方面非常糟糕。另一件事是,由于使用了 sigmoid 激活函数,输入必须被限制在某个范围内。
-
好吧,我不太了解 NN 和这些东西,但是如果你 猜
g(t),为什么会这样推断? - 但对不起,我希望你能得到一个好的答案(有趣的东西) -
这是外推,因为您在给定数据的情况下训练模型,即。从时间 t1 到 t2,并想用它来预测时间 t3 > t2。
标签: c# neural-network encog trend