liblinear中的信赖域算法

  • 求方程 (H s = -g), H是hessian矩阵, g 为梯度, 残量 (r = -g -Hs)

  • s的初值为0,理论上,共轭梯度每步迭代使得(|s|) 单调增加,共轭梯度的迭代停止条件: $$ | r | < tol, quad or quad |s + delta_s | > Delta $$

  • 给定参数: $ eta_0 = 1e-4, eta_1 = 0.25, eta_2 = 0.75; sigma_1 = 0.25, sigma_2 = 0.5, sigma_3 = 4;$

  • 预期下降 prered: (-q(s)), 这里 (q(s) = frac12 s'Hs+g.s = frac12(g.s - r.s))

  • 实际下降 actred: f(w) - f(w+s)

  • $ ho = prered / actred $, (alpha = -frac{g.s} {2 (f(w+s) - f(w) - g.s)})(f(w + alpha s ))的二次插值函数(phi(alpha))的最小值点。

  • 实际代码做修正:(alpha = max(sigma_1, alpha)) if (f(w+s) -f(w) - g.s>0) else $sigma_3 $。这个修正符合论文观点,信赖域预估太准确效果提升不明显,不如直接选大一点,SimpleTR的策略效果很好。

  • 更新信赖域半径:

[Delta_{k+1} = egin{cases} min( max(alpha,sigma_1)|s^k|, sigma_2Delta_k ), & ext{if } ho < eta_0\ max(sigma_1Delta_k, min(alpha|s^k|, sigma_2Delta_k) ), & ext{else if } ho < eta_1\ max( sigma_1Delta_k, min(alpha |s^k|, sigma_3Delta_k) ), & ext{else if } ho < eta_2\ max(Delta_k , min(alpha|s^k|, sigma_3Delta_k)), & ext{else if not reach_boundary } \ sigma_3Delta_k , & ext{else } \ end{cases} ]

  • 更新w: if ( ho >eta_0), w = w + s

参考

原文地址:https://www.cnblogs.com/bregman/p/6879043.html