我正在使用 BFGS 来优化平滑但非凸函数这是通过模拟计算的。模拟还给了我一个半解析梯度,这是通过数值梯度验证的。
作为是非凸的,我正在使用惩罚函数来强制约束约束,我不希望找到全局最小值,而是找到梯度也恰好消失的局部最小值。然而,当 BFGS “收敛”时(就非常小的和),仍然很大。我可以想到几个原因:
惩罚函数大到接近边界——但这里不是这种情况,因为此时惩罚函数已被充分缩小
梯度的向下斜率与边界之一相交——BFGS 不能离开边界,因为这会增加函数,但也不能进一步接近它,导致它卡住。这可能是这种情况,因为在“收敛”时步长几乎为零。
任何人都可以提出这种行为的任何其他原因,或者验证(2)是否确实是原因的方法?