优化算法-无约束优化 无约束优化的常见算法

无约束优化问题可以表示为:

$min_{ heta} L( heta)$

其中目标函数 $L(cdot)$ 是光滑的。如何针对不同的目标函数,不同的应用场景求解一个无约束优化问题是机器学习领域的关注点。

经典的优化算法可以分为直接法和迭代法两大类。

直接法

直接法,就是能够直接给出优化问题的最优解的方法,这种方法能够通过一个解析式直接求出对应的最优解。但是有一系列的约束使得这种方法并不能广泛适用。

直接法要求目标函数具有两个条件:

(1)$L{cdot}$ 是凸函数,如果$L{cdot}$ 是凸函数,则 $ heta^{*}$ 是最优解的充分必要条件是 $L{cdot}$ 在 $ heta^{*}$ 处的梯度为 0。即

$ riangledown L( heta^{*}) = 0$

(2)为了能够直接求解出 $ heta^{*}$,需要上式有闭式解(解析解)。

而同时满足上述两个条件的经典的模型是岭回归(带正则化项的线性回归):

$L( heta) = ||X heta -y||_{2}^{2}+lambda || heta||_{2}^{2}$

其最优解为:$ heta^{*} = (X^{T}X+lambda I)^{-1} X^{T}y$

迭代法

迭代法,是通过迭代的修改当前对最优解的估计,使得目标朝着最优解的方向前进,最终得到最优解或最优解的近似估计值。

假设当前对最优解的估计为 $ heta_{t}$,则希望求解优化问题:

$delta_{t} = underset{delta}{arg min} L( heta_{t}+delta)$

从而得到对最优解的更好的估计 $ heta_{t+1} = heta_{t}+delta_{t}$。

迭代法可以分为一阶迭代法和二阶迭代法。

梯度下降法

 一阶迭代法又称为梯度下降法,通过对目标函数进行一阶泰勒展开(在 $ heta_t$ 处展开)得到近似式:

$L( heta_{t}+delta) approx L( heta_t)+ riangledown L( heta_t)^{T} delta$

由于该近似式在 $delta$ 较小时才比较准确,因此在求解 $delta_t$ 时一般加上 $L_2$ 正则项得到:

$L( heta_{t}+delta) approx L( heta_t)+ riangledown L( heta_t)^{T} delta+frac{1}{2 alpha}||delta||_{2}^{2}$

$frac{partial L}{partial heta} = riangledown L( heta_t)+alpha delta = 0$

$delta_t = -alpha riangledown  L( heta_t)$

由此,一阶迭代公式法表示为

$ heta_{t+1} = heta_t -alpha riangledown  L( heta_t)$

其中,$alpha$ 是学习率,通过一维线性搜索[1]得到。

牛顿法

二阶迭代法又称为牛顿法,通过对目标函数进行二阶泰勒展开(在 $ heta_t$ 处展开)得到近似式:

$L( heta_t + delta) approx L( heta_t)+ riangledown L( heta_t)^{T} delta+frac{1}{2}delta^T H_t delta$

其中,$ H_t = riangledown ^{2}L( heta_t)$是函数 $L$ 在 $ heta_t$ 处的Hessian矩阵[2]。通过求解近似优化问题

$delta_t =underset{delta}{arg min}  left ( L( heta_t)+ riangledown L( heta_t)^{T} delta + frac{1}{2}delta^T H_t delta ight )=-H_t^{-1} riangledown L( heta_t)$

由此,二阶迭代公式法表示为

$ heta_{t+1} = heta_{t}-H_t^{-1} riangledown L( heta_t)$

因为函数 $L( heta)$ 有极值的必要条件是在极值点处一阶导数为 0,即梯度向两位零。特别是当 Hessian 矩阵为正定矩阵时,函数$L( heta)$ 的极值为极小值。

牛顿法的收敛速度一般要远快于梯度下降法,但是在高维情况下,Hessian 矩阵求逆的计算复杂度很大,而且当目标函数非凸时,二阶法有可能会收敛到鞍点。因此针对牛顿法的 Hessian 的逆的求解复杂高的问题,后面提出了拟牛顿法的思想。即考虑使用一个 $n$ 阶矩阵近似代替 $H( heta_t)$。其中比较著名的是 BFGS 算法。

拟牛顿法-BFGS算法

BFGS 算法的主要思想是使用一个矩阵 $B_k$ 逼近 Hessian 矩阵。首先由牛顿法可知,令:$L( heta_t+delta) = L( heta)$,则

$L( heta) = L( heta_t)+ riangledown L( heta_t)^{T}( heta- heta_t)+frac{1}{2} ( heta- heta_t)^{T} H_t ( heta- heta_t)$

$;;;;; ;;frac{partial L( heta)}{partial  heta }= riangledown L( heta _t)^T+H_t( heta - heta _t)=0\
overset{ heta = heta_{t+1}}{Rightarrow } ;;; riangledown L( heta _{t+1})- riangledown L( heta _t) = H_t( heta_{t+1} - heta _t) = H_t delta_t$

令 $y_t = riangledown L( heta _{t+1})- riangledown L( heta _t)$,有 $y_t = H_t delta_t$,用 $B_{t+1}$ 近似 $H_t$,同时令 $B_{t+1} = B_t+P_t+Q_t$ 得到:

$B_{t+1} delta_t = B_t \delta_t + P_t delta_t+Q_t delta_t$

考虑使 $P_t $ 和 $Q_t$ 满足:

$P_tdelta_t = y_t$

$Q_t delta_t = -B_t delta_t$

找到适合条件的$P_t$ 和 $Q_t$,得到 BFGS 算法矩阵 $B_{t+1}$ 的迭代公式:

$B_{t+1} = B_t + frac{y_t y_t ^T}{y_t^T delta_t} + frac{B_t delta_t delta_t^T B_t}{delta_t^T B_t delta_t}$