非线性共轭梯度重启阈值 1/10

计算科学 收敛 共轭梯度
2021-12-06 20:14:36

Nocedal 和 Wright 关于共轭梯度方法,p。123、描述一个

重新启动策略...每当两个连续梯度远离正交时

|fkT fk1|fk2ν,通常为 1/10。ν

任何人都可以通过这样的重新启动来评论 CG,或者指出网络上的测试用例吗?
或者“热门选择 max ” ( Nonlinear_conjugate_gradient_method ) 是否足够好,令人满意?(0,βPR)

(对bfgs-vs-conjugate-gradient-method 的一个很好的回答说,

轶事证据表明重新启动是一个棘手的问题,
因为它有时是不必要的,有时是非常必要的。

嗯,很多事情通常都是这样(想到税收)。
带有的图的测试用例可能很有趣。)βkθk


导致问题的一个可能愚蠢的测试用例是 2d 中病态二次方的 CG:

import numpy as np
from scipy.optimize import fmin_cg

n = 2
cond = 100
eigenvalues = np.linspace( 1./cond, 1, n )
xmin = 1000 * np.ones( n )

def fprime( x ):
    return eigenvalues * (x - xmin)
def f( x ):
    return (x - xmin) .dot( eigenvalues * (x - xmin)) / 2

x0 = np.zeros( n)

ret = fmin_cg( func, x0, fprime )

添加:

  1. 因为n在 [1,2,3,4,5] 中,这需要 80 81 6 40 9 次迭代,721 722 28 94 27 次函数评估。(CG通常对线搜索非常敏感吗?)
  2. Mathematica 共轭梯度最小化 器有一个默认为 1/10 的 RestartThreshold 但是,对不起,我不会说 Mathematica。有母语人士愿意尝试吗?
0个回答
没有发现任何回复~