第九章: 无导数优化
文章目录
许多实际的问题给出来时 并不自带(或不易求得)导数信息. 原则上来说, 这类问题可以用 第八章的 有限差分法近似梯度(甚至是Hessian矩阵), 再把这些近似的导数用进更早一些章节的算法和框架中. 不过尽管有限差分法在某些应用上很有成效, 但它却 不能被当成一种无导数优化的普适方法. 原因有二:
- 可能需要计算过多的函数值;
- 数据中噪声(本章中我们定义噪声为计算函数时不准确度的度量)的存在, 使得这一方法不再可靠.
因此, 现已研究出多种不需要近似梯度的算法. 它们仅需要采样点集上的函数值以通过其他的方式得到新的迭代点.
无导数优化(Derivative-free optimization, DFO)算法区别于它们如何使用采样的函数值决定新的迭代点. 其中一类通过构建目标函数的线性或二次模型, 并在一个信赖域中极小化之求得. 我们将特别关注这些基于模型的算法, 这是因为它们与我们之前讨论的无约束极小化算法联系紧密. 其他的广为使用的DFO算法包括Nelder-Mead的单纯形反射法, 模式搜索法, 共轭方向法和模拟退火法. 本章中我们仅简要地介绍这些方法(除了模拟退火法, 这是因为它是一种非确定性的方法, 也即随机方法).
无导数优化算法并不如之前的那些基于梯度的算法发展得好. 当前的算法仅对小规模问题有效. 尽管大多数DFO算法已被推广至能够处理带简单约束的问题, 例如边界约束, 但如何处理带一般类型约束的问题尚在研究中. 这里我们也仅限讨论无约束优化问题
min
x
∈
R
n
f
(
x
)
.
\min_{x\in\mathbb{R}^n}f(x).
x∈Rnminf(x).
无导数优化算法通常(往往效果喜忧参半)用于极小化不可导的函数或者是尝试定位一个函数的全局极小点. 由于我们不牵涉对非光滑优化或全局优化的讨论, 我们的讲述将仅限于光滑问题, 即目标函数
f
f
f具有连续导数的情形. 我们会在第1,6节讨论噪声的影响.
1. 有限差分与噪声
一种显然的DFO算法是用有限差分法近似估计梯度, 之后再使用基于梯度的算法. 这方法有时会很有效, 并且我们也应当首先考虑这样的方法, 但有限差分估计在目标函数包含噪声的时候可能会变得不够准确. 我们在本节中尝试量化噪声的影响.
函数计算过程的噪声有许多的来源.
- 函数 f ( x ) f(x) f(x)依赖于随机模拟, 则在计算函数时就会带上随机误差;
- f f f来源于求解某个微分方程或其他的复杂数值程序, 则在计算时所涉及的容忍限也会给 f f f的值带来误差;
- …
于是, 目标函数 f f f具有形式 f ( x ) = h ( x ) + ϕ ( x ) , f(x)=h(x)+\phi(x), f(x)=h(x)+ϕ(x),其中 h h h为一光滑函数, ϕ \phi ϕ表示噪声. 注意我们把 ϕ \phi ϕ写成 x x x的函数但实际上是不必要的. 例如, 若 f f f的计算依赖与随机模拟, 则 ϕ \phi ϕ的值在每次计算中都会不一样, 即使是在同样的 x x x上. 不过上面的表示在阐释噪声带来的负面影响以及发展无导数优化的算法时是非常有用的.
给定 ϵ \epsilon ϵ, 则 ∇ f \nabla f ∇f在 x x x处的中心差分近似为 ∇ ϵ f ( x ) = [ f ( x + ϵ e i ) − f ( x − ϵ e i ) 2 ϵ ] i = 1 , 2 , … , n , \nabla_{\epsilon}f(x)=\left[\frac{f(x+\epsilon e_i)-f(x-\epsilon e_i)}{2\epsilon}\right]_{i=1,2,\ldots,n}, ∇ϵf(x)=[2ϵf(x+ϵei)−f(x−ϵei)]i=1,2,…,n,其中 e i e_i ei为第 i i i个单位向量. 我们想要联系 ∇ ϵ f ( x ) \nabla_{\epsilon}f(x) ∇ϵf(x)与潜在的光滑函数 h ( x ) h(x) h(x). 定义噪声水平 η \eta η为 ϕ \phi ϕ在以 x x x为中心 2 ϵ 2\epsilon 2ϵ为边长的方形闭区域中的最大值, 即 η ( x ; ϵ ) = sup ∥ z − x ∥ ∞ ≤ ϵ ∣ ϕ ( z ) ∣ . \eta(x;\epsilon)=\sup_{\Vert z-x\Vert_{\infty}\le\epsilon}|\phi(z)|. η(x;ϵ)=∥z−x∥∞≤ϵsup∣ϕ(z)∣.将中心差分公式代入可得以下结果.
引理1 设 ∇ 2 h \nabla^2h ∇2h在方形邻域 { z ∣ ∥ z − x ∥ ∞ ≤ ϵ } \{z|\Vert z-x\Vert_{\infty}\le\epsilon\} {z∣∥z−x∥∞≤ϵ}内Lipschitz连续, 其中Lipschitz常数为 L h L_h Lh. 则我们有 ∥ ∇ ϵ f ( x ) − ∇ h ( x ) ∥ ∞ ≤ L h ϵ 2 + η ( x ; ϵ ) ϵ . \Vert\nabla_{\epsilon}f(x)-\nabla h(x)\Vert_{\infty}\le L_h\epsilon^2+\frac{\eta(x;\epsilon)}{\epsilon}. ∥∇ϵf(x)−∇h(x)∥∞≤Lhϵ2+ϵη(x;ϵ).
因此中心差分的误差来源有两个:
- 有限差分本身的误差 O ( ϵ 2 ) O(\epsilon^2) O(ϵ2); 以及
- 噪声带来的误差 η ( x ; ϵ ) / ϵ \eta(x;\epsilon)/\epsilon η(x;ϵ)/ϵ.
若噪声极大地影响了差分区域, 我们对
∇
ϵ
f
(
x
)
\nabla_{\epsilon}f(x)
∇ϵf(x)就不能抱有太大的幻想了. 这时候其实若
−
∇
ϵ
f
(
x
)
-\nabla_{\epsilon}f(x)
−∇ϵf(x)是下降方向就已经够幸运了.
除了有限差分法中使用的当前点附近的较小区域的函数值, 我们其实可以将选取的点分的更开并使用它们构建目标函数的模型. 这一方法(我们将在下一节和第6节讨论)可能对于噪声更加强健.
2. 基于模型的方法
前面几章中一些无约束优化的高效算法往往是先对目标函数 f f f构建一个二次模型, 再尝试极小化之以获取搜索方向. 这一模型基于当前迭代点的函数值和导数值信息. 当导数无法获取时, 我们可以定义模型 m k m_k mk为目标函数 f f f在适当选定的采样点上函数值所定义的插值二次函数. 这样的模型通常是非凸的, 因此本章中基于模型的算法将使用信赖域的框架计算搜索方向.
假设在当前迭代点 x k x_k xk处我们有采样点集 Y = { y 1 , y 2 , … , y q } , y i ∈ R n , i = 1 , 2 , … , q Y=\{y^1,y^2,\ldots,y^q\},y^i\in\mathbb{R}^n,i=1,2,\ldots,q Y={y1,y2,…,yq},yi∈Rn,i=1,2,…,q. 假设 x k x_k xk为集合中的一个元素且在 Y Y Y中没有任何元素比 x k x_k xk有更小的函数值. 我们希望建立二次模型 m k ( x k + p ) = c + g T p + 1 2 p T G p . m_k(x_k+p)=c+g^Tp+\frac{1}{2}p^TGp. mk(xk+p)=c+gTp+21pTGp.我们不能直接定义 g = ∇ f ( x k ) , G = ∇ 2 f ( x k ) g=\nabla f(x_k),G=\nabla^2f(x_k) g=∇f(xk),G=∇2f(xk), 而是通过以下插值条件间接决定(包括 c c c): m k ( y l ) = f ( y l ) , l = 1 , 2 , … , q . m_k(y^l)=f(y^l),\quad l=1,2,\ldots,q. mk(yl)=f(yl),l=1,2,…,q.由于模型中有 1 + n + 1 2 n ( n + 1 ) = 1 2 ( n + 1 ) ( n + 2 ) 1+n+\frac{1}{2}n(n+1)=\frac{1}{2}(n+1)(n+2) 1+n+21n(n+1)=21(n+1)(n+2)个未知量, 因此满足插值条件的 m k m_k mk唯一仅当 q = 1 2 ( n + 1 ) ( n + 2 ) . q=\frac{1}{2}(n+1)(n+2). q=21(n+1)(n+2).此时插值条件可写作未知量的线性方程组. 若选取的插值点 y 1 , y 2 , … , y q y^1,y^2,\ldots,y^q y1,y2,…,yq使得线性系统的系数矩阵非奇异, 则理论上 m k m_k mk是唯一确定的.
一旦有了 m k m_k mk, 我们就可通过求解信赖域子问题 min p m k ( x k + p ) , s u b j e c t    t o   ∥ p ∥ 2 ≤ Δ \min_pm_k(x_k+p),\quad\mathrm{subject\,\,to\,}\Vert p\Vert_2\le\Delta pminmk(xk+p),subjectto∥p∥2≤Δ计算搜索方向. 求解方法可见第四章. 若 x k + p x_k+p xk+p在目标函数上取得了充分的下降, 则新的迭代点就取为 x k + 1 = x k + p x_{k+1}=x_k+p xk+1=xk+p, 并更新信赖域半径, 进行新一步迭代. 否则拒绝这一搜索方向, 此时需要改进插值点集 Y Y Y或者缩小信赖域.
为减小算法的计算耗费, 每步迭代中我们将更新 m k m_k mk而不是从头重新计算. 实际上, 我们会选取二次多项式空间中的一组便利的基, 比如Lagrange多项式和Newton多项式. 这些基的性质即可以用来度量采样点集 Y Y Y是否合适, 也可以在需要的时候对其作出一些改变. 将所有这些问题考虑进去并有效解决的完整算法要比第六章中讨论的拟牛顿法复杂得多. 因此, 对于基于模型的DFO方法, 我们仅提供大致的框架.
正如一般的信赖域算法, 步长接收和信赖域更新的策略均基于函数值实际的减少与模型预测的减少的比值, 即 ρ = f ( x k ) − f ( x k + ) m k ( x k ) − m k ( x k + ) , \rho=\frac{f(x_k)-f(x_k^+)}{m_k(x_k)-m_k(x_k^+)}, ρ=mk(xk)−mk(xk+)f(xk)−f(xk+),其中 x k + x_k^+ xk+表示试探点. 本节中整数 q q q定义为 1 2 ( n + 1 ) ( n + 2 ) \frac{1}{2}(n+1)(n+2) 21(n+1)(n+2).
算法1 (Model-Based Derivative-Free Method)
Choose an interpolation set
Y
=
{
y
1
,
y
2
,
…
,
y
q
}
Y=\{y^1,y^2,\ldots,y^q\}
Y={y1,y2,…,yq} such that the linear system is nonsingular, and select
x
0
x_0
x0 as a point in this set such that
f
(
x
0
)
≤
f
(
y
i
)
f(x_0)\le f(y^i)
f(x0)≤f(yi) for all
y
i
∈
Y
y^i\in Y
yi∈Y. Choose an initial trust region radius
Δ
0
\Delta_0
Δ0, a constant
e
t
a
∈
(
0
,
1
)
eta\in(0,1)
eta∈(0,1), and set
k
←
0
k\leftarrow0
k←0.
repeat until a convergence test is satisfied:
\quad\quad
Form the quadratic model
m
k
(
x
k
+
p
)
m_k(x_k+p)
mk(xk+p) that satisfies the interpolation conditions;
\quad\quad
Compute a step
p
p
p by approximately solving subproblem;
\quad\quad
Define the trial point as
x
k
+
=
x
k
+
p
x_k^+=x_k+p
xk+=xk+p;
\quad\quad
Compute the ratio
ρ
\rho
ρ;
\quad\quad
if
ρ
≥
η
\rho\ge\eta
ρ≥η
\quad\quad\quad\quad
Replace an element of
Y
Y
Y by
x
k
+
x_k^+
xk+;
\quad\quad\quad\quad
Choose
Δ
k
+
1
≥
Δ
k
\Delta_{k+1}\ge\Delta_k
Δk+1≥Δk;
\quad\quad\quad\quad
Set
x
k
+
1
←
x
k
+
x_{k+1}\leftarrow x_k^+
xk+1←xk+;
\quad\quad\quad\quad
Set
k
←
k
+
1
k\leftarrow k+1
k←k+1 and go to the next iterations;
\quad\quad
else if the set
Y
Y
Y need not be improved
\quad\quad\quad\quad
Choose
Δ
k
+
1
<
Δ
k
\Delta_{k+1}<\Delta_k
Δk+1<Δk;
\quad\quad\quad\quad
Set
x
k
+
1
←
x
k
x_{k+1}\leftarrow x_k
xk+1←xk;
\quad\quad\quad\quad
Set
k
←
k
+
1
k\leftarrow k+1
k←k+1 and go to the next iteration;
\quad\quad
end (if)
\quad\quad
Invoke a geometry-improving procedure to update
Y
Y
Y:
\quad\quad\quad\quad
at least one of the points in
Y
Y
Y is replaced by some other point, with the goal of improving the interpolation condition;
\quad\quad
Set
Δ
k
+
1
←
Δ
k
\Delta_{k+1}\leftarrow\Delta_k
Δk+1←Δk;
\quad\quad
Choose
x
^
\hat{x}
x^ as an element in
Y
Y
Y with lowest function value;
\quad\quad
Set
x
k
+
←
x
^
x_k^+\leftarrow\hat{x}
xk+←x^ and recompute
ρ
\rho
ρ;
\quad\quad
if
ρ
≥
η
\rho\ge\eta
ρ≥η
\quad\quad\quad\quad
Set
x
k
+
1
←
x
k
+
x_{k+1}\leftarrow x_k^+
xk+1←xk+;
\quad\quad
else
\quad\quad\quad\quad
Set
x
k
+
1
←
x
k
x_{k+1}\leftarrow x_k
xk+1←xk;
\quad\quad
end (if)
\quad\quad
Set
k
←
k
+
1
k\leftarrow k+1
k←k+1;
end (repeat)
算法说明:
- ρ ≥ η \rho\ge\eta ρ≥η的情形表示我们在价值函数上获得了充分的下降. 此时我们将接受 x k + x_k^+ xk+为新的迭代点并加入 Y Y Y, 再从 Y Y Y中移除一个元素. 而当下降不足 ( ρ < η ) (\rho<\eta) (ρ<η), 此时就有两种诱因: 插值点集 Y Y Y选取不当或信赖域过大. 前者可能是因为迭代点都差不多在 R n \mathbb{R}^n Rn的一个不包含解的低维曲面上. 此时算法可能会收敛到这个子集中的极小点. 这种情形可通过监测线性系统(具体说, 是插值条件的满足情况, 后面会说明)的条件数发现. 若条件数过高, 我们就要改进 Y Y Y, 通常是以一个新元素替代 Y Y Y中现有的一个元素使得插值系统尽可能远离奇异. 若 Y Y Y的选取适当(即条件数适宜), 我们仅缩小信赖域半径 Δ \Delta Δ, 这就与第四章相同了.
- 一种较好的初始 Y Y Y是 R n \mathbb{R}^n Rn中单纯形的顶点和边上的中点.
- 二次模型的使用限制了可以求解的问题的规模. 光是为启动算法就需要达
O
(
n
2
)
O(n^2)
O(n2)次函数值的计算, 这对较小的
n
n
n(比如
n
=
50
n=50
n=50)也是很繁重的. 另外, 迭代过程的计算量也很大. 即使每步对
m
k
m_k
mk更新而不是重新计算, 用于构建
m
k
m_k
mk和计算步长的计算量也将达
O
(
n
4
)
O(n^4)
O(n4).
为缓解这些困难, 我们可以线性模型代替二次模型, 即设 G = O G=O G=O. 这样的模型只有 n + 1 n+1 n+1个参数, 从而只需 Y Y Y有 n + 1 n+1 n+1个插值点, 此时每步迭代的耗费为 O ( n 3 ) O(n^3) O(n3). 而算法1对于线性模型也有较好的兼容度(仅需较小修改), 但这样一来就牺牲了收敛速度, 这是因为线性模型难以捕捉问题的曲率信息. 因此, 有些基于模型的算法以 n + 1 n+1 n+1个初始点出发, 用线性模型计算步长, 但当 q = 1 2 ( n + 1 ) ( n + 2 ) q=\frac{1}{2}(n+1)(n+2) q=21(n+1)(n+2)个函数值变得可计算时便转而使用二次模型.
2.1 插值与多项式基
下面我们详细介绍如何利用插值构建目标函数的模型.
- 线性模型.
我们先从线性模型开始: m k ( x k + p ) = f ( x k ) + g T p . m_k(x_k+p)=f(x_k)+g^Tp. mk(xk+p)=f(xk)+gTp.为确定向量 g ∈ R n g\in\mathbb{R}^n g∈Rn, 我们施加插值条件 m k ( y l ) = f ( y l ) , l = 1 , 2 , … , n m_k(y^l)=f(y^l),l=1,2,\ldots,n mk(yl)=f(yl),l=1,2,…,n, 也即 ( s l ) T g = f ( y l ) − f ( x k ) , l = 1 , 2 , … , n , (s^l)^Tg=f(y^l)-f(x_k),\quad l=1,2,\ldots,n, (sl)Tg=f(yl)−f(xk),l=1,2,…,n,其中 s l = y l − x k , l = 1 , 2 , … , n . s^l=y^l-x_k,\quad l=1,2,\ldots,n. sl=yl−xk,l=1,2,…,n.于是便有 g g g满足的线性方程组, 其系数矩阵的行为 ( s l ) T (s^l)^T (sl)T. 因此模型被唯一确定当且仅当插值点 { y 1 , y 2 , … , y n } \{y^1,y^2,\ldots,y^n\} {y1,y2,…,yn}使得向量组 { s l : l = 1 , 2 , … , n } \{s^l:l=1,2,\ldots,n\} {sl:l=1,2,…,n}是线性无关的. 若这一条件成立, 则我们称由 x k , y 1 , y 2 , … , y n x_k,y^1,y^2,\ldots,y^n xk,y1,y2,…,yn构成的单纯形是非退化的. - 二次模型.
接下来考虑构建二次模型. 重写模型如下: m k ( x k + p ) = f ( x k ) + g T p + ∑ i < j G i j p i p j + 1 2 ∑ i G i i p i 2 = d e f f ( x k ) + g ^ T p ^ , \begin{aligned}m_k(x_k+p)&=f(x_k)+g^Tp+\sum_{i<j}G_{ij}p_ip_j+\frac{1}{2}\sum_iG_{ii}p_i^2\\&\xlongequal{def}f(x_k)+\hat{g}^T\hat{p},\end{aligned} mk(xk+p)=f(xk)+gTp+i<j∑Gijpipj+21i∑Giipi2deff(xk)+g^Tp^,其中 g ^ ≡ ( g T , { G i j } i < j , { 1 2 G i i } ) T , p ^ ≡ ( p T , { p i p j } i < j , { 1 2 p i 2 } ) T . \hat{g}\equiv\left(g^T,\{G_{ij}\}_{i<j},\left\{\frac{1}{\sqrt{2}}G_{ii}\right\}\right)^T,\quad \hat{p}\equiv\left(p^T,\{p_ip_j\}_{i<j},\left\{\frac{1}{\sqrt{2}}p_i^2\right\}\right)^T. g^≡(gT,{Gij}i<j,{21Gii})T,p^≡(pT,{pipj}i<j,{21pi2})T.此时二次模型与线性模型具有同样的形式, 因此亦可用同样的方法确定未知的系数 g ^ \hat{g} g^.
多元二次函数可以用多种方式表示. 单项式基的表示让我们能够通过设置
G
G
G中一些元素为0来表现已知的Hessian结构. 而其他的基则在规避线性系统奇异性时显得更加的便利.
我们以
{
ϕ
i
(
⋅
)
}
i
=
1
q
\{\phi_i(\cdot)\}_{i=1}^q
{ϕi(⋅)}i=1q表示
n
n
n维二次函数空间中的一组基. 因此二次模型可表示成
m
k
(
x
)
=
∑
i
=
1
q
α
i
ϕ
i
(
x
)
.
m_k(x)=\sum_{i=1}^q\alpha_i\phi_i(x).
mk(x)=i=1∑qαiϕi(x).当行列式
δ
(
Y
)
=
d
e
f
det
(
ϕ
1
(
y
1
)
⋯
ϕ
1
(
y
q
)
⋮
⋮
ϕ
q
(
y
1
)
⋯
ϕ
q
(
y
q
)
)
\delta(Y)\xlongequal{def}\det\begin{pmatrix}\phi_1(y^1) & \cdots & \phi_1(y^q)\\\vdots & & \vdots\\\phi_q(y^1) & \cdots & \phi_q(y^q)\end{pmatrix}
δ(Y)defdet⎝⎜⎛ϕ1(y1)⋮ϕq(y1)⋯⋯ϕ1(yq)⋮ϕq(yq)⎠⎟⎞不为0时, 插值点集
Y
=
{
y
1
,
y
2
,
…
,
y
q
}
Y=\{y^1,y^2,\ldots,y^q\}
Y={y1,y2,…,yq}唯一决定系数
α
i
\alpha_i
αi.
随着基于模型的算法行进, 行列式
δ
(
Y
)
\delta(Y)
δ(Y)可能会接近0, 从而引发数值上的不稳定. 因此一些算法包含了保持插值点处于合适位置的机制. 下面我们介绍其中一种.
2.2 更新插值点集
与其等着行列式
δ
(
Y
)
\delta(Y)
δ(Y)小于某个阈值, 我们可以在一个试探点不能提供
f
f
f的充分下降时启动一种几何改进的程序, 其目的在于替换插值点集中的某个点使得行列式获得量级上的增加. 为说明, 我们先讨论
δ
(
Y
)
\delta(Y)
δ(Y)的性质, 期间使用Lagrange函数的术语.
对每个
y
∈
Y
y\in Y
y∈Y, 我们定义Lagrange函数
L
(
⋅
,
y
)
L(\cdot,y)
L(⋅,y)为次数至多为2的多项式, 使其满足
L
(
y
,
y
)
=
1
,
L
(
y
^
,
y
)
=
0
,
y
^
≠
y
,
y
^
∈
Y
L(y,y)=1,L(\hat{y},y)=0,\hat{y}\ne y,\hat{y}\in Y
L(y,y)=1,L(y^,y)=0,y^̸=y,y^∈Y. 假设
Y
Y
Y的更新是通过以
y
+
y_+
y+替换
y
−
y_-
y−完成的, 从而得到新集
Y
+
Y^+
Y+. 我们可以证明(在适当的规范化与一定的条件之下)有
∣
δ
(
Y
+
)
∣
≤
∣
L
(
y
+
,
y
−
)
∣
∣
δ
(
Y
)
∣
.
|\delta(Y^+)|\le|L(y_+,y_-)||\delta(Y)|.
∣δ(Y+)∣≤∣L(y+,y−)∣∣δ(Y)∣.算法1可充分利用这一不等式来更新插值集合:
- 试探点 x + x^+ x+提供了目标函数的充分下降的情形 ( ρ ≥ η ) (\rho\ge\eta) (ρ≥η). 我们将 x + x^+ x+放入 Y Y Y中并从中移出 y − y_- y−. 受上面不等式的启发, 我们选取移出的点 y − y_- y−为 y − = arg max y ∈ Y ∣ L ( x + , y ) ∣ . y_-=\arg\max_{y\in Y}|L(x^+,y)|. y−=argy∈Ymax∣L(x+,y)∣.
-
x
+
x^+
x+不能提供目标函数的充分下降
(
ρ
<
η
)
(\rho<\eta)
(ρ<η), 我们就有两种情形需要考虑.
- Y Y Y需要改进. 我们定义 Y Y Y在当前迭代点 x k x_k xk处是合适的, 若对于所有 y i ∈ Y : ∥ x k − y i ∥ ≤ Δ y^i\in Y: \Vert x_k-y^i\Vert\le\Delta yi∈Y:∥xk−yi∥≤Δ, 我们以任一信赖域中的点 y y y代替其中的某一插值点 y i y^i yi, ∣ δ ( Y ) ∣ |\delta(Y)| ∣δ(Y)∣不会翻倍. 若 Y Y Y不合适, 则启动几何改进机制. 我们选取 y − ∈ Y y_-\in Y y−∈Y并以另一点 y + y^+ y+代替之. 其中 y + y^+ y+的选取基于对行列式的改进. 对每个点 y i ∈ Y y^i\in Y yi∈Y, 我们定义其潜在的替换点 y r i y_r^i yri为 y r i = arg max ∥ y − x k ∥ ≤ Δ ∣ L ( y , y i ) ∣ . y_r^i=\arg\max_{\Vert y-x_k\Vert\le\Delta}|L(y,y^i)|. yri=arg∥y−xk∥≤Δmax∣L(y,yi)∣.此时选取 y − y_- y−为使得 ∣ L ( y r i , y i ) ∣ |L(y_r^i,y^i)| ∣L(yri,yi)∣最大的 y i ∈ Y y^i\in Y yi∈Y, y + y^+ y+就为对应的 y r i y_r^i yri.
- Y Y Y不需改进. 即 Y Y Y是合适的, 此时需缩小信赖域的半径并重新开始迭代.
高效地实施这些规则并不直接, 而且注意我们并没有考虑所有可能的问题. 改进插值点集的策略仍然有待研究.
2.3 基于最小改变量更新的算法
我们下面考虑一种可视为是拟牛顿法扩展的方法. 此方法使用二次模型而每次迭代仅需 O ( n 3 ) O(n^3) O(n3)的运算量, 这要比之前 O ( n 4 ) O(n^4) O(n4)量级的计算量要小得多. 为此, 这一方法只利用 O ( n ) O(n) O(n)个点上的插值条件, 而剩下的自由度则以最小改变量为约束消去. 最小改变量性质是拟牛顿法的关键. 当然这里还有其他的要求, 比如模型拟合最近两个迭代点处的梯度 ∇ f \nabla f ∇f. 下面我们介绍结合最小该变量以及函数值插值的算法.
在算法的第 k k k步迭代, 我们将建立新的二次模型 m k + 1 m_{k+1} mk+1. 模型中的系数 f k + 1 , g k + 1 , G k + 1 f_{k+1}, g_{k+1}, G_{k+1} fk+1,gk+1,Gk+1则通过求解下面的问题获取: min f , g , G ∥ G − G k ∥ F 2 s u b j e c t    t o G   s y m m e t r i c m ( y l ) = f ( y l ) l = 1 , 2 , … , q ^ , \begin{array}{rl}\min_{f,g,G} & \Vert G-G_k\Vert_F^2\\\mathrm{subject\,\,to}& G\mathrm{\,symmetric}\\ & m(y^l)=f(y^l)\quad l=1,2,\ldots,\hat{q},\end{array} minf,g,Gsubjectto∥G−Gk∥F2Gsymmetricm(yl)=f(yl)l=1,2,…,q^,其中 G k G_k Gk为之前模型 m k m_k mk中的Hessian, q ^ \hat{q} q^为依赖于 n n n的整数. 我们可以证明整数 q ^ \hat{q} q^必须大于 n + 1 n+1 n+1, 以保证 G k + 1 G_{k+1} Gk+1不等于 G k G_k Gk. 实际中合适的取法为 q ^ = 2 n + 1 \hat{q}=2n+1 q^=2n+1, 此时插值点的数量大约为线性模型中的两倍.
上述优化问题是一个带等式约束的二次规划, 其KKT条件可用等式加以叙述. 一旦 m k + 1 m_{k+1} mk+1确定下来, 我们就求解信赖域子问题获取新步长. 这一方法同样需要保证插值点集 Y Y Y的几何形状是合适的. 因此我们将再加上两个极小的约束:
- Y Y Y应当使得 m ( y l ) = f ( y l ) m(y^l)=f(y^l) m(yl)=f(yl)的成立不依赖于右端;
- y i y^i yi不应全部位于一张超平面上.
若这两个条件成立, 则上述优化问题就有唯一解.
基于以上的算法与算法1类似: 它也需要产生新迭代点以及改进 Y Y Y的几何形状. 它的优势之一为, 它仅需 O ( n ) O(n) O(n)个插值点就能产生较好的搜索方向. 实际上, 此法往往只需远远少于 1 2 ( n + 1 ) ( n + 2 ) \frac{1}{2}(n+1)(n+2) 21(n+1)(n+2)次函数值计算便可逼近解. 但由于它仅仅是最近提出, 从而没有充分的数值实验能够彰显它潜在的威力.
3. 坐标和模式搜索方法
坐标搜索和模式搜索方法并不从函数值中显式地构建
f
f
f的模型, 而是从当前迭代点出发沿着特定的方向寻找具有更小函数值的点. 若找到了这样的点, 它们就步进并重复之前的过程, 当然此前可能会对之前的搜索方向做一些改动. 当没有满意的点存在时, 算法就可能会调整沿着当前搜索方向前进的步长, 或直接产生新的搜索方向.
我们先介绍一种实际操作中常用的简单方法. 而后再考虑推广的、更加高效的以及具有更强大的理论性质的方法.
3.1 坐标搜索方法
坐标搜索方法(也称为坐标下降法或交替变量法)循环遍历 n n n个坐标方向 e 1 , e 2 , … , e n e_1,e_2,\ldots,e_n e1,e2,…,en, 在每个方向上均以线搜索获取新的迭代点. 具体说来, 第一次迭代中, 我们仅改变 x x x的第一个分量 x 1 x_1 x1并寻找极小(或至少减小)目标函数的这一分量的新值. 下一步迭代中, 则对第二个分量 x 2 x_2 x2进行同样的操作. 在 n n n步迭代后, 我们又回到第一个变量重复遍历. 尽管简单直观, 但此法在实际操作中却可能十分低效, 就比如下图中表示的, 我们将坐标搜索方法应用于带两个变量的二次函数上.
图中显示, 经几步迭代后, x 1 , x 2 x_1,x_2 x1,x2向解的行进都明显变慢.
一般说来, 坐标搜索法甚至可以无限地迭代而从不逼近目标函数的稳定点, 这在精确线搜索下依然如此(相比较而言, 在一定条件下最速下降法能产生迭代序列 { x k } \{x_k\} {xk}使得 ∥ ∇ f k ∥ → 0 \Vert\nabla f_k\Vert\to0 ∥∇fk∥→0). 事实上, 循环遍历任何一组线性无关的搜索方向均不能保证全局收敛性. 理论上, 这是由于最速下降方向 − ∇ f k -\nabla f_k −∇fk变得与搜索方向垂直, 此时Zoutendijk条件在 ∇ f k \nabla f_k ∇fk并不趋于0时就满足了.
就算坐标搜索收敛于一解, 一般来说它也要比最速下降法慢得多, 并且这一差距随着变量数的增加而越变越大. 不过由于坐标搜索不需要计算梯度 ∇ f k \nabla f_k ∇fk, 且它在变量耦合程度不高时的效果还不错, 因此它仍是优化目标函数的有效方法.
至今已有坐标搜索算法的变体, 其中的一些(被证明)具有全局收敛性. 一种简单的变体是"后退-前进"方法, 其中我们依次沿着以下方向进行搜索:
e
1
,
e
2
,
…
,
e
n
−
1
,
e
n
,
e
n
−
1
,
…
,
e
2
,
e
1
,
e
2
,
…
,
(
r
e
p
e
a
t
)
.
e_1,e_2,\ldots,e_{n-1},e_n,e_{n-1},\ldots,e_2,e_1,e_2,\ldots,\quad(\mathrm{repeat}).
e1,e2,…,en−1,en,en−1,…,e2,e1,e2,…,(repeat).而还有一种方法则是受上面图中的启发, 先进行一轮坐标下降, 再沿着连接上一轮中第一个和(指向)最后一个点的方向搜索. 许多算法(如Hooke和Jeeves)均基于这样的想法.
下面的模式搜索算法则推广了坐标搜索: 它在每步迭代中允许考虑和使用更大的搜索方向集.
3.2 模式搜索方法
我们考虑这样的模式搜索算法: 在每个迭代点上选取特定的搜索方向并在每个方向上计算特定步长下的 f f f. 这些候选点就构成了一个当前迭代点附近的"框架"或"模式". 若搜寻过程中找到了显著较低的函数值, 则就将对应的点作为新的迭代点, 从而框架的中心也移到这个点上. 事实上不论移动与否, 框架都会以一定的方式改变(如可能改变搜索方向的集合, 亦或者会增大或减小步长), 而后重复之前的过程. 对于特定的模式搜索方法, 我们是有全局收敛性的——特别地, 是当算法有稳定的聚点时.
噪声或其他形式的不精确性(如函数值的计算)可能会影响模式搜索算法的效果, 从而影响收敛. 我们也可以用简单的例子说明, 非光滑性亦可能导致较差的算法表现, 尽管在非光滑问题上往往能得到令人满意的全局收敛.
为引入模式搜索算法, 我们做一些符号说明. 对于当前迭代点 x k x_k xk, 我们定义 D k \mathcal{D}_k Dk为可能的搜索方向集, γ k \gamma_k γk为线搜索的参数. 从而框架由点 x k + γ k p k , p k ∈ D k x_k+\gamma_kp_k,p_k\in\mathcal{D}_k xk+γkpk,pk∈Dk组成. 当框架中其中一点带来了函数值的显著下降, 我们便移步且亦可能增大 γ k \gamma_k γk, 从而扩大下一次迭代的框架. 若框架中无点达到要求, 就减小 γ k \gamma_k γk(缩小框架), 并设 x k + 1 = x k x_{k+1}=x_k xk+1=xk, 之后重复. 注意不论在哪种情形, 我们都在下一步迭代开始之前改变方向集 D k \mathcal{D}_k Dk, 其中可能需要受限于特定的约束.
算法2 (Pattern-Search)
Given convergence tolerance
γ
t
o
l
\gamma_{\mathrm{tol}}
γtol, contraction parameter
θ
max
\theta_{\max}
θmax, sufficient decrease function
ρ
:
[
0
,
∞
)
→
R
\rho:[0,\infty)\to\mathbb{R}
ρ:[0,∞)→R with
ρ
(
t
)
\rho(t)
ρ(t) an increasing function of
t
t
t and
ρ
(
t
)
/
t
→
0
\rho(t)/t\to0
ρ(t)/t→0 as
t
↓
0
t\downarrow 0
t↓0;
Choose initial point
x
0
x_0
x0, initial step length
γ
0
>
γ
t
o
l
\gamma_0>\gamma_{\mathrm{tol}}
γ0>γtol, initial direction set
D
0
\mathcal{D}_0
D0;
for
k
=
1
,
2
,
…
k=1,2,\ldots
k=1,2,…
\quad\quad
if
γ
k
≤
γ
t
o
l
\gamma_k\le\gamma_{\mathrm{tol}}
γk≤γtol
\quad\quad\quad\quad
stop;
\quad\quad
if
f
(
x
k
+
γ
k
p
k
)
<
f
(
x
k
)
−
ρ
(
γ
k
)
f(x_k+\gamma_kp_k)<f(x_k)-\rho(\gamma_k)
f(xk+γkpk)<f(xk)−ρ(γk) for some
p
k
∈
D
k
p_k\in\mathcal{D}_k
pk∈Dk
\quad\quad\quad\quad
Set
x
k
+
1
←
x
k
+
γ
k
p
k
x_{k+1}\leftarrow x_k+\gamma_kp_k
xk+1←xk+γkpk for some such
p
k
p_k
pk;
\quad\quad\quad\quad
Set
γ
k
+
1
←
ϕ
k
γ
k
\gamma_{k+1}\leftarrow\phi_k\gamma_k
γk+1←ϕkγkfor some
ϕ
k
≥
1
\phi_k\ge1
ϕk≥1; (increase step length)
\quad\quad
else
\quad\quad\quad\quad
Set
x
k
+
1
←
x
k
x_{k+1}\leftarrow x_k
xk+1←xk;
\quad\quad\quad\quad
Set
γ
k
+
1
←
θ
k
γ
k
\gamma_{k+1}\leftarrow\theta_k\gamma_k
γk+1←θkγk, where
0
<
θ
k
≤
θ
max
<
1
0<\theta_k\le\theta_{\max}<1
0<θk≤θmax<1;
\quad\quad
end (if)
end (for)
算法说明:
-
方向集 D k \mathcal{D}_k Dk的选择对于算法的表现以及理论性质的证明是至关重要的. 我们需要对其提两个条件:
- 只要 ∇ f ( x k ) ≠ 0 \nabla f(x_k)\ne0 ∇f(xk)̸=0(即 x k x_k xk不是稳定点), 这一集合中至少有一个方向能够给 f f f带来下降.
- 集合 D k \mathcal{D}_k Dk中向量的长度差不多相同, 从而框架的直径可用步长参数 γ k \gamma_k γk表示. 因此, 要求 β min ≤ ∥ p ∥ ≤ β max , p ∈ D k , \beta_{\min}\le\Vert p\Vert\le\beta_{\max},\quad p\in\mathcal{D}_k, βmin≤∥p∥≤βmax,p∈Dk,其中 β min , β max \beta_{\min},\beta_{\max} βmin,βmax为独立于 k k k的正常数.
下面具体说明. 我们同第三章中一样定义负梯度与搜索方向的夹角 cos θ = − ∇ f k T p ∥ ∇ f k ∥ ∥ p ∥ . \cos\theta=\frac{-\nabla f_k^Tp}{\Vert\nabla f_k\Vert\Vert p\Vert}. cosθ=∥∇fk∥∥p∥−∇fkTp.由Zoutendijk定理可知, 当在每个迭代点 x k x_k xk处有 cos θ ≥ δ > 0 \cos\theta\ge\delta>0 cosθ≥δ>0, 一个线搜索算法就能全局收敛于稳定点, 其中线搜索需满足特定条件. 同样的, 我们选取 D k \mathcal{D}_k Dk使得只要存在一个 p ∈ D k p\in\mathcal{D}_k p∈Dk使得 cos θ > δ \cos\theta>\delta cosθ>δ, 这里不管 ∇ f k \nabla f_k ∇fk是如何: κ ( D k ) = d e f min v ∈ R n max p ∈ D k v T p ∥ v ∥ ∥ p ∥ ≥ δ . \kappa(\mathcal{D}_k)\xlongequal{def}\min_{v\in\mathbb{R}^n}\max_{p\in\mathcal{D}_k}\frac{v^Tp}{\Vert v\Vert\Vert p\Vert}\ge\delta. κ(Dk)defv∈Rnminp∈Dkmax∥v∥∥p∥vTp≥δ.若上述两个条件均满足, 我们就有对 ∀ k \forall k ∀k, − ∇ f k T p ≥ κ ( D k ) ∥ ∇ f k ∥ ∥ p ∥ ≥ δ β min ∥ ∇ f k ∥ , ∃ p ∈ D k . -\nabla f_k^Tp\ge\kappa(\mathcal{D}_k)\Vert\nabla f_k\Vert\Vert p\Vert\ge\delta\beta_{\min}\Vert\nabla f_k\Vert,\quad \exists p\in\mathcal{D}_k. −∇fkTp≥κ(Dk)∥∇fk∥∥p∥≥δβmin∥∇fk∥,∃p∈Dk.我们只需选取符合条件 p p p, 从而就有全局收敛.
满足上述两个条件的 D k \mathcal{D}_k Dk的例子包括坐标方向集 { e 1 , e 2 , … , e n , − e 1 , − e 2 , … , − e n } , \{e_1,e_2,\ldots,e_n,-e_1,-e_2,\ldots,-e_n\}, {e1,e2,…,en,−e1,−e2,…,−en},和 n + 1 n+1 n+1个向量 p i = 1 2 n e − e i , i = 1 , 2 , … , n ; p n + 1 = 1 2 n e p_i=\frac{1}{2n}e-e_i,i=1,2,\ldots,n;\quad p_{n+1}=\frac{1}{2n}e pi=2n1e−ei,i=1,2,…,n;pn+1=2n1e构成的方向集. n = 3 n=3 n=3的情形可见下图.
-
坐标下降算法类似于算法2的特殊情形(每步迭代选取 i ∈ { 1 , 2 , … , n } i\in\{1,2,\ldots,n\} i∈{1,2,…,n}, D k = { e i , − e i } \mathcal{D}_k=\{e_i,-e_i\} Dk={ei,−ei}). 注意这样的 D k \mathcal{D}_k Dk有 κ ( D k ) = 0 , ∀ k \kappa(\mathcal{D}_k)=0,\forall k κ(Dk)=0,∀k. 因此 cos θ \cos\theta cosθ在每步迭代中可以任意接近0.
-
通常, 满足条件的方向仅是 D k \mathcal{D}_k Dk的一个子集. 其他的方向可以根据 f f f的信息、尺度或者根据先前的迭代启发式地选取. 也可选取它们为核心方向(保证 δ > 0 \delta>0 δ>0的那些)的线性组合.
-
算法2并不需要我们选取具有最小目标函数值的 x k + γ k p k , p k ∈ D k x_k+\gamma_kp_k,p_k\in\mathcal{D}_k xk+γkpk,pk∈Dk. 事实上, 我们可以由此节省些计算量.
-
充分下降函数 ρ ( t ) \rho(t) ρ(t)的选取也很重要. 若 ρ ( ⋅ ) \rho(\cdot) ρ(⋅)选为0, 则任一带来下降的点都会被接收为新迭代点. 正如我们在第三章中所讨论的那般, 这样的弱条件一般并不能得到强全局收敛性. 更加常用且适宜的选择是 ρ ( t ) = M t 3 / 2 \rho(t)=Mt^{3/2} ρ(t)=Mt3/2, 其中 M M M为某个正常数.
4. 共轭方向法
从第五章中我们了解到对于严格凸的二次函数 f ( x ) = 1 2 x T A x − b T x , f(x)=\frac{1}{2}x^TAx-b^Tx, f(x)=21xTAx−bTx,它的极小点是可以通过沿着 n n n个共轭方向分别做 n n n次一维极小化得到的. 这些方向在第五章中定义为梯度的线性组合. 而在这一节中, 我们将展示如何仅利用函数值构建共轭方向, 从而设计出仅需函数值的极小化二次函数的算法. 自然地, 我们也将考虑这一方法对于一般非线性目标函数 f f f的延展.
我们将利用平行子空间性质. 以
n
=
2
n=2
n=2为例, 考虑两条平行直线
l
1
(
α
)
=
x
1
+
α
p
,
l
2
(
α
)
=
x
2
+
α
p
l_1(\alpha)=x_1+\alpha p,l_2(\alpha)=x_2+\alpha p
l1(α)=x1+αp,l2(α)=x2+αp, 其中
x
1
,
x
2
,
p
x_1,x_2,p
x1,x2,p为
R
2
\mathbb{R}^2
R2中的给定向量,
α
\alpha
α为定义直线的标量参数. 设
x
1
∗
,
x
2
∗
x_1^*,x_2^*
x1∗,x2∗分别为
f
(
x
)
f(x)
f(x)沿
l
1
,
l
2
l_1,l_2
l1,l2的极小点, 我们证明
x
1
∗
−
x
2
∗
x_1^*-x_2^*
x1∗−x2∗与
p
p
p相互共轭. 从而若再沿着连接
x
1
∗
,
x
2
∗
x_1^*,x_2^*
x1∗,x2∗的直线一维极小化, 便能达到
f
f
f的极小点. 可见下图.
这就启发我们设计如下针对二维二次函数 f f f的算法:
- 选取线性无关的方向, 如坐标方向 e 1 , e 2 e_1,e_2 e1,e2. 从任意初始点 x 0 x_0 x0出发, 沿着 e 2 e_2 e2极小化 f f f得到点 x 1 x_1 x1.
- 再从 x 1 x_1 x1出发, 分别依次沿着 e 1 , e 2 e_1,e_2 e1,e2极小化 f f f得到 z z z. 由平行子空间性质, z − x 1 z-x_1 z−x1与 e 2 e_2 e2相互共轭, 这是因为 x 1 , z x_1,z x1,z分别是平行于 e 2 e_2 e2的两条线上的极小点.
- 最后再从 x 1 x_1 x1出发, 沿着 z − x 1 z-x_1 z−x1极小化即得到 f f f的极小点.
下面我们叙述最一般情形的平行子空间极小化性质. 设 x 1 , x 2 x_1,x_2 x1,x2为 R n \mathbb{R}^n Rn中两个不同的点, { p 1 , p 2 , … , p l } \{p_1,p_2,\ldots,p_l\} {p1,p2,…,pl}为 R n \mathbb{R}^n Rn中线性无关的一组向量. 定义两个平行体: S 1 = { x 1 + ∑ i = 1 l α i p i ∣ α i ∈ R , i = 1 , 2 , … , l } , S 2 = { x 2 + ∑ i = 1 l α i p i ∣ α i ∈ R , i = 1 , 2 , … , l } . S_1=\left\{x_1+\sum_{i=1}^l\alpha_ip_i|\alpha_i\in\mathbb{R},i=1,2,\ldots,l\right\},\\S_2=\left\{x_2+\sum_{i=1}^l\alpha_ip_i|\alpha_i\in\mathbb{R},i=1,2,\ldots,l\right\}. S1={x1+i=1∑lαipi∣αi∈R,i=1,2,…,l},S2={x2+i=1∑lαipi∣αi∈R,i=1,2,…,l}.记 f f f在 S 1 , S 2 S_1,S_2 S1,S2上的极小点分别为 x 1 ∗ , x 2 ∗ x_1^*,x_2^* x1∗,x2∗, 则我们有 x 2 ∗ − x 1 ∗ x_2^*-x_1^* x2∗−x1∗与 p 1 , p 2 , … , p l p_1,p_2,\ldots,p_l p1,p2,…,pl相互共轭. 事实上, 由极小化性质我们有 ∂ f ( x 1 ∗ + α i p i ) ∂ α i ∣ α i = 0 = ∇ f ( x 1 ∗ ) T p i = 0 , i = 1 , 2 , … , l , ∂ f ( x 2 ∗ + α i p i ) ∂ α i ∣ α i = 0 = ∇ f ( x 2 ∗ ) T p i = 0 , i = 1 , 2 , … , l . \left.\frac{\partial f(x_1^*+\alpha_ip_i)}{\partial\alpha_i}\right|_{\alpha_i=0}=\nabla f(x_1^*)^Tp_i=0,\quad i=1,2,\ldots,l,\\\left.\frac{\partial f(x_2^*+\alpha_ip_i)}{\partial\alpha_i}\right|_{\alpha_i=0}=\nabla f(x_2^*)^Tp_i=0,\quad i=1,2,\ldots,l. ∂αi∂f(x1∗+αipi)∣∣∣∣αi=0=∇f(x1∗)Tpi=0,i=1,2,…,l,∂αi∂f(x2∗+αipi)∣∣∣∣αi=0=∇f(x2∗)Tpi=0,i=1,2,…,l.因此 0 = ( ∇ f ( x 1 ∗ ) − ∇ f ( x 2 ∗ ) ) T p i = ( A x 1 ∗ − b − A x 2 ∗ + b ) T p i = ( x 1 ∗ − x 2 ∗ ) T A p i , i = 1 , 2 , … , l . \begin{aligned}0&=(\nabla f(x_1^*)-\nabla f(x_2^*))^Tp_i\\&=(Ax_1^*-b-Ax_2^*+b)^Tp_i\\&=(x_1^*-x_2^*)^TAp_i,\quad i=1,2,\ldots,l.\end{aligned} 0=(∇f(x1∗)−∇f(x2∗))Tpi=(Ax1∗−b−Ax2∗+b)Tpi=(x1∗−x2∗)TApi,i=1,2,…,l.我们以 n = 3 n=3 n=3为例描述如何利用平行子空间性质产生三个共轭方向.
- 首先选取线性无关方向, 比如 e 1 , e 2 , e 3 e_1,e_2,e_3 e1,e2,e3. 从任一点 x 0 x_0 x0出发, 首先沿着 e 3 e_3 e3得到点 x 1 x_1 x1.
- 之后从 x 1 x_1 x1出发, 依次沿着 e 1 , e 2 , e 3 e_1,e_2,e_3 e1,e2,e3得到 z z z.
- 接着从 x 1 x_1 x1出发, 沿着 p 1 = z − x 1 p_1=z-x_1 p1=z−x1得到 x 2 x_2 x2. 如前述, p 1 = z − x 1 p_1=z-x_1 p1=z−x1与 e 3 e_3 e3共轭. 注意 x 2 x_2 x2事实上为 f f f在集合 S 1 = { y + α 1 e 3 + α 2 p 1 ∣ α 1 ∈ R , α 2 ∈ R } S_1=\{y+\alpha_1e_3+\alpha_2p_1|\alpha_1\in\mathbb{R},\alpha_2\in\mathbb{R}\} S1={y+α1e3+α2p1∣α1∈R,α2∈R}上的极小点, 其中 y y y是沿着 e 1 , e 2 e_1,e_2 e1,e2极小化后得到的中间点.
展开新一轮的迭代. 我们舍去
e
1
e_1
e1, 并定义新的搜索方向集为
{
e
2
,
e
3
,
p
1
}
\{e_2,e_3,p_1\}
{e2,e3,p1}.
4. 从
x
2
x_2
x2出发, 依次沿着
e
2
,
e
3
,
p
1
e_2,e_3,p_1
e2,e3,p1极小化
f
f
f得到
z
^
\hat{z}
z^. 注意
z
^
\hat{z}
z^可看作是
f
f
f在集合
S
2
=
{
y
^
+
α
1
e
3
+
α
2
p
1
∣
α
1
∈
R
,
α
2
∈
R
}
S_2=\{\hat{y}+\alpha_1e_3+\alpha_2p_1|\alpha_1\in\mathbb{R},\alpha_2\in\mathbb{R}\}
S2={y^+α1e3+α2p1∣α1∈R,α2∈R}, 其中
y
^
\hat{y}
y^为中间点. 因此应用平行子空间极小化性质于
S
1
,
S
2
S_1,S_2
S1,S2, 我们就有
p
2
=
z
^
−
x
2
p_2=\hat{z}-x_2
p2=z^−x2与
e
3
,
p
1
e_3,p_1
e3,p1共轭.
5. 接着沿着
p
2
p_2
p2得到
x
3
x_3
x3, 而这就是
f
f
f的极小点.
这样我们就得到了共轭方向 e 3 , p 1 , p 2 e_3,p_1,p_2 e3,p1,p2.
下面我们就可以叙述适用于一般情形的算法了, 它由内迭代与外迭代构成. 内迭代中, 我们将沿着线性无关的方向集做 n n n次一维极小化. 内迭代完成后, 即产生新的共轭方向, 再以之替换先前储存的搜索方向.
算法2 (DFO Method of Conjugate Directions)
Choose an initial point
x
0
x_0
x0 and set
p
i
=
e
i
p_i=e_i
pi=ei, for
i
=
1
,
2
,
…
,
n
i=1,2,\ldots,n
i=1,2,…,n;
Compute
x
1
x_1
x1 as the minimizer of
f
f
f along the line
x
0
+
α
p
n
x_0+\alpha p_n
x0+αpn;
Set
k
←
1
k\leftarrow 1
k←1
repeat until a convergence test is satisfied
\quad\quad
Set
z
1
←
x
k
z_1\leftarrow x_k
z1←xk;
\quad\quad
for
j
=
1
,
2
,
…
,
n
j=1,2,\ldots,n
j=1,2,…,n
\quad\quad\quad\quad
Calculate
α
j
\alpha_j
αj so that
f
(
z
j
+
α
j
p
j
)
f(z_j+\alpha_jp_j)
f(zj+αjpj) is minimized;
\quad\quad\quad\quad
Set
z
j
+
1
←
z
j
+
α
j
p
j
z_{j+1}\leftarrow z_j+\alpha_jp_j
zj+1←zj+αjpj;
\quad\quad
end (for)
\quad\quad
Set
p
j
←
p
j
+
1
p_j\leftarrow p_{j+1}
pj←pj+1 for
j
=
1
,
2
,
…
,
n
−
1
j=1,2,\ldots,n-1
j=1,2,…,n−1 and
p
n
←
p
n
←
z
n
+
1
−
z
1
p_n\leftarrow p_n\leftarrow z_{n+1}-z_1
pn←pn←zn+1−z1;
\quad\quad
Calculate
α
n
\alpha_n
αn so that
f
(
z
n
+
1
+
α
n
p
n
)
f(z_{n+1}+\alpha_np_n)
f(zn+1+αnpn) is minimized;
\quad\quad
Set
x
k
+
1
←
z
n
+
1
+
α
n
p
n
x_{k+1}\leftarrow z_{n+1}+\alpha_np_n
xk+1←zn+1+αnpn;
\quad\quad
Set
k
←
k
+
1
k\leftarrow k+1
k←k+1;
end (repeat)
算法说明:
- 线搜索可通过使用搜索方向上的三个函数值做二次插值实施. 由于严格凸二次函数限制在一条线上仍然是严格凸的二次函数, 因此在不计误差的情况下插值带来的是精确的模型, 从而能够计算精确的一维极小点. 注意在外迭代第 k k k步结束后, p n − k , p n − k + 1 , … , p n p_{n-k},p_{n-k+1},\ldots,p_n pn−k,pn−k+1,…,pn相互共轭. 因此若共轭方向均非零, 算法在 n − 1 n-1 n−1步外迭代后终止于 f f f的极小点. 不幸的是, 这种可能性无法排除. 因此我们必须采取一些防护措施以增强鲁棒性. 一般地, 算法3在 n − 1 n-1 n−1步外迭代后终止, 总共需要计算 O ( n 2 ) O(n^2) O(n2)量阶的函数值.
- 算法3可推广至极小非二次的目标函数的情形. 这里唯一的变动在于线搜索上: 我们只能利用插值近似求解. 由于可能非凸的存在, 因此我们需要特别关注一维搜索的过程.
- 数值实验表明算法3的推广对于维数较小的问题表现良好, 不过有时
{
p
i
}
\{p_i\}
{pi}变得越来越线性相关. 一种改进的方法是, 先定义
{
p
i
}
\{p_i\}
{pi}共轭程度的一种度量. 定义缩放的方向
p
^
i
=
p
i
p
i
T
A
p
i
,
i
=
1
,
2
,
…
,
n
.
\hat{p}_i=\frac{p_i}{\sqrt{p_i^TAp_i}},\quad i=1,2,\ldots,n.
p^i=piTApipi,i=1,2,…,n.我们可以证明
∣
det
(
p
^
1
,
p
^
2
,
…
,
p
^
n
)
∣
|\det(\hat{p}_1,\hat{p}_2,\ldots,\hat{p}_n)|
∣det(p^1,p^2,…,p^n)∣达到极大当且仅当
p
i
p_i
pi相互共轭. 这一结论表明, 若以最近产生的共轭方向替代
{
p
1
,
p
2
,
…
,
p
n
}
\{p_1,p_2,\ldots,p_n\}
{p1,p2,…,pn}中的某一元会导致行列式下降, 就应当取消替代的操作.
程序4针对二次目标函数的情形实施了上述策略. 代数运算使得我们无需Hessian矩阵 A A A便能计算缩放的方向 p ^ i \hat{p}_i p^i, 这是因为 p i T A p i p_i^TAp_i piTApi在沿着 p i p_i pi做线搜索时就有了. 进一步地, 我们在判定行列式不增时仅需比较计算过的函数值. 下述程序将在算法3中内迭代完成后被立即调用.
程序4 (Updating of the Set of Directions)
Find the integer
m
∈
{
1
,
2
,
…
,
n
}
m\in\{1,2,\ldots,n\}
m∈{1,2,…,n} such that
ψ
m
=
f
(
x
m
−
1
)
−
f
(
x
m
)
\psi_m=f(x_{m-1})-f(x_m)
ψm=f(xm−1)−f(xm) is maximized;
Let
f
1
=
f
(
z
1
)
,
f
2
=
f
(
z
n
+
1
)
,
f
3
=
f
(
2
z
n
+
1
−
z
1
)
f_1=f(z_1),f_2=f(z_{n+1}), f_3=f(2z_{n+1}-z_1)
f1=f(z1),f2=f(zn+1),f3=f(2zn+1−z1);
if
f
3
≥
f
1
f_3\ge f_1
f3≥f1 or
(
f
1
−
2
f
2
+
f
3
)
(
f
1
−
f
2
−
ψ
m
)
2
≥
1
2
ψ
m
(
f
1
−
f
3
)
2
(f_1-2f_2+f_3)(f_1-f_2-\psi_m)^2\ge\frac{1}{2}\psi_m(f_1-f_3)^2
(f1−2f2+f3)(f1−f2−ψm)2≥21ψm(f1−f3)2
\quad\quad
Keep the set
p
1
,
p
2
,
…
,
p
n
p_1,p_2,\ldots,p_n
p1,p2,…,pn unchanged and set
x
k
+
1
←
z
n
+
1
x_{k+1}\leftarrow z_{n+1}
xk+1←zn+1;
else
\quad\quad
Set
p
^
←
z
n
+
1
−
z
1
\hat{p}\leftarrow z_{n+1}-z_1
p^←zn+1−z1 and calculate
α
^
\hat{\alpha}
α^ so that
f
(
z
n
+
1
+
α
^
p
^
)
f(z_{n+1}+\hat{\alpha}\hat{p})
f(zn+1+α^p^) is minimized;
\quad\quad
Set
x
k
+
1
←
z
n
+
1
+
α
p
^
x_{k+1}\leftarrow z_{n+1}+\alpha\hat{p}
xk+1←zn+1+αp^;
\quad\quad
Remove
p
m
p_m
pm from the set of directions and add
p
^
\hat{p}
p^ to this set;
end (if)
上述程序同样可应用于一般目标函数上非精确一维线搜索的情形. 最终得到的共轭梯度法对于求解小规模问题是很有用的.
5. Nelder-Mead方法
Nelder-Mead单纯形反射方法自其1965年被发明以来一直是广受欢迎的DFO算法. 其名称来源于在算法的任意阶段, 我们都保持对 R n \mathbb{R}^n Rn中 n + 1 n+1 n+1个点的追索, 它们形成的凸腔构成单纯形. (这一方法与线性规划中的单纯形法没有任何关联.) 给定有顶点 { z 1 , z 2 , … , z n + 1 } \{z_1,z_2,\ldots,z_{n+1}\} {z1,z2,…,zn+1}的单纯形 S S S, 我们可定义关联矩阵 V ( S ) V(S) V(S)为 V ( S ) = [ z 2 − z 1 , z 3 − z 1 , … , z n + 1 − z 1 ] . V(S)=[z_2-z_1,z_3-z_1,\ldots,z_{n+1}-z_1]. V(S)=[z2−z1,z3−z1,…,zn+1−z1].若 V V V非奇异, 则称单纯形非退化或非奇异(例如对于 R 3 \mathbb{R}^3 R3中的单纯形, 若其四个顶点不共面, 则就非奇异).
Nelder-Mead算法中的单次迭代中, 我们移除具有最差函数值的顶点并代之以具更好值的点. 而新点则是通过沿着连接最差顶点与剩余顶点中心的线反射、扩张或收缩单纯形得到. 若以这种方式我们无法找到更好的点, 我们就仅保持具最好函数值的点不动, 而令其他的顶点向该值移动以收缩单纯形.
下面我们来详细描述算法的一次迭代过程. 先定义一些符号: 当前单纯形的 n + 1 n+1 n+1个顶点记作 { x 1 , x 2 , … , x n + 1 } \{x_1,x_2,\ldots,x_{n+1}\} {x1,x2,…,xn+1}, 其中排列的顺序满足 f ( x 1 ) ≤ f ( x 2 ) ≤ ⋯ ≤ f ( x n + 1 ) . f(x_1)\le f(x_2)\le \cdots\le f(x_{n+1}). f(x1)≤f(x2)≤⋯≤f(xn+1).最佳的 n n n个点的中心定义为 x ˉ = ∑ i = 1 n x i . \bar{x}=\sum_{i=1}^nx_i. xˉ=i=1∑nxi.连接 x ˉ \bar{x} xˉ与最差点 x n + 1 x_{n+1} xn+1的线有参数化 x ˉ ( t ) = x ˉ + t ( x n + 1 − x ˉ ) . \bar{x}(t)=\bar{x}+t(x_{n+1}-\bar{x}). xˉ(t)=xˉ+t(xn+1−xˉ).
程序5 (One Step of Nelder-Mead Simplex)
Compute the reflection point
x
ˉ
(
−
1
)
\bar{x}(-1)
xˉ(−1) and evaluate
f
−
1
=
f
(
x
ˉ
(
−
1
)
)
f_{-1}=f(\bar{x}(-1))
f−1=f(xˉ(−1));
if
f
(
x
1
)
≤
f
−
1
<
f
(
x
n
)
f(x_1)\le f_{-1}<f(x_n)
f(x1)≤f−1<f(xn)
\quad\quad
(reflect point is neither best nor worst in the new simplex)
\quad\quad
replace
x
n
+
1
x_{n+1}
xn+1 by
−
1
ˉ
\bar{-1}
−1ˉ and go to next iteration;
else if
f
−
1
f_{-1}
f−1<f(x_1)$
\quad\quad
(reflect point is better than the current best; try to go farther along this direction)
\quad\quad
Compute the expansion point
x
ˉ
(
−
2
)
\bar{x}(-2)
xˉ(−2) and evaluate
f
−
2
=
f
(
x
ˉ
(
−
2
)
)
f_{-2}=f(\bar{x}(-2))
f−2=f(xˉ(−2));
\quad\quad
if
f
−
2
<
f
−
1
f_{-2}<f_{-1}
f−2<f−1
\quad\quad\quad\quad
replace
x
n
+
1
x_{n+1}
xn+1 by
x
−
2
x_{-2}
x−2 and go to next iteration;
\quad\quad
else
\quad\quad\quad\quad
replace
x
n
+
1
x_{n+1}
xn+1 by
x
−
1
x_{-1}
x−1 and go to next iteration;
else if
f
−
1
≥
f
(
x
n
)
f_{-1}\ge f(x_n)
f−1≥f(xn)
\quad\quad
(reflect point is still worse than
x
n
x_n
xn; contract)
\quad\quad
if
f
(
x
n
)
≤
f
−
1
<
f
(
x
n
+
1
)
f(x_n)\le f_{-1}<f(x_{n+1})
f(xn)≤f−1<f(xn+1)
\quad\quad\quad\quad
(try to perform “outside” contraction)
\quad\quad\quad\quad
evaluate
f
−
1
/
2
=
x
ˉ
(
−
1
/
2
)
f_{-1/2}=\bar{x}(-1/2)
f−1/2=xˉ(−1/2);
\quad\quad\quad\quad
if
f
−
1
/
2
≤
f
−
1
f_{-1/2}\le f_{-1}
f−1/2≤f−1
\quad\quad\quad\quad\quad\quad
replace
x
n
+
1
x_{n+1}
xn+1 by
x
−
1
/
2
x_{-1/2}
x−1/2 and go to next iteration;
\quad\quad
else
\quad\quad\quad\quad
(try to perform “inside” contraction)
\quad\quad\quad\quad
evaluate
f
1
/
2
=
x
ˉ
(
1
/
2
)
f_{1/2}=\bar{x}(1/2)
f1/2=xˉ(1/2);
\quad\quad\quad\quad
if
f
1
/
2
<
f
n
+
1
f_{1/2}<f_{n+1}
f1/2<fn+1
\quad\quad\quad\quad\quad\quad
replace
x
n
+
1
x_{n+1}
xn+1 by
x
1
/
2
x_{1/2}
x1/2 and go to next iteration;
\quad\quad
(neither outside nor inside contraction was acceptable; shrink the simplex toward
x
1
x_1
x1)
\quad\quad
replace
x
i
←
(
1
/
2
)
(
x
1
+
x
i
)
x_i\leftarrow(1/2)(x_1+x_i)
xi←(1/2)(x1+xi) for
i
=
2
,
3
,
…
,
n
+
1
i=2,3,\ldots,n+1
i=2,3,…,n+1;
程序5在
n
=
3
n=3
n=3下的一个例子如下图所示.
其中最差点为 x 3 x_3 x3, 可能的替换点为 x ˉ ( − 1 ) , x ˉ ( − 2 ) , x ˉ ( − 1 2 ) , x ˉ ( 1 2 ) \bar{x}(-1),\bar{x}(-2),\bar{x}(-\frac{1}{2}),\bar{x}(\frac{1}{2}) xˉ(−1),xˉ(−2),xˉ(−21),xˉ(21). 若无一可用, 则收缩单纯形为图中虚线框定的小三角形, 其中保持 x 1 x_1 x1不动. 标量 t t t在我们的讨论中只选定了一些特殊值 − 1 , − 2 , − 1 2 , 1 2 -1,-2,-\frac{1}{2},\frac{1}{2} −1,−2,−21,21. 但这并不是说其他的选择就不好, 不过这需要另外加上特定的限制.
Nelder-Mead算法的实际表现通常是较为合理的, 尽管在非最优点处可能会有停滞. 此时重启是个较好的选择. 注意除非以收缩单纯形结束, 算法的平均函数值
1
n
+
1
∑
i
=
1
n
+
1
f
(
x
i
)
\frac{1}{n+1}\sum_{i=1}^{n+1}f(x_i)
n+11i=1∑n+1f(xi)在每一步均会下降. 进一步, 若
f
f
f凸, 收缩也不会增加平均函数值.
对于Nelder-Mead方法的收敛理论现仍较有限.
6. 隐式滤波法
最后我们介绍函数值计算基于模型 f ( x ) = h ( x ) + ϕ ( x ) f(x)=h(x)+\phi(x) f(x)=h(x)+ϕ(x)的算法——隐式滤波法——其中 f f f是光滑的. 它的最简形式即为最速下降法的变体, 其中梯度 ∇ f k \nabla f_k ∇fk以有限差分估计代替, 差分参数 ϵ \epsilon ϵ也不必过小.
当函数随着迭代接近解时噪声水平不断下降, 隐式滤波法将发挥最佳的效果. 这种情形在我们控制噪声水平时是可能发生的, 例如当 f f f是通过在人为给定的容忍限内求解微分方程得到的, 亦或者通过经人为指定数量的随机模拟后得到的(模拟的次数越多方差越小, 噪声水平越低). 隐式滤波算法在给定当前 x x x处的噪声水平的情况下, 系统地(但是, 人们希望不会像误差衰减那么快)减小 ϵ \epsilon ϵ, 从而保证 ∇ ϵ f ( x ) \nabla_{\epsilon}f(x) ∇ϵf(x)具有合理精度. 对每个 ϵ \epsilon ϵ的值, 它都将经过一次内循环——利用搜索方向 − ∇ ϵ f ( x ) -\nabla_{\epsilon}f(x) −∇ϵf(x)的Armijo线搜索. 若内循环无法在至少 a max a_{\max} amax步中得到较为满意的步长, 我们就回到外循环, 选取更小的 ϵ \epsilon ϵ重复以上过程. 算法的证实表述如下.
算法6 (Implicit Filtering)
Choose a sequence
{
ϵ
k
}
↓
0
\{\epsilon_k\}\downarrow 0
{ϵk}↓0, Armijo parameters
c
c
c and
ρ
\rho
ρ in
(
0
,
1
)
(0,1)
(0,1), maximum bactracking parameter
a
max
a_{\max}
amax;
Set
k
←
1
k\leftarrow 1
k←1, Choose initial point
x
=
x
0
x=x_0
x=x0;
repeat
\quad\quad
increment_k
←
\leftarrow
←false;
\quad\quad
repeat
\quad\quad\quad\quad
Compute
f
(
x
)
f(x)
f(x) and
∇
ϵ
k
f
(
x
)
\nabla_{\epsilon_k}f(x)
∇ϵkf(x);
\quad\quad\quad\quad
if
∥
∇
ϵ
k
f
(
x
)
∥
≤
ϵ
k
\Vert\nabla_{\epsilon_k}f(x)\Vert\le\epsilon_k
∥∇ϵkf(x)∥≤ϵk
\quad\quad\quad\quad\quad\quad
increment_k
←
\leftarrow
←true;
\quad\quad\quad\quad
else
\quad\quad\quad\quad\quad\quad
Find the smallest integet
m
m
m between 0 and
a
max
a_{\max}
amax s. t.
\quad\quad\quad\quad\quad\quad
f
(
x
−
ρ
m
∇
ϵ
k
f
(
x
)
)
≤
f
(
x
)
−
c
ρ
m
∥
∇
ϵ
k
f
(
x
)
∥
2
2
f(x-\rho^m\nabla_{\epsilon_k}f(x))\le f(x)-c\rho^m\Vert\nabla_{\epsilon_k}f(x)\Vert_2^2
f(x−ρm∇ϵkf(x))≤f(x)−cρm∥∇ϵkf(x)∥22;
\quad\quad\quad\quad\quad\quad
if no such
m
m
m exists
\quad\quad\quad\quad\quad\quad\quad\quad
increment_k
←
\leftarrow
←true;
\quad\quad\quad\quad\quad\quad
else
\quad\quad\quad\quad\quad\quad\quad\quad
x
←
x
−
ρ
m
∇
ϵ
k
f
(
x
)
x\leftarrow x-\rho^m\nabla_{\epsilon_k}f(x)
x←x−ρm∇ϵkf(x);
\quad\quad
until increment_k;
\quad\quad
x
k
←
x
;
k
←
k
+
1
x_k\leftarrow x;k\leftarrow k+1
xk←x;k←k+1;
until a termination test is satisfied.
注意到算法6的内循环本质上就是第三章中的回溯线搜索算法, 附加上了一个收敛的判定准则: 判定是否在差分参数
ϵ
k
\epsilon_k
ϵk所对应的精度下求得了极小. 若梯度
∇
ϵ
k
f
\nabla_{\epsilon_k}f
∇ϵkf很小, 亦或是线搜索无法找到令人满意的迭代点(说明当前的
∇
ϵ
k
f
(
x
)
\nabla_{\epsilon_k}f(x)
∇ϵkf(x)不足以产生充分的下降), 我们就减小差分参数至
ϵ
k
+
1
\epsilon_{k+1}
ϵk+1继续内循环.
算法6的一个基本的收敛结果如下.
定理2设
∇
2
h
\nabla^2h
∇2hLipschitz连续, 算法6产生无限的迭代序列
{
x
k
}
\{x_k\}
{xk}, 且
lim
k
→
∞
ϵ
k
2
+
η
(
x
k
;
ϵ
k
)
ϵ
k
=
0.
\lim_{k\to\infty}\epsilon_k^2+\frac{\eta(x_k;\epsilon_k)}{\epsilon_k}=0.
k→∞limϵk2+ϵkη(xk;ϵk)=0.另假设仅有有限个内循环不以
∥
∇
ϵ
k
f
(
x
k
)
∥
≤
ϵ
k
\Vert\nabla_{\epsilon_k}f(x_k)\Vert\le\epsilon_k
∥∇ϵkf(xk)∥≤ϵk结束. 则序列
{
x
k
}
\{x_k\}
{xk}的所有聚点均是稳定点.
证明: 由于
{
ϵ
k
}
↓
0
\{\epsilon_k\}\downarrow0
{ϵk}↓0, 所以基于假设条件我们有
∇
ϵ
k
f
(
x
k
)
→
0
\nabla_{\epsilon_k}f(x_k)\to0
∇ϵkf(xk)→0. 因此
∇
h
(
x
k
)
→
0
\nabla h(x_k)\to0
∇h(xk)→0. 从而所有聚点满足
∇
h
(
x
)
=
0
\nabla h(x)=0
∇h(x)=0. 证毕.
更加复杂的隐式滤波法则使用梯度估计 ∇ ϵ k f \nabla_{\epsilon_k}f ∇ϵkf构建拟牛顿近似Hessian, 从而产生拟牛顿搜索方向而不是算法6中的近似负梯度方向.