可以使用神经网络来找到最小的函数(a)吗?

时间:2009-03-16 21:53:31

标签: python artificial-intelligence neural-network minimization

我曾对神经网络感兴趣,并考虑在python中使用一个轻量级项目,比较时域中的各种最小化技术(这是最快的)。

然后我意识到我甚至不知道NN是否适合最小化。你觉得怎么样?

8 个答案:

答案 0 :(得分:5)

在我看来,这是一个比神经网络更适合genetic algorithms的问题。神经网络往往需要一个有限的问题来解决,需要针对已知数据进行训练等 - 而遗传算法通过在不需要培训的情况下找到问题的更好和更好的近似解决方案来工作。

答案 1 :(得分:3)

通过最小化错误来实现反向传播。但是,你可以真正地减少你想要的任何东西。因此,您可以使用类似back-prop的更新规则来查找最小化输出的人工神经网络输入。

这是一个很大的问题,对于简短的回答感到抱歉。我还应该补充一点,与更成熟的方法相比,我建议的方法听起来效率很低,而且只能找到局部最小值。

答案 2 :(得分:1)

反向传播神经网络的训练过程通过最小化来自最优结果的误差来工作。但是,让训练有素的神经网络找到最小的未知函数将是非常困难的。

如果将问题限制在特定的功能类中,它可以工作,并且也很快。神经网络很擅长找到模式,如果有的话。

答案 3 :(得分:0)

他们的目的非常糟糕;神经网络的一个重大问题是它们陷入局部最小值。您可能想要查看支持向量机。

答案 4 :(得分:0)

实际上你可以使用NN找到最小函数,但它最好与Erik提到的遗传算法结合使用。

基本上NN帐篷找到对应于函数局部最小值或最大值但是这样做的解决方案非常精确(评论Tetha回答说明NN是分类器,如果说它是数据输入就可以使用最低与否)

相比之下,遗传算法倾向于从可能的整个输入范围中找到更普遍的解决方案,但随后会给你最近的结果。

解决方案是结合两个世界

  1. 从遗传算法中获取近似结果
  2. 使用该结果可以使用NN找到更准确的答案

答案 5 :(得分:0)

您可以教NN近似函数。如果函数是可微分的,或者你的NN有多个隐藏层,你可以教它给出一个函数的导数。

示例:

You can train  a 1 input 1 output NN to give output=sin(input)

You can train it also give output=cos(input) which is derivative of sin()

You get a minima/maxima of sin when you equate cos to zero.

Scan for zero output while giving many values from input. 0=cos() -> minima of sin

当您达到零输出时,您知道输入值是函数的最小值。

培训需要更少,扫描零需要很长时间。

答案 6 :(得分:0)

虽然对于这个问题的作者来说这有点太迟了。 也许有人想要测试一些优化算法,当他读到这个......

如果您正在使用机器学习中的回归(NN,SVM,多元线性回归,K最近邻)并且希望最小化(最大化)回归函数,实际上这是可能的,但此类算法的效率取决于您正在搜索的区域的平滑度,(步长等)。

为了构建这样的“机器学习回归”,您可以使用scikit- learn。您必须训练并验证您的MLR Support Vector Regression。 (“适合”方法)

SVR.fit(Sm_Data_X,Sm_Data_y)

然后你必须定义一个函数,它返回一个数组“x”的回归预测。

def fun(x):
    return SVR.predict(x)

您可以使用scipiy.optimize.minimize进行优化。请参阅doc-links之后的示例。

答案 7 :(得分:-2)

神经网络是分类器。它们将两类数据元素分开。他们通过预分类数据元素(通常)学习这种分离。因此,我说:不,除非你做了一个超越破损的重大延伸。