我正在尝试使用Stanford NLP库中的QNMinimizer,我遇到了使qn.minimize正常运行所需的参数出现问题。
QNMinimzer qn = new QNMinimizer(10, true)
qn.minimize(null, 1e-5, new double[] {0,0,0}, 400)
我需要将一个diffFunction类型的对象放在“null”中,但不确定如何创建/实现一个。我有一个使用梯度下降的方法,并希望将其合并到diffFunction对象中。
答案 0 :(得分:0)
您应该只需实现DiffFunction
界面 - 一旦您了解了正在进行的操作,我真的会推荐AbstractCachingDiffFunction
,因为它更多高效并附带一些很好的实用功能(例如,渐变检查器)。
在较高级别,对于任何输入向量(表示为长度为k的双向量),您需要提供两个值:函数的值和渐变{ {0}},输出为长度为的双向量。
维度k
在Function#domainDimension
(DiffFunction
的超级接口)中定义。
值y
在Function#valueAt
中定义。
渐变在DiffFunction#derivativeAt
中定义。
如果已经实施了梯度下降,则值y
将是损失的值。梯度将是梯度下降的梯度。如果你有随机梯度下降而不是批量梯度下降。值y
是数据集上的损失之和,与梯度相同。