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)

  • $\rho = 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} = \begin{cases} \min( \max(\alpha,\sigma_1)\|s^k\|, \sigma_2\Delta_k ), & \text{if } \rho < \eta_0\\ \max(\sigma_1\Delta_k, \min(\alpha\|s^k\|, \sigma_2\Delta_k) ), & \text{else if } \rho < \eta_1\\ \max( \sigma_1\Delta_k, \min(\alpha \|s^k\|, \sigma_3\Delta_k) ), & \text{else if } \rho < \eta_2\\ \max(\Delta_k , \min(\alpha\|s^k\|, \sigma_3\Delta_k)), & \text{else if not reach_boundary } \\ \sigma_3\Delta_k , & \text{else } \\ \end{cases} \]

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

参考

posted @ 2017-05-19 16:20  bregman  阅读(534)  评论(0编辑  收藏  举报