无约束最优化的常用方法
11/22/2017 12:40:56 PM
优化问题在很多领域有着重要的应用。为了日后查阅方便,本文列举常见的无约束优化方法的计算公式。
需要说明的是,本文的大部分内容选自图书《算法笔记》。
一、梯度下降法
梯度下降法(Gradient Descent Method)也叫做最速下降法(Steepest Descent Method),因为负梯度是函数局部下降最快的方向。
梯度下降
梯度下降法的迭代格式为
梯度下降法非常简单,只需要知道如何计算目标函数的梯度就可以写出迭代格式。因此,尽管在不少情况下梯度下降法的收敛速度都很慢,也依然不影响它在工业界的广泛应用。梯度下降法应用到一些具体模型上有时也会被视作一类特定的算法,例如神经网络中的后向传导算法(Back Propagation Algorithm)。
随机梯度下降
在机器学习中经常有\(f(x)=\sum_{i=1}^m \ell_i(x)\),其中\(\ell_i(x)\)是第\(i\)个训练样本的损失函数。这时我们可以使用随机梯度下降法(Stochastic Gradient Descent Method)。其迭代格式为
其中\(r\in \\{1,2,\cdots,m\\}\)为随机数。这种做法可以理解为随机选择一个训练样本,进行一次梯度下降的训练。在机器学习的问题中,我们通常不需要真的求得最优值,这样不精确的迭代,使得算法不容易过拟合。由于随机梯度下降法的普及,与此相对的梯度下降法有时被称为批量梯度下降法(Batch Gradient Descent Method),因为它同时考虑所有训练样本。介于批量梯度下降法和随机梯度下降法之间,还有小批量梯度下降法(Min-Batch Gradient Descent Method),也就是每次迭代选择若干个训练样本。
步长\(\alpha_k\)的选取
梯度下降法可采用BB步长(Barzilai Borwein)。BB步长有两个计算公式,选择其一即可。
\begin{aligned}
\alpha_k&=\frac{(\nabla f(x_k)-\nabla f(x_{k-1}))^T(x_k-x_{k-1})}{(\nabla f(x_k)-\nabla f(x_{k-1}))^T(\nabla f(x_k)-\nabla f(x_{k-1}))}\newline
\alpha_k&=\frac{(x_k-x_{k-1})T(x_k-x_{k-1})}{(x_k-x_{k-1})T(\nabla f(x_k)-\nabla f(x_{k-1}))}
\end{aligned}
BB步长适合我们在对步长选择缺乏经验的时候,它经常会有不错的效果。
二、共轭梯度法
由于每次都是沿着当前的负梯度方向逼近极小值,梯度下降法往往不能很快地收敛到极小值点。改进的方法是,在上一次梯度方向的共轭方向上进行迭代。
在这里,不对原理和公式推导进行过多介绍。下面直接给出迭代的公式。
其中,\(d_k\)为迭代方向,它由下面的式子确定
这里使用系数\(\beta_k\)借助上一次的迭代方向\(d_{k-1}\),对迭代方向\(d_k\)进行一个修正。\(\beta_k\)的表达式不止一种,常用的式子如下
三、牛顿法
牛顿方向和梯度方向最大的差别是考虑了Hessian矩阵(我们记\(x_k\)处的Hessian矩阵为\(\nabla^2 f(x_k)\))。
牛顿法的迭代格式为
这里的步长\(\alpha_k\)有多种取法。但与梯度下降法不同的是,这里步长取\(1\)的效果通常不错。值得注意的是,虽然我们写作\(d_k=-(\nabla^2 f(x_k))^{-1} \nabla f(x_k)\),但在计算\(d_k\)时,并不真正求逆,而是去求解线性方程组\((\nabla^2 f(x_k))d_k=-\nabla f(x_k)\)。
假设\(f(x)\)是一元函数,那么上式将变为
牛顿法的局限
牛顿法在计算上有一下局限性
- 计算矩阵\(\nabla^2 f(x_k)\)可能要花费很长时间。
- 可能没有足够的内存去存储矩阵\(\nabla^2 f(x_k)\)。
- \(\nabla^2 f(x_k)\)不一定可逆,也就是\((\nabla^2 f(x_k))^{-1}\)也就不一定存在。
因此一般只有当问题规模比较小,而且\(f(x_k)\)是严格凸函数的时候,我们才会考虑牛顿法。在其他情形下使用牛顿法,都需要设法进行一些修正。
四、拟牛顿法
牛顿法的局限性基本源于\(\nabla^2 f(x_k)\)。在拟牛顿法中,我们不直接使用\(\nabla^2 f(x_k)\),而是使用\(H_k\)近似代替。
在第一次迭代的时候,我们没有任何有效信息可以用于选取\(H_0\),因此一般直接取\(H_0=I\)。对于\(H_{k+1}\)的确定方法,下面给出两种方法,分别为BFGS(Brotden-Fletcher Goldfard Shanno)和DFP(Davidon Fletcher Powell)公式。为了书写方便,我们令\(s_k=x_{k+1}-x_k\),\(y_k=\nabla f(x_{k+1})-\nabla f(x_k)\)。
BFGS公式:
DFP公式:
于是拟牛顿法的迭代公式变为
这里的步长\(\alpha_k\)可以使用某种线搜索方法进行确定。(关于线搜索,有时间写一篇博文)
拟牛顿法很好地解决了Hessian矩阵的计算问题,但是仍然没有解决存储问题。一个很好的解决办法是有限内存BFGS方法。这里不做进一步的介绍。
参考文献
[1] ***瑞,谢研. 电子工业出版社. 2016年. 算法笔记.
本文链接:www.superzhang.site/blog/common-method-of-unconstrained-optimization
posted on 2017-12-06 10:55 SuperZhang828 阅读(4953) 评论(0) 编辑 收藏 举报