我正在开发一个使用前馈网络的预测应用程序。我遇到的问题是,我想预测的数据大多是趋势数据。因此,我正在尝试开发的模型如下:
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 中的神经网络结构是固定的,所以仅仅扩展参数向量并重写误差函数和梯度公式并不是那么简单。