用于回归的 Pybrain 循环网络 - 如何正确启动经过训练的网络进行预测

Pybrain recurrent network for regression - how to properly kickstart trained network for predictions

我正在尝试使用递归神经网络解决回归任务(我使用 pybrain 来构建它)。在我的网络适合后,我想用它来进行预测。但是循环网络的预测受其先前预测的影响(而后者又受其之前的预测等影响)。

问题是 - 一旦网络被训练并且我想用它对数据集进行预测,如何正确启动预测过程。如果我只是在数据集中的第一个示例上调用 .activate() 进行预测,这意味着循环连接会将 0 传递给网络,并且它将以不希望的方式影响后续预测。有没有办法强制训练有素的循环网络认为先前的激活结果具有某种特殊价值?如果是,这里哪个值最好(可能是可能的激活输出值的平均值或类似的值?)

更新。好的,由于一天之内没有人对如何使用 pybrain 中的循环网络执行此操作有任何想法,所以让我稍微改变一下公式以忘记 pybrain。假设我构建了一个用于回归的 pybrain 网络(例如,预测股票价格)。网络将与具有 10 个特征的数据集一起使用。我在数据集中添加了一个附加功能,并用数据集中的先前价格填充它。因此,我复制了一个循环网络(附加输入神经元复制了循环连接)。问题是:

1) 在训练数据集中,我用以前的价格填充了这个附加特征。但是如何处理训练数据集中的第一条记录(我不知道以前的价格)。应该保留它为 0 吗?这应该是个坏主意,之前的价格不为零。我应该在训练数据集中使用价格平均值吗?还有其他建议吗? 2) 同样,与 #1 相同的问题,但 运行ning 针对测试数据集训练有素的网络。当 运行 将我的网络与测试数据集进行对比时,我应该始终选择它的预测并将结果放入这个新的第 11 个输入神经元,然后再进行下一次预测。但同样,当我需要 运行 数据集中的第一个预测时该怎么办(因为我不知道之前的价格)?

这根本不是我对循环网络的理解。

当您最初创建循环网络时,循环连接(比如中间层到中间层)将被随机化,就像任何其他连接一样。这是他们的起始值。每次激活循环网络时,您都会改变这些连接,因此您的输出也会改变。

继续这个逻辑,如果你写了一些代码来训练一个循环网络并将它保存到一个文件中,你就会在那个文件中有一个准备好处理你的真实数据的循环网络,尽管第一次调用会包含您在训练期间最后一次激活的反复反馈。

您要做的是确保在您希望保持其状态时随时重新保存循环网络。对于简单的 FFN,这不是问题,因为您只在训练期间更改状态,但对于循环网络,您需要在任何激活后保持状态,因为循环权重将更新。

我不认为循环网络会因为循环连接的初始值而中毒;我当然不会相信第一次调用,但考虑到它们是为在任何情况下都不应该成为问题的序列而设计的。

关于你更新的问题,我完全不相信任意添加单个输入节点会模拟这个。事实上,我怀疑你绝对会破坏网络的预测能力。在您的示例中,从 10 个输入节点开始,假设您有 20 个中间节点,只需添加一个额外的输入节点,您就会生成额外的 20 个网络连接,这些连接最初是随机的。每增加一个点都会使这种变化更加复杂,在 10 个额外的输入节点之后,您将拥有与受过训练一样多的随机连接。

我认为这行不通,我当然不相信它会以您认为的方式模拟循环学习。