如何为最小二乘优化确定适当的 ftol、xtol 和 gtol 值?

a_g*_*est 7 python optimization scipy scipy-optimize

我正在使用least_squares优化来根据某些测量数据调整数值模型的输出。在这个阶段,我想知道如何确定ftolxtolgtol参数的适当值,因为它们确定优化将如何以及在何处停止。对我来说,这些参数似乎非常适合算法的框架,但我发现很难将它们与现实世界的属性联系起来。

例如,我对测量数据有不确定性估计,因此一旦优化器在不确定性限制内模型的输出和测量数据之间达到足够的一致性,就可以合理地停止(即 )np.all(np.abs(model_output - measured_data) < uncertainty)。然而这似乎不能用ftol参数来表达。终止条件为dF < ftol * F(其中F是残差平方和,dF是其变化),因此,即使我可以计算ftol以防止更新小于一旦F达到该级别的不确定性,我也可能会在远离预期的地方提前终止。所需的解决方案。最后,由优化器决定在每次迭代时要采取多大的步长(从而确定dF),因此与所需的解决方案相去甚远,因此dF可能会很小。F

另一方面是参数值的改变。最后,优化得到的结果将用于调整一些实际设备,而这些设备的精度是有限的。例如,设备不会区分相差小于 的值1e-6。这再次意味着,一旦模型的输出和测量数据之间达到足够的一致性,任何小于的参数更新1e-6都是没有意义的。另一方面,许多小的更新< 1e-6可以总结为更大的整体更新> 1e-6,我又回到了同样的问题:这取决于优化器想要采取多大的步骤并限制这一点,我担心我会冒过早的风险终止。此外,该xtol参数再次仅描述参数更新和当前值之间的比例因子。虽然我可以使用一些值来反映设备在预期最终参数值周围的精度,但我已经看到优化器达到的中间参数值比最终估计值大两个数量级,因此这显然有提前终止的风险。

虽然我发现很难为ftolxtolgtol参数选择合适的值,但在没有良好论证的情况下将它们保留为默认值同样令人不满意,因为这意味着同意它们的默认值是合理的。

Die*_*ich 1

ftol、 、xtol和的选择与具体优化问题的收敛速度gtol有关。假设找到了解决方案,与真实值的偏差在哪里,我喜欢用以下(简化的)方式来考虑容差:x_min+errerrx_min

ftolF需要对最小值周围的形状有一些了解。F即,改变值的变化有多大x_min。更准确地说,如果|F(x_min+err)/F(x_min) - 1| < gtolerr与 相比小得可以忽略不计x_min。当然,这很大程度上取决于属性F(x)

xtol是 的相对精度x_min。IE,|(x_min+err) / x_min - 1| < xtol

下面的值(梯度的无穷范数)gtol被解释为零梯度(即驻点)。这还需要对形状F和噪声有一些了解。

我知道这些都是相当不具体的陈述。F(x)一切都围绕着最小值附近的形状进行解析x_min请注意,使用非线性最小二乘法时,需要考虑更多因素。即,推理选择估计算法是有用的。换句话说:不确定性(由测量噪声、模型偏差、数值等引起)的统计特性是否表现良好,可以预期得到有意义的估计(偏差一致性主要特征)。