如何配置Stanford QNMinimizer以获得与scipy.optimize.minimize L-BFGS-B类似的结果

时间:2015-06-21 14:22:53

标签: java optimization machine-learning scipy stanford-nlp

我想从Stanford Core NLP Lib配置QN-Minimizer,以获得与scipy优化L-BFGS-B实现或获得适合大多数情况的标准L-BFSG配置几乎相似的优化结果。我将标准参数设置如下:

我要复制的python示例:

scipy.optimize.minimize(neuralNetworkCost, input_theta, method = 'L-BFGS-B', jac = True)

我尝试在Java中做同样的事情:

QNMinimizer qn = new QNMinimizer(10,true) ;
qn.terminateOnMaxItr(batch_iterations);
//qn.setM(10);
output = qn.minimize(neuralNetworkCost, 1e-5, input,15000);

我需要的是一个坚固而通用的L-BFSG配置,适合解决大多数问题。

我也不确定,如果我需要为标准L-BFGS配置设置其中一些参数:

useAveImprovement = ?;
useRelativeNorm = ?;
useNumericalZero = ?;
useEvalImprovement = ?; 

感谢您的帮助,我是该领域的新成员。

资讯资源: Stanford Core NLP QNMinimizer: http://nlp.stanford.edu/nlp/javadoc/javanlp-3.5.2/edu/stanford/nlp/optimization/QNMinimizer.html#setM-int- https://github.com/stanfordnlp/CoreNLP/blob/master/src/edu/stanford/nlp/optimization/QNMinimizer.java

Scipy优化L-BFGS-B: http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.fmin_l_bfgs_b.html

提前致谢!

1 个答案:

答案 0 :(得分:2)

你所拥有的应该没问题。 (你真的遇到过任何问题吗?)

在最大迭代次数和最大函数评估中设置终止可能有点过分,因此您可能省略qn.minimize()的最后一个参数,但是从文档中可以看出scipy确实使用了默认值为15000的两个参数。 / p>

通常,使用robustOptions(使用true的第二个参数)应该给出一个可靠的最小化器,类似于scipy的pgtol收敛标准。其他选项适用于特殊情况或只是试验它们的工作方式。