【机器学习之数学】02 梯度降低法、最速降低法、牛顿法、共轭方向法、拟牛顿法

通过前一篇博客的简单介绍,咱们对导数、方向导数、梯度应该有一个较为清晰的认识。在知道梯度以后,咱们就能够经过一些无约束的优化方法来求极值。git

梯度降低法

梯度降低法(Gradient descent),顾名思义,就是自变量沿着梯度向量的反方向进行移动,由于梯度的方向是上升的方向。github

对于一个 \(R^m \to R\) 的函数 \(y = f(\bm x)\),初始时 \(\bm x = \bm x^{(0)}\),咱们想要获得函数 \(y = f(\bm x)\) 的极小值点 \(\bm x^*\),若是可以求得 $ f(\bm x)$ 的梯度 \(\nabla f(\bm x)\),那么咱们就能够用梯度降低法进行迭代求极小值的近似解。(还有不能求梯度的状况吗?还真有,机器学习中若是输入的数据有缺失,那么 loss function 求出的梯度中仍然会含有未知数,这个时候能够用 EM 算法求解)算法

记自变量 \(\bm x\) 在第 \(k\) 迭代后的值为 \(\bm x^{(k)}\),则自变量的更新公式为:
\[ \bm x^{(k+1)} = \bm x^{(k)} - \alpha \cdot \nabla f(\bm x^{(k)}) \tag{1} \]网络

式(1)中,\(\alpha\) 为步长,在深度学习中被称为学习率(learning rate),控制了梯度降低速度的快慢。app

机器学习中的梯度降低法

梯度降低法和反向传播算法是深度学习的基石,咱们用梯度降低法更新神经网络的参数,用反向传播算法一层一层地将偏差由后向前传播(就是用链式法则对 cost function 求偏导)。机器学习

若是咱们定义 loss function 为
\[ L(\bm w) = \bm g(\bm w; (\bm x, y)) = (y - \bm w^{\top} \bm x)^2 \tag{2} \]函数

那么 cost function 就应该为
\[ C(\bm w) = \frac{1}{n}\sum_{i = 1}^n L(\bm w) = \frac{1}{n} \sum_{i = 1}^n (y_i - \bm w^{\top} \bm x_i)^2 \tag{3} \]性能

其中 \(n\) 为一次性计算 loss 的样本个数,在深度学习中经常就是一个 batch 的大小。(也有人把 cost function 中的 \(\frac{1}{n}\) 改成 \(\frac{1}{n-1}\),这就是有偏估计和无偏估计,影响不大。)学习

cost function/loss function 中,自变量是神经网络的权重,而咱们的输入数据是已知的,这个时候咱们就能够用用式(4)更新参数了:
\[ \bm w^{(k+1)} = \bm w^{(k)} - \alpha \cdot \nabla C(\bm w^{(k)}) \tag{4} \]

若是输入样本 \((\bm x_i, y_i)\) 中含有未知数怎么办?数据缺失了怎么办,在深度学习中,咱们可能会选择剔除或者补全数据,而后再输入到神经网络中。若是不补全缺失值,对式(3)算梯度,梯度中会含有未知数,这样式(4)无法更新参数。

假设训练集中含有 \(N\) 个数据样本,咱们对式(3)中的 \(n\) 取不一样值(即一次性计算 loss 的样本个数取不一样值),会有不一样的影响。若是 \(n = 1\),这就是 stochastic gradient descent;若是 \(1 <n< N\),这就是 mini-batch gradient descent;(mini-batch 的 batch size 通常不会很大。)若是 \(n = N\),这就是 (batch) gradient descent

最速降低法

最速降低法(Steepest descent)是梯度降低法的一种更具体实现形式,其理念为在每次迭代中选择合适的步长 \(\alpha_k\),使得目标函数值可以获得最大程度的减小。

