【问题标题】:Neural network online training神经网络在线培训
【发布时间】:2018-05-10 04:54:00
【问题描述】:

我想实现一个简单的前馈神经网络来近似函数 y=f(x)=ax^2 其中 a 是一些常数,而 x 是输入值。

NN 有一个输入节点一个具有 1-n 个节点的隐藏层一个输出节点。例如,我输入值 2.0 -> NN 产生 4.0,然后我再次输入 3.0 -> NN 产生 9.0 或接近它等等。

如果我理解“在线训练”,则训练数据是逐个输入的 - 这意味着我输入值 2.0 -> 我使用梯度体面的值迭代 100 次,然后传递值 3.0,然后再迭代另一个100 次。

但是,当我尝试使用我的实验/学习 NN 执行此操作时 - 我输入值 2.0 -> 错误变得非常小 -> 输出非常接近 4.0。

现在,如果我想预测输入 3.0 -> NN 会产生 4.36 或其他东西,而不是 9.0。所以 NN 只是学习最后的训练值。

如何使用在线训练来获得一个神经网络,该神经网络在 [-d, d] 范围内逼近所需函数?我错过了什么?

我喜欢在线培训的原因是最终我想输入一个时间序列 - 并将该序列映射到所需的函数。这不是重点,但万一有人想知道。

任何建议将不胜感激。

更多信息 - 我使用 Sigmoid 函数激活隐藏层,使用线性函数激活输出层。

【问题讨论】:

    标签: machine-learning neural-network


    【解决方案1】:

    我喜欢在线培训的原因是最终我想输入一个时间序列 - 并将该序列映射到所需的函数。

    Recurrent Neural Networks (RNN) 是最先进的时间序列建模技术。这是因为它们可以接受任意长度的输入,还可以使用内部状态来模拟序列随时间变化的行为。

    为时间序列训练前馈神经网络是一种旧方法,通常效果不佳。它们需要固定大小的输入,因此您必须选择固定大小的滑动时间窗口,而且它们也不保留状态,因此很难学习时变函数。

    除了一些非常模糊的参考资料外,我几乎找不到关于使用随机梯度下降来模拟非平稳行为的前馈神经网络的“在线训练”。我认为这除了允许您在一次获取一个数据流时进行实时训练之外没有任何好处。我认为它实际上不会帮助您模拟时间相关的行为。

    我可以在有关神经网络在线学习的文献中找到的大多数较旧的方法都使用混合方法与神经网络和其他一些有助于捕获时间依赖性的方法。同样,这些都应该不如 RNN,更不用说在实践中更难实现了。

    此外,我认为您没有正确实施在线培训。它应该是小批量大小为 1 的随机梯度下降。因此,每个训练时期的每个训练示例只运行一次梯度下降迭代。由于您在继续下一个训练示例之前运行了 100 次迭代,因此相对于该单个示例,您的误差梯度下降得太远,导致对单个数据点的严重过度拟合。这就是为什么您在下一次输入时得到糟糕结果的原因。我不认为这是一种合理的训练方法,我也不认为它适用于时间序列。

    你没有提到你的激活是什么或你的损失函数是什么,所以我无法评论这些是否适合这项任务。

    另外,我不认为学习y=ax^2 是时间序列预测的一个很好的类比。这是一个静态函数,无论输入的索引或先前输入的值如何,它总是为给定的输入提供相同的输出。

    【讨论】:

    • 这就是它... 因此,您在每个训练时期只对每个训练示例运行一次梯度下降迭代。由于您在继续下一个训练示例之前运行了 100 次迭代,因此相对于该单个示例,您的误差梯度下降得太远,导致对单个数据点的严重过度拟合。这就是为什么您在下一次输入时得到糟糕结果的原因。我不认为这是一种合理的训练方法,我也不认为它适用于时间序列。 但是,我不同意你的观点,即近似 y = ax^2 属于时间序列(RNN)。
    • 我不想这么说。他说他想用同样的方法进行时间序列预测。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多