Unconstrained Optimization (Derivative-based methods)
Table of Contents
1. 无约束最优化简介
无约束最优化(Unconstrained Optimization)问题表示如下:
即求
无约束最优化问题的解法(方法)可以分为两大类:“Derivative-based optimization”和“Derivative-free optimization”(比如 Pattern search, Powell's method 等等)。不过,“Derivative-free optimization”方法的收敛速度一般比较慢,本文不介绍它们。本文的重点是介绍“基于导数”的无约束最优化方法。
参考:
本文主要摘自:最优化理论与算法(第 2 版), 陈宝林
2. Steepest Descent Method
考虑无约束最优化问题:
梯度下降法(Gradient Descent)是一种迭代算法,选取适当的初值后,不断迭代更新
其中,
有很多设置步长
2.1. 最速下降法总结
最速下降法每次迭代时都采用不同的
其中
也就是:
最速下降法计算步骤:
(1) 给定初始点
(2) 计算搜索方向
(3) 如果
(4) 令
2.2. 最速下降法应用实例
用最速下降法求解下面优化问题(精度
解:记
取初值点
第 1 次迭代。 计算搜索方向
由于
从
由于:
所以:
令:
上式解得的值即为
由迭代公式有:
第 2 次迭代。 计算搜索方向
由于
从
由于:
所以:
令:
上式解得的值即为
由迭代公式有:
第 3 次迭代。 其过程类似,直接给出结果:
从而有:
这时
实际上,这个问题的最优解为:
3. Newton's Method
在数学中,有两个地方会提到牛顿方法:在微积分领域中,牛顿方法用于求解方程的根;在最优化理论中,牛顿方法用于求解无约束最优化问题。这里介绍的是后者。
参考:https://en.wikipedia.org/wiki/Newton%27s_method_in_optimization
3.1. 一维情况
为简单起见,先介绍牛顿方法求解一维情况下无约束最优化问题(即单变量的极小化问题)。
考虑问题:
假设
为了求
3.2. 多维情况
前面介绍了单变量极小化问题的牛顿法,这里推广到一般无约束问题的牛顿法。
设
为了求
设
把求得的
经过上面公式多次迭代后,得到的序列
3.3. 牛顿法应用实例
3.4. 牛顿法优缺点
牛顿方法的优点是 收敛速度很快 ,经过较少的迭代次数即可接近极小值点。
牛顿方法的缺点:
(1) 需要计算
(2) 运用牛顿法时,牛顿方向
(3) 运用牛顿法时,初始点的选择十分重要。如果初始点远离极小点,牛顿法可能不收敛。如优化问题
3.5. 阻尼牛顿法(Damped Newton's Method)
阻尼牛顿法与原始牛顿法的区别在于增加了沿牛顿方向的一维搜索,阻尼牛顿法的迭代公式为:
由于阻尼牛顿法含有一维搜索,因此 每次迭代时目标函数值一般会有所下降(绝不会上升)。
阻尼牛顿法是对原始牛顿法非常小的一个改进。 有时,当我们提到牛顿法时,就是指阻尼牛顿法。
4. Quasi-Newton Method
4.1. 动机
运用牛顿法(阻尼牛顿法)时,需要 计算目标函数的 Hessian 矩阵的逆矩阵,这个计算过程比较复杂。
为了解决这个问题,人们提出了拟牛顿法(Quasi-Newton Method),其基本思想是 用不包含二阶导数的矩阵来近似牛顿法中的 Hessian 矩阵的逆矩阵。 由于构造近似矩阵的方法不同,因而出现了不同的拟牛顿法。
4.2. 拟牛顿条件
为了构造
设在第
对上式两个求偏导有:
令
定义下面两个符号:
前面的式子可写为:
设矩阵
这样,计算出
4.3. Davidon-Fletcher-Powell (DFP)
DFP(Davidon-Fletcher-Powell)著名的拟牛顿法,它由 William C. Davidon 首先提出,后来被 Roger Fletcher 和 Michael J. D. Powell 改进。
DFP 方法采用下面公式(这里直接给出结论,不推导)迭代计算拟牛顿条件中的
4.3.1. DFP 算法总结
输入:目标函数
输出:
DFP 方法计算步骤如下:
(1) 选定初始点
(2) 置
(3) 令
(4) 求步长
(5) 置
(6) 计算
(7) 置
4.3.2. DFP 算法应用实例
用 DFP 方法求解下列问题:
解:记
初始点
第 1 次迭代,在点
令搜索方向:
求
得到
计算
第 2 次迭代。
计算矩阵:
令:
求
得到
这时有:
驻点为零的点就是极值点。因此得到的最优解为:
4.4. Broyden-Fletcher-Goldfarb-Shanno (BFGS)
BFGS(Broyden–Fletcher–Goldfarb–Shanno)方法另一种拟牛顿法。
BFGS 方法采用下面公式(这里直接给出结论,不推导)迭代计算拟牛顿条件中的
BFGS 算法和 DFP 算法的具体步骤是一样的,仅仅只是计算
4.4.1. BFGS 公式和 DFP 公式的关系
在 BFGS 公式和 DFP 公式中,
Figure 1: BFGS 公式和 DFP 公式的关系
4.4.2. Limited-memory BFGS (L-BFGS)
假设原始优化问题
4.4.3. 使用 SciPy 库进行最优化
Python 的 SciPy 库实现了常见的最优化算法,参考:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
下面是使用 BFGS 算法求解最优化问题
>>> from scipy import optimize >>> def f(x): ... return (x[0] - 1)**4 + x[1]**2 ... >>> optimize.minimize(f, [0, 0], method='BFGS') status: 0 success: True njev: 15 nfev: 60 hess_inv: array([[ 1.04206844e+03, 1.26935227e+00], [ 1.26935227e+00, 5.33941376e-01]]) fun: 1.0776982563563174e-09 x: array([ 1.00570151e+00, -4.58021983e-06]) message: 'Optimization terminated successfully.' jac: array([ 7.41364167e-07, -9.14553849e-06])
上面输出中,倒数第 3 行就是求得的极小值点:
x: array([ 1.00570151e+00, -4.58021983e-06])