本文结合网络资源对非线性规划算法进行整理。
非线性规划
1 最速下降法
1.1 解决的问题
最速梯度下降法解决的问题是无约束优化问题,而所谓的无约束优化问题就是对目标函数的求解,没有任何的约束限制的优化问题,比如求 minf(x),f:Rn→R。
求解这类的问题可以分为两大类:最优条件法和迭代法。
- 最优条件法是是指当函数存在解析形式,能够通过最优性条件求解出显式最优解。对于无约束最优化问题,如果f(x)在最优点x附近可微,那么x是局部极小点的必要条件为:df(x∗) 我们常常就是通过这个必要条件去求取可能的极小值点,再验证这些点是否真的是极小值点。当上式方程可以求解的时候,无约束最优化问题基本就解决了。
- 实际中,这个方程往往难以求解。这就引出了第二大类方法:迭代法。
1.2 最速梯度下降法
1.2.1 算法流程
- 选取初始点 x0,给定终止误差 ε,令 k=0;
- 计算 ∇f(xk),若 ∣∣∇f(xk)∣∣<ε,终止迭代,输出 x∗≈xk,否则,进入 3;
- 取 pk=−∇f(xk);
- 进行一维搜索,求 tk 使得 f(xk+tkpk)=t≥0minf(xk+tpk),令 xk+1=xk+tkpk,k=k+1,转 2。
1.2.2 步长 tk 的确定
1.2.2.1 方法一:一维寻优法
上述第 4 步中,f(xk+tpk) 已成为步长 t 的一元函数,故可以用任何的一维寻优法求出 tk,即
f(xk+1)=f(xk−tk∇f(xk))=t∈Rminf(xk−t∇f(xk))
1.2.2.2 方法二:微分法
令
φ(t)=f(xk+tpk)
则在最优点 tk 有
φ′(tk)=∇f(xk+tkpk)Tpk=−(pk+1)Tpk=0
这也证明了最速下降法在两个相邻点之间的搜索方向是正交的。
1.3 最速下降法与梯度下降法的区别
xk+1=xk−t∇f(xk)
tk=t∈Rargminf(xk−tk∇f(xk))
1.4 最速下降法的缺点
在一般情况下,当用最速下降法寻找极小点时,其搜索路径呈直角锯齿状,在开始几步,目标函数下降较快;但在接近极小点时,收敛速度就不太理想。特别是当目标函数的等值线为比较扁平的椭圆时,收敛就更慢了。
2 高斯牛顿法
2.1 牛顿法
2.1.1 用牛顿法求解零点
用牛顿法求解方程 f(x)=0 时,将 f(x) 在 xk 做一阶展开
f(xk)+f′(xk)Δxk=0
第 k→k+1 次迭代中,变化量为
Δxk=−H(xk)−1f(xk)
其中 H(xk)≈f′(xk)。
2.1.2 用牛顿法求解无约束优化
2.1.2.1 理解一
对于无约束优化问题 x∈RnminF(x),转为求解器一阶最优化的必要条件
F′(x∗)=0
便将无约束优化求解“转化”为了方程零点的求解。
由上面部分做的一阶展开,可以得到
H(xk)≈F′′(xk)
牛顿法求解优化问题时,实际求解的是
F′(xk)+F′′(xk)Δxk=0
当上式和 H(xk)≻0 同时满足时,原目标函数在 xk 的二阶展开的局部最小条件也被满足,即
Δxk=ΔxargminF(xk)+F′(xk)Δx+21ΔxTF′′(xk)Δx
也就是说,牛顿法单步迭代求解的过程可以理解为对原函数在 xk 的二阶展开求最小值。
每一次迭代过程取增量为
Δxk=−H(xk)F′(xk)=−[∇2F(xk)]−1∇F(xk)
2.1.2.2 理解二
我们对目标函数 F(x) 在 xk 进行二阶泰勒展开
F(xk+Δxk)≈F(xk)+J(xk)TΔxk+21ΔxkTH(xk)Δxk
式中仅 Δxk 为变量,上式为一个以 Δxk 为自变量的二次函数,且二次项系数为正(Hesse 矩阵正定 H(xk)≻0)的情况下可以取得最小值,在最小值点满足导数为 0,即
dΔxkdF(xk+Δxk)=0
解得增量方程
H(xk)Δxk=−J(Δxk)
第 k+1 轮迭代取
xk+1=xk+Δxk
2.1.2.3 算法流程
- 给定初始值 x0 和精度阈值 ε,并令 k=0;
- 计算 H(xk) 和 J(xk);
- 若 ∣∣J(xk)∣∣<ε,终止迭代输出 x∗≈xk,否则确定抖索方向为 Δxk=−H(xk)−1J(xk);
- 计算新的迭代点 xk+1=xk+Δxk,并令 k=k+1,转 2。
2.1.3 阻尼牛顿法
2.1.3.1 与牛顿法的区别
相比于牛顿法,阻尼牛顿法会对每一轮迭代的进行最优步长搜索,步长 λk 为
λk=λ∈RargminF(xk+λΔxk)
此时,第 k+1 轮迭代取
xk+1=xk+λkΔxk
2.1.3.2 算法流程
- 给定初始值 x0 和精度阈值 ε,并令 k=0;
- 计算 H(xk) 和 J(xk);
- 若 ∣∣J(xk)∣∣<ε,终止迭代输出 x∗≈xk,否则确定抖索方向为 Δxk=−H(xk)−1J(xk);
- 利用 λk=λ∈RargminF(xk+λΔxk) 确定搜索步长;
- 计算新的迭代点 xk+1=xk+λkΔxk,并令 k=k+1,转 2。
2.2 高斯牛顿法
高斯牛顿法针对最小二乘问题,采用一定的方法对牛顿法中的 Hesse 矩阵 H(xk) 进行近似,从而简化了计算量。
考虑最小二乘法问题
x∈RnminF(x)=21∣∣f(x)∣∣2
当 x 在 xk 处,具有增量 Δxk,优化目标函数取值为:
x∈RnminF(xk+Δxk)=21∣∣f(xk+Δxk)∣∣2
不同于牛顿法,我们不对优化目标函数进行泰勒展开,我们对优化目标函数中的一部分,即 f(x) 进行一阶泰勒展开。展开后优化目标函数为:
F(xk+Δxk)=21∣∣f(xk)+J(xk)TΔxk∣∣2
注意,不同于牛顿法,高斯牛顿法的雅可比矩阵 J(xk) (列向量)是函数 f(x) 的,而不是目标函数。
式中仅 Δxk 为变量,上式为一个以 Δxk 为自变量的二次函数,且二次项系数为正(Hesse 矩阵正定 H(xk)≻0)的情况下可以取得最小值,在最小值点满足导数为 0,即
dΔxkd21∣∣f(xk)+J(xk)TΔxk∣∣2=0
解得
J(xk)J(xk)TΔxk=−J(xk)f(xk)
记
H(xk)=J(xk)J(xk)T, g(xk)=−J(xk)f(xk)
因此得到高斯牛顿法的增量方程(搜索方向)
H(xk)Δxk=g(xk)
这里 H(xk) 是对 Hesse 矩阵的一种近似。
2.3 高斯牛顿法计算流程
- 给定初始值 x0,令 k=0;
- 对于第 k 次迭代,求出当前雅可比矩阵 J(xk) 和 f(xk) ;
- 求解增量方程 H(xk)Δxk=g(xk);
- 若 Δxk 足够小,则停止,输出 x∗≈xk。否则,令 xk+1=xk+Δxk,返回 2。
2.4 高斯牛顿法的缺点
- 求解 Δxk 时需要求解 (J(xk)J(xk)T)−1,但是 J(xk)J(xk)T 只有半正定性,极有可能是奇异矩阵或病态矩阵,导致增量不稳定,算法无法收敛。
- 奇异矩阵:不满秩矩阵。
- 病态矩阵:求解方程组时,对数据较小的扰动就会导致结果较大的波动。
- 若求得的 Δxk 过大就会使得泰勒展开的局部近似不准确,导致不收敛。
3 L-M(列文伯格-马夸尔特)法
3.1 L-M 法思想
针对高斯牛顿法的不足,L-M 法做了两点改进:
- 当求解增量 Δxk 时,对其设置置信区间;
- 在求解增量 Δxk 时,对其近似效果进行了量化,并根据量化结果对信赖区域进行调整,再重新计算增量Δxk,直到近似效果量化结果达到阈值。
3.2 置信区间 μ 的设置及对增量方程的影响
3.2.1 置信区间
增加置信区间后,问题从无约束的最小二乘问题变为有约束的最小二乘问题:
x∈RnminF(xk+Δxk)=21∣∣f(xk+Δxk∣∣2s.t.∣∣DΔxk∣∣2≤μ
式中 ∣∣DΔxk∣∣2≤μ 为置信区间的条件,D 是系数矩阵,为 n 维行向量,μ 为置信半径。
3.2.2 增量方程
L-M 法的增量方程为
(H(xk)+λDTD)Δxk=g(xk)
其中,H(xk),g(xk) 和高斯牛顿法中相同。
3.2.3 近似程度的量化
定义指标 ρ 衡量近似程度:
ρ=J(xk)TΔxkf(xk+Δxk)−f(xk)
- 当 ρ 接近 1 时,近似程度最好;
- 当 ρ 太小时,实际减小的值远小于近似函数减小的值,近似效果差,需要缩小近似范围 μ;
- 当 ρ 较大时,实际减小的值大于近似函数减小的值,近似效果差,需要增大近似范围
3.3 L-M 法
3.3.1 列文伯格法
设置系数矩阵 D=In。
3.3.2 马夸尔特法
系数矩阵 D 为 J(xk)J(xk)T 对角元素的平方根。
3.3.3 算法流程
3.3.3.1 算法
- 给定初始值 x0 以及初始置信半径 μ,令 k=0;
- 对于第 k 次迭代,在高斯牛顿法的基础上,添加置信区间约束 ∣∣DΔxk∣∣2≤μ;
- 计算 ρ;
- 若 ρ>43,设置 μ=31μ,若 ρ<41,设置 μ=2μ;
- 令 xk+1=xk+Δxk;
- 判断算法是否收敛,若不收敛,则回到 2,否则结束输出 x∗≈xk。
3.3.3.2 置信域调整方案一
- 如果 ρ>43,设置 μ=31μ;
- 如果 ρ<41,设置 μ=2μ。
3.3.3.3 置信域调整方案二
- 如果 ρ>0,则 μ=μ×max{31,1−(2ρ−1)3}, ν=2;
- 否则,μ=μ×ν, ν=2ν。
对于错误的 Δx,也就是 ρ<0 的情况,将会迅速增大阻尼系数,使下一步的 Δx 趋向于更小。比方案一多了一个参数 ν。
3.4 L-M 法与高斯牛顿法对比
列文伯格-马夸尔特在一定程度上解决了线性方程组系数矩阵的非奇异和病态问题,但算法收敛速度相较于高斯牛顿更慢。因此,当问题性质较好时,选择高斯牛顿方法;问题接近病态时,选择列文伯格-马夸尔特方法。
4 共轭梯度法
共轭梯度法用于解决无约束凸二次规划
minf(x)=21xTQx+qTx+c
式中 Q 为对称正定矩阵,q∈Rn,c∈R。
目标函数在最优点 x∗ 有一阶导数为 0,即
Qx∗+q=0
这也意味着求解上述规划等价于求解方程
Qx=−q
4.1 确定步长
根据迭代公式,有
f(xk+1)=f(xk+λkΔxk)=21(xk+λkΔxk)TQ(xk+λkΔxk)+qT(xk+λkΔxk)+c
求导
dλkdf(xk+1)=ΔxkTQ(xk+λkΔxk)+ΔxkTq=ΔxkTQxk+ΔxkTQλkΔxk+ΔxkTq=0ΔxkT(Qxk+q)=−ΔxkTQλkΔxkλk=−ΔxkTQΔxkΔxkT(Qxk+q)=−ΔxkTQΔxkΔxk∇f(xk)
4.2 寻找最优方向
4.2.1 共轭方向组
若 Q∈Rn×n 为正定对称矩阵,d1,d2,...,dm∈Rn,当 i=j 时有 diTQdj=0,则 d1,d2,...,dm 为关于矩阵 Q 共轭,称其为共轭方向组。
4.2.2 最优方向
只需在共轭方向上寻找步长即可找到全局最优解(证明略)。将方向写为
Δxk=−∇f(xk)+γkΔxk−1
将共轭方向组性质 Δxk−1TQΔxk=0 带入得
Δxk−1TQ(−∇f(xk)+γkΔxk−1)=0γk=Δxk−1TQΔxk−1Δxk−1TQ∇f(xk)
4.2.3 证明 Δxi 和 Δxj(j=0,1,...,i−1) 满足共轭关系
这里,为方便,改为证明 Δxi+1 和 Δxj(j=0,1,..,i) 满足共轭关系:
ΔxjTQΔxi+1=ΔxjTQ(−∇f(xi+1)+γiΔxi)=ΔxjTQ(−∇f(xi+1))+γiΔxjTQΔxi
令 ΔxjTQΔxi=0 可以得到 ΔxjTQΔxi+1=ΔxjTQ(−∇f(xi+1)),同乘最优步长 λi 得到
λkΔxjTQΔxi+1=λiΔxjTQ(−∇f(xi+1))=(−∇f(xi+1))TQλiΔxj
根据 xj+1=xj+γiΔxj 得到:
(−∇f(xi+1))TQλiΔxj=(−∇f(xi+1))TQ(xj+1−xj)=(−∇f(xi+1))T(∇f(xj+1)−∇f(xj))
根据 Δxj+1=−∇f(xj+1)+γjΔxj 得到
∇f(xj+1)−∇f(xj)=(γjΔxj−Δxj+1)−(γj−1Δxj−1−Δxj)(−∇f(xi+1))TQλiΔxj=(−∇f(xi+1))T((γjΔxj−Δxj+1)−(γj−1Δxj−1−Δxj))
由于 Δxi(i=0,1,...,n−1) 与 ∇f(xn) 正交(证明略),Δxi(i=0,1,...,n−1) 构成共轭方向组,对于共轭方向组 {Δxj,Δxj+1},有
(−∇f(xi+1))T(γjΔxj−Δxj+1)=0(−∇f(xi+1))T(γj−1Δxj−1−Δxj)=0
因此得到 ΔxjTQΔxi=0,从而证明共轭。
4.3 算法流程
- 初始化 x0, Δx0=∇f(x0), k=0;
- 若 ∇f(xk)=0,返回 x∗≈xk,结束算法,否则进入 3;
- 若 ∇f(xk)=0,则令 xk+1=xk+λkΔxk, k=k+1,返回 2。
5 拟牛顿法
为了解决牛顿法中海森矩阵 H 计算复杂的问题,拟牛顿法提供了另外一种解决思路:通过使用不含有二阶导数的矩阵 U 代替牛顿法中的 H,根据矩阵 U 构造的不同,具有不同的拟牛顿法。
5.1 拟牛顿法的基本原理
牛顿法搜索方向为
Δxk=−H(xk)−1g(xk)
现在构造一个矩阵 U 来近似矩阵 H,当 f(x) 为二次函数的时候,H 为常数矩阵,且任意两点 xk 和 xk+1 之间的梯度差为:
∇f(xk+1)−∇f(xk)=H⋅(xk+1−xk)xk+1−xk=H−1⋅(∇f(xk+1)−∇f(xk))
因此,当 f(x) 不是二次函数的时候,仿照上式,构建矩阵 U 且要求满足下面的关系:
xk+1−xk=Uk+1⋅[∇f(xk+1)−∇f(xk)]
此时可以按照下式来计算增量(也称为拟牛顿条件):
Δxk=Uk+1−1⋅Δg(xk)
5.2 DFP
为方便区分,下面把 U 称为 D。
5.2.1 DFP 结果
在已知 Dk 的情况下,使用增量形式求取 Dk+1=ΔDk+Dk,构造 ΔDk 如下:
ΔDk=Δg(xk)TΔxkΔxkΔxkT−Δg(xk)TDkΔg(xk)DkΔg(xk)Δg(xk)TDk
5.2.2 DFP 算法流程
- 给定初始点 x0,允许误差 ε,令 D0=In, k=0;
- 计算搜索方向 Δxk=−Dk−1⋅g(xk);
- 从 xk 出发沿 gk 做一维搜索,获得最优步长 λk=λ∈Rargminf(xk+λΔxk),更新 xk+1=xk+λkΔxk;
- 若 ∣∣g(xk+1)∣∣<ε 则停止迭代,输出 x∗≈xk+1,否则转 5;
- 计算 Δg(xk), Δxk,用上面的式子计算 Dk+1;
- 令 k=k+1,转 2。
5.3 BFGS
为方便区分,下面把 U 称为 B。
5.3.1 BFGS 结果
ΔBk=ΔxkTΔg(xk)Δg(xk)Δg(xk)T−ΔxkTBkΔxkBkΔxkΔxkTBk
即将 DFP 中 Δx 和 Δg 调换位置。
5.3.2 谢尔曼 · 莫里森公式
对于任意非奇异方阵 A,n 维向量 u, v,若 1+vTA−1u=0,则:
(A+uvT)−1=A−1−1+vTA−1u(A−1u)(vTA−1)
通过使用两次谢尔曼 · 莫里森公式,可以迭代求取 B 的逆:
Bk+1−1=(In−ΔxkTΔg(xk)ΔxkΔg(xk)T)Bk−1(In−ΔxkTΔg(xk)Δg(xk)ΔxkT)+ΔxkTΔg(xk)ΔxkΔxkT, B0=In
5.3.3 算法流程
- 给定初始点 x0,允许误差 ε,令 B0=In, k=0;
- 计算搜索方向 Δxk=−Bk−1⋅g(xk);
- 从 xk 出发沿 gk 做一维搜索,获得最优步长 λk=λ∈Rargminf(xk+λΔxk),更新 xk+1=xk+λkΔxk;
- 若 ∣∣g(xk+1)∣∣<ε 则停止迭代,输出 x∗≈xk+1,否则转 5;
- 计算 Δg(xk), Δxk,用上面的式子计算 Bk+1−1;
- 令 k=k+1,转 2。
需要注意的是,BFGS 从头至尾都不用计算矩阵的逆。
5.4 L-BFGS
5.4.1 L-BFGS 原理
在BFGS 中需要保存 B−1,而实际上,仅保存每轮的 Δx 和 Δg 即可递归的计算当前的 B−1,从而减小内存占用
Bk+1−1=(i=k∏0ViT)B0−1(i=0∏kVi)+j=0∑k(i=k∏j+1ViT)(ρjΔxjΔxjT)(i=j+1∏kVi)ρk=ΔxkTΔg(xk)1Vk=In−ρkΔg(xk)ΔxkT
实际应用中,可以仅使用最近 m 个 Δx 和 Δg 来计算
Bk−1=(i=k−1∏k−mViT)B0−1(i=k−m∏k−1Vi)+j=k−1∑k−m(i=k∏j+1ViT)(ρjΔxjΔxjT)(i=j+1∏kVi)
5.4.2 算法流程
- 给定初始点 x0,允许误差 ε,预定保留最近 m 个向量,设置 B0−1, t=0;
- 计算搜索方向 Δxk=−Bk−1⋅g(xk);
- 从 xk 出发沿 gk 做一维搜索,获得最优步长 λk=λ∈Rargminf(xk+λΔxk),更新 xk+1=xk+λkΔxk;
- 若 ∣∣g(xk+1)∣∣<ε 则停止迭代,输出 x∗≈xk+1,否则转 5;
- 判断 k>m,删掉存储的 Δxk−m 和 Δg(xk−m);
- 计算 Δg(xk), Δxk,令 k=k+1,转 2。
6 直线拟合——最小二乘
给定一些列 xi,yi(i=1,2,...,N),假定它们具有线性关系,既可以用 y=kx+b 的方式进行拟合,任务是找到最优的 k 和 b 使得 xi,yi 和直线y=kx+b 最接近(一元回归)。此时问题就变为了求解目标规划
minf=i=1∑N(yi−kxi−b)2
使用线性代数的表达形式:
⎩⎪⎪⎨⎪⎪⎧y1=kx1+by2=kx2+b...yN=kxN+b
转为矩阵形式
⎣⎢⎢⎡y1y2...yN⎦⎥⎥⎤=⎣⎢⎢⎡x1x2...xN11...1⎦⎥⎥⎤[kb]
令
Y=⎣⎢⎢⎡y1y2...yN⎦⎥⎥⎤, K=[kb], X=⎣⎢⎢⎡x1x2...xN11...1⎦⎥⎥⎤
则可以写成矩阵表达式
Y=XK
此时,为求解 K,若 X 可逆,那么可以直接求得,然而若不可逆,则可以通过如下的方式求解:
\Rightarrow& Y=XK\\
\Rightarrow& X^TY=X^TXK\\
\Rightarrow& (X^TX)^{-1}X^TY=(X^TX)^{-1}X^TXK