Nocedal 和 Wright 关于共轭梯度方法,p。123、描述一个
重新启动策略...每当两个连续梯度远离正交时
,通常为 1/10。
任何人都可以通过这样的重新启动来评论 CG,或者指出网络上的测试用例吗?
或者“热门选择 max ” ( Nonlinear_conjugate_gradient_method ) 是否足够好,令人满意?
(对bfgs-vs-conjugate-gradient-method 的一个很好的回答说,
轶事证据表明重新启动是一个棘手的问题,
因为它有时是不必要的,有时是非常必要的。
嗯,很多事情通常都是这样(想到税收)。
带有或的图的测试用例可能很有趣。)
导致问题的一个可能愚蠢的测试用例是 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 )
添加:
- 因为
n
在 [1,2,3,4,5] 中,这需要 80 81 6 40 9 次迭代,721 722 28 94 27 次函数评估。(CG通常对线搜索非常敏感吗?) - Mathematica 共轭梯度最小化 器有一个默认为 1/10 的 RestartThreshold 。但是,对不起,我不会说 Mathematica。有母语人士愿意尝试吗?