我正在尝试使用梯度下降在 N 个参数中找到函数的最小值。但是我想这样做,同时将参数的绝对值之和限制为 1(或 <= 1,没关系)。出于这个原因,我使用拉格朗日乘数法,所以如果我的函数是 f(x),我将最小化 f(x) + lambda * (g(x)-1) 其中 g(x) 是参数的绝对值之和。
现在据我了解,当 g(x)=1 时,该函数的梯度仅为 0,因此找到局部最小值的方法应该找到我的函数的最小值,其中我的条件也满足。问题是这个添加我的函数是无界的,所以梯度下降只是找到越来越大的 lambdas 和越来越大的参数(绝对值)并且永远不会收敛。
目前我正在使用 CG 的 python (scipy) 实现,所以我真的更喜欢不需要我自己重写/调整 CG 代码但使用现有方法的建议。