每一次迭代,沿梯度的反方向,咱们总能够找到一个 \(\bm x^{(k+1)} = \bm x^{(k)} - \alpha_k \nabla f(\bm x^{(k)})\),使得在这个方向上 \(f(\bm x^{(k+1)})\) 取最小值。即
\[ \alpha_k = \mathop{\arg\min}_{\alpha \ge 0} f(\bm x^{(k)} - \alpha \nabla f(\bm x^{(k)})) \tag{5} \]

有意思的是,最速降低法每次更新的轨迹都和上一次垂直。并且只要梯度 \(\nabla f(\bm x^{(k)}) \not = 0\),则 \(f(\bm x^{(k+1)}) < f(\bm x^{(k)})\)。(即梯度不等于 0 时,确定会降低。)具体证实参见《最优化导论》 第8.2节。


图 1 steepest descent

二次型目标函数

二次型指的是 \(\bm x^{\top} Q \bm x\)\(Q\) 是一个对称矩阵,\(\bm x\) 是列向量。当 \(Q\) 不是对称矩阵时,咱们能够作以下变换使其变为对称矩阵:
\[ \bm x^{\top} Q \bm x = \bm x^{\top} Q^{\top} \bm x = \bm x^{\top} ( \frac{1}{2}Q + \frac{1}{2}Q^{\top} )\bm x \]

当目标函数为二次型函数时,令目标函数为:
\[ f(\bm x) = \frac{1}{2}\bm x^{\top} Q \bm x - \bm b^{\top} \bm x \]

梯度函数为:
\[ \nabla f(\bm x) = Q\bm x - \bm b \]

为表示方便,令 \(\bm g^{(k)} = \nabla f(\bm x^{(k)})\)

黑塞矩阵为:
\[ F(\bm x) = Q = Q^{\top} \]

当目标函数为二次型函数时,咱们能够算得每一步的步长取值为:
\[ \alpha_k = \frac{\bm g^{(k) \top} \bm g^{(k)}}{\bm g^{(k) \top}Q \bm g^{(k)}} \]

其中,梯度为 \(\bm g^{(k)} = \nabla f(\bm x^{(k)}) = Q\bm x^{(k)} - \bm b\)

因此当目标函数为二次型函数时,最速降低法的迭代公式为:
\[ \bm x^{(k+1)} = \bm x^{(k)} - \frac{\bm g^{(k) \top} \bm g^{(k)}}{\bm g^{(k) \top}Q \bm g^{(k)}} \bm g^{(k)} \]

牛顿法

