优化算法-无约束优化
无约束优化的常见算法
无约束优化问题可以表示为:
$min_{\theta} L(\theta)$
其中目标函数 $L(\cdot)$ 是光滑的。如何针对不同的目标函数,不同的应用场景求解一个无约束优化问题是机器学习领域的关注点。
经典的优化算法可以分为直接法和迭代法两大类。
直接法
直接法,就是能够直接给出优化问题的最优解的方法,这种方法能够通过一个解析式直接求出对应的最优解。但是有一系列的约束使得这种方法并不能广泛适用。
直接法要求目标函数具有两个条件:
(1)$L{\cdot}$ 是凸函数,如果$L{\cdot}$ 是凸函数,则 $ \theta^{*}$ 是最优解的充分必要条件是 $L{\cdot}$ 在 $ \theta^{*}$ 处的梯度为 0。即
$\triangledown L(\theta^{*}) = 0$
(2)为了能够直接求解出 $ \theta^{*}$,需要上式有闭式解(解析解)。
而同时满足上述两个条件的经典的模型是岭回归(带正则化项的线性回归):
$L(\theta) = ||X \theta -y||_{2}^{2}+\lambda ||\theta||_{2}^{2}$
其最优解为:$\theta^{*} = (X^{T}X+\lambda I)^{-1} X^{T}y$
迭代法
迭代法,是通过迭代的修改当前对最优解的估计,使得目标朝着最优解的方向前进,最终得到最优解或最优解的近似估计值。
假设当前对最优解的估计为 $\theta_{t}$,则希望求解优化问题:
$\delta_{t} = \underset{\delta}{\arg \min} L(\theta_{t}+\delta)$
从而得到对最优解的更好的估计 $\theta_{t+1} = \theta_{t}+\delta_{t}$。
迭代法可以分为一阶迭代法和二阶迭代法。
梯度下降法
一阶迭代法又称为梯度下降法,通过对目标函数进行一阶泰勒展开(在 $\theta_t$ 处展开)得到近似式:
$L(\theta_{t}+\delta) \approx L(\theta_t)+\triangledown L(\theta_t)^{T} \delta$
由于该近似式在 $\delta$ 较小时才比较准确,因此在求解 $\delta_t$ 时一般加上 $L_2$ 正则项得到:
$L(\theta_{t}+\delta) \approx L(\theta_t)+\triangledown L(\theta_t)^{T} \delta+\frac{1}{2 \alpha}||\delta||_{2}^{2}$
$\frac{\partial L}{\partial \theta} = \triangledown L(\theta_t)+\alpha \delta = 0$
$\delta_t = -\alpha \triangledown L(\theta_t)$
由此,一阶迭代公式法表示为
$\theta_{t+1} =\theta_t -\alpha \triangledown L(\theta_t)$
其中,$\alpha$ 是学习率,通过一维线性搜索[1]得到。
牛顿法
二阶迭代法又称为牛顿法,通过对目标函数进行二阶泰勒展开(在 $\theta_t$ 处展开)得到近似式:
$L(\theta_t + \delta) \approx L(\theta_t)+\triangledown L(\theta_t)^{T} \delta+\frac{1}{2}\delta^T H_t \delta$
其中,$ H_t = \triangledown ^{2}L(\theta_t)$是函数 $L$ 在 $\theta_t$ 处的Hessian矩阵[2]。通过求解近似优化问题
$\delta_t =\underset{\delta}{\arg \min} \left ( L(\theta_t)+\triangledown L(\theta_t)^{T} \delta + \frac{1}{2}\delta^T H_t \delta \right )=-H_t^{-1}\triangledown L(\theta_t)$
由此,二阶迭代公式法表示为
$\theta_{t+1} = \theta_{t}-H_t^{-1}\triangledown L(\theta_t)$
因为函数 $L(\theta)$ 有极值的必要条件是在极值点处一阶导数为 0,即梯度向两位零。特别是当 Hessian 矩阵为正定矩阵时,函数$L(\theta)$ 的极值为极小值。
牛顿法的收敛速度一般要远快于梯度下降法,但是在高维情况下,Hessian 矩阵求逆的计算复杂度很大,而且当目标函数非凸时,二阶法有可能会收敛到鞍点。因此针对牛顿法的 Hessian 的逆的求解复杂高的问题,后面提出了拟牛顿法的思想。即考虑使用一个 $n$ 阶矩阵近似代替 $H(\theta_t)$。其中比较著名的是 BFGS 算法。
拟牛顿法-BFGS算法
BFGS 算法的主要思想是使用一个矩阵 $B_k$ 逼近 Hessian 矩阵。首先由牛顿法可知,令:$L(\theta_t+\delta) = L(\theta)$,则
$L(\theta) = L(\theta_t)+\triangledown L(\theta_t)^{T}(\theta-\theta_t)+\frac{1}{2} (\theta-\theta_t)^{T} H_t (\theta-\theta_t)$
$\;\;\;\;\; \;\;\frac{\partial L(\theta)}{\partial \theta }=\triangledown L(\theta _t)^T+H_t(\theta -\theta _t)=0\\
\overset{\theta = \theta_{t+1}}{\Rightarrow } \;\;\;\triangledown L(\theta _{t+1})-\triangledown L(\theta _t) = H_t(\theta_{t+1} -\theta _t) = H_t \delta_t$
令 $y_t = \triangledown L(\theta _{t+1})-\triangledown L(\theta _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_t\delta_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}$