我对神经网络有点兴趣,并考虑在 python 中使用一个用于比较时域中的各种最小化技术(最快)的轻型项目。
然后我意识到我什至不知道神经网络是否有利于最小化。你怎么看?
我对神经网络有点兴趣,并考虑在 python 中使用一个用于比较时域中的各种最小化技术(最快)的轻型项目。
然后我意识到我什至不知道神经网络是否有利于最小化。你怎么看?
在我看来,这是一个比神经网络更适合遗传算法的问题。神经网络往往需要解决有界问题,需要针对已知数据进行训练等——而遗传算法的工作原理是在不需要训练的情况下为问题找到越来越好的近似解决方案。
反向传播通过最小化错误来工作。但是,您可以真正最小化您想要的任何东西。因此,您可以使用类似反向支持的更新规则来找到最小化输出的人工神经网络输入。
这是一个大问题,很抱歉简短的回答。我还应该补充一点,与更成熟的方法相比,我建议的方法听起来效率很低,并且只能找到局部最小值。
反向传播神经网络的训练过程通过最小化最佳结果的误差来工作。但是让一个训练有素的神经网络找到一个未知函数的最小值将非常困难。
如果您将问题限制在特定的函数类,它可以工作,而且速度也很快。神经网络擅长发现模式,如果有的话。
虽然这对于这个问题的作者来说有点太晚了。也许有人想测试一些优化算法,当他读到这个......
如果您正在使用机器学习中的回归(NN、SVM、多元线性回归、K 最近邻)并且想要最小化(最大化)回归函数,实际上这是可能的,但此类算法的效率取决于平滑度,(您正在搜索的区域的步长...等)。
为了构建这样的“机器学习回归”,您可以使用scikit-learn。您必须训练和验证您的 MLR支持向量回归。(“适合”方法)
SVR.fit(Sm_Data_X,Sm_Data_y)
然后,您必须定义一个函数,该函数返回对数组“x”的回归预测。
def fun(x):
return SVR.predict(x)
您可以使用scipiy.optimize.minimize进行优化。请参阅文档链接后面的示例。
他们的目的非常糟糕。神经网络的一大问题是它们陷入局部最小值。您可能想研究支持向量机。
实际上,您可以使用 NN 来找到函数最小值,但它与Erik提到的遗传算法结合使用效果最好。
基本上 NN 会找到与函数局部最小值或最大值相对应的解决方案,但这样做非常精确(评论Tetha 的答案,说明 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
当你达到零输出时,你知道输入值是函数的最小值。
训练需要的时间更少,清零需要很长时间。
神经网络是分类器。它们将两类数据元素分开。他们(通常)通过预先分类的数据元素来学习这种分离。因此,我说:不,除非你做一个超越破损的大伸展。