在肯定搜索方向时,梯度降低和最速降低只用到了目标函数的一阶导数(梯度),而牛顿法(Newton's method)用到了二阶(偏)导数。

Newton's method (sometimes called the Newton-Raphson method) uses first and second derivatives and indeed does perform better than the steepest descent method if the initial point is close to the minimizer.


图 2 Newton's method

牛顿法的基本思路是在每次迭代中,利用二次型函数来局部近似目标函数 \(f\),并求解近似函数的极小点做为下一个迭代点,牛顿法自变量 \(\bm x\) 的更新公式为:
\[ \bm x^{(k+1)} = \bm x^{(k)} - F(\bm x^{(k)})^{-1}\nabla f(\bm x^{(k)}) \]
其中 \(F(\bm x^{(k)})^{-1}\) 为二阶偏导数矩阵的逆(即 黑塞矩阵的逆)。(为何更新公式是这样的?能够将 \(f(\bm x)\)\(\bm x^{(k)}\) 处进行二阶泰勒展开,而后求导。)

Newton's method has superior convergence properties if the starting point is near the solution. However, the method is not guaranteed to converge to the solution if we start far away from it (in fact, it may not even be well-defined because the Hessian may be singular).

当起始点 \(\bm x^{(0)}\) 离极值点 \(\bm x^*\) 足够近的时候,式(6)的更新公式没有问题。可是,当 \(\bm x^{(0)}\) 离极值点 \(\bm x^*\) 较远时,咱们并不能保证牛顿法能收敛到极值点。甚至,牛顿法可能都不是一个 descent 的方法,便可能 \(f(\bm x^{(k+1)}) \ge f(\bm x^{(k)})\)。幸运的是能够作一点修改,确保牛顿法是一个 descent 的方法。(黑塞矩阵若是不是正定的,那就要对牛顿法进行修正,如 Levenberg-Marquardt 修正。)

若是 黑塞 矩阵正定(\(F(\bm x^{(k)}) > 0\) ),而且 \(\nabla f(\bm x^{(k)}) \not = 0\),那么咱们的搜索的方向为
\[ \bm d^{(k)} = - F(\bm x^{(k)})^{-1}\nabla f(\bm x^{(k)}) = \bm x^{(k+1)} - \bm x^{(k)} \]

要想从 \(\bm x^{(k)}\)\(\bm x^{(k+1)}\) 是 descent direction,只要存在一个 \(\overline \alpha > 0\),使得全部 \(\alpha \in (0, \overline \alpha)\),知足 \(f(\bm x^{(k)} + \alpha \bm d^{(k)}) < f(\bm x^{(k)})\)
此时牛顿法的更新公式为:
\[ \bm x^{(k+1)} = \bm x^{(k)} - \alpha_kF(\bm x^{(k)})^{-1}\nabla f(\bm x^{(k)}) \]

对于 \(\alpha_k\),咱们也能够在方向 \(\bm d^{(k)}\) 上进行线性搜索,使得 \(\alpha_k = \mathop{\arg\min}_{\alpha \ge 0} f(\bm x^{(k)} - \alpha F(\bm x^{(k)})^{-1}\nabla f(\bm x^{(k)}))\)

这个时候,梯度降低法和牛顿法除了一个黑塞矩阵外,是否是超级像了。若是黑塞矩阵不是正定的,那就要对牛顿法进行修正,如 Levenberg-Marquardt 修正。

Levenberg-Marquardt 修正

若是 黑塞矩阵 $ F(\bm x^{(k)})$ 不正定,那么搜索方向 \(\bm d^{(k)} = - F(\bm x^{(k)})^{-1}\nabla f(\bm x^{(k)})\) 可能不会是降低方向。 牛顿法的 Levenberg-Marquardt 修正能够解决这个问题:
\[ \bm x^{(k+1)} = \bm x^{(k)} - \alpha_k(F(\bm x^{(k)}) + \mu_t \bm I)^{-1}\nabla f(\bm x^{(k)}) \]

其中,\(u_t \ge 0\)\(\bm I\) 为单位矩阵。在该修正中, $ F(\bm x^{(k)})$ 能够不正定,可是 \(\bm G = F(\bm x^{(k)}) + \mu_t \bm I\) 须要是正定的,因此,取适当的 \(\mu_t\),使得 \(\bm G\) 正定便可。(矩阵正定,当前仅当全部特征值大于 0。)

\(\mu_t\) 过大也不行,不然就至关于步长取了很小的值。(逆太小或者是分母过大。)

梯度降低法和牛顿法谁快?

可能会有一个疑问,梯度降低法中梯度的反方向不是当前点降低最快的方向吗,为何牛顿法会收敛更快,牛顿法的更新方向更好吗?牛顿法是二阶收敛,梯度降低法是一阶收敛,因此牛顿法就更快。更通俗地,梯度降低法只从当前位置选择一个坡度最大的方向走一步,而牛顿法在选择方向时,不只会考虑坡度是否够大,还会考虑走了一步后,坡度是否会变得更大。从几何上说,牛顿法就是用一个二次曲面去拟合当前位置的的局部曲面,而梯度降低法用的是一个平面去拟合,一般状况下,二次曲面的拟合会比平面更好,因此牛顿法选择的降低路径会更符合真实的最优降低路径。详情参见 最优化问题中,牛顿法为何比梯度降低法求解须要的迭代次数更少? -- 大饼土博


图 3 A comparison of gradient descent (green) and Newton's method (red) for minimizing a function (with small step sizes).
Newton's method uses curvature information (i.e. the second derivative) to take a more direct route.

共轭方向法

共轭方向法的性能优于最速降低法,但不如牛顿法。

共轭方向法具备如下特性:

  1. 对于 n 维二次型问题,可以在 n 步以内求得结果;
  2. 做为共轭方向法的典型表明,共轭梯度法不须要计算黑塞矩阵;
  3. 不须要存储 \(n \times n\) 的矩阵,也不须要对其求逆。

考虑一个二次型函数 \(f(\bm x) = \frac{1}{2}\bm x^{\top} Q \bm x - \bm b^{\top} \bm x\),其中 \(\bm x \in \mathbb{R}^n\)\(Q = Q^{\top}>0\)。(这里没有考虑非二次型问题中的共轭方向法/共轭梯度法,有须要的直接参考 《最优化导论》 10.4 节)

什么是共轭方向?

\(Q\)\(n \times n\) 的正定对称实矩阵,对于方向 \(\bm d^{(0)},\bm d^{(1)},\bm d^{(2)},... ,\bm d^{(n-1)}\),若是对于全部的 \(i \not = j\),有 \(d^{(i) \top} Q d^{(j)} = 0\),则称它们是关于 \(Q\) 共轭的,且是线性无关的。

基本的共轭方向法

给定初始点 \(\bm x^{(0)}\) 和一组关于 \(Q\) 的共轭方向 \(\bm d^{(0)},\bm d^{(1)},\bm d^{(2)},... ,\bm d^{(n-1)}\),迭代公式以下:(\(k \ge 0\) 表示迭代次数)
\[ \bm g^{(k)} = \nabla f(\bm x^{(k)}) = Q\bm x^{(k)} - \bm b \\ \alpha_k = - \frac{\bm g^{(k) \top} \bm d^{(k)}}{\bm d^{(k) \top} Q \bm d^{(k)}} \\ \bm x^{(k+1)} = \bm x^{(k)} + \alpha_k \bm d^{(k)} \]

上式和最速降低法的公式很像,当更新方向为梯度的方向,即 \(\bm d^{(k)} = \bm g^{(k)}\) 时,共轭方向法和最速降低法就长得如出一辙了。固然,这通常是不可能的,共轭方向法要求更新方向是共轭的。

共轭方向法的计算效率很高,但前提是给定一组 \(Q\) 共轭方向。共轭梯度法不须要提早给定一组 \(Q\) 共轭方向,而是随着迭代的进行,逐一产生 \(Q\) 共轭方向。

共轭梯度法

做为共轭方向法的典型表明,共轭梯度法不一样之处在于其 \(Q\) 共轭方向的获取,每一次迭代,咱们须要当场生成下一次迭代的方向:
\[ \bm d^{(k+1)} = - \bm g^{(k+1)} + \beta_k \bm d^{(k)}, k = 0,1,2,... \]

按照以下方式选择系数 \(\beta_k\),可使得新生成的方向 \(\bm d^{(k+1)}\) 和以前的方向 \(\bm d^{(0)}, \bm d^{(1)}, ..., \bm d^{(k)}\) \(Q\) 共轭:
\[ \beta_k = \frac{\bm g^{(k+1) \top} Q \bm d^{(k)}}{\bm d^{(k) \top} Q \bm d^{(k)}} \]

对于初始方向 \(\bm d^{(0)}\),直接用负梯度便可,即 \(\bm d^{(0)} = - \bm g^{(0)}\)

拟牛顿法

牛顿法须要计算黑塞矩阵 \(F(\bm x^{(k)})\) 而且计算它的逆 \(F(\bm x ^ {(k)})^{ -1}\),求逆并非很简单。

为了不 \(F(\bm x ^ {(k)})^{ -1}\) 这种矩阵求逆运算,能够经过设计 \(F(\bm x ^ {(k)})^{ -1}\) 的近似矩阵来代替 \(F(\bm x ^ {(k)})^{ -1}\),这就是拟牛顿法的基本思路。

在拟牛顿法中,\(F(\bm x ^ {(k)})^{ -1}\) 近似矩阵 \(\bm H_k\) 的构建只须要用到 目标函数值 和 梯度。

拟牛顿法的更新公式为:
\[ \bm x^{(k+1)} = \bm x^{(k)} - \alpha_k \bm H_k \nabla f(\bm x^{(k)}) \]

拟牛顿法的更新方向 \(\bm d^{(k)} = -\bm H_k \nabla f(\bm x^{(k)})\),当目标函数为二次型时,这些方向其实也是关于 \(Q\) 共轭的,即拟牛顿法也是一种共轭方向法。

拟牛顿法的关键在于求出 \(\bm H_{k+1}\),给出 \(\bm H_k\)、梯度 \(f(\bm x^{(k)})\)\(\bm d^{(k)}\)\(\alpha_k\),找到 \(\bm H_{k+1}\) 的递推式,那么在迭代过程当中就不须要涉及到黑塞矩阵也不会求逆。

秩 1 修正公式

\(\bm H_{k+1}\) 的递推式为:
\[ \boldsymbol{H}_{k+1}=\boldsymbol{H}_{k}+\frac{\left(\Delta \boldsymbol{x}^{(k)}-\boldsymbol{H}_{k} \Delta \boldsymbol{g}^{(k)}\right)\left(\Delta \boldsymbol{x}^{(k)}-\boldsymbol{H}_{k} \Delta \boldsymbol{g}^{(k)}\right)^{\top}}{\Delta \boldsymbol{g}^{(k) \top}\left(\Delta \boldsymbol{x}^{(k)}-\boldsymbol{H}_{k} \Delta \boldsymbol{g}^{(k)}\right)} \]

其中,\(\Delta x^{(k)}=\alpha_{k} d^{(k)}\)\(\Delta \boldsymbol{g}^{(k)}=\boldsymbol{g}^{(k+1)}-\boldsymbol{g}^{(k)}\)

\(\bm H_0\) 能够取任一对称正定实矩阵。

\(\bm H_{k+1}\) 的递推式能够采用如下记法:(这不是秩 1 算法的推导过程,只是为了考试便于记忆罢了。)

  1. 由于 \(\bm g^{(k)} = \nabla f(\bm x^{(k)})= Q \bm x^{(k)}\),这是对导数转置获得的,因此 \(\bm g^{(k+1)} - \bm g^{(k)} = Q(\bm x^{(k+1)} - \bm x^{(k)})\)
  2. \(\Delta x^{(k)}=\alpha_{k} d^{(k)}\)\(\Delta \boldsymbol{g}^{(k)}=\boldsymbol{g}^{(k+1)}-\boldsymbol{g}^{(k)}\),因此 \(\Delta \boldsymbol{g}^{(k)} = Q \Delta x^{(k)}\)
  3. 又由于在目标函数为二次型时,黑塞矩阵 \(F = Q\),因此 \(\Delta \boldsymbol{g}^{(k)} = F \Delta x^{(k)}\),即 \(F^{-1} \Delta \boldsymbol{g}^{(k)} = \Delta x^{(k)}\)
  4. 将黑塞矩阵的逆矩阵换成近似矩阵可得 \(H_k \Delta \boldsymbol{g}^{(k)} \approx \Delta x^{(k)}\),而 \(\Delta x^{(k)} - H_{k} \Delta \boldsymbol{g}^{(k)}\) 正好是递推式中一项,即便记不住也能本身一步步推出来;
  5. \(\bm H_{k+1}\) 的递推式获得的确定时一个对称矩阵,因此分子是外积,分母是内积形式,这样获得的才会是一个对称矩阵。

References

Edwin K. P. Chong, Stanislaw H. Zak-An Introduction to Optimization, 4th Edition
最优化问题中,牛顿法为何比梯度降低法求解须要的迭代次数更少? -- 大饼土博
Newton's method in optimization - Wikipedia

相关博客

【机器学习之数学】01 导数、偏导数、方向导数、梯度
【机器学习之数学】02 梯度降低法、最速降低法、牛顿法、共轭方向法、拟牛顿法
【机器学习之数学】03 有约束的非线性优化问题——拉格朗日乘子法、KKT条件、投影法