我使用least_squares
优化来调整一个数值模型的输出到一些实测数据。在这个阶段,我想知道如何为ftol
、xtol
和gtol
参数确定适当的值,因为它们决定了优化的停止方式和地点。在我看来,这些参数似乎很好地符合算法的框架,但我发现很难将它们与现实世界的属性联系起来。
例如,我对我的测量数据有不确定性估计,所以一旦优化器在不确定度的范围内达到模型输出和测量数据的充分一致,停止(即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
参数再次描述了参数更新与当前值之间的缩放因子。虽然我可以使用一些值来反映设备围绕预期的最终参数值的精度,但我看到优化器达到中间参数值比最终估计值大两个数量级,因此这显然有过早终止的风险。
虽然我发现很难为ftol
、xtol
和gtol
参数选择合适的值,但在没有好的参数的情况下保留它们的默认值也是不令人满意的,因为这意味着同意它们的默认值是合理的。
发布于 2022-02-01 23:22:39
ftol
、xtol
和gtol
的选择与具体优化问题的收敛速度有关。假设找到了一个解决方案x_min+err
,其中err
是与真实值x_min
的偏差,我喜欢以以下(简化)的方式来考虑公差:
ftol
需要对F
的形状有一定的了解。也就是说,F
值的变化对x_min
有多大的影响。更准确地说,如果是|F(x_min+err)/F(x_min) - 1| < gtol
,那么err
比x_min
小得多。当然,这在很大程度上取决于属性F(x)
。
xtol
是x_min
的相对精度。即,|(x_min+err) / x_min - 1| < xtol
.
gtol
以下(梯度的无穷范数)的值被解释为零梯度(即一个平稳点)。这也需要一些关于F
的形状和噪音的洞察力。
我知道这些都是相当不明确的说法。在最小F(x)
的邻域内,一切都围绕着x_min
的形状进行解析。请注意,在使用非线性最小二乘法时需要考虑更多的因素。也就是说,对估计算法的选择进行推理是很有用的。换句话说,不确定性的统计特性(由测量噪声、模型偏差、数字等引起)是否表现得很好,以至于可以期望有意义的估计(偏倚和一致性是主要特征)。
https://stackoverflow.com/questions/67684927
复制相似问题