我试图相对于 19 维参数向量 θ 最小化目标函数 J(θ)。J(θ) 是一个平滑的非线性函数,因此我在 R 中尝试了各种基于梯度的优化器来找到解决方案。一个一致的问题是它们都在具有非零梯度的点处提前停止优化。停止的原因是“线搜索的零步”。例如,代码
ucminf(theta = paramGuess, fn = J_obj, control = list(maxeval = 1000, xtol = 1e-15, grtol = 1e-8, trace = 1))
将终止并显示以下消息:
Line search: alpha = 0.0000e+00, dphi(0) =-8.7877e-02, dphi(1) =-4.9128e-02
Optimization has converged. Stopped by zero step from line search
maxgradient laststep stepmax neval
488.2985428 0.0000000 0.4051687 22.0000000
您会注意到,梯度远非零。Optim 也有同样的问题。
有没有办法可以控制最小步长(alpha),以便优化器在梯度中的最大元素小于 grtol 之前不会停止?
我也尝试过提供解析梯度,这有时会根据初始参数值收敛到具有非零梯度的解。但是,有时它不会,并且优化器会因为“从行搜索零步长”而再次停止。
关于优化器为何将步长设置为零以及如何防止这种情况发生的任何建议将不胜感激!