【问题标题】:Fitting the training error of a neural network拟合神经网络的训练误差
【发布时间】:2014-01-02 07:57:48
【问题描述】:

我试图将神经网络的训练误差曲线拟合为训练迭代次数的函数。下图中以红色显示了一个示例。在这里,我已经训练了 3000 次迭代。我感兴趣的是我是否可以找到一个适合前 1000 次(左右)迭代的函数,以合理的准确度推断出 3000 次迭代。

但是,我不知道哪种函数形式最适合我使用。起初我尝试了 f(x)=A+Bexp(-Cx) 形式的指数,它以蓝色显示。显然这不太好。指数消失得太快,然后基本上就变成了常数项。

也许这很困难,因为训练的开始显示错误非常急剧下降,但随后过渡到更渐进的东西以进行更高的迭代。但也许有神经网络训练经验和/或拟合未知函数经验的人可能会有一些想法。我一直在 scipy/numpy 中尝试各种指数形式和多项式拟合,但没有成功。我也改变了拟合中使用的迭代次数(包括丢弃小的迭代次数)。

有什么想法吗?

【问题讨论】:

  • scipy 中的样条方法可能有用,请参阅here
  • 你是在尝试根据前几个步骤来预测训练阶段的误差曲线吗?或者你只是想找到一个公式来描述手头的曲线?在第一种情况下,我怀疑这会奏效。在实际问题上,误差曲线通常根本不那么平滑。此外,每组训练数据和元参数的误差面都不同。对于每组随机初始权重参数,您从该表面上完全不同的区域开始。
  • @schreon :是的,我正在尝试根据前几个步骤(例如,few=[1,1000])预测误差曲线,如果只是近似的话。我不是简单地试图描述整个曲线的公式。我理解你关于为什么神经网络训练甚至不可能实现这一点的论点,并且我自己也担心这一点。我认为在训练后期阶段与误差面相关的特征可能无法从训练早期的这些特征中获知。
  • @gammapoint 如果 x 轴采用对数刻度,绘图会是什么样子?
  • @behzad.nouri ,如果 x 轴具有对数刻度,则如下所示 - tinypic.com/r/2rzub0z/5

标签: python numpy machine-learning scipy curve-fitting


【解决方案1】:

查看此页面:http://www.astroml.org/sklearn_tutorial/practical.html

它描述的对您的情况有用的是诊断您的算法在您的数据集上看起来是高偏差还是高方差,并为这两种情况提供具体的方向。

【讨论】:

    【解决方案2】:

    我认为指数拟合可能有效。在你的f(x)=A+B*exp(-C*x),我选择A = 0.005B = 0.045,和C = 1/250,我会得到,

    这只是关于参数调整。然而,我试图了解您想要适应学习曲线的动机。我认为插值方法包括“外推”选项,您可以使用它来预测更多时期后的错误。如果你想精确地学习曲线,你可以使用另一个带有线性隐藏层和输出的神经网络再次“学习”曲线,虽然我没有尝试它是否有效。

    【讨论】:

    • 拟合学习曲线的动机可能有些独特(也许有充分的理由)。我正在尝试对神经网络输入进行优化程序(我如何构建我的输入/特征)。所以我正在使用这些参数,但我希望能够了解如果我继续运行大量迭代,NN 训练的长期行为会是什么。在我的优化步骤中完全训练每个网络会很昂贵,我正在努力降低成本。
    • 谢谢 gammapoint。我建议您在训练曲线中选择一些点,也许只有 2-3 个,以获得我在回复中显示的 A、B、C 的粗略范围。那么拟合可能会容易得多。使用另一个 NN 来拟合也可能是可行的
    • 谢谢@lennon310。我在少量数据点上尝试了一些拟合并取得了一些进展(参见:i42.tinypic.com/zmm5aw.png)。实际上,我对初始拟合的部分问题是我对指数值的初始猜测太大,导致 Scipy 在拟合中出现问题)。通过按照您的建议提供较小的值,它更适合。尽管如此,它仍然不完美,因为我的函数的长期行为在指数行为之后更加线性。我们拟合的函数在指数衰减后当然是平坦的。
    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 2016-07-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2010-11-20
    • 2019-09-15
    相关资源
    最近更新 更多