├── README.md
└── lecture_notes
├── README.md
├── images
├── CDF_bin.jpg
├── PMF_bin.jpg
├── RANDU_fail.jpg
├── add_mod_random_fail.jpg
└── add_mod_random_test.jpg
├── Rosenbrock_Function.md
├── Additional_Issues_for_Positive_Definite_Modification.md
├── Fundamentals_Algorithms_Nonlinear_Constrained_Optimization_II.md
├── Linear_Programming.md
├── Constraint_Optimization_III.md
├── Fundamentals_Algorithms_Nonlinear_Constrained_Optimization.md
├── Large_Scale_Problems.md
├── Constraint_Optimization_II.md
├── Random_SGD.md
├── Constraint_Optimization.md
├── Linear_Programming_II.md
├── Least_Squares_Problems.md
└── Conjugate_Gradient_Methods.md
/README.md:
--------------------------------------------------------------------------------
1 | # Optimization
2 | A teaching demonstration for the Numerical Optimization course.
3 |
--------------------------------------------------------------------------------
/lecture_notes/README.md:
--------------------------------------------------------------------------------
1 | # Optimization
2 | A teaching demonstration for the Numerical Optimization course.
3 |
--------------------------------------------------------------------------------
/lecture_notes/images/CDF_bin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangheyu/Optimization/HEAD/lecture_notes/images/CDF_bin.jpg
--------------------------------------------------------------------------------
/lecture_notes/images/PMF_bin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangheyu/Optimization/HEAD/lecture_notes/images/PMF_bin.jpg
--------------------------------------------------------------------------------
/lecture_notes/images/RANDU_fail.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangheyu/Optimization/HEAD/lecture_notes/images/RANDU_fail.jpg
--------------------------------------------------------------------------------
/lecture_notes/images/add_mod_random_fail.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangheyu/Optimization/HEAD/lecture_notes/images/add_mod_random_fail.jpg
--------------------------------------------------------------------------------
/lecture_notes/images/add_mod_random_test.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangheyu/Optimization/HEAD/lecture_notes/images/add_mod_random_test.jpg
--------------------------------------------------------------------------------
/lecture_notes/Rosenbrock_Function.md:
--------------------------------------------------------------------------------
1 | # Rosenbrock函数
2 |
3 | 多元 Rosenbrock 函数的一种形式如下:
4 | $$
5 | f(x) = \sum_{i = 1}^{n - 1}\left[(1 - x_i)^2 + 100 (x_{i + 1} - x_i^2)^2\right], x \in \mathbb{R}^n.
6 | $$
7 | 其梯度为:
8 | $$
9 | \begin{eqnarray}
10 | \frac{\partial f}{\partial x_1} &=& \frac{\partial}{\partial x_1}\left[(1 - x_1)^2 + 100(x_2 - x_1^2)^2\right] \\
11 | &=& 2(x_1 - 1) + 400 x_1 (x_1^2 - x_2);\\
12 | \frac{\partial f}{\partial x_i} &=& \frac{\partial}{\partial x_i}\left[(1 - x_i)^2 + 100(x_i - x_{i - 1}^2)^2 + 100(x_{i + 1} - x_i^2)^2\right]\\
13 | &=&2(x_i - 1) + 400 x_i (x_i^2 - x_{i+1}) + 200 (x_i - x_{i - 1}^2),\\
14 | && i = 2,3, \cdots, n - 1;\\
15 | \frac{\partial f}{\partial x_n} &=& 200(x_n - x_{n - 1}^2).
16 | \end{eqnarray}
17 | $$
18 | 其 Hessian 为:
19 | $$
20 | \begin{eqnarray}
21 | \frac{\partial^2f}{\partial x_1^2} &=& 1200 x_1^2 - 400 x_2 + 2;\\
22 | \frac{\partial^2f}{\partial x_1 \partial x_2} &=& -400 x_1;\\
23 | \frac{\partial^2f}{\partial x_i \partial x_{i - 1}} &=& -400 x_{i - 1};\\
24 | \frac{\partial^2f}{\partial x_i^2} &=& 1200 x_i^2 - 400 x_{i + 1} + 202;\\
25 | \frac{\partial^2f}{\partial x_i \partial x_{i + 1}} &=& -400 x_i,\\
26 | && i = 2, 3, \cdots, n - 1;\\
27 | \frac{\partial^2f}{\partial x_n \partial x_{n - 1}} &=& -400 x_{n - 1};\\
28 | \frac{\partial^2f}{\partial x_n^2} &=& 200;\\
29 | \end{eqnarray}
30 | $$
31 |
32 |
--------------------------------------------------------------------------------
/lecture_notes/Additional_Issues_for_Positive_Definite_Modification.md:
--------------------------------------------------------------------------------
1 | # 关于两种正定修正的补充说明
2 |
3 | 问题:已知$A$为对称不充分正定矩阵,对$A$做适当的修正使修正后的矩阵$\tilde{A}$充分正定。这里充分正定要求$A$的最小特征值$\lambda_\min$满足$\lambda_\min \geq \delta > 0$,$\delta > 0$是一个显著大于机器精度的正数。
4 |
5 | ## 基于特征分解的修正
6 |
7 | 对$A$做谱分解:
8 | $$
9 | A = Q \Lambda Q^T,
10 | $$
11 | 其中$Q$是正交阵,$\Lambda$是对角阵,且对角元$\lambda_i, i = 1, 2, \cdots, n, $是$A$全部特征值。由于$A$不充分正定,故存在$\lambda_i < \delta$,现令
12 | $$
13 | \tau_i = \left\{\begin{array}{ll} 0, &\lambda_i \geq \delta, \\ \delta - \lambda_i, &\lambda_i < \delta. \end{array}\right.
14 | $$
15 |
16 |
17 | + 若令
18 |
19 | $$
20 | \Delta A = Q \mathrm{diag}(\tau_i)Q^T,
21 | $$
22 |
23 | 则$\Delta A$是使$\tilde{A} = A + \Delta A$满足$\lambda_\min \geq \delta$的Frobenius范数最小的修正项;
24 |
25 | + 若令$\tau = \max(0, \delta - \lambda_\min(A))$,则
26 |
27 | $$
28 | \Delta A = \tau I
29 | $$
30 | 则$\Delta A$是使$\tilde{A} = A + \Delta A$满足$\lambda_\min \geq \delta$的Euclidean范数(欧氏范数、2范数)最小的修正项.
31 |
32 | 基于谱分解的修正的优点是$\tilde{A}$的特征分解(特征值、特征向量)和$A$很接近。但$\tilde{A}$和$A$形式上并不接近。
33 |
34 | ## 基于Cholesky分解的修正
35 |
36 | 对$A$做$LDL^T$型Cholesky分解,则对比$MM^T$型分解,有
37 | $$
38 | M = LD^{\frac{1}{2}}.
39 | $$
40 | 现令$\delta, \beta>0$,则算法(Matlab伪):
41 |
42 | ```matlab
43 | for j = 1:n
44 | C(j,j) = A(j,j)-sum(d(1:j-1)'.*L(j,1:j-1).^2);
45 | theta = 0;
46 | for i = j+1:n
47 | C(i,j) = A(i,j)-sum(d(1:j-1)'.*L(i,1:j-1).*L(j,1:j-1));
48 | if theta < abs(C(i,j))
49 | theta = abs(C(i,j));
50 | end
51 | end
52 | d(j) = max([abs(C(j,j)), (theta/beta)^2, \delta]);
53 | for i = j+1:n
54 | L(i,j) = C(i,j)/d(j);
55 | end
56 | L(j,j) = 1.0;
57 | end
58 | D=diag(d);
59 | ```
60 |
61 | 满足
62 |
63 | $\tilde{A} = LDL^T$正定,且有
64 | $$
65 | d_j \geq \delta, |m_{ij}| \leq \beta, j = 1,2,\cdots,n, i=j+1,\cdots,n.
66 | $$
67 | 这种修正的特点是$\tilde{A}$形式上和$A$接近,但二者特征分解相去甚远。
--------------------------------------------------------------------------------
/lecture_notes/Fundamentals_Algorithms_Nonlinear_Constrained_Optimization_II.md:
--------------------------------------------------------------------------------
1 | ## 评价函数和筛选(Merit Functions and Filters)
2 |
3 | 另一种通用的策略是将目标函数和约束函数看作一个整体,通过迭代法来求解。我们的目的是寻求满足约束并使目标函数最小化的点。如果一个迭代步,它目标函数有显著下降,但是约束却有微不足道的违背,我们是否应该接受这一步?
4 |
5 | 这是一个没有一般性答案的问题。我们一般通过算法技术来平衡这两种需求。其中一种技术称为评价函数,相当于综合下降和违背的效应来考虑;另一种称为筛选,相当于在一定的原则之下做妥协。
6 |
7 | ### 评价函数
8 |
9 | 提出评价函数本质上是试图将约束优化问题转成一个无约束优化问题。将目标下降和约束违背整合成一个评价目标。比如针对(15.1)提出
10 | $$
11 | \begin{equation}
12 | \phi_1(x; \mu) = f(x) + \mu \sum_{i \in \mathcal{E}}|c_i(x)| + \mu\sum_{i \in \mathcal{I}}[c_i(x)]^-, \tag{15.24}
13 | \end{equation}
14 | $$
15 | 这里记号$[z]^- = \max\{0, -z\}$,正数$\mu$称为惩罚因子,(15.24)称为$l1$惩罚函数。尽管这种惩罚函数是不光滑的,但它具有精确性(exact)。
16 |
17 | **定义 15.1(精确评价函数)**评价函数$\phi(x; \mu)$称为是精确的,若存在正数$\mu^*$使任意$\mu > \mu^*$,(15.1)的任何局部最优解都是$\phi(x; \mu)$的无约束局部最优解。(这里主要强调$\mu^* < +\infty$。)
18 |
19 | 对$l1$评价函数$\phi_1(x; \mu)$,令
20 | $$
21 | \mu^* = \max\{|\lambda_i^*|, i \in \mathcal{E} \cup \mathcal{I}\},
22 | $$
23 | 这里$\lambda_i^*$是对应局部最优解$x^*$的Lagrange乘子,则可以证明它是精确的(定理17.3)。由于$\lambda^*$不是预知的,故在实际算法中,我们通过自适应调节使惩罚因子充分大。
24 |
25 | 另一个有用的评价函数是精确$l2$函数,它也是针对等值约束的,
26 | $$
27 | \begin{equation}
28 | \phi_2(x; \mu) = f(x) + \mu \|c(x)\|_2. \tag{15.25}
29 | \end{equation}
30 | $$
31 | 注意这里$2-$范数项并没有平方,这使得它成为精确但不光滑评价函数。它在$c(x) = 0$点的导数不存在。
32 |
33 | 既光滑又精确的评价函数也是存在的。对等值约束,有Fletcher增广Lagrange函数
34 | $$
35 | \begin{equation}
36 | \phi_F(x; \mu) = f(x) - \lambda(x)^Tc(x) + \frac{1}{2} \mu \sum_{i \in \mathcal{E}} c_i(x)^2,
37 | \tag{15.26}
38 | \end{equation}
39 | $$
40 | 其中$\mu > 0$是惩罚因子,
41 | $$
42 | \begin{equation}
43 | \lambda(x) = \left[A(x)A(x)^T\right]^{-1}A(x)\nabla f(x).
44 | \tag{15.27}
45 | \end{equation}
46 | $$
47 | 这里$A(x)$表示$c(x)$的Jacobi矩阵,和之前的定义是相关的。尽管这个函数性质很好,但是涉及到$\lambda(x)$的计算代价过大,限制了它的应用。在实际计算中,标准的增广Lagrange函数和相应的自适应迭代格式更受欢迎。
48 |
49 | (书上这里有点啰嗦,重复了一些已经讨论过的内容,被我忽略了。)
50 |
51 | **筛选(Filters)** (这个翻译可以讨论)
52 |
53 | 过滤的思想来源是多目标优化(multiobjective optimization)。我们做约束优化其实并行地有两个目标:最小化目标函数,同时满足约束。如果我们定义一个不可行测度(measure of infeasibility)如下:
54 | $$
55 | \begin{equation}
56 | h(x) = \sum_{i \in \mathcal{E}}|c_i(x)| + \sum_{i \in \mathcal{I}}[c_i(x)]^-, \tag{15.31}
57 | \end{equation}
58 | $$
59 | 则可以把我们的两个目标写成
60 | $$
61 | \begin{equation}
62 | \left\{
63 | \begin{array}{ll}
64 | \displaystyle \min_x & f(x), \\
65 | \displaystyle \min_x & h(x).
66 | \end{array}
67 | \right. \tag{15.32}
68 | \end{equation}
69 | $$
70 | 和评价函数的思路不同,筛选并不将两个优化目标统一成一个优化问题,而是分别处理。这里我们引入一个被控制(dominated)的概念:
71 |
72 | **定义 15.2**
73 |
74 | 1. 第$k$步的目标对$(f_k, h_k)$称为是控制另一个目标对$(f_l, h_l)$的,如果$f_k \leq f_l$且$h_k \leq h_l$;(即两个目标都更好。)
75 | 2. 一个筛选有一系列目标对$(f_l, h_l)$构成,其中任两个目标对互相之间都不存在控制;
76 | 3. 一个迭代值$x_k$被称为是被筛选接受的,如果$(f_k, h_k)$没有被筛选中的任何一个目标对所控制。
77 |
78 | 当一个迭代值$x_k$是被筛选接受的,我们将$(f_k, h_k)$加入该筛选,同时将所有被$(f_k, h_k)$所控制的目标对移除筛选。如此我们构建了一个迭代法的更新策略,我们通过调整算法的其它参数,扩充筛选序列,直到达到最优解。在实际计算中,筛选策略有时具有非常好的效果(然而理论上仍然在研究中)。这一策略会在第18章得到应用和进一步讨论。
79 |
80 | ## Maratos效应
81 |
82 | 不论是评价函数还是筛选策略,在实际计算中都可能不收敛,因为它们有时会排除能取得最大进展的迭代步。这一现象被称为Maratos效应(Maratos effect),它由Maratos第一次发现并发表于[199]。我们用以下例子来具体描述:
83 |
84 | **例 15.4**(Powell [255])
85 | $$
86 | \begin{equation}
87 | \begin{array}{ll}
88 | \min & f(x_1, x_2) = 2(x_1^2 + x_2^2 - 1) - x_1,\\
89 | \mbox{s.t.} & x_1^2 + x_2^2 = 1.
90 |
91 | \end{array} \tag{15.34}
92 | \end{equation}
93 | $$
94 | 显然最优解是$x^* = (1, 0)^T$,对应的Lagrange乘子是$\lambda^* = \frac{3}{2}$,并且
95 | $$
96 | \nabla_{xx}^2\mathcal{L}(x^*, \lambda^*) = I.
97 | $$
98 | 考虑迭代序列$x_k = (\cos\theta, \sin\theta)^T$,对任何$\theta$,该点都是可行的。对一个迭代步长
99 | $$
100 | \begin{equation}
101 | p_k = \left(
102 | \begin{array}{c}
103 | \sin^2\theta \\
104 | -\sin\theta\cos\theta
105 | \end{array}
106 | \right), \tag{15.35}
107 | \end{equation}
108 | $$
109 | 我们有迭代改进
110 | $$
111 | x_k + p_k = \left(
112 | \begin{array}{c}
113 | \cos\theta + \sin^2\theta \\
114 | \sin\theta(1 - \cos\theta)
115 | \end{array}
116 | \right).
117 | $$
118 | 由基本三角恒等式(elementary trigonometric identities),有
119 | $$
120 | \|x_k + p_k - x^*\|_2 = 2 \sin^2\left(\frac{\theta}{2}\right), \quad \|x_k - x^*\|_2 = 2\left|\sin\left(\frac{\theta}{2}\right)\right|,
121 | $$
122 | 于是
123 | $$
124 | \frac{\|x_k + p_k - x^*\|_2}{\|x_k - x^*\|_2^2} = \frac{1}{2}.
125 | $$
126 | 也即这个迭代是$Q-$二阶收敛的。然而,
127 | $$
128 | \begin{array}{rcl}
129 | f(x_k + p_k) &=& \sin^2\theta - \cos\theta > -\cos\theta = f(x_k) \\
130 | c(x_k + p_k) &=& \sin^2\theta > c(x_k) = 0.
131 | \end{array}
132 | $$
133 | 也即同时有目标函数上升,且约束违背增强。而且对任何$\theta$非零,这一现象都存在,不论$x_k$有多靠近$x^*$。
134 |
135 | 我们看到,只要我们采取形如
136 | $$
137 | \phi(x; \mu) = f(x) + \mu h(c(x))
138 | $$
139 | 的评价函数,其中$h(0) = 0$,那么它就会拒绝(15.35)那样的高效率改进。显然,筛选策略也会拒绝这一改进。在实际计算中,Maratos效应会造成收敛变慢,因为它会拒绝本质上造成全部二阶收敛的步长。解决的办法如下:
140 |
141 | 1. 使用没有Maratos效应的评价函数,比如Fletcher增广Lagrange函数(15.26);
142 | 2. 在评价和筛选过程中加入二阶信息;
143 | 3. 允许目标函数或约束违背有适当的上升。
144 |
145 |
--------------------------------------------------------------------------------
/lecture_notes/Linear_Programming.md:
--------------------------------------------------------------------------------
1 | # 线性规划(Linear Programming)
2 |
3 | ## 对偶(Duality)
4 |
5 | 我们已经注意到,问题的表述形式会严重影响问题的求解方法。有时候,一个问题存在对称的另一种“相反”方式的描述,这种表示在数学上被称为对偶表示(这里借用这个名称,真正的对偶在数学上都是有严格定义的)。有时将一个问题转成对偶形式,能更方便地求解。
6 |
7 | 以下考虑问题(12.1)的一个特例:$\mathcal{E} = \phi$,且目标函数$f$和$c_i(x)$都是凸的,$i \in \mathcal{I}$。也即(12.1)现在可以写成
8 | $$
9 | \begin{equation}
10 | \min f(x), \quad \mbox{s. t.} ~c(x) \geq 0, \tag{12.81}
11 | \end{equation}
12 | $$
13 | 这里
14 | $$
15 | c(x) := \left[c_1(x), c_2(x), \cdots, c_m(x)\right]^T, \mathcal{I} = \{1, 2, \cdots, m\}.
16 | $$
17 | 对应的Lagrange乘子函数为:
18 | $$
19 | \mathcal{L}(x, \lambda) = f(x) - \lambda^Tc(x).
20 | $$
21 | 现定义对偶目标函数$q: \mathbb{R}^n \mapsto \mathbb{R}$,
22 | $$
23 | q(\lambda) := \inf_{x} \mathcal{L}(x, \lambda), \tag{12.82}
24 | $$
25 | 由于对某些$\lambda$,$q(\lambda)$可以取到$-\infty$,因此我们限制$q$的定义域为:
26 | $$
27 | \begin{equation}
28 | \mathcal{D}(q) := \left\{\lambda \left|q(\lambda) > -\infty\right.\right\}. \tag{12.83}
29 | \end{equation}
30 | $$
31 | (原问题我们一般是先确立$x$,然后判定$\lambda$。而在对偶情形下,我们先确定$\lambda$,然后再判定$x$。不论是原问题还是对偶,二者通过$\mathcal{L}(x, \lambda)$建立对应。)
32 |
33 | 注意当$f$和$c_i(x)$是凸的且$\lambda \geq 0$时,$\mathcal{L}(\cdot, \lambda)$也是凸的。因此任何局部极值都是其全局极值。定义问题(12.81)的对偶问题如下:
34 | $$
35 | \begin{equation}
36 | \max_{\lambda \in \mathbb{R}^n} q(\lambda), \quad \mbox{s. t.}~ \lambda \geq 0. \tag{12.84}
37 | \end{equation}
38 | $$
39 | **例 12.10**
40 | $$
41 | \begin{equation}
42 | \min_{x} 0.5(x_1^2 + x_2^2), \quad \mbox{s. t.}~ x_1 - 1 \geq 0.
43 | \tag{12.85}
44 | \end{equation}
45 | $$
46 | 该问题的Lagrange乘子函数为
47 | $$
48 | \mathcal{L}(x, \lambda) = 0.5(x_1^2 + x_2^2) - \lambda_1(x_1 - 1),
49 | $$
50 | 对给定的$\lambda_1$, 有$\mathcal{L}(x, \lambda_1)$是凸的,故其稳定点:
51 | $$
52 | \left\{\begin{array}{rcl}
53 | \displaystyle\frac{\partial \mathcal{L}(x, \lambda_1)}{\partial x_1} &=& x_1 - \lambda = 0\\\\
54 | \displaystyle\frac{\partial \mathcal{L}(x, \lambda_1)}{\partial x_2} &=& x_2 = 0
55 | \end{array}\right.
56 | \Rightarrow
57 | \left\{
58 | \begin{array}{rcl}
59 | x_1 &=& \lambda_1 \\
60 | x_2 &=& 0
61 | \end{array}
62 | \right.
63 | $$
64 | 就是其全局极小值点,故
65 | $$
66 | \begin{eqnarray}
67 | q(\lambda_1) &=& \inf_x \mathcal{L}(x_, \lambda_1) = \mathcal{L}(\lambda_1, 0, \lambda_1)\\
68 | &=&\left.0.5(x_1^2 + x_2^2) - \lambda_1(x_1 - 1)\right|_{x_1 = \lambda_1, x_2 = 0}\\
69 | &=&0.5(\lambda_1^2) - \lambda_1(\lambda_1 - 1)\\
70 | &=&-0.5\lambda_1^2 + \lambda_1.
71 | \end{eqnarray}
72 | $$
73 | 因此对偶问题为:
74 | $$
75 | \max_{\lambda_1\geq0}-0.5\lambda_1^2+\lambda_1,
76 | \tag{12.86}
77 | $$
78 | 解为$\lambda_1^* = 1$,代回有$x^* = (1, 0)^T$。(对偶问题和原问题等解。)
79 |
80 | **定理 12.10** $q$是凹(concave)的,$\mathcal{D}$是凸的。
81 |
82 | **证明** $\forall \lambda^0, \lambda^1 \in \mathbb{R}^n$,$x \in \mathbb{R}^n$,$\alpha \in [0, 1]$,有
83 | $$
84 | \mathcal{L}(x, (1 - \alpha)\lambda^0 + \alpha \lambda^1) = (1 - \alpha)\mathcal{L}(x, \lambda^0) + \alpha\mathcal{L}(x, \lambda^1),
85 | $$
86 | 两边同时取$\inf$,并用不等式
87 | $$
88 | \inf(a + b) \geq \inf a + \inf b,
89 | $$
90 | 有
91 | $$
92 | q((1 - \alpha)\lambda^0 + \alpha \lambda^1) \geq (1 -\alpha) q(\lambda^0) + \alpha q(\lambda^1),
93 | $$
94 | 即$q$是凹的(和凸不等式反向)。而对$\lambda^0, \lambda^1 \in \mathcal{D}$,则上式右端$> -\infty$,而上式左端亦$> -\infty$,于是
95 | $$
96 | (1 - \alpha)\lambda^0 + \alpha \lambda^1 \in \mathcal{D},
97 | $$
98 | 即$\mathcal{D}$是凸的。
99 |
100 | 从上述证明可以看到,对偶问题的目标函数,事实上是原问题目标函数的下界。这个事实总结为以下定理:
101 |
102 | **定理 12.11(弱对偶)** 任取(12.81)的可行点$\bar{x}$,以及$\bar{\lambda} \geq 0$,有$q(\bar{\lambda}) \leq f(\bar{x})$。
103 |
104 | **证明:**略。
105 |
106 | 在(12.81)的形式下,KKT条件有如下形式:
107 | $$
108 | \begin{eqnarray}
109 | \nabla f(\bar{x}) - \nabla c(\bar{x})\bar{\lambda} &=& 0, \tag{12.87a}\\
110 | c(\bar{x}) &\geq& 0, \tag{12.87b}\\
111 | \bar{\lambda} &\geq& 0, \tag{12.87c} \\
112 | \bar{\lambda}_i c_i(\bar{x}) &=& 0, i = 1, 2, \cdots, m. \tag{12.87d}
113 | \end{eqnarray}
114 | $$
115 | 其中$\nabla c(x)$表示$n \times m$矩阵
116 | $$
117 | \nabla c(x) = \left[\nabla c_1(x), \nabla c_2(x), \cdots, \nabla c_m(x)\right].
118 | $$
119 | **定理12.12** 若$\bar{x}$是问题(12.18)的解,且$f$和$-c_i$均凸并在$\bar{x}$点连续可微,$i = 1, 2, \cdots, m$,则对任何满足KKT条件的$(\bar{x}, \bar{\lambda})$,$\bar{\lambda}$是(12.84)的解。
120 |
121 | **定理12.13** 假设$f$和$-c_i$,$i = 1, 2, \cdots, m$是凸的且连续可微。若$\bar{x}$是(12.81)的解且LICQ成立。假设$\hat{\lambda}$是(12.84)的解,且$\inf_x\mathcal{L}(x, \lambda)$在$\hat{x}$取到。若$\mathcal{L}(\cdot, \hat{\lambda})$是严格凸的,则$\bar{x} =\hat{x}$,$f(\bar{x}) = \mathcal{L}(\hat{x}, \hat{\lambda})$。
122 |
123 | 以上两个定理证明略,它们说明可以在必要的时候用对偶问题来代替原问题求解。而在计算上,我们讲对偶问题整理成更方便的形式,称为Wolfe对偶:
124 | $$
125 | \begin{equation}
126 | \max_{x, \lambda}\mathcal{L}(x, \lambda), \quad \mbox{s. t.} ~ \nabla_x\mathcal{L}(x, \lambda) = 0, \lambda \geq 0. \tag{12.88}
127 | \end{equation}
128 | $$
129 | 这种转换只需要机械地计算。
130 |
131 | **定理 12.14** 假设$f$和$-c_i$,$i = 1, 2, \cdots, m$是凸的并连续可微。若$(\bar{x}, \bar{\lambda})$是(12.81)的解,且有LICQ成立。则$(\bar{x}, \bar{\lambda})$也是(12.88)的解。
132 |
133 | **例 12.11(线性规划,Linear Programming)**
134 | $$
135 | \begin{equation}
136 | \min c^Tx, \mbox{s. t.}~ Ax - b \geq 0. \tag{12.89}
137 | \end{equation}
138 | $$
139 | 对偶目标为:
140 | $$
141 | q(\lambda) = \inf_x\left[c^Tx - \lambda^T(Ax - b)\right] = \inf_x\left[(c - A^T\lambda)^Tx + b^T\lambda\right],
142 | $$
143 | 若$c - A^T\lambda \neq 0$,则$q(\lambda) = -\infty$(无界)。故由定义,$q(\lambda)$需满足$A^T\lambda = c$。而此时$q(\lambda) = b^T\lambda$,对偶问题为:
144 | $$
145 | \begin{equation}
146 | \max_\lambda b^T\lambda, \quad \mbox{s. t.}~A^T\lambda = c, \lambda \geq 0. \tag{12.90}
147 | \end{equation}
148 | $$
149 | 直接计算可得,对应的Wolfe对偶为
150 | $$
151 | \max_{\lambda, x} c^Tx - \lambda^T(Ax - b), \quad \mbox{s. t.} A^T\lambda = c, \lambda \geq 0.
152 | $$
153 | 和(12.90)是等价的。对于$A$的某些形式,(12.90)比(12.89)更易求解。
154 |
155 | **例 12.12(凸二次规划,Convex Quadratic Programming)**
156 | $$
157 | \min \frac{1}{2} x^TGx + c^Tx, \quad \mbox{s. t.}~ Ax - b \geq 0, \tag{12.91}
158 | $$
159 | 其中$G$正定。对偶目标函数为
160 | $$
161 | q(\lambda) = \inf_x \mathcal{L}(x, \lambda) = \inf_x \frac{1}{2} x^TGx + c^Tx - \lambda^T(Ax - b), \tag{12.92}
162 | $$
163 | 由$G$对称正定,$\mathcal{L}(x, \lambda)$严格凸,故$\inf$在$\nabla_x\mathcal{L}(x, \lambda) = 0$,即
164 | $$
165 | Gx + c - A^T\lambda \Rightarrow x = G^{-1}(A^T\lambda - c). \tag{12.93}
166 | $$
167 | 由上式,得
168 | $$
169 | \begin{eqnarray}
170 | q(\lambda) &=& \left.x^TGx + c^Tx - \lambda^TAx + \lambda^Tb - \frac{1}{2}x^TGx\right|_{Gx + c - A^T\lambda = 0} \\
171 | &=& -\frac{1}{2}(A^T\lambda - c)^TG^{-1}GG^{-1}(A^T\lambda - c) + b^T\lambda\\
172 | &=& -\frac{1}{2}(A^T\lambda - c)^TG^{-1}(A^T\lambda - c)+b^T\lambda.
173 | \end{eqnarray}
174 | $$
175 | 同样,我们可以给出Wolfe对偶:
176 | $$
177 | \begin{equation}
178 | \max_{\lambda, x} -\frac{1}{2}x^TGx + \lambda^Tb, \quad \mbox{s. t.}~Gx + c - A^T\lambda = 0, \lambda \geq 0.
179 | \tag{12.95}
180 | \end{equation}
181 | $$
182 | 这里事实上$G$只需半正定。
183 |
184 | 以上都只是引言,我们现在真正将注意力集中到线性规划上来。这是一类最简单,也是最重要的优化模型,同时也是一种最基本的建模思路。它的目标函数和约束,全部都是线性的。
185 |
186 | **例:如何找对象?**
187 |
188 | 我们如何用一个简单的线性模型来表达这么复杂的一个主题呢?
189 | $$
190 | \min f(x) = -c^Tx, \quad \mbox{s. t.}~Ax \geq b.
191 | $$
192 | 也即
193 | $$
194 | \begin{array}{ll}
195 | \min & f(x) = \displaystyle-\sum_{i = 1}^n c_ix_i, \\
196 | \mbox{s. t.} &\left\{\begin{array}{rcl}
197 | a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n &\geq& b_1,\\
198 | a_{21}x_1 + a_{22}x_2 + \cdots + a_{2n}x_n &\geq& b_2,\\
199 | \cdots\\
200 | a_{n1}x_1 + a_{n2}x_2 + \cdots + a_{nn}x_n &\geq& b_n.\\
201 | \end{array}\right.
202 | \end{array}
203 | $$
204 | 我们可以用这样一张表格来表达我们的建模思路:
205 |
206 | | **变量** | **权重** | **目标成份** |
207 | | --------- | ----------- | ------------ |
208 | | $x_1$ | $c_1$ | 性格 |
209 | | $x_2$ | $c_2$ | 颜值 |
210 | | $\vdots$ | $\vdots $ | $ \vdots $ |
211 | | $x_{n-1}$ | $c_{n - 1}$ | 学历 |
212 | | $x_n$ | $c_n$ | 财产 |
213 |
214 | 我们马上体会到,这样的建模的优点:
215 |
216 | + 简单粗暴直接。你只须确定一下$c$和$b$,立刻就把你的需求暴露无疑。比如:
217 | $$
218 | c = [0.5, 0.3, \cdots, 0.8, 100.0]^T
219 | $$
220 | 而$b$就代表了你的接受下界;
221 |
222 | + 方便求解。线性规划有可靠的理论和数值求解算法,能够确保得到正确的解(或者明确无解);
223 |
224 | + 能够表达复杂需求。
225 |
226 | 当然它的上述优点同时也可以认为是它的缺点。比如我们的例子问题,你真的打算尝试么?不过在大量的实际生产和研究领域,它都提供了一种可操作可供参考的建设性模型工具。
227 |
228 | 为了能进一步方便求解,我们一般也会对线性规划如何书写,提出规范要求,称做“标准形式”。注意,标准形式也是因书而异,因软件而异的。本书本课程约定的线性规划标准形式为:
229 | $$
230 | \begin{equation}
231 | \min_{x \in \mathbb{R}^n} f(x), \quad \mbox{s.t.}~ Ax = b, x\geq0.
232 | \tag{13.1}
233 | \end{equation}
234 | $$
235 | 其中$A$是$m \times n$矩阵,$m$是等值约束个数。
236 |
237 | 首先讨论如何将一般形式
238 | $$
239 | \min f(x), \quad \mbox{s. t.}~ Ax \leq b.
240 | $$
241 | 转换成标准形式。对于一般的不等值约束$Ax \leq b$,我们先增加松弛变量$z$,将其变为:
242 | $$
243 | \begin{equation}
244 | Ax \leq b \Rightarrow Ax + z = b, z\geq 0, \tag{13.2}
245 | \end{equation}
246 | $$
247 | 新增的变量$z$是满足$z \geq 0$的标准化要求的,但之前的$x$并没有,为此,对$x$做分裂:
248 | $$
249 | x = x^+ - x^-, x^+ = \max(x, 0), x^- = \max(-x, 0),
250 | $$
251 | 而将原来目标函数写成:
252 | $$
253 | \begin{eqnarray}
254 | f(x) &=& \sum_{i = 1}^n c_ix_i + 0\cdot z\\
255 | &=& \sum_{i=1}^nc_i(x_i^+ - x_i^-) + 0\cdot z\\
256 | &=& \sum_{i = 1}^nc_ix_i^+ + \sum_{i = 1}^n(-c_i)x_i^-+0\cdot z,
257 | \end{eqnarray}
258 | $$
259 | 重新整理一下,现令
260 | $$
261 | x = [x^+\quad x^- \quad z]^T, c = [c\quad -c\quad 0]^T, A = [A\quad -A\quad I],
262 | $$
263 | 则一般问题就转变成等解的标准形式:
264 | $$
265 | \min f(x) = c^Tx, \quad \mbox{s. t.}~Ax = b, x\geq0.
266 | $$
267 | **例**
268 | $$
269 | \left\{
270 | \begin{array}{ll}
271 | \min & x_1 - 2x_2 + 5x_3,\\
272 | \mbox{s.t.}& x_1 - x_3 \geq 6,\\
273 | &2x_2+x_3\leq2,\\
274 | &x_1, x_2 \geq 0.
275 | \end{array}
276 | \right.
277 | $$
278 | 化为标准形式:
279 |
280 | 引入$x_4 \geq 0$,使
281 | $$
282 | x_1 - x_3 \geq 6 \Leftrightarrow x_1-x_3-x_4= 6.
283 | $$
284 | 引入$x_5 \geq 0$,使
285 | $$
286 | 2x_2+x_3\leq2 \Leftrightarrow 2x_2+x_3+x_5=2.
287 | $$
288 | 引入$x_6, x_7 \geq 0$,并令
289 | $$
290 | x_3 = x_6 -x_7,
291 | $$
292 | 则原问题化为:
293 | $$
294 | \left\{
295 | \begin{array}{ll}
296 | \min & x_1 - 2x_2+5x_6-5x_7,\\
297 | \mbox{s.t.}&x_1 - x_4 - x_6 + x_7 = 6,\\
298 | &2x_2 + x_6 - x_7 + x_5 = 2,\\
299 | &x_1, x_2, x_4, x_5, x_6, x_7 \geq 0.
300 | \end{array}
301 | \right.
302 | $$
303 | 我们对$x$的各分量做一个重排:
304 | $$
305 | x_4 \to x_3, x_5 \to x_4, x_6 \to x_5, x_7 \to x_6,
306 | $$
307 | 其余分量不变,则原问题整理成标准形式:
308 | $$
309 | \left\{
310 | \begin{array}{ll}
311 | \min & x_1 - 2x_2 + 5x_5-5x_6,\\
312 | \mbox{s.t.}&x_1 - x_3 - x_5 + x_6 = 6,\\
313 | &2x_2 + x_4 + x_5 - x_6 = 2,\\
314 | &x\geq 0.
315 | \end{array}
316 | \right.
317 | \quad\Leftrightarrow\quad
318 | \left\{
319 | \begin{array}{ll}
320 | \min & f(x) = c^Tx,\\
321 | \mbox{s.t.}& Ax = b,\\
322 | & x\geq 0.
323 | \end{array}
324 | \right.
325 | $$
326 | 其中,
327 | $$
328 | c = (1, -2, 0, 0, 5, -5)^T, \quad x = (x_1, x_2, \cdots, x_6)^T, \quad b=(6, 2)^T,\\
329 | A=\left[
330 | \begin{array}{rrrrrr}
331 | 1&0&-1&0&-1&1\\
332 | 0&2&0&1&1&-1
333 | \end{array}
334 | \right].
335 | $$
336 | 我们可以写出(13.1)的Lagrange乘子函数,
337 | $$
338 | \begin{equation}
339 | \mathcal{L}(x, \lambda, s) = c^Tx - \lambda^T(Ax - b) - s^Tx.
340 | \tag{13.3}
341 | \end{equation}
342 | $$
343 | 这里$\lambda$是针对等值约束的$m$维Lagrange乘子向量,$s$则是针对不等值约束$x\geq0$的$n$维Lagrange乘子。对线性规划应用定理12.1,就得到$x^*$是问题(13.1)的解的必要条件为:
344 | $$
345 | \begin{eqnarray}
346 | A^T\lambda + s &=& c, \tag{13.4a}\\
347 | Ax &=& b,\tag{13.4b}\\
348 | x &\geq& 0, \tag{13.4c}\\
349 | s &\geq& 0, \tag{13.4d}\\
350 | x_is_i &=& 0, i = 1, 2, \cdots, n. \tag{13.4e}
351 | \end{eqnarray}
352 | $$
353 | 令$(x^*, \lambda^*, s^*)$表示一个满足条件(13.4)的向量三元组,由(13.4a),(13.4d)和(13.4e)有
354 | $$
355 | \begin{equation}
356 | c^Tx^* = (A^T\lambda^* + s^*)^Tx^*=(Ax^*)^T\lambda^*=b^T\lambda^*.
357 | \tag{13.5}
358 | \end{equation}
359 | $$
360 | 在线性规划情形,容易看出(13.4)也是有解的充分条件(问题也只有一阶),即满足(13.4)的$x^*$必是问题(13.1)的全局最优解。令$\bar{x}$是任何可行点,则
361 | $$
362 | A\bar{x} = b, \quad\bar{x} \geq 0.
363 | $$
364 | 于是
365 | $$
366 | \begin{equation}
367 | c^T\bar{x} = (A\lambda^* + s^*)^T\bar{x} = b^T\lambda^* + \bar{x}^Ts^* \geq b^T\lambda^*=c^Tx^*.
368 | \tag{13.6}
369 | \end{equation}
370 | $$
371 | 也即不会有比$x^*$取值更小的可行点。并且由(13.6)取等号的条件我们还可以看到,若可行点$\bar{x}$是问题(13.1)的全局最优点,当且仅当
372 | $$
373 | \bar{x}^Ts^* = 0.
374 | $$
375 | 线性规划问题的对偶问题是非常简单干净的,问题(13.1)的对偶问题为:
376 | $$
377 | \begin{equation}
378 | \max b^T\lambda, \quad \mbox{s.t.} ~ A^T\lambda \leq c. \tag{13.7}
379 | \end{equation}
380 | $$
381 | 现在变量变成了$\lambda$。相应地,(13.1)被称为原问题(primal)。这个问题也可以引入“对偶松弛变量”(dual slack variables)$s$,将其改写成类似的标准形式:
382 | $$
383 | \begin{equation}
384 | \max b^T\lambda, \quad \mbox{s.t.} A^T\lambda + s = c, s\geq 0.\tag{13.8}
385 | \end{equation}
386 | $$
387 | 在这里,$(\lambda, s)$一起成为新问题的变量,有时也被称为对偶变量。
388 |
389 | 对偶问题和原问题其实是同一个问题的不同建模方式,它们在Lagrange乘子函数和解的条件上达成了一致。这里我们不再过多讨论细节,有兴趣的同学自己看书第361页后剩下的部分。我们直接用一个定理来总结一下:
390 |
391 | **定理 13.1(强对偶)**
392 |
393 | 1. 若(13.1)和(13.7)其中之一有有限解,则另一个也有有限解,且解和优化目标值相同;
394 | 2. 若(13.1)和(13.7)其中之一的解无界,则另一个必不可行(无解)。
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
--------------------------------------------------------------------------------
/lecture_notes/Constraint_Optimization_III.md:
--------------------------------------------------------------------------------
1 | ## 二阶优化条件
2 |
3 | 在LICQ(或其他适当的约束规范)前提下,我们可以通过局部最优点$x^*$处的$\mathcal{F}(x^*)$来分析全部一阶局部信息应该具有的性质,也就是KKT条件。本节我们继续讨论二阶局部信息应该具有的性质,并最终给出二阶必要和充分条件。
4 |
5 | 已知$x^*$是局部最优点,由一阶条件,存在$\lambda^*$使$(x^*, \lambda^*)$满足KKT条件。首先,我们将焦点放在一阶条件中无法判定升降的从$x^*$出发的可行方向$w$,也即$w$满足
6 | $$
7 | w^T\nabla f(x^*) = 0.
8 | $$
9 | (这里如果大于零,则一阶信息确保了上升,如果小于零,则下降。而严格等于零,表明这是一个待定方向。若$x^*$是严格局部最优点,我们知道这个方向必须上升,但从一阶条件无法得到这个结论。)
10 |
11 | 我们在KKT条件的框架下,将其定义为一个锥的形式,称为关键锥(critical cone):
12 | $$
13 | \mathcal{C}(x^*, \lambda^*) = \left\{w \in \mathcal{F}(x^*) \left|\nabla c_i(x^*)^Tw = 0, \forall i \in \mathcal{A}(x^*)\cap\mathcal{I}, \lambda_i > 0\right.\right\}.
14 | $$
15 | (我们仍然保持LICQ,因此$T_\Omega(x^*)$和$\mathcal{F}(x^*)$是一致的。这里$w \in \mathcal{F}(x^*)$首先表明从一阶信息看,$w$是在$x^*$邻域内的$\Omega$部分的,也即$\forall i \in \mathcal{E}$,有$\nabla c_i(x^*) = 0$。而对$\forall i \in \mathcal{A}(x^*) \cap \mathcal{I}$,有$\nabla c_i(x^*)^Tw \geq 0$,这里注意
16 | $$
17 | w^T\nabla f(x^*) = \sum_{i \in \mathcal{A}(x^*)} w^T\lambda_i \nabla c_i(x^*),
18 | $$
19 | 对$i \in \mathcal{E}$项,右端部分已经为零。对于$i \in \mathcal{A}(x^*)\cap\mathcal{I}$且$\lambda_i = 0$项,右端部分也为零。所以只要提取$\lambda_i > 0$,且$\nabla c_i(x^*)^Tw = 0$的方向,就能确保把全部不确定,也就是$w^T\nabla f(x^*) = 0$的方向都提取出来。)
20 |
21 | 或等价地,
22 | $$
23 | \begin{equation}
24 | w \in \mathcal{C}(x^*, \lambda^*) \Leftrightarrow \left\{
25 | \begin{array}{ll}
26 | \nabla c_i(x^*)^T w = 0, & \forall i \in \mathcal{E},\\
27 | \nabla c_i(x^*)^T w = 0, & \forall i \in \mathcal{A}(x^*)\cap\mathcal{I}, \lambda_i > 0\\
28 | \nabla c_i(x^*)^T w \geq 0, &\forall i \in \mathcal{A}(x^*)\cap\mathcal{I}, \lambda_i = 0.
29 | \end{array}
30 | \right. \tag{12.53}
31 | \end{equation}
32 | $$
33 | 由(12.53),我们马上有结论
34 | $$
35 | \begin{equation}
36 | w \in \mathcal{C}(x^*, \lambda^*) \Rightarrow \lambda_i^*\nabla c_i(x^*)^Tw = 0, \quad \forall i \in \mathcal{E}\cup\mathcal{I}.
37 | \tag{12.54}
38 | \end{equation}
39 | $$
40 | 于是结合(12.34a)和(12.33),得
41 | $$
42 | \begin{equation}
43 | w \in \mathcal{C}(x^*, \lambda^*) \Rightarrow w^T\nabla f(x^*) = \sum_{i \in \mathcal{E} \cup \mathcal{I}} \lambda_i^* w^T\nabla c_i(x^*) = 0. \tag{12.55}
44 | \end{equation}
45 | $$
46 | 也即沿关键锥中的方向,一阶信息已经退化了,和之前无约束优化问题一样,如果要知道$\mathcal{C}$中的方向是上升还是下降,我们必须进一步考虑其二阶信息。
47 |
48 | **例 12.7**
49 |
50 | 考虑问题
51 | $$
52 | \begin{equation}
53 | \min x_1, \quad \mbox{s. t.} x_2 \geq 0, 1 - (x_1 - 1)^2 - x_2^2 \geq 0, \tag{12.56}
54 | \end{equation}
55 | $$
56 | (草图,手算验证一下结果)显然全局最优解是$x^* = (0, 0)^T$,而$\mathcal{A}(x^*) = \{1, 2\}$,对应有唯一的Lagrange乘子$\lambda^* = (0, 0.5)^T$。同时,注意到在$x^*$点,活跃约束的梯度分别为
57 | $$
58 | \nabla c_1(x^*) = (0, 1)^T, \quad \nabla c_2(x^*) = (2, 0)^T,
59 | $$
60 | 满足LICQ条件。该问题的线性化可行方向为
61 | $$
62 | \mathcal{F}(x^*) = \{d | d \geq 0\},
63 | $$
64 | 以及关键锥为
65 | $$
66 | \mathcal{C}(x^*, \lambda^*) = \{(0, w_2)^T | w_2 \geq 0\}.
67 | $$
68 | 我们注意到$f$在$\mathcal{F}(x^*)$方向内,都是非减的,因此和$x^*$是最优解不矛盾。但要判定$x^*$就是最优解,我们缺少了$\mathcal{C}(x^*, \lambda^*)$方向上的信息,因为在这个方向上,$\nabla f(x^*) = 0$,$f$究竟是上升还是下降,由Taylor展开的下一项(二阶项)决定。至此,二阶必要条件和充分条件都已经很清晰了。
69 |
70 | **定理 12.5(二阶必要条件)** 假设$x^*$是问题(12.1)的局部最优解,且有LICQ成立。令$\lambda^*$是对应的Lagrange乘子,则
71 | $$
72 | \begin{equation}
73 | w^T \nabla_{xx}^2\mathcal{L}(x^*, \lambda^*)w \geq 0, \quad \forall w \in \mathcal{C}(x^*, \lambda^*). \tag{12.57}
74 | \end{equation}
75 | $$
76 | **证明** 由$x^*$是(12.1)的局部最优解,全部趋于$x^*$的可行序列$\{z_k\}$对充分大的$k$均有
77 | $$
78 | f(z_k) \geq f(x^*).
79 | $$
80 | 现在我们构建可行序列,使得其极限方向就是$w$。首先由于$w \in \mathcal{C}(x^*, \lambda^*) \subset \mathcal{F}(x^*)$,因此我们可以用证明引理12.2时的技巧(隐函数定理),构建可行序列和对应正序列,使得
81 | $$
82 | \begin{equation}
83 | \lim_{k \to \infty} \frac{z_k - x^*}{t_k} = w, \tag{12.58}
84 | \end{equation}
85 | $$
86 | 也即
87 | $$
88 | \begin{equation}
89 | z_k - x^* = t_k w + o(t_k). \tag{12.59}
90 | \end{equation}
91 | $$
92 | 而在构建$\{z_k\}$的时候,我们由(12.42),已知
93 | $$
94 | c_i(z_k) = t_k \nabla c_i(x^*)^Tw, \forall i \in \mathcal{A}(x^*), \tag{12.60}
95 | $$
96 | (做Taylor展开,此时$c_i(x^*) = 0$)结合(12.33),(12.60)和(12.54),我们有
97 | $$
98 | \begin{eqnarray}
99 | \mathcal{L}(z_k, \lambda^*) &=& f(z_k) - \sum_{i \in \mathcal{E}\cup\mathcal{I}}\lambda^*_i c_i(z_k) \\
100 | &=& f(z_k) - t_k\sum_{i \in \mathcal{A}(x^*)} \lambda_i^* \nabla c_i(x^*)^Tw\\
101 | &=& f(z_k), \tag{12.61}
102 | \end{eqnarray}
103 | $$
104 | (然而一阶项实际是零,消失了。)我们再一次Taylor展开,
105 | $$
106 | \begin{eqnarray}
107 | \mathcal{L}(z_k, \lambda^*) &=& \mathcal{L}(x^*, \lambda^*) + (z_k - x^*)^T\nabla_x\mathcal{L}(x^*, \lambda^*) + \frac12(z_k - x^*)^T\nabla_{xx}^2\mathcal{L}(x^*, \lambda^*)(z_k - x^*) + o(\|z_k - x^*\|^2). \tag{12.62}
108 | \end{eqnarray}
109 | $$
110 | 在我们的例子中,考虑到互补性条件(12.34e),已有$\mathcal{L}(x^*, \lambda^*) = f(x^*)$。而在(12.34a)中(一阶必要条件),全部一阶导数项也全部为零(关键锥),再由(12.59),我们可以将(12.62)改写为
111 | $$
112 | \begin{equation}
113 | \mathcal{L}(z_k, \lambda^*) = f(x^*) + \frac12t_k^2w^T\nabla_{xx}^2\mathcal{L}(x^*, \lambda^*)w + o(t_k^2). \tag{12.63}
114 | \end{equation}
115 | $$
116 | 结合(12.61),有
117 | $$
118 | \begin{equation}
119 | f(z_k) = f(x^*) + \frac12 t_k^2w^T\nabla_{xx}^2\mathcal{L}(x^*, \lambda^*)w + o(t_k^2).\tag{12.64}
120 | \end{equation}
121 | $$
122 | 若$w^T\nabla_{xx}^2\mathcal{L}(x^*, \lambda^*)w < 0$,由(12.64),存在$f(z) < f(x^*)$对$k$充分大成立,和$x^*$是局部最优解矛盾。因此(12.57)必然成立。$\Box$
123 |
124 | **定理 12.6(二阶充分条件)** 假设对可行点$x^* \in \mathbb{R}^n$存在Lagrange乘子$\lambda^*$使得KKT条件成立,并且同时有
125 | $$
126 | \begin{equation}
127 | w^T \nabla_{xx}^2\mathcal{L}(x^*, \lambda^*)w > 0, \quad \forall w \in \mathcal{C}(x^*, \lambda^*), w \neq 0. \tag{12.65}
128 | \end{equation}
129 | $$
130 | 则$x^*$是问题(12.1)的严格局部最优解。
131 |
132 | 证明自己看书。实际上书上的证明也不完整。但这个定理的结论还是很显然的。
133 |
134 | **例12.8** 我们检查例12.2中出现的问题(12.8)的二阶局部信息。注意到
135 | $$
136 | f(x) = x_1 + x_2, \quad c_1(x) = 2 - x_1^2 - x_2^2 \geq 0,
137 | $$
138 | 因此
139 | $$
140 | \mathcal{L}(x, \lambda) = (x_1 + x_2) - \lambda_1(2 - x_1^2- x_2^2),
141 | $$
142 | 而$x^* = (-1, -1)^T$,$\lambda^* = \frac12$。于是Lagrange函数的Hessian阵为:
143 | $$
144 | \nabla_{xx}^2 \mathcal{L}(x^*, \lambda^*) = \left[
145 | \begin{array}{cc}
146 | 2\lambda_1^* & 0 \\
147 | 0 & 2\lambda_1^*
148 | \end{array}
149 | \right] = \left[
150 | \begin{array}{cc}
151 | 1 & 0\\
152 | 0 & 1
153 | \end{array}
154 | \right].
155 | $$
156 | 这是一个正定矩阵,所以定理12.6的条件必然满足。于是$x^* = (-1, -1)^T$必然是严格局部最优点。(这个例子太绝对了一些,任何可行方向,不管是不是关键锥,都是上升的。)
157 |
158 | **例 12.9** 更复杂一些的例子:
159 | $$
160 | \begin{equation}
161 | \min -0.1(x_1 - 4)^2 + x_2^2, \quad \mbox{s.t.} x_1^2 + x_2^2 - 1 \geq 0, \tag{12.72}
162 | \end{equation}
163 | $$
164 | (草图)我们的可行域是单位圆和以外部分。现在这是一个无界问题,而且目标函数可以取到$-\infty$,因此也无解。但它在边界上是否存在严格局部最优解呢?我们应该无法从草图上清晰地了解这一点,但仍然可以通过KKT条件和二阶条件来判定:
165 | $$
166 | \begin{eqnarray}
167 | \nabla_x\mathcal{L}(x, \lambda) &=& \left[
168 | \begin{array}{c}
169 | -0.2(x_1 -4) - 2\lambda_1 x_1\\
170 | 2x_2 - 2\lambda_1x_2
171 | \end{array}
172 | \right],\tag{12.73a}\\
173 | \nabla_{xx}^2\mathcal{L}(x, \lambda) &=& \left[
174 | \begin{array}{cc}
175 | -0.2 - 2 \lambda_1 & 0\\
176 | 0 & 2 - 2\lambda_2
177 | \end{array}
178 | \right]\tag{12.73b},
179 | \end{eqnarray}
180 | $$
181 | 这里$x^* = (1, 0)^T$,$\lambda^* = 0.3$满足KKT条件,且对应$\mathcal{A}(x^*) = \{1\}$。而
182 | $$
183 | \nabla c_1(x^*) = \left[\begin{array}{c}
184 | 2 \\ 0
185 | \end{array}\right],
186 | $$
187 | 所以关键锥为
188 | $$
189 | \mathcal{C}(x^*, \lambda^*) = \left\{(0, w_2)^T \left| w_2 \in \mathbb{R}\right.\right\}.
190 | $$
191 | 确实是可行域的边缘切线,我们现在要判定沿这条边缘切线,目标函数是上升还是下降,因为一阶信息在这里退化了,所以要进一步考虑二阶信息。
192 | $$
193 | \forall w\neq 0,\quad w^T\nabla_{xx}^2\mathcal{L}(x^*, \lambda^*)w =
194 | [0 \quad w_2]\left[
195 | \begin{array}{cc}
196 | -0.8 & 0 \\
197 | 0 & 1.4
198 | \end{array}
199 | \right]
200 | \left[
201 | \begin{array}{c}
202 | 0 \\ w_2
203 | \end{array}
204 | \right] = 1.4 w_2^2 > 0.
205 | $$
206 | (上式书中计算有误,但不影响结论)因此由定理12.6,$x^* = (1, 0)^T$是严格局部最优解。
207 |
208 | 二阶条件的验证比较复杂,为此人们提出了一种稍微弱化但更加方便的形式。当满足KKT条件的$\lambda^*$是唯一(比如LICQ),并且严格互补性条件条件成立时,关键锥的定义(12.53)简化为
209 | $$
210 | \mathcal{C}(x^*, \lambda^*) = \mbox{Null}\left[\nabla c_i(x^*)^T\right]_{i \in \mathcal{A}(x^*)} = \mbox{Null}A(x^*),
211 | $$
212 | 这里$A(x^*)$和(12.37)一致。换言之,$\mathcal{C}(x^*, \lambda^*)$此时就是$x^*$点全部活跃约束梯度构成的矩阵的零空间。类似(12.39),我们可以再次定义矩阵$Z$,它的列向量由$A(x^*)$的零空间的基组成,从而也能张成$\mathcal{C}(x^*, \lambda^*)$,即
213 | $$
214 | \mathcal{C}(x^*, \lambda^*) = \left\{Zu \left| u \in \mathbb{R}^{|\mathcal{A}(x^*)|}\right.\right\},
215 | $$
216 | 这里$|\mathcal{A}(x^*)|$表示计算其元素个数。因此,定理12.5中的条件(12.57)可以改为
217 | $$
218 | u^TZ^T\nabla_{xx}^2\mathcal{L}(x^*, \lambda^*)Zu \geq 0, \forall u \in \mathbb{R}^n,
219 | $$
220 | 或者更简洁地,
221 | $$
222 | Z^T\nabla_{xx}^2\mathcal{L}(x^*, \lambda^*)Z
223 | $$
224 | 是半正定的,相应地,定理12.6的条件(12.65)可以改为
225 | $$
226 | Z^T\nabla_{xx}^2\mathcal{L}(x^*, \lambda^*)Z
227 | $$
228 | 是正定的。
229 |
230 | 而$Z$可以用QR分解计算得到:
231 | $$
232 | \begin{equation}
233 | A(x^*)^T = Q\left[
234 | \begin{array}{c}
235 | R \\ 0
236 | \end{array}
237 | \right] = [Q_1 \quad Q_2]\left[
238 | \begin{array}{c}
239 | R \\ 0
240 | \end{array}
241 | \right] = Q_1R, \tag{12.74}
242 | \end{equation}
243 | $$
244 | 这里$R$是上三角矩阵,$Q$是$n \times n$正交阵。若$R$非奇异,则$Z = Q_2$。当LICQ不成立时,$R$是奇异的,此时可以对QR分解做适当的列交换来确定$Z$。
245 |
246 | ## 其它形式的约束规范
247 |
248 | 现在我们比较清楚,所谓约束规范,本质上指的是对$\Omega$的线性化代数表示,是否能够正确地抓住$x^*$邻域内$\Omega$的几何外形。所以对于退化的情况,比如全部的活跃约束都是线性函数,也即
249 | $$
250 | \begin{equation}
251 | c_i(x) = a_i^Tx + b_i, \tag{12.75}
252 | \end{equation}
253 | $$
254 | 这里$a_i \in \mathbb{R}^n$,以及$b_i \in \mathbb{R}$,那么显然$\mathcal{F}(x^*)$和$\Omega$对活跃约束的表现而言就是一致的。
255 |
256 | **引理 12.7** 假设$x^* \in \Omega$的全部活跃约束$c_i(x^*)$,$i \in \mathcal{A}(x^*)$,都是线性函数,则$\mathcal{F}(x^*) = T_\Omega(x^*)$。
257 |
258 | **证明** 首先由引理12.2,$T_\Omega(x^*) \subset \mathcal{F}(x^*)$。因此只需证$\mathcal{F}(x^*) \subset T_\Omega(x^*)$,也即$\forall w \in \mathcal{F}(x^*)$,有$w \in T_\Omega(x^*)$。由定义及条件(12.75),
259 | $$
260 | \mathcal{F}(x^*) = \left\{ d \left| \begin{array}{ll}
261 | a_i^Td = 0, & \forall i \in \mathcal{E}, \\
262 | a_i^Td \geq 0, &\forall i \in \mathcal{A}(x^*)\cap\mathcal{I}
263 | \end{array}
264 | \right.\right\}.
265 | $$
266 | 首先,对于在$x^*$不活跃的约束,存在常数$\bar{t} > 0$使得其在$x^* + tw$仍然不活跃,$\forall t \in [0, \bar{t}]$,也即
267 | $$
268 | c_i(x^* + tw) > 0, \quad\forall i \in \mathcal{I} \backslash\mathcal{A}(x^*), t\in [0, \bar{t}].
269 | $$
270 | (可以认为是连续性,还没走到对面。)
271 |
272 | 现定义序列$z_k$:
273 | $$
274 | z_k = x^* + (\bar{t} / k) w, \quad k = 1, 2, \cdots
275 | $$
276 | 因为$a_i^Tw \geq 0$,$\forall i \in \mathcal{I} \cap \mathcal{A}(x^*)$,有
277 | $$
278 | c_i(z_k) = c_i(z_k) - c_i(x^*) = a_i^T(z_k - x^*) = \frac{\bar t}{k} a_i^T w \geq 0, \quad \forall i \in \mathcal{I}\cap\mathcal{A}(x^*),
279 | $$
280 | 于是$z_k$对于活跃的不等值约束$c_i$可行,$i \in \mathcal{I}\cap\mathcal{A}(x^*)$。由于$\bar{t}$的设置,我们知道$z_k$对不活跃约束$c_i$也是可行的,$i \in \mathcal{I} \backslash \mathcal{A}(x^*)$。而对等值约束,
281 | $$
282 | c_i(z_k) = c_i(z_k) - c_i(x^*) = a_i^T(z_k - x^*) = \frac{\bar t}{k} a_i^T w = 0, \quad \forall i \in \mathcal{E},
283 | $$
284 | 是显然的。所以,$z_k$对全体$k = 1, 2, \cdots$均可行,进而有
285 | $$
286 | \frac{z_k - x^*}{\bar{t} / k} = \frac{(\bar{t} / k)w}{\bar{t} / k} = w,
287 | $$
288 | 也即$w$就是$\{z_k\}$的极限方向(切线),因此$w \in T_\Omega(x^*) $,证毕。$ \Box$
289 |
290 | 所以我们可以提出一个新的约束规范:全部活跃约束都是线性函数。注意这个约束规范和LICQ互相不覆盖。
291 |
292 | **定义 12.6 (Mangasarian-Fromovitz constraint qualification, MFCQ)** 称$x^*$点MFCQ成立,若存在$w \in \mathbb{R}^n$使得
293 | $$
294 | \begin{array}{ll}
295 | \nabla c_i(x^*)^Tw > 0, & \forall i \in \mathcal{A}(x^*) \cap \mathcal{I},\\
296 | \nabla c_i(x^*)^Tw = 0, & \forall i \in \mathcal{E},
297 | \end{array}
298 | $$
299 | 且等值约束的梯度$\{\nabla c_i(x^*), i \in \mathcal{E}\}$都是线性无关的。
300 |
301 | 注意这里要求不等值约束对应的不等式都是严格成立的。但是MFCQ比LICQ要更弱一点。若$x^*$满足LICQ,则由$A(x^*)$行满秩,方程组
302 | $$
303 | \begin{array}{ll}
304 | \nabla c_i(x^*)^T w = 1, & \forall i \in \mathcal{A}(x^*)\cap\mathcal{I}, \\
305 | \nabla c_i(x^*)^T w = 0, & \forall i \in \mathcal{E},
306 | \end{array}
307 | $$
308 | 必有解$w$,也即必满足定义12.6。而反面的例子是容易构建的。参见练习12.13。
309 |
310 | 我们可以在定理12.1(一阶必要条件)中将LICQ替换成MFCQ,如此KKT条件中的Lagrange乘子$\lambda^*$将不唯一,但其数量是有限的。此外,约束规范是线性逼近几何区域能够被接受的充分不必要条件(也即哪怕没有约束规范,线性逼近也未必错)。例如对可行域由下列约束构成:
311 | $$
312 | x_2 \geq - x_1^2, \quad x_2 \leq x_1^2,
313 | $$
314 | 在$x^* = (0, 0)^T$点,没有任何约束规范成立。但是其线性化方向集
315 | $$
316 | \mathcal{F}(x^*) = \left\{(w_1, 0)^T | w_1 \in \mathbb{R}\right\},
317 | $$
318 | 实际上正确反映了$x^*$附近可行域的几何特性。
319 |
320 | ## 一个几何观点
321 |
322 | 我们接下去从纯几何的角度观察一阶最优条件,不依赖任何代数形式的描述。我们的原始问题的几何描述是
323 | $$
324 | \begin{equation}\min f(x), \quad \mbox{s. t.} x \in \Omega, \tag{12.76}\end{equation}
325 | $$
326 | 其中$\Omega$是可行域。
327 |
328 | 首先我们需要定义$\Omega$在$x$点的法向锥。
329 |
330 | **定义 12.7** 可行域$\Omega$中一点$x$处的法向锥定义为
331 | $$
332 | \begin{equation}
333 | N_\Omega(x) = \{v \left| v^Tw \leq 0, \forall w \in T_\Omega(x)\right.\},
334 | \tag{12.77}
335 | \end{equation}
336 | $$
337 | 其中,$T_\Omega(x)$是$x$处的切锥,如定义12.2。任取$v \in N_\Omega(x)$,我们称$v$是一个法向量(任取$w \in T_\Omega(x)$,$w$是一个切向量)。
338 |
339 | 从几何上看,任何一个法向量$v$和任何一个切向量$w$的夹角都至少有$\pi / 2$。于是对(12.76)的一阶必要条件为
340 |
341 | **定理 12.8** 假设$x^*$是$f$在$\Omega$内的一个局部极小值,则
342 | $$
343 | \begin{equation}
344 | -\nabla f(x^*) \in N_\Omega(x^*). \tag{12.78}
345 | \end{equation}
346 | $$
347 |
348 | (这是最速下降方向。这个定理提供了一个非常几何直观的条件,如果$x^*$是局部最优点,则最速下降方向一定在法向锥中,反之,我们就能在切锥中找到一个切向是下降的。)
349 |
350 | **证明** 对任意的$d \in T_\Omega(x^*)$,我们有满足定义12.2的$\{t_k\}$和$\{z_k\}$使得
351 | $$
352 | \begin{equation}
353 | z_k \in \Omega, z_k = x^* + t_kd + o(t_k), \forall k. \tag{12.79}
354 | \end{equation}
355 | $$
356 | 因为$x^*$是局部最优解,故对充分大的$k$,有
357 | $$
358 | f(z_k) \geq f(x^*).
359 | $$
360 | 由$f$充分光滑以及Taylor定理,
361 | $$
362 | f(z_k) - f(x^*) = t_k \nabla f(x^*)^Td + o(t_k) \geq 0.
363 | $$
364 | 两边同除以$t_k$,并取极限$k \to \infty$,有
365 | $$
366 | \nabla f(x^*)^T d\geq 0.
367 | $$
368 | 由于$d$是$T_\Omega(x^*)$内任何向量,故事实上对$\forall d \in T_{\Omega}(x^*)$,有
369 | $$
370 | -\nabla f(x^*)^Td \leq 0,
371 | $$
372 | 由定义12.7,$-\nabla f(x^*) \in N_{\Omega}(x^*)$。$\Box $
373 |
374 |
--------------------------------------------------------------------------------
/lecture_notes/Fundamentals_Algorithms_Nonlinear_Constrained_Optimization.md:
--------------------------------------------------------------------------------
1 | # 约束非线性优化算法基础
2 |
3 | 本章讨论如何在第12章的理论基础上求解一般形式的约束优化问题,也即
4 | $$
5 | \begin{equation}
6 | \begin{array}{ll}
7 | \displaystyle \min_{x\in\mathbb{R}^n} & f(x) \\
8 | \mbox{s.t.} & c_i(x) = 0, i \in \mathcal{E},\\
9 | & c_i(x) \geq 0, i \in \mathcal{I},
10 | \end{array}
11 | \tag{15.1}
12 | \end{equation}
13 | $$
14 | 其中目标函数$f$和约束$c_i$都是光滑、实值,定义域是$\mathbb{R}^n$的子集,此外 $\mathcal{E}$和$\mathcal{I}$均为有限指标集。
15 |
16 | ## 优化算法分类
17 |
18 | 优化算法并没有标准分类,我们这里的分类只是基于本书的剩余部分进行的。
19 |
20 | 1. 第16章介绍求解二次规划(quadratic)的算法。和线性规划一样,这是一类在建模和计算中广泛应用的模型和算法,因此单独分成一章讨论。二次规划几乎是所有(经典)高效率算法的基础,很多一般问题可以用序列化的二次规划子问题得到求解。在这一章,我们会介绍活跃集方法(active set method),内点法(interior-point methods)和梯度投影方法(gradient projection method)。
21 |
22 | 2. 第17章介绍罚函数方法(penalty methods)和增广Lagrange方法(augmented Lagrangian methods)。罚函数的基本思想是联合目标和约束函数构建一个罚函数(penalty function),然后将一个约束优化问题转为一个无约束优化问题。比如,如果只考虑(15.1)中的等值约束,那么我们可以构建二次罚函数
23 | $$
24 | \begin{equation}
25 | f(x) + \frac{\mu}{2} \sum_{i \in \mathcal{E}}c_i^2(x), \tag{15.2}
26 | \end{equation}
27 | $$
28 | 其中$\mu > 0$称为惩罚因子(penalty parameter)。我们对一个递减的$\mu$求解(15.2)的无约束极小值,直到解充分接近约束问题(15.1)的解为止。罚函数(15.2)的问题是只有$\mu \to +\infty$时,它的解才收敛到(15.1)的解,而在对任何一个具体的$\mu > 0$,它的最优解和(15.1)总是有差异的。另一个思路是采用一个“精确”(exact)的罚函数
29 | $$
30 | f(x) + \mu \sum_{i \in \mathcal{E}}|c_i(x)|.
31 | $$
32 | 当$\mu$充分大时,该函数提供的精确的最优解位置。然而该函数是不光滑的,因此给数值求解带来额外困难(但是是可以解决的)。所以这也是一种可以选择的方案。
33 |
34 | 而增广Lagrange法则是针对Lagrange函数构建罚函数并将其转为无约束优化问题,称为增广Lagrange函数
35 | $$
36 | \mathcal{L}_A(x, \lambda;\mu) = f(x) - \sum_{i \in \mathcal{E}}\lambda_i c_i(x) + \frac{\mu}{2}\sum_{i \in \mathcal{E}}c_i^2(x).
37 | $$
38 | 接下去我们先固定$(\mu, \lambda)$的值,寻找$\mathcal{L}_A$关于$x$的无约束最小值,一旦找到,就可以更新$\lambda$值,并且增大$\mu$。然后在新的$(\mu, \lambda)$值下寻找新的$x$。这个过程可以不断重复,直到找到正确的$(x, \lambda)$。这个方法相比(15.2)的优点在于它的惩罚因子$\mu$不用趋于$+\infty$,而是有一个确定的上界。
39 |
40 | 3. 第18章介绍序列化二阶规划(sequential quadratic programming, SQP)方法。它的思路是将(15.1)转为一系列二阶规划子问题,从而得到一系列搜索方向,最终收敛到正确的解。最基本的SQP方法,关于$(x_k, \lambda_k)$的搜索方向$p_k$如下定义:
41 | $$
42 | \begin{eqnarray}
43 | &\min& \frac{1}{2}p^T\nabla_{xx}^2\mathcal{L}(x_k, \lambda_k)p + \nabla f(x_k)^Tp, \tag{15.3a}\\
44 | &\mbox{s. t.}& \nabla c_i(x_k)^Tp + c_i(x_k) = 0, i \in \mathcal{E}, \tag{15.3b}\\
45 | && \nabla c_i(x_k)^Tp + c_i(x_k) \geq 0, i \in \mathcal{I}, \tag{15.3c}
46 | \end{eqnarray}
47 | $$
48 | 其中$\mathcal{L}$是(12.33)所定义的Lagrange函数。这是一个二次规划问题,它的解$p$用来将$x_k$更新到$x_k + p$。对它的进一步改进可以考虑施加一个信任域半径,从而确保收敛的稳定性。也可以考虑对$\nabla_{xx}^2 \mathcal{L}$采用拟Newton逼近以提高计算效率。
49 |
50 | 这种方法的一种变体被称为序列化线性-二次规划(sequential linear-quadratic programming),思路是将$p_k$的计算分成两个阶段。在第一阶段,我们忽略(15.3a)的第一项(二次项),从而将问题退化为一个线性规划,然后在一个信任域的约束下求解。第二阶段,我们将第一阶段解的全部活跃约束作为等值约束,并忽略其余约束,求解这个二次规划来得到真正的$p_k$。
51 |
52 | 4. 第19章我们研究非线性规划的内点法(interior-point methods for nonlinear programming)。这个方法可以看作是第14章中介绍的针对线性规划的主-对偶内点法的一个扩展。我们也可以将它看作是障碍法(barrier methods),障碍函数为
53 | $$
54 | \begin{eqnarray}
55 | &\min_{x, s}& f(x) - \mu \sum_{i = 1}^m \log s_i, \tag{15.4a} \\
56 | &\mbox{s.t.}& c_i(x) = 0, i \in \mathcal{E}, \tag{15.4b} \\
57 | && c_i(x) - s_i = 0, i \in \mathcal{I}, \tag{15.4c}
58 | \end{eqnarray}
59 | $$
60 | 这里$\mu$是障碍因子,$s_i$是松弛变量。障碍函数法本质上也是一种罚函数方法,它要求迭代点在可行域内部,当迭代路径接近可行域边界时,由于障碍项的存在,导致目标值快速趋于$+\infty$,从而阻挡迭代突破边界。由于它的迭代序列整体保持在可行域内部,故称内点法。
61 |
62 | 本章的剩余部分,我们讨论一下用于以上各方法的一些基础算法和建模技巧。
63 |
64 | ## 不等值约束的组合困难
65 |
66 | 我们可能以及注意到,约束优化问题的主要困难来自如何处理不等值约束,特别是如何确定哪些不等值约束是活跃的。而活跃集方法的本质就是先猜测一个活跃集$\mathcal{A}(x^*)$,称为工作集(working set),记作$\mathcal{W}$。然后我们就可以把在$\mathcal{W}$内的约束都设成等值。基于猜测$\mathcal{W}$,我们计算等值约束问题得到一个$x^*$,然后我们在完整的问题中检查它是否满足KKT条件。如果满足,则确定它为(15.1)的一个局部最优解(其实只是KKT点,但作为程序这里可以退出了);如果不满足,则我们调整$\mathcal{W}$,重复操作直到找到最优点。这个问题就是基于这样一种认知:求解等值约束问题相比不等值约束问题要简单的多。然而工作集可能的组合至多会有$2^{|\mathcal{I}|}$个,因为对每一个$i \in \mathcal{I}$,都可能有$i \in \mathcal{W}$和$i \notin \mathcal{W}$两种情况。如此巨大的基数,使得构建一个算法来遍历全部的工作集组合实际不可能。这一点我们称为不等值约束的组合困难。
67 |
68 | 下面的例子表明,即便是很少个数的不等值约束,活跃集的判定仍然不是一个简单的任务。
69 |
70 | **例 15.1** 考虑
71 | $$
72 | \begin{equation}
73 | \begin{array}{ll}
74 | \displaystyle \min_{x,y} & f(x, y) \overset{\mathrm{def}}{=} \frac{1}{2} (x - 2)^2 + \frac{1}{2}(y - \frac{1}{2})^2, \\
75 | \mbox{s. t.} & (x + 1)^{-1} - y - \frac{1}{4} \geq 0, \\
76 | & x \geq 0,\\
77 | & y \geq 0.
78 | \end{array} \tag{15.5}
79 | \end{equation}
80 | $$
81 | 从草图我们可以看到,在解$(x^*, y^*)^T = (1.953, 0.089)^T$,活跃的约束只有$c_1$。但是这个问题的全部可能的活跃集有$2^3 =8$种。首先我们可以判定,由于目标函数的无约束全局最优点在可行域之外,所以活跃集不可能是空集;此外,三个约束不可能同时活跃。因此剩下需要逐一判定的可能是3种单一约束活跃,和3种两个约束一起活跃的情形,共$6$种。这里我们选择三种情况稍加分析:
82 |
83 | + $\mathcal{W} = \{2\}$,于是$x = 0$。我们只保留这个等值约束求解问题,即
84 | $$
85 | \begin{equation}
86 | \begin{array}{ll}
87 | \displaystyle \min_{x,y} & f(x, y) \overset{\mathrm{def}}{=} \frac{1}{2} (x - 2)^2 + \frac{1}{2}(y - \frac{1}{2})^2, \\
88 | \mbox{s. t.} & x = 0.\\
89 | \end{array}
90 | \end{equation}
91 | $$
92 | 显然有$(x^*, y^*)^T = (0, \frac{1}{2})^T$。检查KKT条件,$\lambda_1 = \lambda_3 = 0$,于是
93 | $$
94 | \nabla f(x^*, y^*) - \lambda_2 \nabla c_2(x^*, y^*)= \left[
95 | \begin{array}{c}
96 | x^* - 2\\
97 | y^* - \frac{1}{2}
98 | \end{array}
99 | \right] - \lambda_2 \left[
100 | \begin{array}{c}
101 | 1 \\ 0
102 | \end{array}
103 | \right]=\left[
104 | \begin{array}{c}
105 | - 2\\
106 | 0
107 | \end{array}
108 | \right] - \left[
109 | \begin{array}{c}
110 | \lambda_2\\
111 | 0
112 | \end{array}
113 | \right] = 0 \Rightarrow \lambda_2 = -2.
114 | $$
115 | 不满足KKT条件。
116 | + $\mathcal{W} = \{1, 3\}$,于是
117 | $$
118 | \left\{\begin{array}{rcl}
119 | (x + 1)^{-1} - y - \frac{1}{4} &=& 0\\
120 | y &=& 0
121 | \end{array}\right. \Rightarrow \left\{
122 | \begin{array}{rcl}
123 | x &=& 3 \\
124 | y &=& 0
125 | \end{array}
126 | \right..
127 | $$
128 | 即$(x^*, y^*)^T = (3, 0)^T$。检查KKT条件,有$\lambda_1 = -16$,$\lambda_3 = -16.5$。不满足KKT条件。
129 |
130 | + $\mathcal{W} = \{1\}$,只有等值约束$c_1(x) = 0$。可以验证它满足KKT条件。(后两种情况自己验证补全一下。)
131 |
132 | 即便是这么简单的例子,我们要完全遍历全部可能情况也是困难的。不过我们注意到在实际求解的时候,我们先通过函数的局部信息,排除了一些实际不可能的情况。第16章介绍的活跃集方法,就会充分利用这种技巧(本质上单纯形法也属于这一类算法)。而19章介绍的内点法,则从根本上试图避开这一组合困难,而是直接从非线性问题的迭代行为入手去求解。
133 |
134 | ## 变量消去
135 |
136 | 对于线性问题或问题的线性部分利用消元手段降低问题的维数是一个很自然的想法。但由于我们的问题本质上是非线性的,消元一定要小心,因为对问题的不同代数形式表示可能会导致病态的计算行为。
137 |
138 | 我们先看一个有好结局的例子。
139 | $$
140 | \begin{array}{ll}
141 | \min & f(x) = f(x_1, x_2, x_3, x_4), \\
142 | \mbox{s.t.} & x_1 + x_3^2 - x_4x_3 = 0,\\
143 | & -x_2 + x_4 + x_3^2 = 0,
144 | \end{array}
145 | $$
146 | 这里令
147 | $$
148 | x_1 = x_4x_3 - x_3^2, \quad x_2 = x_4 + x_3^2,
149 | $$
150 | 则原问题化为等价的无约束问题
151 | $$
152 | \min h(x_3, x_4) = f(x_4x_3 - x_3^2, x_4 + x_3^2, x_3, x_4).
153 | $$
154 | 这似乎是一个很不错的办法,但下一个例子表明了这种做法的危险性。
155 |
156 | **例 15.2(Flectcher[101])**
157 | $$
158 | \begin{array}{ll}
159 | \min & x^2 + y^2 \\
160 | \mbox{s.t.} & (x - 1)^3 = y^2.
161 | \end{array}
162 | $$
163 | 从草图中不难发现,最优解为$(x^*, y^*) = (1, 0)^T$。这个问题似乎也可以用消元法变为无约束问题
164 | $$
165 | h(x) = x^2 + (x - 1)^3.
166 | $$
167 | 然而,因为$x \to -\infty$,$h(x) \to -\infty$,问题是无解的。毛病出在哪里?
168 |
169 | 其实还是表现形式的问题。原问题中的
170 | $$
171 | (x - 1)^3 = y^2 \geq 0,
172 | $$
173 | 但在消元之后,这个隐含的信息$x - 1 \geq 0$被忽略了。这就导致了问题解的不一致。这个例子表明,对非线性方程组进行消元是非常危险的,因为可能会导致一些隐含的信息被不正确地抛弃,而且这种意外很难在推导和计算过程中被发现和回溯。由于这个原因,一般不主张对非线性约束直接消元,而是要先把约束做线性化,然后再对线性问题消元。
174 |
175 | ### 对线性约束的简单消元
176 |
177 | 现在考虑目标函数是非线性,而约束是等值线性的特例,
178 | $$
179 | \begin{equation}
180 | \begin{array}{ll}
181 | \min & f(x) \\
182 | \mbox{s.t.} & Ax = b.
183 | \end{array}
184 | \tag{15.6}
185 | \end{equation}
186 | $$
187 | 这里$A$是$m \times n$矩阵,且$m \leq n$,且不妨设$A$行满秩。注意我们目前的情况和之前线性规划的情况很接近。事实上,这种思路可以认为是单纯形法的一种泛化。我们选择$A$的$m$列构成一个非奇异的$m \times m$方阵$B$,为了将这$m$列交换到$A$的前$m$列,我们需要一个$n \times n$的交换阵$P$,于是有
188 | $$
189 | \begin{equation}
190 | A P = [B | N], \tag{15.7}
191 | \end{equation}
192 | $$
193 | 其中$N$是$A$中剩下的$n - m$列。对应这两个矩阵的列标,我们有$x_B \in \mathbb{R}^m$和$x_N \in \mathbb{R}^{n - m}$:
194 | $$
195 | \begin{equation}
196 | \left[
197 | \begin{array}{c}
198 | x_B \\
199 | x_N
200 | \end{array}
201 | \right] = P^Tx, \tag{15.8}
202 | \end{equation}
203 | $$
204 | 这里我们称$x_B$为基础向量(basic variables),$B$为基础矩阵(basic matrix)。注意$P^TP = I$,于是有
205 | $$
206 | b = Ax = AP(P^Tx) = Bx_B + Nx_N.
207 | $$
208 | 这里基础向量直接可以消去
209 | $$
210 | \begin{equation}
211 | x_B = B^{-1}b - B^{-1}Nx_N. \tag{15.9}
212 | \end{equation}
213 | $$
214 | 也就是任何可行点,本质上只需要确定$x_N$就行了,而$x_B$可以通过(15.9)确定。直接代入(15.6),得等价的无约束优化问题
215 | $$
216 | \begin{equation}
217 | \min_{x_N} h(x_N) \overset{\mathrm{def}}{=} f\left(P\left[
218 | \begin{array}{c}
219 | B^{-1}b - B^{-1}Nx_N\\
220 | x_N
221 | \end{array}
222 | \right]\right). \tag{15.10}
223 | \end{equation}
224 | $$
225 | 这种方法就是所谓的简单变量消去法(simple elimination of variables)。以上讨论显示了只含等值线性约束的优化问题,和一个无约束优化问题的等价性。
226 |
227 | **例 15.3**
228 | $$
229 | \begin{eqnarray}
230 | \min && \sin(x_1 + x_2) + x_3^2 + \frac{1}{3}(x_4 + x_5^4 + \frac{x_6}{2}), \tag{15.11a}\\
231 | \mbox{s.t.}&&8x_1 - 6x_2 + x_3 + 9x_4 + 4x_5 = 6, \tag{15.11b}\\
232 | && 3x_1 + 2 x_2 - x_4 + 6x_5 + 4x_6 = -4.
233 | \end{eqnarray}
234 | $$
235 |
236 |
237 | 我们通过列交换阵$P$,使得$x^T = (x_3, x_6, x_1, x_2, x_4, x_5)^T$,也即
238 | $$
239 | AP = \left[
240 | \begin{array}{cc|cccc}
241 | 1 & 0 & 8 & -6 & 9&4\\
242 | 0&4 &3 &2&-1 &6
243 | \end{array}
244 | \right].
245 | $$
246 | 基础矩阵$B$是一个对角阵,求逆简单。根据(15.9)有
247 | $$
248 | \begin{equation}
249 | \left[
250 | \begin{array}{c}
251 | x_3 \\
252 | x_6
253 | \end{array}
254 | \right] = -\left[
255 | \begin{array}{cccc}
256 | 8&-6&9&4\\
257 | \frac{3}{4}&\frac{1}{2}&-\frac{1}{4}&\frac{3}{2}
258 | \end{array}
259 | \right]
260 | \left[
261 | \begin{array}{c}
262 | x_1\\x_2\\x_4\\x_5
263 | \end{array}
264 | \right] + \left[
265 | \begin{array}{c}6\\-1\end{array}
266 | \right]. \tag{15.12}
267 | \end{equation}
268 | $$
269 | 将$x_3$,$x_6$代入(15.11a),原问题变为
270 | $$
271 | \begin{equation}
272 | \begin{array}{l}
273 | \displaystyle \min_{x_1, x_2, x_4, x_5} & \sin(x_1 + x_2) + (8 x_1 - 6x_2 + 9x_4 + 4x_5 -6)^2 \\
274 | &\displaystyle + \frac{1}{3}\left(x_4 + x_5^4 -\left[\frac{1}{2} + \frac{3}{8}x_1 + \frac{1}{4}x_2 -\frac{1}{8}x_4 + \frac{3}{4}x_5\right]\right)
275 | \end{array} \tag{15.13}
276 | \end{equation}
277 | $$
278 | 当然,$B$的选择是不唯一的,但如果另选$A$的两列作为$B$,那么求逆矩阵就不会那么简单。
279 |
280 | 以上的消去过程实际上就是Gauss消去法。在理想情况下,我们可以选择一个即容易分解,条件数又不大的矩阵$B$。有些技术甚至能将这一算法应用在大规模稀疏矩阵上,并在消去过程中保持稀疏性。比如著名的MA48算法和相应的计算库HSL[96](我居然没听说过,恰饭嫌疑)。但是如接下去的讨论,Gauss消去策略并不能保证总是找到最好的基础矩阵。
281 |
282 | 以下,我们忽略选列和交换过程已简化讨论。也就是我们总是不妨设$P = I$。由(15.8)和(15.9),我们知道对任何可行点$x$,以及线性约束(15.6),可以有如下表示
283 | $$
284 | \begin{equation}
285 | \left[
286 | \begin{array}{c}
287 | x_B \\ x_N
288 | \end{array}
289 | \right] = x = Yb + Zx_N,
290 | \end{equation}\tag{15.14}
291 | $$
292 | 其中
293 | $$
294 | \begin{equation}
295 | Y = \left[
296 | \begin{array}{c}
297 | B^{-1} \\ 0
298 | \end{array}
299 | \right], \quad Z = \left[
300 | \begin{array}{c}-B^{-1}N \\ I\end{array}
301 | \right]. \tag{15.15}
302 | \end{equation}
303 | $$
304 | 注意$Z$有$n - m$个线性无关的列(注意它下方的单位块),且$AZ = 0$,因此$Z$的列事实上是$A$的零空间的基。并且
305 | $$
306 | Yb = \left[
307 | \begin{array}{c}
308 | B^{-1} \\ 0
309 | \end{array}
310 | \right]b = \left[
311 | \begin{array}{c}B^{-1}b \\ 0 \end{array}\right]
312 | $$
313 | 事实上是欠定方程组$A x = b$的一个特解。因此Gauss消去法的本质,是将一个可行点分解成一个$Ax = b$的特解和零空间的一个平移之和(见(15.14))。如果把$Ax = b$想象成一条直线,$x_B = x_1$,$x_N = x_2$,那么这种分解本质上就是取了直线在$x_1$轴上的截距。但是如果$Ax = b$本身是一条和$x_1$轴几乎平行的直线,那么这个截距的计算必然是很不稳定的(表现为数值扰动极大,或者矩阵病态)。这种情况下,我们更应该选择$x_2$而不是$x_1$作为$B$。但是究竟选择哪个$B$更好,这一点在消去过程中无法直接体现。为此,我们有以下更一般的策略讨论。
314 |
315 | ### 对线性约束的一般性约减讨论
316 |
317 | 为了使(15.14)和(15.15)更加一般化,我们选择矩阵$Y \in \mathbb{R}^{n \times m}$和$Z \in R^{n \times (n - m)}$,且
318 | $$
319 | \begin{equation}
320 | [Y | Z] \in \mathbb{R}^{n \times n}, \quad AZ = 0. \tag{15.16}
321 | \end{equation}
322 | $$
323 | 这里$[Y|Z]$非奇异。由(15.15),$Z$的列仍然是$A$的零空间的基。由$A$列满秩,
324 | $$
325 | A[Y | Z] = [AY | 0],
326 | $$
327 | 于是$m \times m$矩阵$AY$是非奇异的(否则$[Y|Z]$奇异)。我们现在将$Ax = b$的解展开成
328 | $$
329 | \begin{equation}
330 | x = Y x_Y + Zx_Z, \tag{15.17}
331 | \end{equation}
332 | $$
333 | 其中$x_Y \in \mathbb{R}^m$,$x_Z \in \mathbb{R}^{n - m}$,将其代入$Ax = b$,有
334 | $$
335 | Ax = (AY)x_Y = b.
336 | $$
337 | 因为$AY$非奇异,所以有
338 | $$
339 | \begin{equation}
340 | x_Y = (AY)^{-1}b. \tag{15.18}
341 | \end{equation}
342 | $$
343 | 再代回(15.17),有
344 | $$
345 | \begin{equation}
346 | x = Y(AY)^{-1}b + Zx_Z \tag{15.19}
347 | \end{equation}
348 | $$
349 | 满足约束$Ax = b$,不论$x_Z$如何取值。于是,问题(15.6)可以写成无约束问题
350 | $$
351 | \begin{equation}
352 | \min_{x_Z} f(Y(AY)^{-1}b + Zx_Z). \tag{15.20}
353 | \end{equation}
354 | $$
355 | 这里对$Y$和$Z$最理想的选择是通过对$A^T$的QR分解:
356 | $$
357 | \begin{equation}
358 | A^T\Pi = [Q_1\quad Q_2]\left[
359 | \begin{array}{c}R \\ 0\end{array}
360 | \right], \tag{15.21}
361 | \end{equation}
362 | $$
363 | 其中$[Q_1 \quad Q_2]$是正交矩阵,$Q_1$和$Q_2$分别是$n \times m$和$n \times (n - m)$的正交块,而$R$是$m \times m$的上三角块。而$n\times n$阵$\Pi$是交换矩阵(具体的QR分解算法见任何一本数值代数教材,或者本书附录(A.24))。现在,可以令$Y = Q_1$,$Z = Q_2$。这样$Y$和$Z$的列向量一起构成了$\mathbb{R}^n$空间的一组正交基。由(15.21),有
364 | $$
365 | AY = \Pi R^T, \quad AZ = 0.
366 | $$
367 | 也即$Y$和$Z$就是我们寻找的分解,并且$AY$具有和$R$和$A$相同的条件数。由(15.19),我们看到$Ax = b$可以表示为
368 | $$
369 | x = Q_1R^{-T}\Pi^Tb + Q_2x_Z,
370 | $$
371 | $x_Z$可任取,而$R^{-T}\Pi^Tb$的计算是简单的。(也即这一过程的实际计算量在QR分解。)
372 |
373 | 通过简单的计算,我们可以看出$Q_1R^{-T}\Pi^Tb$可以被写成$A^T(AA^T)^{-1}b$。而后者是问题
374 | $$
375 | \min\|x\|^2, \quad \mbox{s.t.} Ax = b;
376 | $$
377 | 的解,即零元在$Ax = b$空间上的正交投影,或者说,$Ax = b$的最小二乘解。
378 |
379 | 尽管这种基于QR分解的消去算法具有极好的数值稳定性,但对于大规模稀疏矩阵,QR分解的代价要高于Gauss消去。因此Gauss消去仍然是一种活跃的算法,或者,我们有时寻求二者的一种平衡。(见习题15.7)
380 |
381 | ### 不等值约束的效果
382 |
383 | 和等值约束一起出现的时候,消去策略对不等值约束未必有效。假设(15.11)同时有不等值约束$x \geq 0$,那么对等值约束做了之前的消元之后,剩下问题的约束变为
384 | $$
385 | \begin{array}{rcl}
386 | (x_1, x_2, x_4, x_5) &\geq &0, \\
387 | 8x_1 - 6x_2 + 9 x_4 + 4 x_5 &\leq& 6, \\
388 | \frac{3}{4}x_1 + \frac{1}{2}x_2 - \frac{1}{4}x_4 + \frac{3}{2}x_5 &\leq&-1.
389 | \end{array}
390 | $$
391 | 变得更加复杂,这样的消元不如不消。
392 |
393 | 除非,比如(15.11)增加一个比较一般的不等值约束
394 | $$
395 | 3x_1 + 2x_3 \geq 1,
396 | $$
397 | 那么消元之后,新的问题附带一个不等值约束
398 | $$
399 | -13x_1 + 12x_2 - 18x_4-8x_5 \geq -11. \tag{15.23}
400 | $$
401 | 这种情况至少约束没有变得更加复杂,也许可以接受。
--------------------------------------------------------------------------------
/lecture_notes/Large_Scale_Problems.md:
--------------------------------------------------------------------------------
1 | # 大规模问题
2 |
3 | 这是一个在实际应用当中不可避免的问题。我们目前已经学过的算法中(包括其他课程学习的),有不少算法复杂性度$O(n^3)$。当$n >> 10^5$时,此类算法实际已经不可能执行。此外,当$n$充分大时,对应线性问题的系数矩阵$A$在满存储下是$n^2$个双精度浮点数,其存储量也几乎不可能实现。这里我们强调,如果问题的规模是来源于实际需求,那么是本质且无法避免的。我们在面对大规模问题时,只能尽可能地从模型、算法和技术的角度,尽可能提高现代计算机的实际运算效率,从而得到更高精度(空间和时间上)的求解。
4 |
5 | 本章内容和参考书第7章相关,但并不完全一致。我们节选第七章的一些算法讨论,并且结合一些的主流计算实现技术。接下去我们首先讨论一个非常具体的计算机技术。
6 |
7 | ## 大规模稀疏矩阵的实现
8 |
9 | 稀疏性是绝大多数大规模问题的本质特性。它代表了各自由度之间都是局部依赖,而不是全局两两依赖的。而表现在线性求解器上,则是对应的矩阵是大规模稀疏矩阵。
10 |
11 | **定义** 称$m \times n, m > n$阶矩阵$A$是稀疏矩阵,若$A$中的非零元个数是$O(m)$。
12 |
13 | 对于大规模稀疏矩阵,当我们在计算机内部操作时,我们必须做到:
14 |
15 | + 压缩存储:即以某种方式只存储非零元,并提供全部元素的索引;
16 | + 快速计算:针对压缩格式提供快速算法,比如,对于$Ap, p \in \mathbb{R}^n$这样的基本运算,我们必须确保其复杂度是$O(m)$的。
17 |
18 | 在以上两点的基础之上,类似CG法这样的迭代算法,提供了一个求解大规模线性问题
19 | $$
20 | A x = b
21 | $$
22 | 的可能算法途径。
23 |
24 | ## 压缩存储
25 |
26 | 实际应用当中的具体实现算法很多,我们这里以实现简单,应用广泛的按行压缩存储(Compressed Sparse Row, CSR)格式为例,介绍压缩存储的一般性思路:
27 |
28 | + 只存储非零元;
29 | + 提供全部元素的快速索引。
30 |
31 | 我们以矩阵
32 | $$
33 | A = \left[\begin{array}{ccccc}
34 | 3.14 & 0 & 0 & 0 & 1.31 \\
35 | 0 & 6.1 & 0 & 0 & 0\\
36 | 1.9 & 0 & 4.75 & 0 & 0\\
37 | 0 & 0 & 0 & 1.1 & 0\\
38 | 5.9 & 0 & 0 & 0 & 4.6
39 | \end{array}\right]
40 | $$
41 | 为例,首先是压缩存储,它的非零元总数是`nz=8`,因此我们用一个长度为`nz`的`double`数组依次存放全部非零元:
42 |
43 | ```c++
44 | ele = {3.14, 1.31, 6.1, 1.9, 4.75, 1.1, 5.9, 4.6};
45 | ```
46 |
47 | 这里非零元按行的顺序存放,但同一行的元素互相之间不用保序。在实际工作中,有一种常见的技巧是总是把对角元放在一行的第一个元素位置,此时,一般默认对角元一定非零(非零可以是数值上非零,也可以是操作上将其当作非零元存储,这样这个元素在算法中就被允许从数值零变为非零)。如果我们接受这种策略,那么上述的数组就调整为:
48 |
49 | ```c++
50 | ele = {3.14, 1.31, 6.1, 4.75, 1.9, 1.1, 4.6, 5.9};
51 | ```
52 |
53 | 接下去我们考虑建立索引。首先由于同一行之间的列排列是无序的,因此我们有必要建立每一个非零元的列索引:
54 |
55 | ```c++
56 | col = {0, 4, 1, 2, 0, 3, 4, 0};
57 | ```
58 |
59 | 注意这里下标是从$0$开始的,这不但是C/C++语言的习惯,事实上对内存寻址类算法也有优势。然后我们需要用一个索引来标注各行在`col`和`ele`中的起点(注意`col`和`ele`对应元素的下标一定是一致的):
60 |
61 | ```c++
62 | row = {0, 2, 3, 5, 6, 8};
63 | ```
64 |
65 | 对于数组`row`,我们规定它的长度是非零元总数`nz`,它的最后一个元素存放`nz`,按照它的定义,它满足以下规律:
66 |
67 | + `row[0]`一定是$0$;
68 | + `ele`数组中下标为`row[i]:(row[i + 1] - 1)`的元素就是第$i$行的全部元素,$i = 0, 1, 2, \cdots, m-1$;
69 | + `col`数组中下标为`row[i]:(row[i + 1] - 1)`的元素就是第$i$行的全部元素对应的列标,$i = 0, 1, 2, \cdots, m-1$;
70 | + 如果每一行的对角元总是存放在第一位,那么必有`col[row[i]] == i`的值为`true`;
71 |
72 | 利用以上性质,我们可以用如下方法读/写$A_{ij}$:
73 |
74 | **读写$A_{ij}$实现**
75 |
76 | ```c
77 | double read_matrix(const struct MATRIX *mat, int ai, int aj)
78 | {
79 | int n = mat->pat->n;
80 | int *row = mat->pat->row;
81 | int *col = mat->pat->col;
82 | double *ele = mat->ele;
83 |
84 | int j;
85 | for (j = row[ai]; j < row[ai + 1]; j ++)
86 | if (col[j] == aj)
87 | return ele[j];
88 | return 0.0;
89 | }
90 | ```
91 |
92 | 这里如果对对角元采取了第一位操作,那么可以专门增加一个判断,如果是对角元,直接返回`ele[row[i]]`。
93 |
94 | 为描述方便,以下如不加说明我们只考虑方阵,即$m = n$。至此,我们实现了一个对稀疏矩阵内存开销为$O(n)$ ,而读写复杂度为$O(1)$的算法。这里注意我们假设非零元在各行的分布是均匀的,因此每一行的非零元个数是一个$O(1)$量级。
95 |
96 | 为了配合上述操作,我们实际上需要定义一个基础数据结构来规定矩阵,也就是上面的`struct MATRIX`, 它的具体规定可以是这样:
97 |
98 | ```c
99 | struct MATRIX
100 | {
101 | struct PATTERN *pat; /**< 模板指针. */
102 | double *ele; /**< 非零元. */
103 | };
104 | ```
105 |
106 | 这里的模板`struct PATTERN`则是另一个数据结构,规定了稀疏矩阵的结构,也就是具体哪些元素是非零元,哪些不是。讲矩阵和模板分离定义的好处是,很多时候,我们会出现一个模板,多个矩阵的情况。比如如果我们要在稀疏矩阵里定义矩阵相加,那么一个默认的原则是两个矩阵必须有相同的非零元结构。这样加法就只需要将对应非零元相加,因此只是一个$O(n)$的操作。而实际上这样的限制对应用问题来说,也是合理的。这里我直接讨论C代码,而不是Matlab等更高级的代码,主要是因为稀疏矩阵存储和操作这件事情,本质上是要考虑内存如何分配的。这一点在C中可以轻易高效率实现。如果没有C基础的同学,可以将上述代码当作伪代码看待。此外,我们在任何作业或考试中,不会对这一点有要求。这里模板的具体规定如下:
107 |
108 | ```c
109 | struct PATTERN
110 | {
111 | int n; /**< 行数. */
112 | int m; /**< 列数. */
113 | int *row; /**< 行指标. */
114 | int *col; /**< 列指标. */
115 | int is_compressed; /**< 是否压缩. */
116 | struct node *registed; /**< 采用该模板的矩阵. */
117 | };
118 | ```
119 |
120 | 所有设置和我们之前讨论的一致。我们这里实际上回避了一个重要的关键问题,稀疏矩阵是如何初始化的。或者我们这里需要强调,介于矩阵规模,我们永远也不能有这样的想法:将一个满阵转换为稀疏阵(确实,Matlab提供了这样的功能,参见`sparse`,但它只是为了调试)。甚至,以下的代码也是禁止的:
121 |
122 | ```c
123 | for (i = 0; i < n; i++)
124 | for (j = 0; j < n; j++)
125 | ...
126 | ```
127 |
128 | 这样的代码本质上将复杂度提升到了$O(n^2)$,在大规模情形下是不可接受的。
129 |
130 | 在实际应用场合,大规模稀疏矩阵应该直接从问题产生。具体的问题可能是一个优化问题,也可能是一个基于微分方程的物理问题。具体情形参见参考书
131 |
132 | + Iterative Methods for Sparse Linear Systems, 2nd. ed.
133 |
134 | 我们在适当的时候再结合算法引入具体的例子。接下去我们再考虑一个具体的算子实现:$Ap$,即矩阵乘向量。我们知道,这个算子是CG法的核心,在这个算子的基础上,我们能够方便地构建CG求解器,从而实现算子作用$A^{-1}q$。
135 |
136 | **算子Ap实现**
137 |
138 | ```c
139 | int mat_m_vec(const struct MATRIX *mat, const double *iv, double *ov)
140 | {
141 | int i, j;
142 | double s;
143 | for (i = 0; i < mat->pat->n; i++)
144 | {
145 | s = 0;
146 | for (j = mat->pat->row[i]; j < mat->pat->row[i + 1]; j++)
147 | s += mat->ele[j] * iv[mat->pat->col[j]];
148 | ov[i] = s;
149 | }
150 | return 0;
151 | };
152 | ```
153 |
154 | 这里`iv`是输入向量,而`ov`是输出。这里我们看到循环忽略了全部零元,因此总计算量是$O(n)$。本质上,在大规模稀疏矩阵的基本操作中,$O(n^2)$的代价是不可接受的。所有的存储和操作,都围绕着这一点。感兴趣的同学可以考虑一下,如何在$O(n^2)$的时间代价内,完成两个矩阵相乘的操作。即
155 | $$
156 | A * B = C,
157 | $$
158 | 这里$A$,$B$和$C$都是大规模稀疏矩阵,且具有不同的模板。
159 |
160 | 我们已经通过CSR格式简单介绍了大规模稀疏矩阵压缩存储和快速计算的思想。CSR只是一种最基础当然也是最常见的实现方案。这里要指出的是它非常适合处理需要不断取矩阵某一行的操作,但是它取一列的复杂度是$O(n^2)$。因为你必须去每一行搜索是否存在你要的那一列。也即,在CSR格式下,取列的操作是严禁的。因此如果算法需要取列,那么必须先将按行压缩存储,改为按列压缩存储(Compressed Sparse Column, CSC)。这个操作通过矩阵转置完成。事实上,在这类算法中,我们几乎总是同时保留两种压缩格式的数据。更多的压缩存储格式,请自行阅读参考文献。
161 |
162 | ## 具体操作的例子
163 |
164 | 下面我们看一个具体操作的例子,并解决矩阵初始化的问题。然后我们继续在CG框架中实现一种新的预处理策略:对称超松弛迭代法(symmetric successive overrelaxation method, SSOR)。
165 |
166 | 让我们回顾第六周的作业,我们得到了一个25万阶的矩阵,这个矩阵读入Matlab以后,你会发现它提供的是一种
167 | $$
168 | (i, j, A_{ij})
169 | $$
170 | 的三元数来表示一个稀疏矩阵的非零元,这里$i$表示行号,$j$表示列号,$A_{ij}$表示对应非零元的值。这是一种常见的情况,那么如果假设我们已经有了全部的非零元三元数信息,如何才能在一个程序中读入?你不能先准备一个二元数组(满阵),然后再转成压缩格式,那样会导致一个$O(n^2)$的操作,而是必须直接生成一个压缩格式的矩阵。仔细思考这件事情的意义在于真正理解压缩格式的贡献。
171 |
172 | **判断每一行至多有几个非零元**
173 |
174 | 首先我们需要把所有数据读一遍,统计每一行的非零元个数,这里我们只需要记录非零元数目最多的一行的非零元个数就行了。这里我们假设,非零元在每一行都是均匀分布的,因为非零元总数是$O(n)$,而一共有$n$行,故每一行的非零元个数平均是一个常数,这个常数我们称为`nzmax`。在这种情况下,我们首先将模板初始化成一个每一行都有`nzmax`个非零元的模板(这里没必要生成矩阵,先初始化模板就行),同时,我们并不确定每一个非零元的列号,事实上,我们连某一行到底有几个非零元都不清楚,而是只知道我们给每一行都留下了足够多的非零元位置就行了。因此,这里的列号一律用`-1`表示尚未确定的列号。这一过程的代码:
175 |
176 | ```c
177 | int init_pattern(struct PATTERN *pattern, int n, int m, int nzmax)
178 | {
179 | int i, j;
180 | pattern->n = n;
181 | pattern->m = m;
182 | if ((pattern->row = (int*)malloc(sizeof(int) * (n + 1))) == NULL ||
183 | (pattern->col = (int*)malloc(sizeof(int) * (n * nzmax))) == NULL)
184 | {
185 | printf ("Out of memory!\n");
186 | exit(-1);
187 | } /*不要去管复杂的内存申请,这里就是给将row长度设置为(n + 1),col长度设置为n*nzmax*/
188 | for (i = 0; i < n; i++)
189 | {
190 | pattern->row[i] = i * nzmax;
191 | pattern->col[pattern->row[i]] = i;
192 | for (j = i * nzmax + 1; j < (i + 1) * nzmax; j++)
193 | pattern->col[j] = -1;
194 | } /*第i行的起点为i*nzmax,每一行都有nzmax个空间,但列号全部是-1*/
195 | pattern->row[n] = n * nzmax; /*非零元总数为n*nzmax*/
196 | pattern->is_compressed = 0;
197 | pattern->registed = NULL;
198 | return 0;
199 | };
200 | ```
201 |
202 | 这里因为模板有大量元素尚未确定是否存在和列号,所以处于未压缩状态(`is_compressed = 0`)。这一状态在所有元素确定之后,手工改变。
203 |
204 | 如果非零元在每一行的分布是不均匀的,比如可能出现某几行几乎全满,而其他行几乎是空的这种情况,则我们这里介绍的初始化不适用,要另外设计。比如找到那些满的行,单独处理。
205 |
206 | **确定哪一些元素会正真使用**
207 |
208 | 接下去做的事情似乎很愚蠢,就是把刚刚读过的全部元素再从头读一遍,这次一边读,一边在初始模板中记录它们的位置。这里注意同一行元素可以乱序,除了对角元一般放第一位以外。考虑到非零元总数是$O(n)$,所以重复读了两遍,算法的时间仍然是$O(n)$的。之所以要读两遍,是因为在很多场合,比如动态建模,或者微分方程求解,我们并不能一口气获得全部非零元结构化的信息,而是每次只能获得“下一个元素”的信息。这种情况下,这种方式反而具有最佳的可读性和平均效率。参考代码如下:
209 |
210 | ```c
211 | int set_pattern(struct PATTERN *pattern, int pi, int pj)
212 | {
213 | int j, flag;
214 | if (pi == pj)
215 | return 0;
216 | else
217 | {
218 | flag = 0;
219 | for (j = pattern->row[pi] + 1; j < pattern->row[pi + 1]; j++)
220 | {
221 | if (pattern->col[j] == -1)
222 | {
223 | pattern->col[j] = pj;
224 | flag = 1;
225 | break;
226 | }
227 | } /*寻找一个未使用的位置来记录新的元素*/
228 | if (flag == 0)
229 | {
230 | printf ("Pattern error!\n");
231 | exit(-1);
232 | } /*找不到空位是一个异常*/
233 | }
234 | return 0;
235 | };
236 | ```
237 |
238 | **压缩模板**
239 |
240 | 现在的情况是,我们已经记录了全部非零元的位置,但是仍然存在一些空位,也就是列标为`-1`的元素。我们现在需要将这些空间“压缩”掉。
241 |
242 | 注:由于内存的部分释放实际会占用一定的机器时间,因此很多时候,我们只是标记这些实际未使用的空间,而不去回收它们。
243 |
244 | 这个算法对学过《数据结构》或《算法导论》的同学应该很简单,我们用一个读指`rp`针过滤一遍全部元素,直接跳过下标为`-1`的元素,而将下标不是`-1`的元素复制到另一个全局元素遍历写指针`wp`指向的位置,`wp`每接收一个复制元素,就向前前进一个元素的位置。这里要注意同时必须调整`row`元素的位置,因为每一行的起始位置变化了。参考代码如下:
245 |
246 | ```c
247 | int compress_pattern(struct PATTERN *pattern)
248 | {
249 | int rp = 0;
250 | int wp = 0;
251 | int old_row = 0;
252 | int i, j;
253 | for (i = 0; i < pattern->n; i++)
254 | {
255 | for (j = old_row; j < pattern->row[i + 1]; j++)
256 | {
257 | if (pattern->col[j] != -1)
258 | {
259 | pattern->col[wp] = pattern->col[rp];
260 | wp++;
261 | rp++;
262 | }
263 | else
264 | rp++;
265 | }
266 | old_row = pattern->row[i + 1];
267 | pattern->row[i + 1] = wp;
268 | }
269 | pattern->is_compressed = 1;
270 | return 0;
271 | };
272 | ```
273 |
274 | 完成这个操作后,记得将`is_compressed`设置成`1`。一个矩阵模板一旦压缩完成,在整个生命周期内,结构一般不得再改动,否则可能带来数据混乱(特别是一个模板可能配置了不止一个矩阵)。不过我在这里留下了一个`registed`的成员指针,它其实是一个链表的头,记录了全部引用它的矩阵。也就是说,逻辑上,你可以通过这个链表去追溯全部使用了它的矩阵。不过还是不建议真这么去做。计算数学领域编程的一个基本逻辑是越简单越好,不要纠结太多细枝末节。
275 |
276 | **SSOR预处理**
277 |
278 | 现在我们能够读取矩阵,拥有矩阵乘向量算子,而同一模板矩阵矩阵相加和向量相乘运算是简单的。因此我们已经可以完成CG法求一个矩阵逆算子作用的程序。从稀疏矩阵压缩格式我们可以体会到,不完全Cholesky分解这样的操作,在稀疏矩阵场合是很容易实现的。这里顺便再介绍一种预处理策略——对称超松弛迭代,或者简称为SSOR。
279 |
280 | 我们知道,线性方程组求解的迭代算法,基本上脱胎于两种基本算法,Jacobi迭代和Gauss-Sedial(GS)迭代。(参见:G. H. Golub, C. F. Van Loan, Matrix Computations, 4th. ed., The Johns Hopkins University Press, Baltimore, 2013, ch. 11, p. 611.)其中,对线性问题
281 | $$
282 | Ax = b,
283 | $$
284 | 的迭代过程,Gauss-Sedial迭代的分量迭代格式可写成:
285 | $$
286 | x_i^{(k + 1)} = \frac{b_i - \sum_{j = 1}^{i - 1}a_{ij}x_j^{(k+1)}-\sum_{j = i+1}^{n}a_{ij}x_j^{(k)}}{a_{ii}},
287 | $$
288 | 这里,$x_i^{(k)}$表示$x$的第$i$个分量在第$k$步迭代的值,而$a_{ij}$则表示$A$的第$(i,j)$位置的元素。$i, j = 1, 2, \cdots, n$,$k = 0, 1, \cdots$。
289 |
290 | 这里说明一下Gauss-Sedial迭代,是一种收敛非常缓慢的迭代法,一般不能直接使用。正确的使用方式之一是增加松弛因子,也就是将迭代格式改为:
291 | $$
292 | x_i^{(k + 1)} = (1 - \omega)x_i^{(k)} + \omega\frac{b_i - \sum_{j = 1}^{i - 1}a_{ij}x_j^{(k+1)}-\sum_{j = i+1}^{n}a_{ij}x_j^{(k)}}{a_{ii}},
293 | $$
294 | 这里的$\omega \in (0, 2)$称为松弛因子,它提示GS迭代每一步更新的过头了一点,因此掺上一点旧值,反而能起到迭代加速的效果。这就是所谓的超松驰迭代(Successive Over Relaxation, SOR)。然而,如果把上述变换看作线性算子作用,也就是矩阵乘向量,即将$A$分裂成
295 | $$
296 | A = D - E - F
297 | $$
298 | 的形式,其中$D$是$A$的对角元构成的对角阵,$E$和$F$分别是$A$的对角线以下和以上部分符号取反。那么迭代法的一般算子形式可以表示成:
299 | $$
300 | x^{(k+1)} = G x^{(k)} + f.
301 | $$
302 | 对GS迭代,具体的形式是
303 | $$
304 | G_{GS} = I - (D - E)^{-1}A,
305 | f_{GS} = (D - E)^{-1}b.
306 | $$
307 | 这里我们看到GS的算子作用显然是非对称的。而SOR迭代也继承了GS迭代算子作用不对称的问题
308 | $$
309 | G_{SOR} = I - \left(\frac{1}{\omega}(D - \omega E)\right)^{-1}A, f_{SOR} = \left(\frac{1}{\omega}(D - \omega E)\right)^{-1} b.
310 | $$
311 | 因此也无法应用在要求矩阵保持对称的CG迭代预处理场合。一个简单而直接的处理,是将一步完整的SOR迭代,分裂成两步,从而获得一个对称的等效形式。这种做法就被称为对称超松驰迭代(Symmetric Successive Over Relaxation,SSOR),即
312 | $$
313 | G_{SSOR} = I - \left(\frac{1}{\omega(2 - \omega)}(D - \omega E)D^{-1}(D - \omega F)\right)^{-1}A, \\ f_{SSOR} = \left(\frac{1}{\omega(2 - \omega)}(D - \omega E)D^{-1}(D - \omega F)\right)^{-1}b.
314 | $$
315 |
316 | 这种对称的算子形式,相当于确保我们的预处理阵$M$实际上的取值为
317 | $$
318 | M = \left(\frac{1}{\omega(2 - \omega)}(D - \omega E)D^{-1}(D - \omega F)\right)^{-1},
319 | $$
320 | 从而使得$MA$称为对称矩阵(算子),进而是CG迭代可以继续。上述迭代看似非常复杂,但其实这些形式都是针对大规模稀疏矩阵设计的,在实际编程的时候,其实非常方便。比如一个基于CSR格式的SSOR预处理可以如此实现:
321 |
322 | ```c
323 | int pc_ssor(const struct MATRIX *mat, const double *v, double *w, double omg)
324 | {
325 | int i, j;
326 | int n = mat->pat->n;
327 | int *row = mat->pat->row;
328 | int *col = mat->pat->col;
329 | double *ele = mat->ele;
330 | for (i = 0; i < n; i++)
331 | {
332 | w[i] = v[i];
333 | for (j = row[i] + 1; j < row[i + 1]; j++)
334 | {
335 | if (col[j] > i)
336 | continue;
337 | else
338 | w[i] -= omg * ele[j] * w[col[j]] / ele[row[col[j]]];
339 | }
340 | }
341 | for (i = n - 1; i >= 0; i--)
342 | {
343 | for (j = row[i] + 1; j < row[i + 1]; j++)
344 | {
345 | if (col[j] < i)
346 | continue;
347 | else
348 | w[i] -= omg * ele[j] * w[col[j]];
349 | }
350 | w[i] /= ele[row[i]];
351 | }
352 | return 0;
353 | };
354 | ```
355 |
356 | 从编程角度看,这段代码显得过于繁琐,缺乏技巧。但是它直接对应算法,便于阅读和理解。这是一种计算数学教学过程中的常用策略。同时,它在时间复杂度上并没有损失,所以它实际上确实可以改善CG迭代效率。参见完整的`main.c`程序。
357 |
358 | ## 最佳逼近模型
359 |
360 | 现在我们来考虑一个更加一般化的实际问题,寻找一个目标函数在指定空间的最佳逼近元。比如$\sin(\pi x)$在$[0, 1]$的分段线性空间上的最佳逼近元。我们在插值、逼近、最小二乘、曲线拟合等多个场合学习过这个问题,现在我们用优化的视野来观察这个问题,并得到一个更加一般的算法框架。为方便起见,我们的目标空间始终定在$[0, 1]$上的分段线性空间(未必均匀划分),但这个思路可以容易地推广到任意可计算函数和Hilbert空间(Sobolev空间更加合适),甚至可以用来求解微分方程。在微分方程数值求解领域,该方法有一个更加著名的名称——有限元法(Finite Element Method)。需要指出,我们这里只讨论一种最简单的情形,并不是完整的有限元方法,也缺乏必要的理论分析和保证,只是一个简化的例子。
361 |
362 | 假设我们将$[0, 1]$空间划分成$x_0 = 0 < x_1 < x_2 < \cdots < x_n = 1$共$n$个$[x_i, x_{i + 1}]$区间,$i = 0, 1, \cdots, n - 1$。定义基函数
363 | $$
364 | \begin{equation}
365 | \phi_i(x) = \left\{\begin{array}{ll}
366 | \displaystyle \frac{x - x_{i - 1}}{x_i - x_{i - 1}},&x \in [x_{i - 1}, x_i],\\
367 | \displaystyle \frac{x_{i + 1} - x}{x_{i + 1} - x_i},&x \in [x_i, x_{i + 1}],\\
368 | 0,& \mbox{其他.}
369 | \end{array}\right.
370 | \tag{7.1}
371 | \end{equation}
372 | $$
373 | 于是有
374 | $$
375 | \phi_i(x_j) = \delta_{ij}, i, j = 1, \cdots, n - 1.
376 | $$
377 | 特别地,规定边界情形
378 | $$
379 | \begin{equation}
380 | \phi_0(x) = \left\{\begin{array}{ll}
381 | \displaystyle \frac{x_1 - x}{x_1 - x_0},&x \in [x_0, x_1],\\
382 | 0,& \mbox{其他.}
383 | \end{array}\right.
384 | \tag{7.2}
385 | \end{equation}
386 | $$
387 | 以及
388 | $$
389 | \begin{equation}
390 | \phi_n(x) = \left\{\begin{array}{ll}
391 | \displaystyle \frac{x - x_n}{x_{n - 1} - x_n},&x \in [x_{n - 1}, x_n],\\
392 | 0,& \mbox{其他.}
393 | \end{array}\right.
394 | \tag{7.3}
395 | \end{equation}
396 | $$
397 | 这样就构成一个完整的$[0, 1]$上划分为$x_0 = 0 < x_1 < x_2 < \cdots < x_n = 1$的分片线性函数空间
398 | $$
399 | \begin{equation}
400 | H_1^{[0, 1]} \overset{\mathrm{def}}= \left\{u \left| u = \sum_{i = 0}^n u_i \phi_i(x), u_i \in \mathbb{R}\right.\right\}.
401 | \tag{7.4}
402 | \end{equation}
403 | $$
404 | 现在对$[0, 1]$上的平方可积函数$f$,我们寻找$H_1^{[0, 1]}$种的最佳平方逼近元,也即
405 | $$
406 | \begin{equation}
407 | \min_{u \in H_1^{[0, 1]}} \|u - f\|_2^2.
408 | \tag{7.5}
409 | \end{equation}
410 | $$
411 | 这个问题本质上就是一个最小二乘问题,我们甚至可以直接写出它的正规方程组。这里我们稍微加以推导,对上式关于$u = (u_0, u_1, \cdots, u_n)$(因为是有限维,我们这里不区分$H_1^{[0, 1]}$中的成员函数和其向量表示)求其梯度的零点,有
412 | $$
413 | \begin{array}{ll}
414 | &\displaystyle \frac{\partial}{\partial u_j}\int_0^1\left(\sum_{i = 0}^n u_i\phi_i(x) - f(x)\right)^2dx = 0\\
415 | \Rightarrow&\displaystyle\int_0^1\frac{\partial}{\partial u_j}\left(\sum_{i = 0}^nu_i\phi_i(x) - f(x)\right)^2dx = 0\\
416 | \Rightarrow&\displaystyle\int_0^12\left(\sum_{i = 0}^nu_i\phi_i(x) - f(x)\right)\phi_j(x)dx = 0\\
417 | \Rightarrow&\displaystyle\sum_{i = 0}^n\int_0^1u_i\phi_i(x)\phi_j(x)dx - \int_0^1f(x)\phi_jdx = 0\\
418 | \Rightarrow&\displaystyle\sum_{i = 0}^n\int_0^1u_i\phi_i(x)\phi_j(x)dx = \int_0^1f(x)\phi_jdx \\
419 |
420 |
421 | \end{array}
422 | $$
423 | 若将其写成矩阵向量形式,则有
424 | $$
425 | \begin{equation}
426 | K u = f,
427 | \tag{7.6}
428 | \end{equation}
429 | $$
430 | 其中
431 | $$
432 | K_{ij} = \int_0^1\phi_i(x)\phi_j(x)dx,
433 | $$
434 | 是$n + 1$阶系数矩阵,注意对$|i - j| > 1$有$K_{ij} = 0$。也即实际上$K$是三对角矩阵,这是由一维的对称性决定的。对于二维的三角形剖分或四边形剖分,以及更高的维数,$K$是稀疏的,但并不是带宽矩阵,而且$K$的非零元分布和节点编号有关(也即存在使$K$非零元最集中于对角线附近的最佳编号)。(7.6)的右端向量的分量为
435 | $$
436 | f_i =\int_0^1f(x)\phi_jdx,
437 | $$
438 | 而$u = (u_0, u_1, \cdots, u_n)$为未知向量。事实上,方程组(7.6)就是问题(7.5)的正规方程组。
439 |
--------------------------------------------------------------------------------
/lecture_notes/Constraint_Optimization_II.md:
--------------------------------------------------------------------------------
1 | ## 切锥(Tangent Cone)和表示规范的本质
2 |
3 | 我们已经注意到,解$x^*$的一阶局部性质是由邻近的可行域$\Omega$决定的。同时,也是由在$x^*$出发的全部一阶可行方向集合决定的。这两者是否是等价的?应该不是,因为后者显然还和约束的具体代数表示形式有关,而前者完全是一个几何概念。这一节我们严格定义这两者,并分析它们之间的关系,为接下去的证明奠定基础。
4 |
5 | 首先,对于一个可行点$x$,若有序列$\{z_k\} \to x$,且对充分大的$k$,均有$z_k$可行,则称序列$\{z_k\}$为趋向(approaching)$x$点的渐进可行序列(feasible sequence)。
6 |
7 | **定义 12.2** 称向量$d$是$\Omega$在$x$点的切向量(tangent),若存在一个趋向$x$的可行序列$\{z_k\}$,以及一个收敛到$0$的正数序列$\{t_k\}$,使得
8 | $$
9 | \begin{equation}
10 | \lim_{k \to \infty}\frac{z_k - x}{t_k} = d.
11 | \tag{12.29}
12 | \end{equation}
13 | $$
14 | $\Omega$在$x^*$点的全部切向量称为$\Omega$在$x^*$点的切锥(tangent cone),记作$T_\Omega(x^*)$。
15 |
16 | 容易证明(但仍需证明),$T_\Omega(x^*)$是一个锥。(锥的定义见参考书附录A.36。)
17 |
18 | 显然,切锥是一个完全几何的定义。从代数的角度,如果只考虑一阶局部信息,我们可以类似地给出一个定义:
19 |
20 | **定义 12.3** 对可行点$x$,以及相应的活跃集$\mathcal{A}(x)$,集合
21 | $$
22 | \mathcal{F}(x) = \left\{
23 | d \left|
24 | \begin{array}{ll}
25 | d^T\nabla c_i(x) = 0, \forall i \in \mathcal{E}, \\
26 | d^T\nabla c_i(x) \geq 0, \forall i \in \mathcal{A}(x)\cap\mathcal{I}.
27 | \end{array}
28 | \right.\right\}
29 | $$
30 | 称为线性化可行方向集。
31 |
32 | 显然(呵呵),$\mathcal{F}(x)$也是一个锥。但是,$\mathcal{F}(x)$却不是纯粹几何的,它依赖$c_i$,$i \in \mathcal{E} \cup \mathcal{I}$的具体解析表达形式。
33 |
34 | **例 12.4** 问题和例 12.1一样。对可行点$x = (-\sqrt{2}, 0)^T$,我们构建趋于$x$的可行序列
35 | $$
36 | \begin{equation}
37 | z_k = \left[
38 | \begin{array}{c}
39 | -\sqrt{2 - 1/k^2}\\
40 | -1/k
41 | \end{array}
42 | \right].
43 | \tag{12.30}
44 | \end{equation}
45 | $$
46 | 并选择$t_k = \|z_k - x\|$,则$d=(0, -1)^T$是切向量。而对另一个从相反方向趋于$x$的序列
47 | $$
48 | z_k = \left[
49 | \begin{array}{c}
50 | -\sqrt{2-1/k^2}\\
51 | 1/k
52 | \end{array}\right],
53 | $$
54 | 则$d = (0, 1)^T$是切向量。综合起来,在$x = (-\sqrt{2}, 0)^T$的切锥是
55 | $$
56 | \left\{(0, d_2)^T \left|d_2 \in \mathbb{R} \right.\right\}.
57 | $$
58 | 而对$d = (d_1, d_2)^T \in \mathcal{F}(x)$,有
59 | $$
60 | 0 = \nabla c_1(x)^Td = \left[2x_1 \quad2x_2\right]\left[
61 | \begin{array}{c}
62 | d_1\\d_2
63 | \end{array}
64 | \right] = -2\sqrt{2} d_1.
65 | $$
66 | 因此,$\mathcal{F}(x) = \left\{(0, d_2)^T \left|d_2 \in \mathbb{R}\right.\right\}$。在这个例子中,我们看到,$T_\Omega(x) = \mathcal{F}(x)$。
67 |
68 | 但是如果我们把可行域改为
69 | $$
70 | \begin{equation}
71 | \Omega = \{x | c_1(x) = (x_1^2 + x_2^2 - 2)^2 = 0\}.
72 | \tag{12.31}
73 | \end{equation}
74 | $$
75 | 则
76 | $$
77 | \begin{equation}
78 | 0 = \nabla c_1(x)^Td = \left[
79 | 4(x_1^2 + x_2^2 - 2)x_1 \quad
80 | 4(x_1^2 + x_2^2 - 2)x_2
81 | \right]\left[\begin{array}{c}
82 | d_1\\d_2
83 | \end{array}
84 | \right] = [0 \quad 0]\left[\begin{array}{c}
85 | d_1\\d_2
86 | \end{array}
87 | \right],
88 | \end{equation}
89 | $$
90 | 对任意的$(d_1, d_2)^T$都是成立的,也即$\mathcal{F}(x) = \mathbb{R}^2$。而$T_\Omega(x)$没有任何变化(可行域的几何性质不变),因此在这种情况下,切锥和线性化可行方向集不一致。
91 |
92 | **例 12.5** 再次回顾例12.2。现在$x = (-\sqrt{2}, 0)^T$处的情况变得更加复杂。首先,趋于$x$的可行序列不但可以从边界趋近,也可以从内部,比如
93 | $$
94 | z_k = (-\sqrt{2}, 0)^T + (1/k)w,
95 | $$
96 | 其中$w$是任意位于右半平面内的向量,即$w = (w_1, w_2)^T, w_1 > 0$。当$\|z_k\| \leq \sqrt{2}$时,序列值$z_k$是可行的,也即
97 | $$
98 | (-\sqrt{2} + w_1/k)^2 + (w_2/k)^2 \leq 2,
99 | $$
100 | 化简得:
101 | $$
102 | k \geq (w_1^2 + w_2^2) / (2\sqrt{2}w_1).
103 | $$
104 | 由于$1/k$本身就是一个退化的正项序列,因此在$x = (-\sqrt{2}, 0)^T$处的切锥就是
105 | $$
106 | T_\Omega(x) = \{(w_1, w_2)^T | w_1 \geq 0\}.
107 | $$
108 | 而由
109 | $$
110 | 0 \leq \nabla c_1(x)^T d = [-2x_1 \quad -2x_2]\left[\begin{array}c d_1 \\ d_2\end{array}\right] = 2\sqrt{2} d_1,
111 | $$
112 | 知$\mathcal{F}(x) = \{d = (d_1, d_2)^T | d_1 \geq 0\}$,因此在此表示下,$\mathcal{F}(x) = T_\Omega(x)$。
113 |
114 | 有上面的基础,我们现在可以讨论表示规范的实质。切锥代表了问题的客观几何性质,而线性化可行方向集则给我们了一个可以具体计算的解析表达形式。当这两者不一致时,一切算法和推导,都是基于有解析表达的线性化可行方向集,因此会给出错误的、和几何不一致的结果。所以,一个最原始、最基础的表示规范,就是
115 | $$
116 | \mathcal{F}(x) = T_\Omega(x).
117 | $$
118 | 但是这个规范没有任何意义。因为问题的根源就在于我们无法直接操作几何属性的$T_\Omega(x)$。因此,我们需要建立一些强条件下的特例,使得在满足这些条件时,事实上有$\mathcal{F}(x) = T_\Omega(x)$,从而只需通过可计算和推导的$\mathcal{F}(x)$,获得真正有几何意义的解。比如,LICQ(我们以后会严格证明这一点)。
119 |
120 | 最后我们再讨论一个例子:
121 | $$
122 | \begin{equation}
123 | c_1(x) = 1 - x_1^2 - (x_2 - 1)^2 \geq 0, c_2(x) = -x_2 \geq 0, \tag{12.32}
124 | \end{equation}
125 | $$
126 | 现在在这里实际的可行域只有单点$\Omega = \{(0, 0)^T\}$。对该点$x = (0, 0)^T$,显然切锥就是$T_\Omega(x) = \{(0, 0)^T\}$,因为所有趋于$x$的可行序列必须满足当$k$充分大时,$z_k = x = (0, 0)^T$。进一步,我们也容易验证
127 | $$
128 | \mathcal{F}(x) = \left\{(d_1, 0)^T \left|d_1 \in \mathbb{R}\right.\right\}.
129 | $$
130 | 因此在这个例子,线性化可行方向集并没有在$x$点抓住问题的几何特征,也即它不满足约束规范。
131 |
132 | ## 一阶最优条件的证明
133 |
134 | 现在我们来考虑定理12.1的证明。这个证明尽管漫长,但确实是值得的。因为体现了整个优化领域的一些基本思想。
135 |
136 | 我们下面用$A(x^*)$来表示
137 | $$
138 | \begin{equation}
139 | A(x^*)^T = \left[\nabla c_i(x^*)\right]_{i \in \mathcal{A}(x^*)},
140 | \tag{12.37}
141 | \end{equation}
142 | $$
143 | 注意这里$A(x^*)$是一个矩阵,它的行向量是活跃约束的梯度。
144 |
145 | **引理 12.2** 令$x^*$是一个可行点。则以下两个命题成立:
146 |
147 | 1. $T_\Omega(x^*) \subset \mathcal{F}(x^*)$;
148 | 2. 若在$x^*$点有LICQ成立,则$\mathcal{F}(x^*) = T_\Omega(x^*)$.
149 |
150 | **证明:**不失一般性(without loss of generality),假设约束$c_i(x)$在$x^*$活跃,$i = 1, 2, \cdots, m$。对命题1,任取$d \in T_\Omega(x^*)$,令序列$\{z_k\}$和$\{t_k\}$满足
151 | $$
152 | \lim_{k \to \infty} \frac{z_k - x^*}{t_k} = d,
153 | $$
154 | 且对所有$k$,$t_k > 0$。于是有
155 | $$
156 | \begin{equation}
157 | z_k = x^* + t_kd + o(t_k).
158 | \tag{12.38}
159 | \end{equation}
160 | $$
161 | 对$i \in \mathcal{E}$,使用Taylor定理,我们有
162 | $$
163 | \begin{eqnarray}
164 | 0 &=& \frac{1}{t_k} c_i(z_k) \quad (c_i(z_k) = 0,\mbox{对}k\mbox{充分大})\\
165 | &=& \frac{1}{t_k}\left[c_i(x^*) + t_k\nabla c_i(x^*)^Td + o(t_k))\right] \quad (\mbox{注意首项为零})\\
166 | &=& \nabla c_i(x^*)^Td + \frac{o(t_k)}{t_k}
167 | \end{eqnarray}
168 | $$
169 | 上式两端对$k \to \infty$,得
170 | $$
171 | \nabla c_i(x^*)^Td = 0, \forall i \in \mathcal{E}.
172 | $$
173 | 再对$i \in \mathcal{A}(x^*) \cap \mathcal{I}$,类似地有
174 | $$
175 | \begin{eqnarray}
176 | 0 &\leq& \frac{1}{t_k} c_i(z_k) \\
177 | &=& \frac{1}{t_k} \left[c_i(x^*) + t_k \nabla c_i(x^*)^Td + o(t_k)\right] \quad (\mbox{首项也为零,因为}i \in \mathcal{A}(x^*))\\
178 | &=& \nabla c_i(x^*)^Td + \frac{o(t_k)}{t_k}.
179 | \end{eqnarray}
180 | $$
181 | 即
182 | $$
183 | \nabla c_i(x^*)^Td \geq 0, \forall i \in \mathcal{A}(x^*) \cap \mathcal{I}.
184 | $$
185 | 综上,必有$d \in \mathcal{F}(x^*)$,也即有命题1成立。
186 |
187 | 对命题2,由LICQ成立,矩阵$A(x^*)$必然是行满秩的。注意$A(x^*)$是$m \times n$的,且$n > m$(为啥?)。故可令矩阵$Z$的列向量是$A(x^*)$的零空间的基,也即
188 | $$
189 | \begin{equation}
190 | A(x^*)Z = 0, Z \in \mathbb{R}^{n \times(n - m)},
191 | \tag{12.39}
192 | \end{equation}
193 | $$
194 | 其中$Z$列满秩。(即$A(x^*)$作为一个线性方程组的系数矩阵,则该线性方程组是欠定的,它对应的齐次方程组的解是一个空间,$Z$的列向量就是它的全部基。更近一步的理论参见《高等代数》课本。)任取$d \in \mathcal{F}(x^*)$,令$\{t_k\}_{k = 0}^{\infty}$是任意的正项序列,且满足$t_k \to 0, k \to \infty$。定义映射$R : \mathbb{R}^n \times \mathbb{R} \to \mathbb{R}^n$以及参数方程组如下:
195 | $$
196 | \begin{equation}
197 | R(z, t) = \left[\begin{array}{c}c(z) - tA(x^*)d\\
198 | Z^T(z - x^* - td)\end{array}\right] = \left[\begin{array}c0\\0\end{array}\right].
199 | \tag{12.40}
200 | \end{equation}
201 | $$
202 | (注意上面系统的第一块是$m$行,而第二块是$n - m$行,所以总系统是$n$行的。)
203 |
204 | 这里断言(claim),对充分大的$k$,$t = t_k$充分小,而$z_k = z$为上述方程组的解,则如此构建的$\{z_k\}$和$\{t_k\}$满足趋于$x^*$的渐近可行序列的定义,也即
205 | $$
206 | \lim_{k \to \infty} \frac{z_k - x^*}{t_k} = d.
207 | $$
208 | (从这个断言我们也可以想象一下为何几何条件很难直接应用...)
209 |
210 | 事实上,对$t = 0$, $z = x^*$,$R$的Jacobi矩阵为
211 | $$
212 | \begin{equation}
213 | \nabla_z R(x^*, 0) = \left[\begin{array}cA(x^*)\\Z^T\end{array}\right],
214 | \tag{12.41}
215 | \end{equation}
216 | $$
217 | 注意其第一块由LICQ是行满秩的,而第二块由定义也是行满秩的。因此整体上该矩阵非奇异。由隐函数定理,对充分小的$t_k$,方程组存在唯一解$z_k$。并且,对$i \in \mathcal{A}(x^*)$,由(12.40)的前$m$行,有
218 | $$
219 | c_i(z_k) = t_k A(x^*)d,
220 | $$
221 | 因此有
222 | $$
223 | \begin{eqnarray}
224 | i \in \mathcal{E} &\Rightarrow& c_i(z_k) = t_k\nabla c_i(x^*)^Td = 0, \tag{12.42a}\\
225 | i \in \mathcal{A}(x^*) \cap \mathcal{I} &\Rightarrow& c_i(z_k) = t_k \nabla c_i(x^*)^Td \geq 0, \tag{12.42b}
226 | \end{eqnarray}
227 | $$
228 | 所以,对充分大的$k$以及相应充分小的$t_k$,$z_k$是可行的。(还没有结束!)
229 |
230 | 接下去我们还需要证明,对此$\{z_k\}$,有
231 | $$
232 | \lim_{k \to \infty} \frac{z_k - x^*}{t_k} = d
233 | $$
234 | 成立。这里我们对$R(z_k, t_k)$应用Taylor定理,有
235 | $$
236 | \begin{eqnarray}
237 | 0 = R(z_k, t_k) &=& \left[\begin{array}c
238 | c(z_k) - t_kA(x^*)d\\
239 | Z^T(z_k - x^* - t_kd)
240 | \end{array}\right]\\
241 | &=&\left[\begin{array}cc(x^*) + \nabla c(x^*)(z_k - x^*) + o(\|z_k - x^*\|) - t_kA(x^*)d\end{array}\right] \\
242 | &&(\mbox{这里将第一项}c(z_k)\mbox{在}x^*\mbox{展开,注意第一项是零,第二项中}\nabla c(x^*)\mbox{就是}A(x^*))\\
243 | &=&\left[\begin{array}cA(x^*)(z_k - x^*) + o(\|z_k - x^*\|) - t_kA(x^*)d\\
244 | Z^T(z_k - x^* - t_kd)\end{array}\right]\\
245 | &=&\left[\begin{array}cA(x^*)\\Z^T\end{array}\right](z_k - x^* - t_kd) + o(\|z_k - x^*\|),
246 | \end{eqnarray}
247 | $$
248 | 两边同除以$t_k$,并注意到最后一行的系数矩阵是非奇异的,有
249 | $$
250 | \frac{z_k - x^*}{t_k} = d + o\left(\frac{\|z_k - x^*\|}{t_k}\right),
251 | $$
252 | 因此$d \in T_\Omega(x^*)$,证毕。$\Box$
253 |
254 | **定理 12.3.** 若$x^*$是问题(12.1)的解,则
255 | $$
256 | \begin{equation}
257 | \nabla f(x^*)^Td\geq0, \forall d \in T_\Omega(x^*). \tag{12.43}
258 | \end{equation}
259 | $$
260 | (这个定理说的是,从最优解出发的全部几何方向,都是不下降方向。这个显然是对的。这是一个非常基础的必要条件。)
261 |
262 | **证明:**反证,假设存在$d \in T_\Omega(x^*)$,且
263 | $$
264 | \nabla f(x^*)^Td < 0,
265 | $$
266 | 则令$\{z_k\}$和$\{t_k\}$是对应的可行序列和正序列,于是
267 | $$
268 | \begin{eqnarray}
269 | f(z_k) &=& f(x^*) + (z_k - x^*)^T\nabla f(x^*) + o(\|z_k - x^*\|)\\
270 | &=& f(x^*) + t_kd^T\nabla f(x^*) + o(t_k).
271 | \end{eqnarray}
272 | $$
273 | 这是因为由(12.38),
274 | $$
275 | z_k = x^* + t_kd + o(t_k).
276 | $$
277 | 由$d^T\nabla f(x^*) < 0$,当$k$充分大时,有
278 | $$
279 | f(z_k) - f(x^*) = t_kd^T\nabla f(x^*)+o(t_k) < 0,
280 | $$
281 | 这与$x^*$是局部最小值点矛盾。$\Box$
282 |
283 | 显然,这个条件是不充分的,即便对$\forall d \in T_\Omega(x^*)$,都有$\nabla f(x^*)^Td \geq 0$(从$x^*$点出发的切锥方向都不下降),也未必有$x^*$是局部极小值。
284 |
285 | **反例:**
286 | $$
287 | \begin{equation}
288 | \min x_2, \quad\mbox{s.t.} x_2 \geq -x_1^2,
289 | \tag{12.44}
290 | \end{equation}
291 | $$
292 | 该问题的可行域是无界的,从草图不难看出它既没有全局最优解,也没有局部最优解。然而,对$x^* = (0, 0)^T$,从它出发的切线均在上半平面,于是有$\forall d \in T_\Omega(x^*)$,$\nabla f(x^*)^Td \geq 0$。这件事情的本质是即便$T_\Omega(x^*)$也不是全部信息,它只是几何上的一阶信息,从我们在无约束优化中的经验,要确立充分条件,需要二阶局部信息参与(正定)。这个问题我们之后再讨论,目前先设法证明真正的一阶必要条件。
293 |
294 | 我们先考虑一个一般意义上的几何锥
295 | $$
296 | \begin{equation}
297 | K = \left\{By + Cw \left|y \geq 0\right.\right\},
298 | \tag{12.45}
299 | \end{equation}
300 | $$
301 | 其中,$B$和$C$分别是$n \times m$和$n \times p$阶矩阵,$y$和$w$是对应维数的向量。
302 |
303 | (这个锥的定义比我们直观中的锥稍微更一般一点,它允许在一些方向上是全部而另一些方向上是正向。比如三维空间的一个半平面,按照这个定义也是一个锥。)
304 |
305 | 现在对于一个$g \in \mathbb{K}^n$,显然要么有$g \in K$,要么$g \notin K$。但一个叫Farkas的几何学家指出,后者可以改为存在$d \in \mathbb{R}^n$,使得
306 | $$
307 | \begin{equation}
308 | g^Td < 0, B^Td \geq 0, C^Td = 0.
309 | \tag{12.46}
310 | \end{equation}
311 | $$
312 | 这件事情的真正意义在于,将一件什么是锥,以及它如何划分空间这样一件纯几何的事情,和(12.46)这样的代数形式建立了联系。它本质上涉及到几何信息可以如何正确表达这样一件非常基础的事实,同时,也能解决我们现在遇到的问题。这个事实总结为下述引理:
313 |
314 | **引理12.4(Farkas引理)** 令锥$K$如(12.45)所定义。则对任意$g \in \mathbb{R}^n$,要么$g \in K$,否则必有$d \in \mathbb{R}^n$满足(12.46)。
315 |
316 | **证明:** 我们首先证明,这两种情况不会同时成立。否则,若$g \in K$,即有$y \geq 0$和$w$,使
317 | $$
318 | g = By + Cw,
319 | $$
320 | 同时又有$d \in \mathbb{R}^n$,使$g^Td < 0$,$B^Td \geq 0$,$C^Td = 0$,则
321 | $$
322 | 0 > d^Tg = d^TBy + d^TCw = (B^Td)^Ty + (C^Td)^Tw \geq 0.
323 | $$
324 | 矛盾说明两种情况不会同时成立。
325 |
326 | 现证对$g \notin K$,必存在$d$满足(12.46)。但这里最意外的一点是首先要证明$K$是闭集。这一点似乎是显然的,但是由于我们现在的证明是深入几何基础的,所以仍然需要有一个证明。具体过程参见后面的引理12.15。你会发现它的证明还是相当复杂的。我们下面直接接受这个结论。
327 |
328 | 令$\hat{s}$是$g$在$K$中的最佳逼近元,即
329 | $$
330 | \begin{equation}
331 | \hat{s} = \mathrm{argmin} \|s - g\|_2^2, \quad s \in K.
332 | \tag{12.47}
333 | \end{equation}
334 | $$
335 | 由$\hat{s} \in K$,且$K$是锥,故$\alpha \hat{s} \in K, \forall \alpha \in \mathbb{R}$。由$\hat{s}$定义,当$\alpha = 1$时,有
336 | $$
337 | \|\alpha\hat{s} - g\|_2^2 = (\alpha\hat{s} - g)^T(\alpha\hat{s} - g)
338 | $$
339 | 取到最小(因为$\hat{s}$就是最小)。故
340 | $$
341 | \begin{eqnarray}
342 | \left.\frac{d}{d\alpha}\|\alpha\hat{s} - g\|_2^2\right|_{\alpha = 1} &=& 0\\
343 | \Rightarrow \left.\frac{d}{d \alpha}(\alpha \hat{s} - g)^T(\alpha \hat{s} - g)\right|_{\alpha = 1} &=& \left.\frac{d}{d\alpha}\left(\alpha^2\hat{s}^T\hat{s} - 2\alpha g^T\hat{s}+g^Tg\right)\right|_{\alpha = 1}\\
344 | &=&\left.2\alpha\hat{s}^T\hat{s} - 2g^T\hat{s}\right|_{\alpha = 1}\\
345 | &=&2\hat{s}^T\hat{s} - 2g^T\hat{s} = 2\hat{s}^T(\hat{s} - g) = 0. \tag{12.48}
346 | \end{eqnarray}
347 | $$
348 | (这是我们熟知的一个结论,最佳逼近元事实上是正交投影。)
349 |
350 | 令$s$是$K$中任意向量,由$K$凸,
351 | $$
352 | \begin{equation}
353 | \|\hat{s} + \theta(s - \hat{s}) - g\|_2^2 \geq \|\hat{s} - g\|_2^2, \forall \theta \in [0, 1].
354 | \end{equation}
355 | $$
356 | (这里$\hat{s} + \theta(s - \hat{s}) = (1-\theta)\hat{s} + \theta s$是$s$和$\hat{s}$的凸组合,由$s, \hat{s} \in K$,其凸组合必属于$K$,因此到$g$的距离必大于最佳逼近距离。)
357 |
358 | 将上式转成向量内积形式:
359 | $$
360 | \begin{eqnarray}
361 | &&(\hat{s} - g)^T(\hat{s} - g) + 2 \theta(s-\hat{s})^T(\hat{s} - g) + \theta^2(s-\hat{s})^T(s-\hat{s}) - \|\hat{s} - g\|_2^2 \geq 0, \\
362 | &\Rightarrow&2\theta(s - \hat{s})^T(s - g) + \theta^2\|s - \hat{s}\|_2^2 \geq 0,
363 | \end{eqnarray}
364 | $$
365 | 两边同除以$\theta$(对$\theta \neq 0$,$\theta = 0$时结论是显然的),并令$\theta \to 0$,有
366 | $$
367 | (s - \hat{s})^T(\hat{s} - g) \geq 0.
368 | $$
369 | 由(12.48),
370 | $$
371 | \hat{s}^T(\hat{s} - g) \geq 0,
372 | $$
373 | 于是
374 | $$
375 | \begin{equation}
376 | (s - \hat{s})^T(\hat{s} - g) = s^T(\hat{s} - g) - \hat{s}^T(\hat{s} - g) = s^T(\hat{s} - g) \geq 0, \forall s \in K. \tag{12.49}
377 | \end{equation}
378 | $$
379 | 到目前为止,我们还没有涉及到底那个$d$在哪里这样的实质问题。现在,令
380 | $$
381 | d = \hat{s} - g \Leftrightarrow g = \hat{s} - d.
382 | $$
383 | (这里$d$的几何意义也出现了。)
384 |
385 | 由$g \notin K$,$d \neq 0$,且
386 | $$
387 | d^Tg = d^T(\hat{s} - d) = d^T\hat{s} - d^Td = (\hat{s} - g)^T\hat{s} - d^Td = -\|d\|_2^2 < 0,
388 | $$
389 | (这里又用了(12.48))
390 |
391 | 故$d$满足(12.46)的第一个条件。再由(12.49),
392 | $$
393 | s^T(\hat{s} - g) = s^Td \geq 0, \forall s \in K,
394 | $$
395 | 于是
396 | $$
397 | d^T(By + Cw) \geq 0, \forall y \geq 0, w \in \mathbb{R}^n.
398 | $$
399 | 令$y = 0$,则有
400 | $$
401 | (C^Td)^Tw \geq 0,
402 | $$
403 | 由$w$任意性,唯有
404 | $$
405 | C^Td = 0.
406 | $$
407 | 也即(12.46)第三项成立。
408 |
409 | 再令$w = 0$,有
410 | $$
411 | (B^Td)^Ty \geq 0 , \forall y \geq 0 \Rightarrow B^Td \geq 0.
412 | $$
413 | 这是(12.46)第二项,于是$d$满足(12.46),证毕。$\Box$
414 |
415 | **推论** 考虑Farks引理的一个特例:锥
416 | $$
417 | \begin{equation}
418 | N = \left\{\sum_{i \in \mathcal{A}(x^*)}\lambda_i\nabla c_i(x^*), \lambda_i \geq 0, \forall i \in \mathcal{A}(x^*)\cap\mathcal{I}\right\}, \tag{12.50}
419 | \end{equation}
420 | $$
421 | 并令
422 | $$
423 | g = \nabla f(x^*),
424 | $$
425 | 则要么
426 | $$
427 | \begin{equation}
428 | \nabla f(x^*) = \sum_{i \in \mathcal{A}(x^*)}\lambda_i \nabla c_i(x^*) = A(x^*)^T\lambda,
429 | \tag{12.51}
430 | \end{equation}
431 | $$
432 | 其中$\lambda_i \geq 0$,$\forall i \in \mathcal{A}(x^*)\cap\mathcal{I}$;要么存在$d$,使得
433 | $$
434 | d^T\nabla f(x^*) < 0, d \in \mathcal{F}(x^*).
435 | $$
436 | (这里实际上完整的$K$是
437 | $$
438 | K = \left\{\sum_{i \in \mathcal{A}(x^*)\cap\mathcal{I}, \lambda_i \geq 0}\lambda_i\nabla c_i(x^*) + \sum_{i \in \mathcal{E}}\lambda_i\nabla c_i(x^*)\right\},
439 | $$
440 | 因此结论是要么$g = \nabla f(x^*)$在$K$锥内,也即存在满足要求的$\lambda$可以被如此表出,要么存在$d$满足
441 | $$
442 | d^T\nabla f(x^*) <0, \quad \nabla c_i^Td \geq 0, i \in \mathcal{A}(x^*)\cap\mathcal{I}, \quad \nabla c_i^Td = 0, i \in \mathcal{E}.
443 | $$
444 | 也就是$d \in \mathcal{F}(x^*)$,且$d$上升。
445 |
446 | )
447 |
448 | **定理12.1的证明:**设$x^* \in \mathbb{R}^n$是问题(12.1)的一个可行点,且满足LICQ。进一步,$x^*$还是(12.1)的局部最优点。由定理12.3,任取$d \in T_\Omega(x^*)$,有
449 | $$
450 | d^T \nabla f(x^*) \geq 0.
451 | $$
452 | 再由引理12.2,对LICQ,有
453 | $$
454 | T_\Omega(x^*) = \mathcal{F}(x^*).
455 | $$
456 | 结合上述两个结论,我们有任取$d \in \mathcal{F}(x^*)$,
457 | $$
458 | d^T \nabla f(x^*) \geq 0.
459 | $$
460 | 于是由Farks引理(引理12.4),在两个结论中只能前一个成立,也即(12.51)成立。即存在$\lambda$使得
461 | $$
462 | \nabla f(x^*) = \sum_{i \in \mathcal{A}(x^*)}\lambda_i \nabla c_i(x^*) = A(x^*)^T\lambda,
463 | $$
464 | 其中$\lambda_i \geq 0$,$\forall \mathcal{A}(x^*)\cap\mathcal{I}$。现在对$\lambda^*$如下设置:
465 | $$
466 | \begin{equation}
467 | \lambda_i^* = \left\{
468 | \begin{array}{ll}
469 | \lambda_i, & i \in \mathcal{A}(x^*),\\
470 | 0, &i\in \mathcal{I} \backslash \mathcal{A}(x^*),
471 | \end{array}
472 | \right.
473 | \tag{12.52}
474 | \end{equation}
475 | $$
476 | 则不难验证,上述$\lambda^*$满足(12.34)。证毕。$\Box$
477 |
478 |
--------------------------------------------------------------------------------
/lecture_notes/Random_SGD.md:
--------------------------------------------------------------------------------
1 | # 随机数和随机梯度下降法
2 |
3 | ## 伪随机数的产生
4 |
5 | 我们称计算机算法产生的随机数为伪随机数。伪随机数在分布特性上接近真随机数,因此在一些随机模拟的算法中可以代替真随机数提供随机性。但要注意,计算机作为一个确定性系统,通过算法产生的伪随机数永远也不可能是真随机数,也就是实际上,它是有规律的,只是这种规律可能由于信息不对成,埋藏的比较深。伪随机数的统计学特征越接近真随机数,我们称它的质量越好。高质量的伪随机数,必然需要更大的计算代价。所以很多时候,我们需要根据实际问题的需求来选择合适的随机数生成器。
6 |
7 | Tezuka 1995 提出伪随机数应该具有如下特点:
8 |
9 | + 能通过统计检验;
10 | + 有数学理论支撑;
11 | + 可以递推产生,不用占用大量内存;
12 | + 产生速度快,效率高;
13 | + 重复周期长,至少有$10^{50}$;如果问题需要$N$个随机数,则周期需要$2N^2$;
14 | + 并行性好,可在计算集群上快速产生;
15 |
16 | **Fibonacci生成器**
17 |
18 | 最简单的随机数生成器,是Taussky和Todd于1956年提出的可以用加法同余产生在$[0, M-1]$均匀分布的伪随机整数,其递推公式为
19 | $$
20 | \begin{equation}
21 | X_i = (X_{i - 2} + X_{i - 1})\mod M, i > 2.
22 | \end{equation}
23 | $$
24 | 当$X_0 = X_1 = 1$时,该公式产生的序列在小于$M$部分就是Fibonacci序列,因此又称为经典Fibonacci产生器。该算法过程实现很简单。显然,$U_i = X_i / M$给出了相应的$U(0, 1)$分布随机数。这一算法我们一般用在对随机性要求较低的场合,比如建一张临时Hash表。
25 |
26 | **线性同余生成器**
27 |
28 | Lehmer 1951和Rotenberg 1960分别提出了乘同余和混合同余产生器。递推公式为:
29 | $$
30 | \begin{equation}
31 | X_i = (A * X_{i - 1} + C) \mod M,
32 | \end{equation}
33 | $$
34 | 其中参数$M$,$A$和$C$分别称为模,乘子和增量。当$C = 0$的特例即是乘同余产生器,而$C > 0$则称为混合同余产生器。同样可以用$U_i = X_i / M$将其调整为$U(0, 1)$分布。
35 |
36 | 显然,Fibonacci生成器是线同余生成器的一个特例。线性同余生成器的原理是大整数的同余计算在除数范围内近似均匀分布。它实现简单,并且长期被人们接受。比如线性同余方法曾经广泛使用于各个计算机平台做为伪随机数发生器。比如IBM360系统下曾有一个著名的随机数产生器RANDU被使用多年。它就是$A = 65539$,$M = 2^{31}$的线性乘同余产生器。
37 |
38 | 然而,研究发现线性同余生成器产生的伪随机数有严重的分布不均匀问题。
39 |
40 |
41 |
42 | 上图为一个加法同余产生器的均匀性测试,参数为 $X_0 = 197$,$X_1 = 39$,$M = 1000$,一共产生了5000个随机数。看上去觉得分布非常均匀,然而,在特殊的抽样公式
43 | $$
44 | \begin{eqnarray}
45 | X_i & = & \sqrt{U_i} \cos(2 \pi U_{i + 1}) \sin(\pi U_{i + 2}), \quad
46 | Y_i & = & \sqrt{U_i} \sin(2 \pi U_{i + 1}) \sin(\pi U_{i + 2})
47 | \end{eqnarray}
48 | $$
49 | 下,我们看到$X_i$和$Y_i$与应有的统计预测不符:
50 |
51 |
52 |
53 | 稍微复杂一点的线性同余方法也有类似的问题,比如IBM360的RANDU产生的伪随机数序列$\{U_i\}, i = 0, 1, \cdots$,它的三重分布,即$(U_{i}, U_{i + 1}, U_{i + 2})$实际上只分布在15个空间平面上:
54 | $$
55 | \begin{equation}
56 | 9x - 6y + z = k, k = -5, -4, \cdots, 8, 9.
57 | \end{equation}
58 | $$
59 | 这一现象被称为降维,它导致随机数的高维分布均匀性消失。具体推导可参见:
60 |
61 | https://en.wikipedia.org/wiki/RANDU}{https://en.wikipedia.org/wiki/RANDU
62 |
63 |
64 |
65 | 可以证明,降维现象是线性同余产生器的一个必然结果。一般地,对与线性同余产生器产生的伪随机点列构成的$s$维空间点列
66 | $$
67 | \begin{equation}
68 | P = (U_i, U_{i + 1}, \cdots, U_{i + s - 1}), i = 1, 2, \cdots
69 | \end{equation}
70 | $$
71 | 只落在个数不超过$(s!M)^{1/s}$的彼此平行的超平面上(参见:Marsaglia 1968)。我们可以用数值试验重现上述结果,参见ex4_1,ex4_2等演示程序。
72 |
73 | **非线性同余生成器**
74 |
75 | 因此如果我们需要更高质量的随机数,一个方法是进一步复杂化同余过程,并引入非线性算子。比如二次同余递推公式为:
76 | $$
77 | \begin{equation}
78 | X_i = (A X_{i - 1}^2 + B X_{i - 1} + C) \mod M.
79 | \end{equation}
80 | $$
81 | 更多的内容可自行参考Fishman 1995。
82 |
83 | 目前我们在Gnu c++,Matlab,Python等平台采用的随机数生成器比上面提到的都要复杂得多,称为梅森旋转(Mersenne Twister)产生器。它基于四位日本数学家所发表的一系列论文:
84 |
85 | + Matsumoto(松本)& Kurita(栗田)1992,1994;
86 | + Matsumoto & Nishimura(西村) 1998,2000;
87 | + Matsumoto \& Saito(斋藤)2008。
88 |
89 | 它的一个重要实例就是MT19937,能提供周期长达$2^{19937}-1$,能通过目前几乎所有的随机数检验程序,且在至多623维空间分布均匀。MT19937是基于32位字长机器运算。最新的MT随机数生成器能提供更高机器字长的版本。参见:
90 |
91 | http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
92 |
93 | 但即便如此,MT19937及其所有后续版本,也只是伪随机数。它的规律性只是隐藏的比较深而已,并不能用在国防、金融、博彩等关键性场合。在这些场景下,应该使用真随机数芯片来产生真随机数。
94 |
95 | **真随机数生成器**
96 |
97 | 真随机数产生器是一种物理装置,它依赖客观世界中的真实随机现象如基本粒子的随机热运动,量子效应等来产生随机数。这种装置能产生几乎完美的随机数,但往往产生效率不高,且装置本身较为昂贵。一种可以考虑的方法是使用真随机
98 |
99 | 数产生器生成的随机数表。比如网站:
100 |
101 | https://www.random.org
102 |
103 | 就提供这样的服务。
104 |
105 | 我们接下去主要利用随机数来进行随机模拟,在这个过程中,更重要的是随机数的均匀分布性,主要是在各阶数字特征上表现出足够的随机性即可,并不在意是否会被深层次的算法过程破解规律。同时,我们对随机数的实时产生效率要求较高,因此我们一般倾向于采用有一定质量的伪随机数。比如MT19937。这里指出,我们对伪随机数的质量并不是毫无要求。历史上曾经发生过这样的悲剧:物理学家采用IBM360体系的伪随机数进行晶体结构的随机模拟,结果由于我们之前提到过的RANDU伪随机数在三维空间实际上分布并不均匀,导致最终模拟得到的晶体出现了非自然的结构,一度对整个领域的研究造成了严重的困扰。
106 |
107 | **随机性检测**
108 |
109 | 随机数的理论检测即从随机数的产生原理出发,寻找它的缺陷。比如之前的栅格现象等。实际上这种缺陷也是在应用过程中发现,才被人们所重视,并且在设计随机数产生器时格外注意。理论检验都只针对具体的产生原理,并没有一般性。更多的,我们需要用现代统计学手段对随机数的质量进行统计分析。较为一般的检验,可以是检查随机数的频率,频次,相关性,各阶矩等等。更复杂的检验,则要精确设计统计实验,并涉及到较为复杂和专业的统计学知识。目前被大家所接受的统计学检验程序是Marsaglia给出的DieHard程序。它由一系列精心设计的复杂统计实验组成,几乎是目前检测随机数质量的标准过程。George Marsaglia教授已于2011年去世,但DieHard程序仍然有人不断更新和维护,并引入了GPL协议使得可以公开下载和免费使用。具体可参见网站:
110 |
111 | http://webhome.phy.duke.edu/\~rgb/General/dieharder.php
112 |
113 | ## 指定分布随机数生成
114 |
115 | 上一节讨论的最简单的随机数生成器其实就是均匀分布的随机数。为了能进一步模拟各种随机现象,我们需要能利用均匀分布随机数产生各种指定分布的随机数。我们这里只讨论最基本的思想方法,具体的程序在Matlab和各种软件中都是有提供的。
116 |
117 | 我们用概率分布来描述一个随机变量服从的分布规律,具体来说,离散型随机变量的概率分布称为
118 |
119 | **定义 概率质量函数(Probability Mass Function, PMF)** 若离散型随机变量$\xi$取值为$x_1, x_2, \cdots, x_n$的概率分别为$p_1,
120 | p_2, \cdots, p_n$, 即
121 | $$
122 | \begin{equation}
123 | P(\xi = x_i) = p_i, i = 1, 2, \cdots, n,
124 | \end{equation}
125 | $$
126 | 则其概率分布函数
127 | $$
128 | \begin{equation}
129 | f(x) = \left\{
130 | \begin{array}{ll}
131 | p_i, & x \in S,\\
132 | 0, & x \in \mathbb{R}\setminus S,
133 | \end{array}\right.
134 | \end{equation}
135 | $$
136 | 又称为概率质量函数,简称为PMF。其中$S = \{x_1, x_2, \cdots, x_n\}$称为样本集。显然,在离散的情形下,有
137 | $$
138 | \sum_{x_i \in S}p_i = \sum_{i = 1}^np_i = 1.
139 | $$
140 |
141 |
142 | **定义 累积分布函数(Cumulative Distribution Function, CDF)** 称
143 | $$
144 | \begin{equation}
145 | F(x) = P(\xi \leq x) = \sum_{x_i \leq x}p_i, x \in \mathbb{R}
146 | \end{equation}
147 | $$
148 | 为累积分布函数,简称为CDF。
149 |
150 | **例:两点分布** 最简单的两点分布的PMF为
151 | $$
152 | \begin{equation}
153 | f(x) = \left\{\begin{array}{ll}
154 | 0.5, &x = 0; \\
155 | 0.5, &x = 1;\\
156 | 0, &x \notin \{0, 1\}.
157 | \end{array}\right.
158 | \end{equation}
159 | $$
160 | 对应的CDF为
161 | $$
162 | \begin{equation}
163 | F(x) = \left\{\begin{array}{ll}
164 | 0, & x < 0; \\
165 | 0.5, &0 \leq x < 1; \\
166 | 1, &x = 1.
167 | \end{array}\right.
168 | \end{equation}
169 | $$
170 | 更常见的,离散型随机变量的特征会像下面那样表示。
171 |
172 | **例:二项分布** PMF一般写做
173 | $$
174 | \begin{equation}
175 | b(k; n, p) = \binom{n}{k}p^k(1 - p)^{n - k}, 0 < p < 1, k = 0, 1, \cdots, n.
176 | \end{equation}
177 | $$
178 | 我们考虑$n = 10$,$p = 0.3$的特例,我们可以根据其PMF给出对应的二项分布表\ref{table::df_bin},以及对应的图\ref{fig::DF_bin}。
179 |
180 | | 二项分布 | $n = 10 $ | $p = 0.3 $ |
181 | | ------------- | --------------------- | ---------------------- |
182 | | $k $ | 0 | 1 |
183 | | $P(\xi = k) $ | 0.028247524900000005 | 0.12106082100000018 |
184 | | $k $ | 2 | 3 |
185 | | $P(\xi = k) $ | 0.2334744405 | 0.26682793200000016 |
186 | | $k $ | 4 | 5 |
187 | | $P(\xi = k) $ | 0.20012094900000013 | 0.10291934520000007 |
188 | | $k $ | 6 | 7 |
189 | | $P(\xi = k) $ | 0.03675690899999999 | 0.009001692000000002 |
190 | | $k $ | 8 | 9 |
191 | | $P(\xi = k) $ | 0.0014467004999999982 | 0.00013778100000000015 |
192 | | $k $ | 10 | |
193 | | $P(\xi = k) $ | 5.904899999999995e-06 | |
194 |
195 | 而对应的累积分布图为:
196 |
197 |
198 |
199 | 质量分布为:
200 |
201 |
202 |
203 | 随机模拟的一个重要步骤是根据需要产生服从各种分布的样本集。之前我们已经讨论过如何产生服从$U(0, 1)$的均匀分布的随机数,那么现在,我们就要从服从$U(0, 1)$的均匀分布的随机序列出发,产生独立同分布的目标随机数序列。这里两个问题的解决是各自独立的。首先随机序列的独立性完全由均匀分布的随机序列的独立性决定,这在上一章已经讨论。我们接下去主要讨论如何确保随机序列同分布,也即和要求的目标分布一致。这里还有一个重要问题是产生效率,因为我们必须在计算机上算法实现。
204 |
205 | **直接抽样方法**
206 |
207 | 如果随机变量的PMF是已知的,那么我们可以从均匀分布的随机数出发,直接根据概率论定义构建抽样算法。这种方法称为直接抽样方法。即产生均匀分布的随机序列,然后通过某种变换或抽取,使得从中变换抽取后的随机数样本集$X$服从$F(x)$,这里$F(x)$是已知积累分布函数。也即要求$\forall \xi \sim F$,
208 | $$
209 | \begin{equation}
210 | P(\xi \leq x) = F(x), x \in \mathbb{R}.
211 | \end{equation}
212 | $$
213 | 这里,一方面,我们要从算法保证(证明)$X$确实服从指定分布$F(x)$;另一方面,对于一个实际的产生的抽样结果,也要能通过指定的统计检验。
214 |
215 | **逆变换算法**
216 |
217 | 1947年,曼哈顿计划的参与者Stanislaw Marein Ulam提出了逆变换算法,注意到随机变量$\xi$的累积分布函数
218 | $$
219 | F(x): \mathbb{R} \mapsto [0, 1]
220 | $$
221 | 是非降的,故定义其逆函数为
222 | $$
223 | \begin{equation}
224 | F^{-1}: [0, 1] \mapsto \mathbb{R}, F^{-1}(y) = \inf \{x \left| F(x)
225 | \geq y \right.\},
226 |
227 | \end{equation}
228 | $$
229 | 并指出,若随机变量$\eta$服从$[0, 1]$上的均匀分布,$F(x)$是指定分布的CDF,令$\xi = F^{-1}(\eta)$,则$\xi$服从$F(x)$。所以我们算法的设计思路就是对一个均匀分布的随机数序列$U$,求其逆变换$X
230 | = F^{-1}(U)$,则$X$的分布服从$F(x)$。
231 |
232 | **列表查找法**
233 | 对离散分布,我们可以直接给出分布表。若离散分布的PMF表为
234 | $$
235 | \begin{array}{cccc}
236 | x_0 & x_1 & \cdots & x_n \\
237 | p_0 & p_1 & \cdots & p_n,
238 | \end{array}
239 | $$
240 | 且$x_0 < x_1 < \cdots < x_n$, 则我们不难构建CDF表
241 | $$
242 | \begin{array}{cccccc}
243 | x_0 & x_1 & \cdots & x_k & \cdots & x_n \\
244 | F_0 = p_0 & F_1 = p_0 + p_1 & \cdots
245 | & F_k = \sum_{i = 0}^k p_i & \cdots & F_n \equiv 1.
246 | \end{array}
247 | $$
248 | 根据定义$\forall x \notin \{x_0, x_1, \cdots,
249 | x_n\}$,有$f(x) = 0$,故我们可以认为$F_{-1} = 0$。现在对$\eta \sim U(0, 1)$,必有$0 \leq k \leq n$,满足
250 | $$
251 | \begin{equation}
252 |
253 | F_{k - 1} < \eta \leq F_k,
254 | \end{equation}
255 | $$
256 | 则可取$\xi = x_k$。从PMF角度,就是
257 | $$
258 | \begin{equation}
259 | \xi = \min\left\{x_k\left|\eta \leq \sum_
260 |
261 | {i = 0}^kf(x_i)\right.\right\}, \eta \sim U(0, 1).
262 |
263 | \end{equation}
264 | $$
265 | 在具体的抽取算法中,这一过程就是查表。对于较长的表,可以采用二分查找。
266 |
267 | **连续分布的情形**
268 | 而对于连续型随机变量,可以看作是离散型随机变量的一种极限情形。这时可以做离散近似,或者对于一些基本分布,我们可以直接将这个极限计算出来,也就是积分,当然前提是要能够有有限形式的积分。首先我们引入
269 |
270 | **定义:概率密度函数(Probability Density Function, PDF) ** 对连续型随机变量,$\forall x \in \mathbb{R}$, 我们仍称
271 | $$
272 | \begin{equation}
273 | F(x) = P(\xi \leq x), x \in \mathbb{R}
274 |
275 | \end{equation}
276 | $$
277 | 为累计分布函数,若存在某个非负的可积函数$f(x)$,满足
278 | $$
279 | \begin{equation}
280 | F(x) = \int_{-\infty}^x f(y) dy, \forall x \in \mathbb{R},
281 |
282 | \end{equation}
283 | $$
284 | 则称$f(x)$为对应随机分布的概率密度函数,简称为PDF。此时,
285 | $$
286 | \begin{equation}
287 | f(x) = F'(x).
288 |
289 | \end{equation}
290 | $$
291 | 注意到我们之前定义的针对离散型随机变量的PMF,事实上和这里定义的PDF并无冲突,甚至可以看作是PDF的一个特例(这里要看你如何定义积分了)。关于逆变换的定义也可以完全沿用。对于连续分布的采样抽取,如果存在容易计算的逆变换解析表达式$F^{-1}(y)$,那么对于$U(0, 1)$的均匀分布的随机变量$\eta$,直接计算$F^{-1}(\eta)$即可。也就是说,
292 | $$
293 | \begin{equation}
294 | \xi = \min\left\{x \left|\eta \leq \int_{-\infty}^x f(t)
295 | dt\right.\right\} = F^{-1}(\eta), \eta \sim U(0, 1),
296 |
297 | \end{equation}
298 | $$
299 | 则$\xi \sim f(x)$。下表给出了常用分布及逆分布。
300 |
301 | | 分布 | PDF | 逆变换 |
302 | | ------------ | ------------------------------------------------------------ | --------------------------------------- |
303 | | 均匀分布 | $\frac{1}{b - a}, x \in [a, b]$ | $a + (b - a)y$ |
304 | | Rayleigh分布 | $\frac{x}{\sigma^2}e^{-\frac{x^2}{2\sigma^2}}, x > 0$ | $\sqrt{-2\sigma^2\ln y}$ |
305 | | 指数分布 | $\frac{1}{\lambda} e^{-\frac{x}{\lambda}}, \lambda > 0, x \geq 0$ | $-\lambda\ln y$ |
306 | | Weibull分布 | $\frac{a}{b^a}x^{a - 1} e^{-\left(\frac{x}{b}\right)^a},
a, b > 0, x \geq 0$ | $b\left(-\ln y\right)^{\frac{1}{a}}$ |
307 | | Beta分布 | $ax^{a - 1}, a > 0, x \in [0, 1]$ | $y^{\frac{1}{a}}$ |
308 | | Beta分布 | $b(1 - x)^{b - 1}, b > 0, x \in [0, 1]$ | $1 - y^{\frac{1}{b}}$ |
309 | | 逻辑分布 | $\frac{e^{-\frac{x - a}{b}}}{b\left[1 + e^{-\frac{x - a}{b}}\right]^2}, b > 0$ | $a + b \ln\left[\frac{y}{1 - y}\right]$ |
310 | | Cauchy分布 | $\frac{b}{\pi\left[b^2 + (x - a)^2\right]}$ | $a + \frac{b}{\tan(\pi y)}$ |
311 | | 正态分布 | $\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x - \mu)^2}{2\sigma^2}}$ | 无 |
312 | | Pareto分布 | $\frac{ab^a}{x^{a + 1}}, x \geq b > 0, a > 0$ | $\frac{b}{(1 - y)^{\frac{1}{a}}}$ |
313 |
314 | 从表上我们就发现并不是每一个能写出表达式的逆变换在计算上都是高效率的,而有的甚至根本没有解析形式。比如最重要的正态分布我们就没有解析的逆变换形式。不过Hastings 1955(这是一本神奇的书,给出了各种难以计算公式的有理逼近估计)给出了一个有理逼近形式:
315 | $$
316 | \begin{equation}
317 | F^{-1}(y) = \mu
318 |
319 | + \mathrm{sign}(y - \frac{1}{2})\sigma\left(t
320 |
321 | - \frac{c_0 + c_1 t + c_2 t^2}{1 + d_1 t + d_2 t^2 + d_3 t^3}\right),
322 | \end{equation}
323 | $$
324 | 其中
325 | $$
326 | t = \sqrt{-\ln\left[\min(y, 1 - y)\right]^2},
327 | $$
328 | 各参数值为
329 | $$
330 | \begin{array}{c}
331 | c_0 = 2.515517, c_1 = 0.802853, c_2 = 0.010328,\\
332 | d_1 = 1.432788, d_2 = 0.189269, d_3 = 0.001308.
333 | \end{array}
334 | $$
335 | 此公式绝对误差小于$0.45 \times 10^-3$。
336 |
337 | ## 随机梯度下降(Stochastic Gradient Descent)
338 |
339 | 这个弯转的有点大。我们讨论这么多随机性有什么用处呢?这里我不打算引入太多传统的Monte Carlo方法,而是回到一个经典的优化模型算法,梯度下降法。这个方法是我们这学期的重点之一,大家应该很熟悉了。对无约束优化问题
340 | $$
341 | \min f(x), \quad x \in \mathbb{R}^n,
342 | $$
343 | 的当前迭代值$x_k$,我们下一步的前进方向设置为
344 | $$
345 | p_k = -\nabla f(x_k),
346 | $$
347 | 因为这个是一阶局部信息指明的最速下降方向。在我们学习的所有方法中,这几乎是代价最小的一个方法,但是随着问题规模的提升,以及非线性的加强,即便是这个最简单的一阶方法,也可能会有“太昂贵”的时候。
348 |
349 | 我们通过一个最小二乘拟合来举例。已知海量二维数据$(x_i, y_i)$,$i = 1, 2, \cdots, m$。而我们希望寻找
350 | $$
351 | y = f(x) = \sum_{j = 1}^nw_j\phi_j(x),
352 | $$
353 | 其中$w_j \in \mathbb{R}$是待定系数,而$\phi_j(x): \mathbb{R} \to \mathbb{R}$是一组基底函数,$j = 1, 2, \cdots, n$。一般地,$m >> n$。这也是我们本学期的一个学习重点,对这个问题的求解,本质上就是求
354 | $$
355 | \min_{w_1, w_2, \cdots, w_n} R:=\|y - \tilde{y}\|_2^2,
356 | $$
357 | 其中$\tilde{y} = (y_1, y_2, \cdots, y_m)^T$是实际数据,$y =\left(f(x_1), f(x_2), \cdots, f(x_m)\right)^T$是模型输出。或者等价地,
358 | $$
359 | \min_{w} \frac{1}{2}\sum_{i = 1}^m\left[\sum_{j = 1}^n w_j \phi_j(x) - y_j\right]^2,
360 | $$
361 | 其中$w = (w_1, w_2, \cdots, w_n)^T$。对这个问题,我们详细讨论过它的求解方法,对于$m$超大的情形,二阶方法代价无法承受时,我们也可以采用梯度下降法来求解:
362 | $$
363 | \left\{
364 | \begin{array}{l}
365 | \displaystyle \nabla R_k = \left(\frac{\partial R}{\partial w_j}\right)^T = \left.\left(\sum_{i = 1}^m \left[\sum_{j = 1}^n w_j \phi_j(x_i) - y_i\right]\cdot\phi_j(x_i)\right)^T \right|_{w = w_k},\\
366 | w_{k+1} = w_k - \alpha \nabla R_k.
367 | \end{array}
368 | \right.
369 | $$
370 | 这个方法在机器学习等领域,被称为批量梯度下降法(Batch Gradient Descent, BGD)。它的实际效果不错,但问题是它的每一步迭代,都需要用到全部的拟合数据$(x_i, y_i)$,$i = 1, 2, \cdots, m$。在机器学习的实际问题中,共同点是:
371 |
372 | 1. 海量数据;
373 | 2. $w$是超高维向量;
374 | 3. $y_i$不准确,混杂了各种噪声数据,很难清洗。
375 |
376 | BGD方法,每次不但代价巨大,而且不加区别地接受了全部数据的信息,包括噪声数据,总之,吃力不讨好。
377 |
378 | **例** 构建测试数据:
379 | $$
380 | y_i = x_i^2 + \xi,
381 | $$
382 | 其中$\xi \sim N(0, 0.1)$模拟噪声,$x_i \sim U(0, 10)$随机生成。用于回归的基底为:
383 | $$
384 | f(x) = w_1 + w_2x + w_3x^2.
385 | $$
386 | (你可以将这个模型看作是
387 | $$
388 | f(x) = \sum_{j = 1}^n w_j \phi_j(x) + b
389 | $$
390 | 的形式,这里$b$是一个常数,通常称为置偏(bias)。)
391 |
392 | 我们这里继续用最小二乘误差来做拟合:
393 | $$
394 | R(x_i)=\|f(x_i) - y_i\|_2^2, i = 1, 2, \cdots, m,
395 | $$
396 | 这个函数有时又被称为损失函数(loss function),当然这只是一种形式。用BGD来最小化这个残量,我们可以采用这样一种具体的迭代格式以确保稳定性:
397 | $$
398 | \left\{
399 | \begin{array}{l}
400 | w_{k + 1} = w_k + \eta p_k,\\
401 | \displaystyle p_k = -\frac{\nabla R_k}{\|\nabla R_k\|_2},\\
402 | \displaystyle \nabla R_k = \left.\frac{\partial R}{\partial w}\right|_{w = w_k}.
403 | \end{array}
404 | \right.
405 | $$
406 | 这里$\eta$有时被称为“学习率”。一般$\eta$是一个小量($10^{-2}\sim 10^{-4}$之类)。我们可以在数值模拟过程中进一步观察。我们可以看到,即便在这样的简单问题中,计算代价已经比较显著,更严重的是,我们观察到随着迭代接近最优解,收敛速度会越来越慢,这是因为全局噪声数据的比重会随着接近真解而越来越高。
407 |
408 | 有没有办法同时解决以上两个问题?这似乎是违背我们之前的“No free lunch”原则的。因为我们实际上要求减小计算代价的同时,提高计算精度,还要提升收敛效率。除非,我们能够发展出新的理论依据。
409 |
410 | **随机梯度下降法(Stochastic GD, SGD)**
411 |
412 | 我们首先放弃每一次更新$w_k$都计算每一对$(x_i, y_i)$数据,而是对每一对$(x_i, y_i)$数据,都对$w_k$做一个更新。这里$i = 1, 2, \cdots, m$。也即
413 | $$
414 | \left\{
415 | \begin{array}{l}
416 | \displaystyle\nabla R_k^{(i)} = \left.\left[\sum_{j = 1}^n w_j \phi_j(x_i) - y_i\right]\phi_j(x_i)\right|_{w = w_k}, j = 1, 2, \cdots, n; i = 1, 2, \cdots, m.\\
417 | w_{k + 1}^{(i)} = w_k^{(i)} - \alpha \nabla R_k^{(i)}.
418 | \end{array}
419 | \right.
420 | $$
421 | 也就是当我们完整读完一次全部数据,我们实际上已经对$w_k$改进了$m$次,尽管每一次都只在一个分量上做了修改。这种做法本质上就是我们之前简要提及的坐标交替法。在低维问题时,这个方法不如最速下降法,然而在高维例子下,我们看到,尽管它不能保证残量单调,但它的实际收敛效率远高于BGD,甚至收敛精度也有所提高,因为它不会在每一步都引入全部的噪声。
422 |
423 | 在这个方法的启示下,我们进一步提出,每一次改进的分量方向,都做一个随机采样,也即在总共$m$个样本中,每次随机抽取其中$m_s$个样本,拿来做梯度下降。这里$m_s << m$是一个小量。也即
424 | $$
425 | \left\{
426 | \begin{array}{l}
427 | \displaystyle\nabla R_k = \left(\frac{\partial R}{\partial w_j}\right)^T = \left.\left(\sum_{i = 1}^{m_s}\left[\sum_{j = 1}^n w_j \phi_j(x_i) - y_i\right]\phi_j(x_i)\right)^T\right|_{w = w_k}, \\
428 | w_{k + 1} = w_k - \alpha \nabla R_k.
429 | \end{array}
430 | \right.
431 | $$
432 | 这就是Bottou 1998提出的随机梯度下降法的主要思想。从理论上看,这个方法在超高维数和海量数据时,仍然能在概率空间搜索的意义上保持梯度下降的一阶最优性和收敛性,是一个非常理想的方法。而且类似的思想还可以很容易地向更高阶(的概率空间)推广。
433 |
434 |
--------------------------------------------------------------------------------
/lecture_notes/Constraint_Optimization.md:
--------------------------------------------------------------------------------
1 | # 约束优化问题
2 |
3 | 我们先快速回顾一下约束优化的基本问题形式。其一般形式为:
4 | $$
5 | \begin{equation}
6 | \begin{array}{rl}
7 | \displaystyle\min_{x \in \mathbb{R}^n} & f(x), \\
8 | \mbox{s.t.} &\left\{\begin{array}{ll}c_i(x) = 0, & i \in \mathcal{E},\\
9 | c_i(x) \geq 0, &i \in \mathcal{I}.\end{array}\right.
10 | \end{array}
11 | \tag{12.1}
12 | \end{equation}
13 | $$
14 | 这里$f$和$c_i$都是定义在$\mathbb{R}^n$上的实值、光滑函数。而$\mathcal{I}$和$\mathcal{E}$是下标的有限集(默认为自然数的子集)。这里$f$仍然称为目标函数,$c_i \in \mathcal{E}$称为等值约束(equality constrains),而$c_i \in \mathcal{I}$称为不等值约束(inequality constrains)。满足所有约束条件的点集全体称为可行域(feasible set),用
15 | $$
16 | \begin{equation}
17 | \Omega = \left\{ x \left| c_i(x) = 0, i \in \mathcal{E}; c_i(x) \geq 0, i \in \mathcal{I}\right.\right\}
18 | \tag{12.2}
19 | \end{equation}
20 | $$
21 | 表示。这里指出一下不等值约束都是大于等于零只是一种约定,局限于本书。任何具体的文献或软件,均可以有自己的约定,在阅读或使用前应刚先搞清楚。
22 |
23 | 于是,问题(12.1)也可以写成紧凑形式:
24 | $$
25 | \begin{equation}
26 | \min_{x \in \Omega} f(x).
27 | \tag{12.3}
28 | \end{equation}
29 | $$
30 |
31 | 接下去我们重新讨论一下问题(12.3)的解的必要条件和充分条件,特别是约束在其中起的作用。
32 |
33 | **局部和全局解**
34 |
35 | 我们直接引入例子使得讨论更加直观:
36 | $$
37 | \min_{x \in \mathbb{R}^n} \|x\|_2^2, \quad \mbox{s. t.}~ \|x\|^2_2 \geq 1.
38 | $$
39 | 若不考虑约束,显然问题有全局最优解$x = 0$。而当加了约束之后,所有$\|x\|_2^2 = 1$的点都是问题的全局最优解。当$n \geq 2$时,这样的解有无穷多个。
40 |
41 | (草图)
42 |
43 | 再一个例子,
44 | $$
45 | \begin{equation}
46 | \min (x_2 + 100)^2 + 0.01 x_1^2, \quad \mbox{s. t.} ~x_2 - \cos x_1 \geq 0.
47 | \tag{12.4}
48 | \end{equation}
49 | $$
50 | 如果不考虑约束,显然(12.4)有唯一的全局最小值点$(0, -100)^T$,考虑约束之后,在
51 | $$
52 | x^{(k)} = (k \pi, -1)^T, k = \pm1, \pm3, \cdots
53 | $$
54 | 附近有无穷多个局部最小值点。
55 |
56 | (草图)
57 |
58 | 因此我们有必要重新严格定义在带约束条件下,局部解和全局解的定义。
59 |
60 | **定义** 向量$x^*$称为(12.3)的一个局部最优解,若$x^* \in \Omega$,且存在$x^*$的邻域$\mathcal{N}$,满足当$x \in \mathcal{N} \cap \Omega $时,有$f(x) \geq f(x^*)$。
61 |
62 | **定义** 向量$x^*$称为(12.3)的一个严格局部最优解,若$x^* \in \Omega$,且存在$x^*$的邻域$\mathcal{N}$,满足当$x \in \mathcal{N}\cap\Omega, x \neq x^*$时,有$f(x) > f(x^*)$。
63 |
64 | **定义** 向量$x^*$称为(12.3)的一个孤立局部最优解,若$x^* \in \Omega$,且存在$x^*$的邻域$\mathcal{N}$,使$x^*$是$\mathcal{N}\cap\Omega$中$f$唯一的局部最优解。
65 |
66 | (草图:解的类型判定。)
67 |
68 | **光滑性**
69 |
70 | 现在光滑性不但指目标函数,也包括约束函数$c_i(x)$。直观上,即可行域$\Omega$的边界是光滑的,还是包含了尖点和跳跃。这里指的注意的是,即便全部约束函数$c_i(x)$都是光滑的,也不表示可行域$\Omega$一定有光滑的边界。例如:
71 |
72 | 区域
73 | $$
74 | \begin{equation}
75 | \|x\|_1 = |x_1| + |x_2| \leq 1
76 | \tag{12.5}
77 | \end{equation}
78 | $$
79 | 等价于下述约束函数构成的可行域:
80 | $$
81 | \begin{equation}
82 | \left\{\begin{array}{rcl}
83 | x_1 + x_2 &\leq& 1, \\
84 | x_1 - x_2 &\leq& 1, \\
85 | -x_1 + x_2 &\leq& 1, \\
86 | -x_1 - x_2 &\leq& 1.
87 | \end{array}
88 | \right.
89 | \tag{12.6}
90 | \end{equation}
91 | $$
92 | (草图)
93 |
94 | 显然,以上约束函数每一个都是光滑的,但是它们构成的可行域实际是一个菱形。另一方面,不光滑的无约束优化问题,有时可以转为等价的光滑约束问题。例如:
95 | $$
96 | \begin{equation}
97 | \min f(x) = \max(x^2, x),
98 | \tag{12.7}
99 | \end{equation}
100 | $$
101 | 它的目标函数有两个尖点,位置在$x = 0$和$x = 1$,而$x^* = 0$是全局最优解。等价地,可将其转为光滑的约束优化问题:
102 | $$
103 | \begin{equation}
104 | \begin{array}{ll}
105 | \min & t, \\
106 | \mbox{s. t.}&t\geq x,~t\geq x^2.
107 | \end{array}
108 | \tag{12.8}
109 | \end{equation}
110 | $$
111 |
112 | ## 例子
113 |
114 | 接下去我们通过三个例子来建立对约束优化中的一系列基本概念的直观解释。
115 |
116 | **例 12.1:**含一个等值约束的二维问题。
117 | $$
118 | \begin{equation}
119 | \left\{
120 | \begin{array}{ll}
121 | \min & x_1 + x_2, \\
122 | \mbox{s. t.} & x_1^2 + x_2^2 - 2 = 0.
123 | \end{array}
124 | \tag{12.9}
125 | \right.
126 | \end{equation}
127 | $$
128 | 按之前约定,这里$f(x) = x_1 + x_2$,$\mathcal{I} = \phi$,$\mathcal{E} = \{1\}$,$c_1(x) = x_1^2 + x_2^2 -2$。因此它的可行域是一个圆(就是圆,没有内部),半径是$\sqrt{2}$,圆心是原点。从等高线$f(x) = x_1 + x_2 = c$可以看出,
129 |
130 | (草图)
131 |
132 | 全局最优解为$(-1, -1)^T$。在草图中观察,我们不难发现,$x^*$的一个性质是$\nabla c_1$和$\nabla f$平行,但方向相反,这一点是特例么?我们在$c_1$上取任何非$x^*$的点,让$x$保持在可行域内部的线性方向都有两个,一个顺时针,一个逆时针。这两个方向中,总有一个是和$-\nabla f$成锐角的,也即是$f$的下降方向。直至到达$x^*$点,$\nabla c_1$和$f$平行,这时沿$c_1$的任何移动方向,都和$\nabla f$成直角,也即$f$不会下降。所以总结起来,$x^*$真正满足的条件是:$x^*$的任何保持在可行域内部的方向,都不是$f$的下降方向。这个直观是很容易接受的,现在我们通过分析的手段将它严格化。
133 |
134 | 从$\forall x \in \Omega = \{x : c_1(x) = 0\}$出发的方向,保持$x$停留在$\Omega$内部的方向$d$(简称为“可行方向”或“$x$点的可行方向”)必须满足
135 | $$
136 | c_1(x + d) = 0,
137 | $$
138 | 由Taylor展开(并带入$c_1(x) = 0$),有
139 | $$
140 | \begin{equation}
141 | 0 = c_1(x + d) \approx c_1(x) + \nabla c_1(x)^Td = \nabla c_1(x)^Td.
142 | \tag{12.11}
143 | \end{equation}
144 | $$
145 | 或者说,如果限制在一阶近似条件下,有
146 | $$
147 | \begin{equation}
148 | \nabla c_1(x)^Td = 0.
149 | \tag{12.12}
150 | \end{equation}
151 | $$
152 |
153 |
154 | 另一方面,若$x$不是$f$的局部最小值点,则从$x$出发,**在可行域内部**必有$f$的下降方向,同样在Taylor展开下,有
155 | $$
156 | \begin{equation}
157 | 0 > f(x + d) - f(x) \approx \nabla f(x)^Td \Rightarrow \nabla f(x)^Td < 0.
158 | \tag{12.13}
159 | \end{equation}
160 | $$
161 | 于是,只要(12.12)和(12.13)能同时成立,那么我们就可以找到一个从$x$出发的方向$d$,沿此方向:
162 |
163 | + $x + d$停留在$\Omega$内部;
164 | + $f(x)$继续下降。
165 |
166 | 换言之,若$x$是问题的解,则上述两点一定不能**同时**成立。这里我们事实上已经给出了问题(12.9)的一阶必要条件:若$x^*$是(12.9)的解,则从$x^*$出发的任何方向$d$,不会同时满足(12.12)和(12.13)。由于在$x$点,$f$的下降方向覆盖一个半平面(不含边界),而可行方向总是相对出现($d$可行,则$-d$必可行),
167 |
168 | (草图)
169 |
170 | 因此惟有$\nabla c_1(x)$和$\nabla f(x)$平行才不会出现“既可行,又下降”的方向。此时,根据平行定义,有
171 | $$
172 | \begin{equation}
173 | \nabla f(x) = \lambda \nabla c_1(x), \lambda \in \mathbb{R}.
174 | \tag{12.10}
175 | \end{equation}
176 | $$
177 | 为方便计算,引入Lagrange乘子函数
178 | $$
179 | \begin{equation}
180 | L(x, \lambda) = f(x) - \lambda_1 c_1(x),
181 | \tag{12.16}
182 | \end{equation}
183 | $$
184 | 则(12.10)也可等价地表示为
185 | $$
186 | \begin{equation}
187 | \nabla_xL(x, \lambda_1) = \nabla f(x) - \lambda_1\cdot\nabla c_1(x) = 0.
188 | \tag{12.17}
189 | \end{equation}
190 | $$
191 | 于是(12.9)的解的必要条件现在可以表示为:在解$x^*$,存在$\lambda_1^* \in \mathbb{R}$,使
192 | $$
193 | \nabla_x L(x^*, \lambda_1^*) = 0
194 | $$
195 | 成立。这里$\lambda_1$称为约束$c_1(x) = 0$对应的Lagrange乘子(multiplier)。
196 |
197 | 显然,再次强调这个条件是非充分的,比如(12.9)还有一个可行点$(1, 1)^T$满足这个条件,但它是极大值点。此外,$\lambda^*$的符号并不能说明对应$x^*$点的极值性质,因为这个符号实际上反映了我们记录$c_1(x)$的一种人为约定,比如
198 | $$
199 | c_1(x) = x_1^2 + x_2^2 - 2 = 0
200 | $$
201 | 可以等价写为
202 | $$
203 | c_1(x) = 2 - x_1^2 - x_2^2 = 0,
204 | $$
205 | 从而将$x^* = (-1, -1)^T$处的$\lambda_1^*$值从$-\frac12$变为$\frac12$。
206 |
207 | **例 12.2:** 只有一个不等值约束的优化。
208 | $$
209 | \begin{equation}
210 | \left\{
211 | \begin{array}{ll}
212 | \min & x_1 + x_2\\
213 | \mbox{s. t.} & 2 - x_1^2 - x_2^2 \geq 0,
214 | \end{array}\right.
215 | \tag{12.18}
216 | \end{equation}
217 | $$
218 | 和上一个例子不同,现在可行域变为圆的内部和边界。对应Lagrange函数,$\lambda_1^*$还是$\frac12$,最优解还是$(-1, -1)^T$,但此时,$\lambda_1^*$的符号是重要的。(注意此时$c_1(x)$也不可随意变号,因为符号现在对应的是圆的内部和外部。)
219 |
220 | 回到分析手段,$\forall x \in \Omega$,现在确保$x + d$停留在可行域的前进方向在一阶Taylor展开中的表现为
221 | $$
222 | 0 \leq c_1(x + d) \approx c_1(x) + \nabla c_1(x)^Td,
223 | $$
224 | 现在无法消去第一项,完整的一阶可行方向条件是
225 | $$
226 | \begin{equation}
227 | c_1(x) + \nabla c_1(x)^Td \geq 0.
228 | \tag{12.19}
229 | \end{equation}
230 | $$
231 | 而使$f$的下降方向的条件仍然是(12.13)。现在我们参照上一个例子的思路,来考虑同时满足(12.13)和(12.19)的$d$都有哪些情况。
232 |
233 | **情况 I:**$x$严格在$\Omega$内部,也即有$c_1(x) > 0$。此时,从$x$出发的任何方向$d$都满足(12.19)。因此,如果有$x^*$使得从$x^*$出发的任何方向都不同时满足(12.13)和(12.19),那么剩下的唯一可能就是
234 | $$
235 | \begin{equation}
236 | \nabla f(x^*) = 0.
237 | \end{equation}
238 | $$
239 | 也就是$x^*$事实上就是对应无约束问题下$f$的稳定点。这也是自然的,因为这种情况下,(12.19)在一阶方向的选择上,根本没有起到任何约束作用。
240 |
241 | (草图)
242 |
243 | **情况 II:** 当$x$落在$\Omega$边界上,也就是$c_1(x) = 0$时。此时,我们发现(12.19)的第一项又可以消去了,因此从$x$出发的方向$d$,存在继续优化的前提变为
244 | $$
245 | \nabla f(x)^Td < 0, \nabla c_1(x)^Td \geq 0.
246 | $$
247 | 这里的第一个不等式限定了一个半平面(不含边界),第二个不等式限定了另一个半平面(含边界)。要使这两个半平面相交为空,惟有$\nabla f(x)$和$\nabla c_1(x)$是同一个方向(比平行更严格),也即
248 | $$
249 | \begin{equation}
250 | \nabla f(x) = \lambda_1 \nabla c_1(x), \lambda_1 \geq 0.
251 | \tag{12.21}
252 | \end{equation}
253 | $$
254 | (草图)
255 |
256 | 而情况I和II可以用Lagrange函数的形式统一地表示为:当$x^*$没有可行的一阶下降方向时,存在$\lambda_1^*$,满足
257 | $$
258 | \begin{equation}
259 | \nabla_x L(x^*, \lambda_1^*) = 0, \lambda_1^* \geq 0,
260 | \tag{12.22}
261 | \end{equation}
262 | $$
263 | 并且,必须有
264 | $$
265 | \begin{equation}
266 | \lambda_1^*c_1(x^*) = 0
267 | \tag{12.23}
268 | \end{equation}
269 | $$
270 | 成立。这个条件被称为互补性条件,它要求$\lambda_1^*$和$c_1(x^*)$至少有一个为零。前者实际对应情况I,后者对应情况II。注意情况I和情况II也有可能同时成立,也即$\lambda_1^*$和$c_1(x^*)$同时为零。这种情况要个别再讨论。
271 |
272 | (草图)
273 |
274 | 这里我们注意到,如果对于一个可行点$x$,如果对应的不等值约束$c(x) \neq 0$,那么实际上这个约束对$x$是无效的。也就是只有正好处于其边界的约束,对一个点是否是最优值点的判定才会有意义。基于这一事实,我们提出了
275 |
276 | **定义 12.1.** 下标集合$\mathcal{A}(x)$称为点$x$的活跃集(active set,也有翻作“积极集”),它由全部等值约束的下标和在$x$点满足$c_i(x) = 0$的不等值约束的下标组成。即
277 | $$
278 | \mathcal{A}(x) = \mathcal{E}\cup\left\{i \in \mathcal{I}\left|c_i(x) = 0\right.\right\}.
279 | $$
280 | 对于任何一个可行点$x$,一个不等值约束$c_i$,$i \in \mathcal{I}$称为活跃的,如果它的下标$i \in \mathcal{A}(x)$,也就是在$x$点,约束$c_i(x) = 0$;称它为不活跃的,如果$c_i(x) > 0$。
281 |
282 | **例 12.3:**两个不等值约束。
283 | $$
284 | \begin{equation}
285 | \left\{
286 | \begin{array}{ll}
287 | \min & x_1 + x_2\\
288 | \mbox{s. t.} & 2 - x_1^2 -x_2^2 \geq 0\\
289 | & x_2 \geq 0.
290 | \end{array}
291 | \right. \tag{12.24}
292 | \end{equation}
293 | $$
294 | (草图)
295 |
296 | 显然最优解现在是$(-\sqrt{2}, 0)^T$。我们注意到在这一点,两个约束都是活跃的。对于这样两个约束都活跃的点(我们这里先无视由于维数的原因实际上这样的点只有两个)$x$,如果它不是一个最优值点(意味着从它出发还有进一步可以下降的方向$d$,这个逻辑我们重复使用到现在了),那么必然有方向$d$满足
297 | $$
298 | \begin{equation}
299 | \nabla c_i(x)^Td\geq 0, i \in \left\{1, 2\right\}, \nabla f(x)^Td < 0.
300 | \tag{12.25}
301 | \end{equation}
302 | $$
303 | 比如从最优解$x^* = (-\sqrt{2}, 0)^T$出发就不存在这样的方向。因为满足条件的方向必须在$\nabla c_1(x^*)$和$\nabla c_2(x^*)$的夹角内,但是在此范围内,$\nabla f(x^*)^Td > 0$,也即只有严格上升方向。
304 |
305 | (草图)
306 |
307 | 我们仍然将这一结论统一到Lagrange函数的框架下。定义Lagrange乘子函数
308 | $$
309 | L(x, \lambda) = f(x) - \lambda_1 c_1(x) - \lambda_2 c_2(x),
310 | $$
311 | 这里$\lambda = (\lambda_1, \lambda_2)^T$是Lagrange乘子。于是$\nabla f(x)$和$c_i(x)$,$i \in \mathcal{I}$的关系可以表达为:存在$\lambda^* \geq 0$(表示每一个分量都大于等于零),使得:
312 | $$
313 | \begin{equation}
314 | \nabla_x L(x^*, \lambda^*) = 0,
315 | \tag{12.26}
316 | \end{equation}
317 | $$
318 | 并且满足互补性条件
319 | $$
320 | \begin{equation}
321 | \lambda_1^* c_1(x^*) = 0, \quad\lambda_2^* c_2(x^*) = 0.
322 | \tag{12.27}
323 | \end{equation}
324 | $$
325 | 这里我们看到互补性条件其实表达了这么一种意思:一个约束要么是活跃的($c_i(x) = 0$),因此会在(12.26)中参与形成和$\nabla f(x)$的线性关系;要么是不活跃的,此时它在(12.26)中实际上是不存在的($\lambda_i = 0$)。
326 |
327 | 我们下面具体地形式检查一下$x^* = (-\sqrt{2}, 0)^T$,有
328 | $$
329 | \nabla f(x^*) = \left[\begin{array}{c}1\\1\end{array}\right], \quad \nabla c_1(x^*) = \left[\begin{array}{c}-2 x_1^*\\-2 x_2^*\end{array}\right] = \left[\begin{array}{c}2\sqrt{2}\\0\end{array}\right], \quad\nabla c_2(x^*) = \left[\begin{array}{c}0\\1\end{array}\right],
330 | $$
331 | 代入
332 | $$
333 | \begin{eqnarray}
334 | \nabla_xL(x^*, \lambda^*) &=& \nabla f(x^*) - \lambda_1^* \nabla c_1(x^*) - \lambda_2^*\nabla c_2(x^*) \\
335 | &=& \left[\begin{array}{c}1\\1\end{array}\right] - \left[\begin{array}{c}2\sqrt{2} \lambda_1^*\\0\end{array}\right] - \left[\begin{array}{c}0\\\lambda_2^*\end{array}\right] = \left[\begin{array}{c}0\\0\end{array}\right],
336 | \end{eqnarray}
337 | $$
338 | 解得:
339 | $$
340 | \left\{
341 | \begin{array}{rcl}
342 | \lambda_1^* &=& \displaystyle \frac1{2\sqrt{2}},\\
343 | \lambda_2^* &=& 1,
344 | \end{array}
345 | \right.
346 | $$
347 | 故$\lambda^* \geq 0$,且由于$c_1(x)$和$c_2(x)$在$x^*$点均活跃,故
348 | $$
349 | \lambda_1^* c_1(x^*) = \lambda_2^* c_2(x^*) = 0,
350 | $$
351 | 即互补性条件成立。
352 |
353 | 再观察一下另一个两个约束都活跃的点$x = (\sqrt{2}, 0)^T$。此时
354 | $$
355 | \nabla f(x^*) = \left[\begin{array}{c}1\\1\end{array}\right], \quad \nabla c_1(x^*) = \left[\begin{array}{c}-2\sqrt{2}\\0\end{array}\right], \quad\nabla c_2(x^*) = \left[\begin{array}{c}0\\1\end{array}\right],
356 | $$
357 | 于是
358 | $$
359 | \nabla_x L(x, \lambda) = \left[\begin{array}{c}1\\1\end{array}\right] - \left[\begin{array}{c}\lambda_1\cdot(-2\sqrt{2})\\0\end{array}\right] - \left[\begin{array}{c}0\\\lambda_2\end{array}\right] = \left[\begin{array}c0\\0\end{array}\right] \Rightarrow \left\{\begin{array}{rcl}\lambda_1 &=& -\frac{1}{2\sqrt{2}},\\\lambda_2 &=& 0.\end{array}\right.
360 | $$
361 | 不满足条件(12.26)。
362 |
363 | 而点$x = (1, 0)^T$,则只有$c_2(x)$在该点活跃,也即$c_1(x) > 0$,因此由互补性条件,必有$\lambda_1 = 0$。于是我们只需验证
364 | $$
365 | \nabla f(x) - \lambda_2 \nabla c_2(x) = 0 \Rightarrow \left[\begin{array}{c}1 \\1\end{array}\right] - \left[\begin{array}{c}0 \\ \lambda_2\end{array}\right] = 0.
366 | $$
367 | 这个等式显然不可能被满足。
368 |
369 | ## 一阶优化条件
370 |
371 | 现在我们将上述例子带来的结论推广到一般形式。我们注意到,对于$x^*$是问题最优解的一阶必要性条件,需要包含两个部分:
372 |
373 | 1. 存在$\lambda^*$使得$\nabla_x L(x^*, \lambda^*) = 0$,其中$\lambda_i^* \geq 0$,对$i \in \mathcal{I}$;
374 | 2. 互补性条件:$\lambda_i^* c_i(x^*) = 0$,$i \in \mathcal{I}$。
375 |
376 | 为得到更加严格的结果,我们先给出Lagrange函数的一般形式:
377 | $$
378 | \begin{equation}
379 | L(x, \lambda) = f(x) - \sum_{i \in \mathcal{E}\cup\mathcal{I}} \lambda_i c_i(x).
380 | \tag{12.33}
381 | \end{equation}
382 | $$
383 | 可行点$x$的活跃集$\mathcal{A}(x)$的定义为全部等值约束的下标和全部在$x$点等号成立的不等值约束的下标:
384 | $$
385 | \mathcal{A}(x) = \mathcal{E} \cup \left\{i \in \mathcal{I} \left| c_i(x) = 0\right.\right\}.
386 | $$
387 |
388 | 而全部活跃的$\nabla c_i(x^*)$的实际起的作用是构成$\nabla_x f(x^*)$的一个线性表出关系:
389 | $$
390 | \nabla f(x^*) = \sum_{i \in \mathcal{A}(x^*)} \lambda_i^* \nabla c_i(x^*),
391 | $$
392 | 其中$\lambda_i^*$实际就是表出系数,那么问题就来了,这样的$\nabla c_i(x^*)$都是线性无关的么?这里值得注意的一个关键问题是,$\nabla c_i(x)$其实有很多等价的解析表达形式,而$\nabla c_i(x^*)$的线性无关性和具体的表达形式都是相关的。例如,在(12.9)中,做如下替换
393 | $$
394 | c_1(x) = (x_1^2 + x_2^2 - 2)^2 = 0 \Leftrightarrow c_1(x) = x_1^2 + x_2^2 - 2 =0,
395 | $$
396 | 从几何上看,完全一致,但是注意,对左边的约束,总有$\nabla c_1(x) = 0$,直接导致形式上
397 | $$
398 | \nabla f(x) = \lambda_1 \nabla c_1(x)
399 | $$
400 | 结构从表达约束的角度失去作用。这里由于特殊的代数表达形式,$\nabla c_1(x)$发生了退化(从一个向量角度说,退化就是失去线性无关性)。这提示我们,事实上,对$c_i(x)$的解析表达式的写法是有要求的。必须提出一种“正确的写法”,或者称为“规范”(qulification)。具体的规范有很多,下面是一种简单而常用的规范:
401 |
402 | **定义 12.4 (LICQ)** 对$x^*$以及由上述定义12.1定义的$\mathcal{A}(x^*)$,称满足线性无关约束条件(linear independence constraint qualification, LICQ),若其活跃的约束的梯度集合
403 | $$
404 | \left\{\nabla c_i(x^*), i \in \mathcal{A}(x^*)\right\}
405 | $$
406 | 是线性无关组。
407 |
408 | 在此基础上,我们终于能完整地提出约束优化问题的一阶必要条件。
409 |
410 | **定理 12.1** 假设$x^*$是(12.1)的局部最优解,且在$x^*$满足LICQ,则存在Lagrange乘子$\lambda^*$,其中$\lambda_i^*, i \in \mathcal{E}\cup\mathcal{I}$在$(x^*, \lambda^*)$满足:
411 | $$
412 | \begin{eqnarray}
413 | \nabla_x L(x^*, \lambda^*) &=& 0, \tag{12.34a}\\
414 | c_i(x^*) &=& 0, \quad \forall i \in \mathcal{E}, \tag{12.34b}\\
415 | c_i(x^*) &\geq& 0, \quad\forall i \in \mathcal{I}, \tag{12.34c}\\
416 | \lambda_i^* &\geq& 0, \quad \forall i \in \mathcal{I}, \tag{12.34d}\\
417 | \lambda_i^*\cdot c_i(x^*) &=& 0, \quad \forall i \in \mathcal{E} \cup\mathcal{I}. \tag{12.34e}
418 | \end{eqnarray}
419 | $$
420 | 条件(12.34)称为Karush-Kuhn-Tucker条件,即KKT条件。由互补性条件(12.34e)知,当$i \notin \mathcal{A}(x^*)$时,相应的$\lambda_i^*$必为零,因此我们可以把(12.34a)改写为
421 | $$
422 | \begin{equation}
423 | 0 = \nabla_xL(x^*, \lambda^*) = \nabla f(x^*) - \sum_{i \in \mathcal{A}(x^*)} \lambda_i^*\nabla c_i(x^*). \tag{12.35}
424 | \end{equation}
425 | $$
426 | 上式直观地表达了在$x^*$点,要么$\nabla f(x^*) = 0$,要么全部从$x^*$出发的可行方向(在$\nabla c_i(x^*)$交集构成的“锥体”内),没有$f$的下降方向。
427 |
428 | 这里(12.34e)其实留下了一个漏洞,即若$\lambda_i$和$c_i(x^*)$都等于零,会发生上述哪一种情况?这种情况其实需要进一步分析。不过我们这里先用一种简单粗暴的方式排斥这种例外。
429 |
430 | **定义 12.5 严格互补(strict complementarity)** 对(12.1)的局部解$x^*$和满足(12.34)的向量$x^*$,我们称严格互补条件成立,若对每一个$i \in \mathcal{I}$,$\lambda^*$和$c_i(x^*)$始终有且仅有一个为零。或者等价地,$\lambda_i^* > 0$对全部$i \in \mathcal{I} \cap \mathcal{A}(x^*)$成立。
431 |
432 | 一般地,对给定的问题(12.1),和解$x^*$,可能有多个向量$\lambda^*$满足(12.34),但当LICQ成立时,$\lambda^*$是唯一的。这一点由
433 | $$
434 | \nabla f(x^*) = \sum_{i \in \mathcal{A}(x^*)} \lambda_i^* \nabla c_i(x^*)
435 | $$
436 | 是显然的。同时,上述表示也看出,$\lambda_i^*$的实际意义是对应$\nabla c_i(x^*)$在$\nabla f(x^*)$中的权重,$\lambda_i^*$越大的约束,在约束$f$无法下降中起的作用也越大,从算法角度看,越敏感。
437 |
438 | 比如,如果对$c_i(x)$的函数值施加一个小扰动,导致$c_i(x) \geq 0$变为$c_i(x) \geq -\varepsilon\|\nabla c_i(x^*)\|$,则对$x^*$的活跃约束有
439 | $$
440 | \frac{c_i(x^*(\varepsilon)) - c_i(x^*)}{x^*(\varepsilon) - x^*} = \nabla c_i(x^*)\Rightarrow c_i(x^* + \varepsilon) - c_i(x^*) \approx(x^*(\varepsilon) - x^*)^T\nabla c_i(x^*).
441 | $$
442 | 这里$x^*(\varepsilon)$对应扰动后的新解。而对$j \neq i$,因为扰动未改变$c_j(x)$,故$x^*(\varepsilon)$和$x^*$对$c_j(x)$而言有相同的函数值,即
443 | $$
444 | 0 = c_j(x^*(\varepsilon)) - c_j(x^*) \approx (x^*(\varepsilon) - x^*)^T\nabla c_j(x^*).
445 | $$
446 | 于是对$f(x^*(\varepsilon))$,有
447 | $$
448 | \begin{eqnarray}
449 | f(x^*(\varepsilon)) - f(x^*) &\approx& (x^*(\varepsilon) - x^*)^T\nabla f(x^*)\\
450 | &=&\sum_{j \in \mathcal{A}(x^*)} \lambda_j^*(x^*(\varepsilon) - x^*)^T\nabla c_j(x^*)\\
451 | &\approx&-\varepsilon\|\nabla c_i(x^*)\|\lambda_i^*.
452 | \end{eqnarray}
453 | $$
454 | 最后一步是因为对$j \neq i$,求和项均为零。进而,
455 | $$
456 | \begin{equation}
457 | \frac{d f(x^*(\varepsilon))}{d \varepsilon} = \lambda_i^*\|\nabla c_i(x^*)\|.
458 | \tag{12.80}
459 | \end{equation}
460 | $$
461 | 因此,严格地说,$\lambda_i^*\|\nabla c_i(x^*)\|$才是第$i$个约束对解目标值的敏感影响因子。
462 |
463 | **定义 12.8** 令$x^*$是问题(12.1)的解,且满足KKT条件(12.34)。称不等值约束$c_i(x)$是强约束的(strongly active)或绑定的(binding),若有满足(12.34)的$\lambda^*$使$i \in \mathcal{A}(x^*)$且$\lambda_i^* > 0$。称$c_i(x)$是弱活跃的(weakly active),若对所有满足(12.34)的$\lambda^*$,有$i \in \mathcal{A}(x^*)$且$\lambda_i^* = 0$。
464 |
465 | 这个定义实际上和定义12.5讲述的是同样的事。
466 |
467 | 为了证明定理12.1,我们需要再做一些技术准备。
468 |
469 |
--------------------------------------------------------------------------------
/lecture_notes/Linear_Programming_II.md:
--------------------------------------------------------------------------------
1 | ## 可行集的几何特性
2 |
3 | 现在让我们来考虑一下在标准形式下,线性规划可行集的几何特性,并引出正确的求解思路。首先我们约定(13.1)中的$A$是行满秩的。
4 | $$
5 | \begin{equation}
6 | \min_{x \in \mathbb{R}^n} f(x), \quad \mbox{s.t.}~ Ax = b, x\geq0.
7 | \tag{13.12}
8 | \end{equation}
9 | $$
10 | 由于$A$是$m \times n$矩阵,如果我们在$A$中确定$m$列,在指标$\{1, 2, \cdots, n\}$中选择$m$个指标构成子集$\mathcal{B}$,那么我们相当于从$A$中切割出一个方阵:
11 | $$
12 | B_{m \times m} = [A_i]_{i\in\mathcal{B}},
13 | $$
14 | $A_i$是$A$的第$i$列。若$B$非奇异,则显然可以唯一确定一个点
15 | $$
16 | x_B = B^{-1}b,
17 | $$
18 | 这里$x_B$相当于只对$i \in \mathcal{B}$中的分量给了赋值,对于那些没有被$\mathcal{B}$选中的分量,我们记为
19 | $$
20 | \mathcal{N} = \{1, 2, \cdots, n\} \backslash \mathcal{B},
21 | $$
22 | 它同样对应$A$的一些列,并可以组成一个矩阵
23 | $$
24 | N_{m \times (n - m)} = [A_i]_{i \in \mathcal{N}},
25 | $$
26 | 以及对应的$x$分量组成的向量$x_N$。($i \in \mathcal{N}$的$x$的分量组成,相当于现在$x$都可以分成$x_B$和$x_N$两部分。)对于$x_N$,我们令它的全部分量都为零,从而满足约束$x \geq 0$。但对于$x_B$,我们并不清楚它是否可行(是否各分量都大于等于零)。
27 |
28 | (以上记号对$A$和$x$都按指标$\mathcal{B}$和$\mathcal{N}$做了一个划分,$\mathcal{B}\cup\mathcal{N} = \{1, 2, \cdots, n\}$。)
29 |
30 | 现在我们规定:
31 |
32 | **定义** 称(13.1)的可行点$x$是一个基础可行点(basic feasible point),若存在指标集$\{1, 2, \cdots, n\}$的子集$\mathcal{B}$满足:
33 |
34 | 1. $\mathcal{B}$包含$m$个指标;
35 | 2. $i \notin \mathcal{B}$,$x_i = 0$;
36 | 3. $B_{m \times m} = [A_i]_{i \in \mathcal{B}}$非奇异。
37 |
38 | 而$\mathcal{B}$称为(13.1)的一个基(basis),$B$称为基矩阵。
39 |
40 | ($\mathcal{N}$有时称为“非基”,$N$有时称为“非基矩阵”。)
41 |
42 | 这里有一个严重的问题是,这样的可行点的存在性。下面这个定理回答了这个问题:
43 |
44 | **定理 13.2**
45 |
46 | 1. 若(13.1)的可行域非空,则它至少有一个基础可行点;
47 | 2. 若(13.1)有解,则至少一个解是基础可行点;
48 | 3. 若(13.1)可行且有界,则它必有解。
49 |
50 | 这里我们不再重复讲义上的证明,而是直接讨论一下,从基础可行点的几何意义究竟是什么。实际上,在
51 | $$
52 | A x = b
53 | $$
54 | 中对$A$选取$m$列的操作我们是熟悉的,通常对于一个欠定线性系统,我们都会这么去做。因为系统欠定,我们会有多个解,事实上全部的解集构成一个线性空间,它的维数就是$n - m$。现在结合不等值约束$x \geq 0$,于是可行域$\Omega$就是这个解空间落在$\mathbb{R}^n$中的“第一象限”的部分。大家可以想象一下,一个空间被一个$n$维的第一象限切割下的部分,实际上是$n$维空间的一个“凸多面体”(在$x$的正方向可以开放,但如果封闭,那么整个可行域就是一个凸多面体)。现在对于全部$i \in \mathcal{N}$,我们令$x_i = 0$,从而构成了基础可行点,这时我们发现:
55 |
56 | 1. 基础可行点是确定的单点,而不是空间。因为它的每一个分量都是唯一确定的;
57 | 2. 它是$x_B$空间和$x_N$空间的交点,而且是一个单点,如果我们将$\Omega$视为$\mathbb{R}^n$空间中落在第一象限内的一个凸多面体,那么基础可行点实际上就是这个凸多面体和$x_B$空间相交的顶点。不同的基础可行点代表了不同的顶点;
58 | 3. 从上述几何意义出发,定理13.2的结论是显然的。同时,提示我们可以通过某种方式遍历全部的基础可行点(顶点)来寻找问题(13.1)的全局最优解(如果有,如果$\Omega$在$x$正方向是开放的,同时$f$沿$x$的正方向是下降的,那么显然最优值是$-\infty$)。
59 |
60 | ## 单纯形方法(the simplex method)
61 |
62 | 现在我们来具体实现上面第3点讨论的方法。我们已经根据下标$\mathcal{B}$和$\mathcal{N}$划分了$B$和$N$,以及$x_B$和$x_N$。而判定一个点是否为全局最优解的条件是(13.4),为方便讨论起见,我们进一步将(13.4)中的$s$和$c$也做对应的划分:
63 | $$
64 | \begin{array}{ll}
65 | s_B = [s_i]_{i \in \mathcal{B}}, & s_N = [s_i]_{i \in \mathcal{N}},\\
66 | c_B = [c_i]_{i \in \mathcal{B}}, & c_N = [c_i]_{i \in \mathcal{N}}.
67 | \end{array}
68 | $$
69 | 结合(13.4),我们有
70 | $$
71 | A x = Bx_B + Nx_N = b.
72 | $$
73 | 而作为一个算法的起点,我们需要第一个基础可行点做初值,或者说我们需要选择一个$\mathcal{B}$,然后我们就有
74 | $$
75 | \begin{equation}
76 | x_B= B^{-1}b, x_N = 0.
77 | \tag{13.18}
78 | \end{equation}
79 | $$
80 | 这里显然我们应该考虑那些使$B$在求逆时尽可能简单的$\mathcal{B}$,这个也可以通过算法手段得到,我们后面再讨论,目前我们只在所有实际可能中选取一个“看上去最好”的$\mathcal{B}$。
81 |
82 | **例 13.1**
83 | $$
84 | \begin{array}{ll}
85 | \min & -4 x_1 - 2x_2, \\
86 | \mbox{s. t.} & x_1 + x_2 + x_3 = 5,\\
87 | & 2x_1 + \frac{1}{2}x_2 + x_4 = 8,\\
88 | & x \geq0.
89 | \end{array}
90 | $$
91 | 首先我们整理一下,这里
92 | $$
93 | A = \left[
94 | \begin{array}{cccc}
95 | 1&1&1&0\\
96 | 2&\frac{1}{2}&0&1
97 | \end{array}
98 | \right],\quad
99 | b = \left[
100 | \begin{array}{c}
101 | 5\\8
102 | \end{array}
103 | \right],\quad
104 | c = \left(-4, -2, 0, 0\right)^T.
105 | $$
106 | 这里我们选择一个“尽可能好的”$\mathcal{B} = \{3, 4\}$,于是$\mathcal{N} = \{1, 2\}$,
107 | $$
108 | \begin{array}{rr}
109 | B = \left[
110 | \begin{array}{cc}
111 | 1 & 0\\
112 | 0 & 1
113 | \end{array}
114 | \right], &
115 | N = \left[
116 | \begin{array}{cc}
117 | 1 & 1\\ 2 & \frac12
118 | \end{array}
119 | \right],\\
120 | c_B = \left[
121 | \begin{array}{c}
122 | 0\\0
123 | \end{array}
124 | \right], &
125 | c_N = \left[
126 | \begin{array}{c}
127 | -4 \\ -2
128 | \end{array}
129 | \right].
130 | \end{array}
131 | $$
132 | 而我们的计算将从第一个基本可行点开始:
133 | $$
134 | x_B = B^{-1}\cdot b = \left[
135 | \begin{array}{c}
136 | x_3\\x_4
137 | \end{array}
138 | \right] = \left[
139 | \begin{array}{c}
140 | 5\\8
141 | \end{array}
142 | \right], \quad
143 | x_N = \left[
144 | \begin{array}{c}
145 | x_1 \\ x_2
146 | \end{array}
147 | \right] = \left[
148 | \begin{array}{c}
149 | 0 \\ 0
150 | \end{array}
151 | \right].
152 | $$
153 | 即$x = (0, 0, 5, 8)^T$,注意此时
154 | $$
155 | f(x) = c^Tx = 0
156 | $$
157 | 即是当前目标值。接下去迭代应该设法找到新的基础可行点来降低这个值,如果它还不是最优的话。
158 |
159 | 对一个基础可行点$x$判定是否最优,我们直接采用(13.4)。首先为了满足互补性条件(13.4e),我们令$s_B = 0$,然后来确定剩下的Lagrange乘子$s_N$和$\lambda$。由(13.4a),
160 | $$
161 | A^T\lambda + s = c \Rightarrow \left[
162 | \begin{array}{c}
163 | B^T\\N^T
164 | \end{array}
165 | \right]\lambda + \left[
166 | \begin{array}{c}
167 | s_B\\ s_N
168 | \end{array}
169 | \right] = \left[
170 | \begin{array}{c}
171 | c_B\\c_N
172 | \end{array}
173 | \right]
174 | $$
175 | 得
176 | $$
177 | \begin{equation}
178 | B^T\lambda = c_B, \quad N^T\lambda + s_N = c_N.
179 | \tag{13.19}
180 | \end{equation}
181 | $$
182 | 因为$B$是非奇异的,因此由第一个方程可得:
183 | $$
184 | \begin{equation}
185 | \lambda = (B^{-1})^Tc_B. \tag{13.20}
186 | \end{equation}
187 | $$
188 | 再通过(13.19)的第二个方程可以确定$s_N$:
189 | $$
190 | \begin{equation}
191 | s_N = c_N - N^T\lambda = c_N - (B^{-1}N)^Tc_B.
192 | \tag{13.21}
193 | \end{equation}
194 | $$
195 | 现在检查$s_N$,若$s_N \geq 0$,则我们已经找到了一组$(x, \lambda, s)$满足KKT条件(31.4),也即,当前的$x$就是问题(13.1)的全局最优解。我们继续在例13.1中演示这个算法。现在,
196 | $$
197 | \lambda = (B^{-1})^Tc_B = \left[
198 | \begin{array}{cc}
199 | 1 & 0\\
200 | 0 & 1
201 | \end{array}
202 | \right] \cdot \left[
203 | \begin{array}{c}
204 | 0\\0
205 | \end{array}
206 | \right] = \left[
207 | \begin{array}{c}
208 | 0\\0
209 | \end{array}
210 | \right],
211 | $$
212 | 而
213 | $$
214 | s_N = c_N - (B^{-1}N)^Tc_B = \left[
215 | \begin{array}{c}
216 | -4\\-2
217 | \end{array}
218 | \right] - (\left[
219 | \begin{array}{cc}
220 | 1 & 0\\
221 | 0 & 1
222 | \end{array}
223 | \right]\left[
224 | \begin{array}{cc}
225 | 1 & 1\\
226 | 2 & \frac12
227 | \end{array}
228 | \right])\cdot \left[
229 | \begin{array}{c}
230 | 0 \\0
231 | \end{array}
232 | \right] = \left[
233 | \begin{array}{c}
234 | -4\\-2
235 | \end{array}
236 | \right].
237 | $$
238 | (注意书上的例13.1从此处其开始有计算错误。)这里显然$s_N$的两个分量都是负数,也即沿这两个坐标方向,例13.1的问题有更小的值。对于一般问题而言,我们这里需要选择一个$\mathcal{B}$中的下标,和$\mathcal{N}$中的一个下标交换(这一过程有的教材称为“出基”和“入基”),从而得到一个能够取到更小值的基础可行点(新的$\mathcal{B}$和$\mathcal{N}$,新的$x_B$和$x_N$,新的$x$,$\cdots$等等),然后再做下一次KKT判定。到此,一个完整的迭代循环已经完成,如此循环,直到某一个基础可行点被确定为全局最优点(KKT点),或者能够判定目标函数值是可以取到负无穷的为止。现在要算法化这个循环,我们还要确定出基和入基。首先入基并没有什么特别确定的选择,理论上说,$s_N$的负分量的指标都可以作为入基,我们也只需要一个入基。比如目前的例13.1中,$s_1 = -4$,$s_2 = -2$,因此$1$或$2$均可以作为入基。但是为了算法统一起见,我们这里可以选择最小的一个分量,也就是$q = 1$作为入基(这样做未必是最优的,$s_3$更小并不意味着沿$x_3$方向能下降的更快,但确实有学者推荐这么做)。对一般问题,在这里有$q \in \mathcal{N}$,且$s_q < 0$。接下去继续确定出基$p$,也就是要从$\mathcal{B}$中选择一个指标来和出基交换。我们用$x^+$代表寻找中的新基础可行点,则$x_B^+$和$x_B$就只有一个分量的区别(我们暂时还不知道是哪一个),而且对$x^+$和$x$,由于约束条件,必有
239 | $$
240 | Ax^+ = Bx_B^+ + A_qx_q^+ = B x_B = Ax.
241 | $$
242 | 这里注意到对 $i \in \mathcal{N} \backslash \{q\}$,总有$x_i^+ = 0$,$A_q$是$N$中对应入基的那一列。上式中间两式两边同乘以$B^{-1}$,有
243 | $$
244 | \begin{equation}
245 | x^+_B + B^{-1}A_qx_q^+=x_B \Rightarrow x_B^+ = x_B - B^{-1}A_qx_q^+.
246 | \tag{13.22}
247 | \end{equation}
248 | $$
249 | 这个式子形象地告诉我们,新的目标点是旧的目标点沿$x_q$方向进行新的搜索,但要能移动这一点,我们必须在原本的$\mathcal{B}$中放弃一个约束,也就是出基$p$。令
250 | $$
251 | d = B^{-1}A_q,
252 | $$
253 | 则
254 | $$
255 | x_B^+ = x_B - x_q^+d,
256 | $$
257 | 如果$d$至少存在一个正分量,那么在对应的坐标方向上,$x_B$的分量以$x_qd_i$的速率下降,$i \in \mathcal{B}$,$d_i > 0$。反之,若$\forall i \in \mathcal{B}$,有$d_i \leq 0$,则说明存在可行域的开放方向(到无穷远)上可以一直下降,即对应的线性规划无解。对前一种情况,考虑到$x_B^+$也必须满足各分量非负,即$\forall i \in \mathcal{B}$,$d_i > 0$,必须有
258 | $$
259 | \frac{(x_B^+)_i}{d_i} = \frac{(x_B)_i}{d_i} - x_q^+ \geq 0, \quad \forall i \in \mathcal{B}, d_i > 0,
260 | $$
261 | 在上述各下降分量中,必有一个最先达到零(下降速率相同),那个就是我们选择的$p$。也即
262 | $$
263 | p = \mbox{argmin} \{\frac{(x_B)_i}{d_i}, i \in \mathcal{B}, d_i > 0\}.
264 | $$
265 | 而同时
266 | $$
267 | x_q^+ = \frac{(x_B)_p}{d_p},
268 | $$
269 | 以及
270 | $$
271 | x_B^+ = x_B - x_q^+d.
272 | $$
273 | 对例13.1,有
274 | $$
275 | A_q = A_1 = \left[
276 | \begin{array}{c}
277 | 1 \\ 2
278 | \end{array}
279 | \right] \Rightarrow d = B^{-1}A_q = \left[
280 | \begin{array}{cc}
281 | 1 & 0\\
282 | 0 & 1
283 | \end{array}
284 | \right]\left[
285 | \begin{array}{c}
286 | 1 \\ 2
287 | \end{array}
288 | \right] = \left[
289 | \begin{array}{c}
290 | 1 \\ 2
291 | \end{array}
292 | \right],
293 | $$
294 | $d$的各分量均正,而其中,
295 | $$
296 | \frac{(x_B)_3}{d_3} = \frac{5}{1} = 5, \quad \frac{(x_B)_4}{d_4} = \frac{8}{2} = 4,
297 | $$
298 | 注意这里下标用的是$\mathcal{B}$,显然$p$应该选择$4$。以及$x_1^+ = 4$(即$x_4$从$8$降到$0$的同时,$x_1$从$0$升到$4$,从而实际同时完成了出基和入基的指标交换,与此同时,全部$x_B$的其他分量也会受到如下的影响)。
299 | $$
300 | x_B^+ = x_B - d\cdot x_q^+ = \left[
301 | \begin{array}{c}
302 | 5 \\ 8
303 | \end{array}
304 | \right] - \left[
305 | \begin{array}{c}
306 | 1 \\ 2
307 | \end{array}
308 | \right] \cdot 4 = \left[
309 | \begin{array}{c}
310 | 1 \\ 0
311 | \end{array}
312 | \right].
313 | $$
314 | 注意这里$x_B^+$中对应$p$的分量必须是零,否则必然有错误($x_3$从$5$降到$1$。如果出基选$3$那么这一项就要降到$0$,从而导致$x_4$小于零,违背约束)
315 |
316 | 此时,新的基础可行点为
317 | $$
318 | x^+ = (4, 0, 1, 0)^T.
319 | $$
320 | 由(13.22),
321 | $$
322 | \begin{equation}
323 | c^Tx^+ = c_B^Tx_B^+ + c_qx_q^+ = c_B^Tx_B - c_B^TB^{-1}A_qx_q^+ + c_qx_q^+.
324 | \tag{13.23}
325 | \end{equation}
326 | $$
327 | 以及(13.20),$c_B^TB^{-1} = \lambda^T$。而(13.19)的第二个方程对$q \in \mathcal{N}$,有
328 | $$
329 | A_q^T\lambda = c_q - s_q,
330 | $$
331 | 综合起来有
332 | $$
333 | c_B^TB^{-1}A_qx_q^+ = \lambda^T A_qx_q^+ = (c_q - s_q)x_q^+,
334 | $$
335 | 代入(13.23),得
336 | $$
337 | \begin{equation}
338 | c^Tx^+ = c_B^Tx_B - (c_q - s_q)x_q^+ + c_qx_q^+ = c^Tx + s_qx_q^+.
339 | \tag{13.24}
340 | \end{equation}
341 | $$
342 | 即目标函数值只需做针对调整即可(不用整体重算)。对例13.1,即新目标函数值为
343 | $$
344 | c^Tx^+ = c^Tx + s_qx_q^+ = 0 + s_qx_q^+ = -4\cdot 4 = -16.
345 | $$
346 | 我们继续用此算法完成例13.1。目前$\mathcal{B} = \{3, 1\}$,即
347 | $$
348 | B = \left[
349 | \begin{array}{cc}
350 | 1 & 1 \\
351 | 0 & 2
352 | \end{array}
353 | \right]
354 | ,
355 | $$
356 | 注意为了和之前的次序及交换一致,这里第一列和第二列分别对应指标$3$和$1$。于是
357 | $$
358 | B^T\lambda = \left[
359 | \begin{array}{cc}
360 | 1 & 0 \\
361 | 1 & 2
362 | \end{array}
363 | \right] \left[
364 | \begin{array}{c}
365 | \lambda_3\\ \lambda_1
366 | \end{array}
367 | \right] = c_B = \left[
368 | \begin{array}{c}
369 | 0 \\ -4
370 | \end{array}
371 | \right] \Rightarrow \lambda = \left[
372 | \begin{array}{c}
373 | 0 \\ -2
374 | \end{array}
375 | \right].
376 | $$
377 | 而
378 | $$
379 | s_N = \left[
380 | \begin{array}{c}
381 | s_4\\ s_2
382 | \end{array}
383 | \right] = c_N - N^T\lambda = \left[
384 | \begin{array}{c}
385 | 0 \\ -2
386 | \end{array}
387 | \right] - \left[
388 | \begin{array}{cc}
389 | 0 & 1\\
390 | 1 & \frac{1}{2}
391 | \end{array}
392 | \right]\left[
393 | \begin{array}{c}
394 | 0 \\ -2
395 | \end{array}
396 | \right] = \left[
397 | \begin{array}{c}
398 | 2\\ -1
399 | \end{array}
400 | \right].
401 | $$
402 | 仍然有负分量。于是继续选择$q = 2$,则
403 | $$
404 | A_q = \left[
405 | \begin{array}{c}
406 | 1 \\ \frac12
407 | \end{array}
408 | \right], Bd = A_q = \left[
409 | \begin{array}{cc}
410 | 1 & 1\\
411 | 0 & 2
412 | \end{array}
413 | \right]d = \left[
414 | \begin{array}{c}
415 | 1 \\ \frac12
416 | \end{array}
417 | \right] \Rightarrow d = \left[
418 | \begin{array}{c}
419 | \frac{3}{4} \\ \frac{1}{4}
420 | \end{array}
421 | \right],
422 | $$
423 | 于是
424 | $$
425 | x_B ./ d = \left[
426 | \begin{array}{c}
427 | \frac43\\
428 | 16
429 | \end{array}
430 | \right],
431 | $$
432 | 这里借用一下Matlab的点运算,确定出基是$p = 3$(排第一位的是$3$)。即$\mathcal{B}$更新为$\{2, 1\}$。再由
433 | $$
434 | x_B^+ = \left[
435 | \begin{array}{c}
436 | 1 \\ 4
437 | \end{array}
438 | \right] - \left[
439 | \begin{array}{c}
440 | \frac34\\ \frac14
441 | \end{array}
442 | \right]\cdot \frac43 = \left[
443 | \begin{array}{c}
444 | 0 \\ \frac{11}{3}
445 | \end{array}
446 | \right],
447 | $$
448 | 即$x$更新为
449 | $$
450 | x = (\frac{11}{3}, \frac43, 0, 0)^T.
451 | $$
452 | 此时目标函数值更新为:
453 | $$
454 | f(x) = -16 + -1 \cdot \frac{4}{3} = -\frac{52}{3}.
455 | $$
456 | 再次检查
457 | $$
458 | \left[
459 | \begin{array}{cc}
460 | 1 & \frac{1}{2}\\
461 | 1 & 2
462 | \end{array}
463 | \right]\lambda = \left[
464 | \begin{array}{c}
465 | -2 \\ -4
466 | \end{array}
467 | \right] \Rightarrow \lambda = \left[
468 | \begin{array}{c}
469 | -\frac43 \\ -\frac43
470 | \end{array}
471 | \right],
472 | $$
473 | 以及
474 | $$
475 | s_N = c_N - N^T\lambda = \left[
476 | \begin{array}{c}
477 | 0 \\ 0
478 | \end{array}
479 | \right] - \left[
480 | \begin{array}{cc}
481 | 0 & 1 \\
482 | 1 & 0
483 | \end{array}
484 | \right]\left[
485 | \begin{array}{c}
486 | -\frac43 \\ -\frac43
487 | \end{array}
488 | \right] = \left[
489 | \begin{array}{c}
490 | \frac43 \\ \frac43
491 | \end{array}
492 | \right]\geq 0,
493 | $$
494 | 满足(13.4),即$x^* = (\frac{11}{3}, \frac{4}{3}, 0, 0)^T$,$f(x^*) = -\frac{52}{3}$。
495 |
496 | 单纯形方法尽管繁琐,但是是一个确定性算法,也即我们可以用计算机程序实现全部过程。从而使得线性规划是可计算的。然而稍加分析我们就能发现,凸多面体的顶点个数,关于维数$n$是指数增加的,因此在最坏可能性下,单纯形方法是指数时间的(我们可以举这样的反例)。不过对于大多数实际问题,或者说,在平均可能性下,单纯形方法的复杂性期望仍然是多项式的。因此它在实际计算中,特别是$n$不是特别大的时候,也经常被采用。
497 |
498 | **第一个基础可行点**
499 |
500 | 我们现在讨论一个遗留问题:如何确定单纯形方法的初值,也即第一个基础可行点。实际上,寻找第一个初值本身也是一个线性规划。对标准形式的$\Omega$:
501 | $$
502 | \left\{
503 | \begin{array}{rcl}
504 | Ax &=& b,\\
505 | x &\geq& 0,
506 | \end{array}
507 | \right.
508 | $$
509 | 这里$x = (x_1, x_2, \cdots, x_n)^T$。引入松弛变量$x_{n+1}, x_{n+2}, \cdots, x_{n+m}$,并将原依赖修改为:
510 | $$
511 | \left\{
512 | \begin{array}{rcl}
513 | [A \quad I]x &=& b,\\
514 | x &\geq& 0,
515 | \end{array}
516 | \right.
517 | $$
518 | 现在$x = (x_1, x_2, \cdots, x_{n +m})^T$。于是$x$限制在$n$维是原问题的一个基础可行点当且仅当
519 | $$
520 | \left\{
521 | \begin{array}{ll}
522 | \min & f(x) = \displaystyle\sum_{i = n + 1}^{n + m} x_i,\\
523 | \mbox{s. t.} & [A \quad I] x = b.
524 | \end{array}
525 | \right.
526 | $$
527 | 取到全局最优点$f(x^*) = 0$。此时$x^*$中必有$x_i = 0$,$i = n+1, n+2, \cdots, n+m$。而此问题,是一个自带一个初始基本可行解的线性规划问题,不难用单纯形法求解。有时,这样的单纯形法又称为两阶段单纯形方法。
528 |
529 | ## 主-对偶方法
530 |
531 | 对于达到一定规模的线性问题,单纯形方法的效率较低(事实上单纯形方法曾用于手算)。此时,直接采用迭代法有更好的效果。主要的思路是如果我们能够找到一个可行域内的初值,并用之前学习的求解无约束优化的连续迭代方法去求解,同时如果还能保证迭代过程不脱离可行域,那么就可以确保最后迭代到最优解。这种思路的关键是确保迭代序列在可行域内部,故又称“内点法(interior-point methods)”。
532 |
533 | 对线性规划问题的标准形式:
534 | $$
535 | \begin{equation}
536 | \min c^Tx, \quad \mbox{s. t.} Ax = b, x\geq 0, \tag{14.1}
537 | \end{equation}
538 | $$
539 | 其中$c$和$x$是$\mathbb{R}^n$中的向量,$b$是$\mathbb{R}^m$中向量,且$m \times n$矩阵$A$是行满秩的,那么其对偶问题为:
540 | $$
541 | \begin{equation}
542 | \max b^T\lambda, \quad \mbox{s.t.} A^T\lambda + s = c, s \geq 0.
543 | \tag{14.2}
544 | \end{equation}
545 | $$
546 | 其中$\lambda$是$\mathbb{R}^m$中向量,而$s$是$\mathbb{R}^m$中向量。根据KKT条件(13.4),上述两个问题的最优解都必须满足:
547 | $$
548 | \begin{eqnarray}
549 | A^T\lambda + s &=& c, \tag{14.3a}\\
550 | Ax &=& b, \tag{14.3b}\\
551 | x_is_i &=& 0, \quad i = 1, 2, \cdots, n, \tag{14.3c}\\
552 | (x, s) &\geq& 0. \tag{14.3d}
553 | \end{eqnarray}
554 | $$
555 | 因此,接下去我们设法去寻找$(x^*, \lambda^*, s^*)$满足上述条件。这里我们将上述问题改写成如下方程形式:
556 | $$
557 | \begin{eqnarray}
558 | F(x, \lambda, s) = \left[
559 | \begin{array}{c}
560 | A^T\lambda + s - c\\
561 | Ax - b\\
562 | XSe
563 | \end{array}
564 | \right] &=& 0, \tag{14.4a}\\
565 | (x, s) &\geq&0, \tag{14.4b}
566 | \end{eqnarray}
567 | $$
568 | 其中
569 | $$
570 | \begin{equation}
571 | X = \mbox{diag}(x_1, x_2, \cdots, x_n),S = \mbox{diag}(s_1, s_2, \cdots, s_n), \tag{14.5}
572 | \end{equation}
573 | $$
574 | 以及$e = (1, 1, \cdots, 1)^T$。注意这里$F$是一个$\mathbb{R}^{2n+m}$到$\mathbb{R}^{2n+m}$维的非线性函数,我们可以用Newton迭代求解,而对于(14.4b),我们要确保在迭代求解的过程中,有$x^k > 0$和$s^k > 0$(严格成立)。这里我们提出一个监察指标(对偶尺度,measure)
575 | $$
576 | \begin{equation}
577 | \mu = \frac{1}{n} \sum_{i = 1}^n x_i s_i = \frac{x^Ts}{n}, \tag{14.6}
578 | \end{equation}
579 | $$
580 | 显然,这个$\mu$在迭代过程中越小越好,它提供了一个搜索方向或者步长的依据。现在我们来考虑如何迭代。首先对非线性方程组(14.4a),其Newton迭代步为
581 | $$
582 | J(x, \lambda, s) \left[
583 | \begin{array}{c}
584 | \Delta x\\
585 | \Delta \lambda\\
586 | \Delta s
587 | \end{array}
588 | \right] = -F(x, \lambda, s),
589 | $$
590 | 其中$J$是$F$的Jacobi矩阵。我们定义
591 | $$
592 | \begin{equation}
593 | r_b = Ax - b, \quad r_c = A^T\lambda + s - c, \tag{14.7}
594 | \end{equation}
595 | $$
596 | 则整个Newton方程组为:
597 | $$
598 | \begin{equation}
599 | \left[
600 | \begin{array}{ccc}
601 | 0 & A^T & I\\
602 | A & 0 & 0\\
603 | S & 0 &X
604 | \end{array}
605 | \right]\left[
606 | \begin{array}{c}
607 | \Delta x\\
608 | \Delta \lambda \\
609 | \Delta s
610 | \end{array}
611 | \right] = \left[
612 | \begin{array}{c}
613 | -r_c\\
614 | -r_b\\
615 | -XSe
616 | \end{array}
617 | \right]. \tag{14.8}
618 | \end{equation}
619 | $$
620 | 于是一个完整的Newton迭代步为:
621 | $$
622 | (x^{k + 1}, \lambda^{k + 1}, s^{k + 1}) = (x^k, \lambda^k, s^k) + \alpha(\Delta x^k, \Delta \lambda^k, \Delta s^k).
623 | $$
624 | 这里$\alpha \in (0, 1]$。因为$(x^k, \lambda^k, s^k)$是可行点,根据连续性,只要$\alpha$足够小,我们总能确保$(x^{k + 1}, \lambda^{k + 1}, s^{k + 1})$可行。但这里如果我们想摆脱这种猥琐发育的算法,使得单步步长尽可能大,我们就需要对Newton方向做一个调整。比如,我们在考虑方向的时候就同时在非线性残量中加入$\mu$的因素:
625 | $$
626 | \begin{equation}\left[\begin{array}{ccc}0 & A^T & I\\A & 0 & 0\\S & 0 &X\end{array}\right]\left[\begin{array}{c}\Delta x\\\Delta \lambda \\\Delta s\end{array}\right] = \left[\begin{array}{c}-r_c\\-r_b\\-XSe + \sigma\mu e\end{array}\right]. \tag{14.9}\end{equation}
627 | $$
628 | 这里$\sigma \in [0, 1]$称为中心化参数(centering parameter)。当$\sigma > 0$时,上述方程组得到的方向相比Newton方向一般可取到更大的步长。我们这里只是引入这样一个算法,接下去不再详细讨论$\sigma $和$\alpha$的实际取法,以及其他可以考虑的模型方程。有兴趣的同学可以自己阅读参考书P396以后的第十四章部分,而Matlab的线性规划求解器中也提供了相应的内点法求解程序。
629 |
630 |
--------------------------------------------------------------------------------
/lecture_notes/Least_Squares_Problems.md:
--------------------------------------------------------------------------------
1 | # 最小二乘问题(Least-Squares Problems)
2 |
3 | 考虑一个实际问题,如果我们有实验数据$(t_j, y_j)$,这里$t_j$可以是标量或向量,$y_j$一般认为是标量,$j = 1, 2, \cdots, m$。理论和经验告诉我们,这组实验数据应该符合规律
4 | $$
5 | \phi(x; t),
6 | $$
7 | 其中,$x = (x_1, x_2, \cdots, x_n) \in \mathbb{R}^n$是待定参数。那么对于每一个数据,我们有
8 | $$
9 | r_j(x) \overset{\mathrm{def}}= \phi(x;t_j) - y_j
10 | $$
11 | 称为模型的残量,显然,为了得到所谓“最优”的模型,我们希望通过调整待定参数$x$来最小化残量。一种自然的做法是构建无约束优化问题,目标函数具有如下形式:
12 | $$
13 | \begin{equation}
14 | f(x) = \frac12\sum_{j = 1}^m r_j^2(x),
15 | \tag{10.1}
16 | \end{equation}
17 | $$
18 | 则相应优化问题称为最小二乘问题。其中$r_j$是$\mathbb{R}^n \to \mathbb{R}$的光滑函数。我们将$r_j$看作残量(residual),并且通常假设$m >> n$。
19 |
20 | 最小二乘问题的背景应用是大家熟悉的,最典型的一个应用就是上面提到的数据回归或函数拟合。这里强调一下$f$取这种形式的优点在于我们可以将向量函数
21 | $$
22 | \begin{equation}
23 | r(x) = \left(r_1(x), r_2(x), \cdots, r_m(x)\right)^T
24 | \tag{10.2}
25 | \end{equation}
26 | $$
27 | 看作一个$\mathbb{R}^n \to \mathbb{R}^m$的映射,则
28 | $$
29 | f(x) = \frac12\|r(x)\|_2^2.
30 | $$
31 | 且$r(x)$的Jacobi矩阵$J(x)$为
32 | $$
33 | \begin{equation}
34 | J(x) = \left[\frac{\partial r_j}{\partial x_i}\right]_{j=1, 2, \cdots, m\\
35 | i = 1, 2, \cdots,n} =\left[\begin{array}{c}
36 | \nabla r_1(x)^T \\
37 | \nabla r_2(x)^T \\
38 | \vdots\\
39 | \nabla r_m(x)^T \\
40 | \end{array}\right],
41 | \tag{10.3}
42 | \end{equation}
43 | $$
44 | 其中$\nabla r_j(x), j = 1, 2, \cdots, m$是$r_j$的梯度。于是$f$的梯度和Hessian有如下形式:
45 | $$
46 | \begin{eqnarray}
47 | \nabla f(x) &=& \sum_{j = 1}^m r_j(x) \nabla r_j(x) = J(x)^Tr(x), \tag{10.4}\\
48 | \nabla^2 f(x) &=& \sum_{j = 1}^m \nabla r_j(x) \nabla r_j(x)^T + \sum_{j = 1}^m r_j(x) \nabla^2r_j(x) \\
49 | &=& J(x)^TJ(x) + \sum_{j = 1}^m r_j(x)\nabla^2 r_j(x). \tag{10.5}
50 | \end{eqnarray}
51 | $$
52 | 在一般的计算中,计算$J(x)$的代价要远小于计算$\nabla^2 f(x)$。因此最小二乘法的一个核心思想就是尽可能只计算$J(x)$而不去直接计算$\nabla^2 f(x)$。比如在(10.5)中,只计算第一项,而舍弃第二项。当然这么做导致的后果是问题依赖的,也需要仔细分析。
53 |
54 | ## 背景
55 |
56 | 最小二乘的一个主要应用是数据拟合。
57 |
58 | **例10.1** 我们考虑一个药物对病人的某个可测量结果$\phi(x; t)$和五个指定的用药参数$x = (x_1, x_2, x_3, x_4, x_5)$(用量、浓度等等...)以及服用时间之间的关系。经验公式告诉我们这些参数和疗效之间的关系为:
59 | $$
60 | \begin{equation}
61 | \phi(x; t) = x_1 + tx_2 + t^2x_3 + x_4e^{-x_5t}.
62 | \tag{10.6}
63 | \end{equation}
64 | $$
65 | 现对一个指定药品和$m$个病人,我们做了一组实验并得到了实际的结果数据$y_j, j = 1, 2, \cdots, m$。那么我们就可以利用最小二乘法去最小化目标函数:
66 | $$
67 | \begin{equation}
68 | \frac12\sum_{j = 1}^m \left[\phi(x; t_j) - y_j\right]^2,
69 | \tag{10.7}
70 | \end{equation}
71 | $$
72 | 从而得到目标公式的最优参数$x^*$。这个其实是统计学上定点回归(fixed-regressor)的一个特例。这里平方的本质是求模型结果$\phi(x)$和实测结果$y$之差
73 | $$
74 | \begin{equation}
75 | r_j(x) = \phi(x; t) - y_j,
76 | \tag{10.8}
77 | \end{equation}
78 | $$
79 |
80 |
81 | 的$l_2$范数(的平方),它使得目标函数更加光滑,但是也使得误差的效应扩散。也有回归模型讨论$l_\infty$范数或$l_1$范数,但此时目标函数相应变为
82 | $$
83 | \begin{equation}\max_{j = 1, 2, \cdots, m} \left|\phi(x; t_j) - y_j\right|,\tag{10.9}\end{equation}
84 | $$
85 | 和
86 | $$
87 | \begin{equation}\sum_{j = 1}^m \left|\phi(x; t_j) - y_j\right|,\tag{10.10}\end{equation}
88 | $$
89 | 失去了光滑性,给计算带来额外的困难。本章节我们只讨论$l_2$范数的情况。
90 |
91 | ## 线性最小二乘问题
92 |
93 | 若$\phi(x)$是一个关于$x$的线性函数,则对应的最小二乘问题称为线性最小二乘问题。此时残量函数(10.8)也是线性的,我们可以将其写作
94 | $$
95 | r(x) = Jx - y,
96 | $$
97 | 其中$J$是矩阵,$y$是向量,且都与$x$无关。所以目标函数$f$简化为
98 | $$
99 | \begin{equation}
100 | f(x) = \frac12 \|Jx - y\|^2,
101 | \tag{10.13}
102 | \end{equation}
103 | $$
104 | 其中$y = r(0)$。而相应地,
105 | $$
106 | \nabla f(x) = J^T(Jx - y), \nabla^2 f(x) = J^TJ.
107 | $$
108 | 显然,此时$f$是凸的,因此我们只需要求它的稳定点$\nabla f(x^*) = 0$即可找到它的全局最小值点$x^*$。也即,以下方程
109 | $$
110 | \begin{equation}
111 | J^TJ x^* = J^Ty.
112 | \tag{10.14}
113 | \end{equation}
114 | $$
115 | 的解。这个方程被称为(10.3)的正规方程组(the normal equations)。
116 |
117 | 注:这里等价于一个超定方程组的广义解,或求长方阵$J$的广义逆。
118 |
119 | 和之前讨论的类似,对(10.14)主要有两条路线可以求解,其一是基于Cholesky分解:
120 |
121 | + 计算系数矩阵$J^TJ$和右端项$J^Ty$;
122 | + 计算$J^TJ$的Cholesky分解$R^TR$;(注:$R^T \neq J$,因此必须先计算$J^TJ$再通过Cholesky分解计算$R$。)
123 | + 依次求解三角方程组:$R^T\tilde{y} = J^Ty$和$Rx^* = \tilde{y}$得$x^*$。
124 |
125 | 这个方法很容易实现,但缺点也很明显。就是$J^TJ$的条件数(condition number)是$J$的平方。因此相对原始问题(10.13),直接求解(10.14)有可能会损失大量的浮点运算精度(数值不稳定)。当$J$是病态(ill conditioned)时,$J^J$甚至会接近数值不正定。
126 |
127 | 注:另一种理解是,$J$是一个$m \times n$的长方阵,但$J^TJ$是$n \times n$的,这里丢失了信息的自由度,本质上是做了空间投影,引入了额外的投影误差。
128 |
129 | 第二个方法则采用QR分解。首先,我们回顾一下高等代数的结论:欧氏范数($l_2$范数)在正交变换下是不变的。也即
130 | $$
131 | \begin{equation}
132 | \|J x - y\| = \|Q^T(Jx - y)\|,
133 | \tag{10.16}
134 | \end{equation}
135 | $$
136 | 其中,$Q$是$m \times m$阶正交阵。假设存在正交分解(具体算法参见:Gene H. Golub, C. F. Van Loan, Ch. 5, p. 136, Matrix Computations, Johns Hopkins University Press, 2012, Baltimore.):
137 | $$
138 | \begin{equation}
139 | J\Pi = Q \left[\begin{array}{c}R \\ 0\end{array}\right]=\left[Q_1 Q_2\right]\left[\begin{array}{c}R \\ 0\end{array}\right]=Q_1R,
140 | \tag{10.17}
141 | \end{equation}
142 | $$
143 | 其中
144 |
145 | + $\Pi$是$n \times n$阶交换阵(permutation matrix),交换阵必然是正交阵;
146 | + $Q$是$m \times m$阶正交阵;
147 | + $Q_1$是$Q$的头$n$列,而$Q_2$是后$m - n$列;
148 | + $R$是$n \times n$阶上三角矩阵(upper triangular matrix),并且对角元均为正。
149 |
150 | 结合(10.16)和(10.17),我们有(正交阵性质$Q^TQ = I$,以及正交阵的算子作用不改变$l_2$范数。)
151 | $$
152 | \begin{eqnarray}
153 | \|J x - y\|_2^2 &=& \left\|\left[\begin{array}{c}Q_1^T\\ Q_2^T\end{array}\right]\left(J\Pi \Pi^Tx -y\right)\right\|_2^2 \\
154 | &=&\left\|\left[\begin{array}{c}R\\0\end{array}\right]\left(\Pi^Tx\right)-\left[\begin{array}{c}Q_1^Ty\\Q_2^Ty\end{array}\right]\right\|_2^2\\
155 | &=& \left\|R\left(\Pi^Tx\right)-Q_1^Ty\right\|_2^2+\left\|Q_2^Ty\right\|_2^2.
156 | \tag{10.18}
157 | \end{eqnarray}
158 | $$
159 | 注意这里第二项和$x$无关,因此我们只需设法将第一项消成零,即
160 | $$
161 | x^* = \Pi R^{-1}Q_1^Ty.
162 | $$
163 | 这一步在实际计算中是先求解三角方程组
164 | $$
165 | Rz = Q_1^Ty,
166 | $$
167 | 然后
168 | $$
169 | x^* = \Pi z.
170 | $$
171 | 这个方法实际的舍入误差是由$J$而不是$J^TJ$的条件数决定的。
172 |
173 | 第三条道路,则是基于对$J$的奇异值分解(singular-value decomposition, SVD)。(具体算法参见Matrix Computations的第8章)对$J$做奇异值分解,有
174 | $$
175 | \begin{equation}
176 | J = U\left[\begin{array}{c}S\\0\end{array}\right]V^T=\left[U_1 U_2\right]\left[\begin{array}{c}S\\0\end{array}\right]V^T=U_1SV^T,
177 | \tag{10.19}
178 | \end{equation}
179 | $$
180 | 其中
181 |
182 | + $U$是$m \times m$阶正交阵;
183 | + $U_1$是$U$的前$n$列,而$U_2$是后$m - n$列;
184 | + $V$是$n \times n$阶正交阵;
185 | + $S$是$n \times n$阶对角阵,其对角元$\sigma_1 \geq \sigma_2 \geq \cdots \geq \sigma_n > 0$。
186 |
187 | (这里
188 | $$
189 | J^TJ= V S^2 V^T,
190 | $$
191 | 所以$V$的第$j$列向量就是$J^TJ$关于特征值$\sigma_j^2, j = 1, 2, \cdots, n$的特征向量。)
192 |
193 | 和第二种方法类似,我们有
194 | $$
195 | \begin{eqnarray}
196 | \|Jx - y\|_2^2 &=& \left\|\left[\begin{array}{c}S\\0\end{array}\right]\left(V^Tx\right)-\left[\begin{array}{c}U_1^T\\U_2^T\end{array}\right]y\right\|_2^2\\
197 | &=& \left\|S\left(V^Tx\right)-U_1^Ty\right\|_2^2+\|U_2^Ty\|_2^2.
198 | \tag{10.20}
199 | \end{eqnarray}
200 | $$
201 | 同样地,我们只需考虑第一项变零的情形,也即
202 | $$
203 | x^* = VS^{-1}U_1^Ty.
204 | $$
205 | 记$U$的第$i$列为$u_i \in \mathbb{R}^m$,$V$的第$i$列为$v_i \in \mathbb{R}^n$,则
206 | $$
207 | \begin{equation}
208 | x^* = \sum_{i = 1}^n \frac{u_i^Ty}{\sigma_i}v_i.
209 | \tag{10.21}
210 | \end{equation}
211 | $$
212 | 尽管奇异值分解的代价较大,但它也提供了额外的信息。当$\sigma_i$较小时,$x^*$对$u_i^Ty$的扰动是非常敏感的。特别$J$接近秩亏(rank-deficient)时,也即$\sigma_n / \sigma_1 << 1$时,为了获得敏感性信息而付出这个代价是值得的。
213 |
214 | 以上这三种方法各有各的适用场合。当$m >> n$时,或者我们只有$J^TJ$信息,缺少$J$信息时,基于Cholesky分解的算法是合适的。然而,若$J^TJ$的条件数不好时,我们必须做额外的预处理。基于QR分解的算法,用于条件数较小,具有更高的鲁棒性和稳定性。而基于SVD的算法具有最好的鲁棒性和数值稳定性(代价也最大)。当$J$接近秩亏时,某一些奇异值数值上就是零,而此时
215 | $$
216 | \begin{equation}
217 | x^* = \sum_{\sigma_i \neq 0}\frac{u_i^Ty}{\sigma_i}v_i + \sum_{\sigma_i = 0}\tau_i v_i
218 | \tag{10.22}
219 | \end{equation}
220 | $$
221 | ($\tau_i$可以是任意系数)仍然是(10.20)的最优解。我们通常将$\tau_i$都设成零。甚至对某些特别小的$\sigma_i$,我们也可以直接将其当作零来处理。
222 |
223 | 注:具体采用何种策略在实际问题中主要取决于以下几个因素:
224 |
225 | + $J$是否大规模稀疏;
226 | + $J$和$J^TJ$的存储量对比;
227 | + $J$是否列满秩;
228 | + 模型是否参数敏感...
229 |
230 | 并没有确定的判定原则,一切要从具体问题的分析入手。
231 |
232 |
233 |
234 | ## 非线性最小二乘问题
235 |
236 | ### 高斯-牛顿法(Gauss-Newton)
237 |
238 | 对于一般性问题(10.1),我们仍然从其局部梯度(10.4)和Hessian(10.5)考虑设计算法。最直接的想法是应用线搜索Newton法的一个修正——Gauss-Newton法。这里标准的Newton法会求解Newton方程组:
239 | $$
240 | \nabla^2 f(x_k)p_k^N = -\nabla f(x_k),
241 | $$
242 | 而Gauss-Newton则用以下方程组来寻找搜索方向:
243 | $$
244 | \begin{equation}
245 | J_k^TJ_k p_k^{\mathrm{GN}} = -J_k^Tr_k.
246 | \tag{10.23}
247 | \end{equation}
248 | $$
249 | 注:舍弃了(10.5)的第二项。
250 |
251 | 这个方法有如下优点:
252 |
253 | 首先,
254 | $$
255 | \begin{equation}
256 | \nabla^2 f_k \approx J_k^TJ_k,
257 | \tag{10.24}
258 | \end{equation}
259 | $$
260 | 但它的计算量实际和
261 | $$
262 | \nabla f_k = J_k^Tr_k
263 | $$
264 | 相当。
265 |
266 | 注:这一点是问题依赖的。
267 |
268 | 其次,有很多实际问题中,(10.5)的第一项是强占优的,此时,Gauss-Newton法的收敛率也接近Newton法。第三,注意到当$J_k$是满秩时,$\nabla f_k$非零,所以$p_k^{\mathrm{GN}}$始终是下降方向,这一点很适合线搜索。由(10.4)和(10.23),我们有
269 | $$
270 | \begin{equation}
271 | \left(p_k^{\mathrm{GN}}\right)^T\nabla f_k = \left(p_k^{\mathrm{GN}}\right)^TJ_k^Tr_k=-(p_k^{\mathrm{GN}})^TJ_k^TJ_kp_k^{\mathrm{GN}}=-\left\|J_kp_k^{\mathrm{GN}}\right\|^2\leq0.
272 | \tag{10.25}
273 | \end{equation}
274 | $$
275 | 而当上式最后一项取等号时,由$J_k$满秩,我们立刻有$\nabla f_k = 0$,也即$x_k$是稳定点。最后一点是,Gauss-Newton法的每一步,实际上是一个线性最小二乘问题
276 | $$
277 | \begin{equation}
278 | \min_p \frac12\left\|J_k p + r_k\right\|^2.
279 | \tag{10.26}
280 | \end{equation}
281 | $$
282 | 因此我们之前讨论过的线性最小二乘算法均可以用上。而当我们采用QR方法,或者SVD方法时,我们实际上不必去计算$J^TJ$,而只需要$J$即可。想象一下我们如果用CG法去求解(10.26),我们需要求解一个系数矩阵为$J_k^TJ_k$的线性方程组,于是我们实际上只需要实现算子作用$J_k^TJ_k$(即矩阵乘向量运算),而这一点我们可以通过先左乘$J_k$,再左乘$J_k^T$来实现。
283 |
284 | 但这一点也不是绝对的,当$m >> n$时,直接存储$J$可能不是一个好办法(这是个$m \times m$阶矩阵,想象一下你有100万个数据),此时先把$J^TJ$和$J^Tr$计算出来可能更好。我们通过一个$j = 1, 2, \cdots, m$的遍历,可以得到
285 | $$
286 | \begin{equation}
287 | J^TJ = \sum_{i = 1}^m(\nabla r_j)(\nabla r_j)^T, J^T r = \sum_{i = 1}^m r_j(\nabla r_j).
288 | \tag{10.27}
289 | \end{equation}
290 | $$
291 | 当$p_k^{\mathrm{GN}}$给出搜索方向之后,第三章介绍的线搜索策略我们就可以直接引入,比如Armijo或Wolfe条件。
292 |
293 | 注:这里跳过了一段关于Gauss-Newton法全局收敛性的证明,需要的同学自己看书。
294 |
295 | ### Levenberg-Marquardt法
296 |
297 | Gauss-Newton法的一个主要缺陷是当$J(x)$变得数值奇异时,作为线搜索方向可能出现收敛失败。而一个自然的解决思路是引入信任域策略。这就是Levenberg-Marquardt方法的思路。除此之外,它和Gauss-Newton法一致。对于迭代的每一步,它的子问题是
298 | $$
299 | \begin{equation}
300 | \min_p \frac12 \left\|J_k p + r_k\right\|_2^2, \quad \mbox{s.t.} \|p\|_2\leq\Delta_k,
301 | \tag{10.31}
302 | \end{equation}
303 | $$
304 | 这里$\Delta_k > 0$是信任域半径。也即我们实际上选择的二次模型是
305 | $$
306 | \begin{equation}
307 | m_k(p) = \frac12 \|r_k\|_2^2 + p^TJ_k^Tr_k + \frac12p^TJ_k^TJ_kp.
308 | \tag{10.32}
309 | \end{equation}
310 | $$
311 | 以下讨论忽略下标$k$。由第四章的分析,我们知道当Gauss-Newton法的解$p^{\mathrm{GN}}$落在信任域半径内时,它也是(10.31)的解。否则,存在$\lambda > 0$使得$p = p^{\mathrm{LM}}$满足$\|p\| = \Delta$,并且
312 | $$
313 | \begin{equation}
314 | \left(J^TJ + \lambda J\right)p = -J^Tr.
315 | \tag{10.33}
316 | \end{equation}
317 | $$
318 | 因此下面的引理可以看作定理4.1的一个推论。
319 |
320 | **引理 10.2** 向量$p^{\mathrm{LM}}$是信任域子问题
321 | $$
322 | \min_p \|J p + r\|_2^2, \quad \mbox{s.t.} \|p\|_2 \leq \Delta
323 | $$
324 | 的解当且仅当$p^{\mathrm{LM}}$可行且存在$\lambda \geq 0$使得
325 | $$
326 | \begin{eqnarray}
327 | \left(J^TJ + \lambda I\right)p^\mathrm{LM} &=& -J^Tr, \tag{10.34a}\\
328 | \lambda\left(\Delta - \left\|p^\mathrm{LM}\right\|_2\right) &=& 0. \tag{10.34b}
329 | \end{eqnarray}
330 | $$
331 | **证明** 略。
332 |
333 | 注意(10.33)实际上是线性最小二乘问题
334 | $$
335 | \begin{equation}
336 | \min_p \frac12 \left\|\left[\begin{array}{c}J\\\sqrt{\lambda}I\end{array}\right]p+\left[\begin{array}{c}r\\0\end{array}\right]\right\|_2^2.\tag{10.35}
337 | \end{equation}
338 | $$
339 | 的正规方程组,和Gauss-Newton法类似的,我们这里考虑一下如何避免计算$J^TJ$并对上述方程系数做Cholesky分解。
340 |
341 | ### Levenberg-Marquardt 方法的实现
342 |
343 | 对引理10.2中的$\Delta$,我们可以用第四章中介绍的求根方法寻找对应的$\lambda$,这里当$\lambda^{(l)}$为正时,对$B = J^TJ$我们有正定性保证,但仍然可以通过(10.35)设计一种特殊的QR分解来提高效率和稳定性:
344 | $$
345 | \begin{equation}
346 | \left[\begin{array}{c}R_\lambda\\0\end{array}\right] = Q_\lambda^T\left[\begin{array}{c}J\\\sqrt{\lambda}I\end{array}\right], \tag{10.36}
347 | \end{equation}
348 | $$
349 | 其中$Q_\lambda$是正交阵,$R_\lambda$是上三角阵。
350 |
351 | (注:算法上,即通过一系列正交变换,也即Householder变换,使得$\left[\begin{array}{c} J \\ \sqrt{\lambda}I\end{array}\right]$上三角化,注意这是个长方阵,因此下方会出现零矩阵块。)
352 |
353 | 这种分解得到的$R_\lambda$满足
354 | $$
355 | R_\lambda^TR_\lambda = J^TJ + \lambda I.
356 | $$
357 | 具体的做法是通过Householder变换完成下面的分解:
358 | $$
359 | \begin{equation}
360 | J = Q\left[\begin{array}{c}R\\0\end{array}\right]. \tag{10.37}
361 | \end{equation}
362 | $$
363 | 于是我们就得到
364 | $$
365 | \begin{equation}
366 | \left[\begin{array}{c}R\\0\\ \sqrt{\lambda} I\end{array}\right] = \left[\begin{array}{cc}Q^T & \\ & I\end{array}\right]\left[\begin{array}{c}J \\ \sqrt{\lambda}I\end{array}\right].\tag{10.38}
367 | \end{equation}
368 | $$
369 | 左端的矩阵下方有一个子阵$\lambda I$对应了$n$个非零,而这些非零元可以继续用$n(n + 1)/2$次Givens旋转变换利用用$R$的对角元消去。具体做法是:
370 |
371 | + 用$R$的第$n$行对$\sqrt{\lambda}I$的第$n$行做旋转,消去$\sqrt{\lambda}I$的$(n, n)$元;
372 | + 用$R$的第$n - 1$行对$\sqrt{\lambda}I$的第$n - 1$行做旋转,消去$\sqrt{\lambda}I$的$(n - 1, n - 1)$元,但同时会将其$(n - 1, n)$元填充为非零。再用$R$的第$n$行对$\sqrt{\lambda}I$的第$n - 1$行做旋转,消去新增的非零元$(n - 1, n)$;
373 | + 如此自下而上,消去全部$\sqrt{\lambda}I$块。
374 |
375 | 如果我们把所有的Givens变换的算子叠加作用都用$\bar{Q}_\lambda$表示,那么有
376 | $$
377 | \bar{Q}_\lambda^T\left[\begin{array}{c}R\\0\\ \sqrt{\lambda}I\end{array}\right]=\left[\begin{array}{c}R_\lambda \\ 0\\ 0\end{array}\right],
378 | $$
379 | 而最终完成了(10.36)的分解,其中
380 | $$
381 | Q_\lambda = \left[\begin{array}{cc}Q &\\&I\end{array}\right]\bar{Q}_\lambda.
382 | $$
383 | 注意在求根过程中,当$\lambda$变化时,我们不需要重做Householder变换部分(主要计算量),因此当$m >> n$时,节省了大量的时间。
384 |
385 | 最小二乘问题的一个特点是数据往往极差很大。比如某些数据可能是$10^4$级别的,而另一些却是$10^{-6}$级别。这会导致额外的舍入误差和数值不稳定。一个解决的思路是用椭球型的(ellipsoidal)信任域去代替球型的(spherical)信任域,也即将信任域问题改为:
386 | $$
387 | \begin{equation}
388 | \min_p \frac12 \left\|J_k p + r_k\right\|_2^2, \quad \mbox{s.t.} \|D_kp\|_2 \leq \Delta_k,
389 | \tag{10.39}
390 | \end{equation}
391 | $$
392 | 这里对角阵$D_k$实际上起着预处理阵的效果,它的构建也和预处理类似(并没有特别好的一般性方法)。注意(10.39)的解实际上满足的方程是
393 | $$
394 | \begin{equation}
395 | \left(J_k^TJ_k + \lambda D_k^2\right)p_k^\mathrm{LM} = -J_k^T r_k,
396 | \tag{10.40}
397 | \end{equation}
398 | $$
399 | 或等价地,线性最小二乘问题为:
400 | $$
401 | \begin{equation}
402 | \min_p \left\|\left[\begin{array}{c}J_k\\ \sqrt{\lambda} D_k\end{array}\right]p + \left[\begin{array}{c}r_k\\0\end{array}\right]\right\|_2^2. \tag{10.41}
403 | \end{equation}
404 | $$
405 | 这里$D_k$可能在迭代过程中不断调整。这个算法的具体讨论已经超出本书范围,并进入优化算法的科研前沿,有兴趣的同学请自行参阅Seber和Wild[280]等文献。
406 |
407 | 当$J(x)$矩阵是稀疏的时候,我们要注意在整个算法过程中,特别是求解(10.31)或(10.39)过程中要保持矩阵的稀疏性。这时可以考虑引入CG法的策略。这时用$J_k^TJ_k$代替真实的Hessian阵就有了更进一步的意义。
408 |
409 | LM方法的全局收敛性基本上是信任域收敛性的一个特列,我们不再详述,感兴趣的同学自己看书(这里跳过了一节)。
410 |
411 | ### 高残量问题的方法
412 |
413 | 如果$r(x)$相对而言不是一个小量,那么在$\nabla f^2(x)$的第二项就不能舍弃。于是我们之前讨论的Gauss-Newton和Levenberg-Marquardt方法都失去了前提。这时唯有回归Newton法或拟Newton法。然而后者的工作量确实很大。一个合理的策略,就是我们之前也提到过的混合(hybrid)法。也就是当残量变小时,启动GN或LM方法,而当残量变大时,启动Newton或拟Newton法。这些问题都已经涉及前沿领域,发表的方法很多,但是否符合你的实际需求则需要自己判断。Fletcher和Xu在[101]中给出的思路是维持一个正定的Hessian阵的近似,$B_k$。如果GN方法在一步当中对$f$有一个显著的下降(用一个固定的因子决定),则采用一步GN方法的结果,并将$B_k$用$J_k^TJ_k$覆盖(因为拟Newton法需要上一步的Hessian近似);否则,就以$B_k$计算一个拟Newton方向,并用线搜索方法得到$x_{k + 1}$。无论如何,我们都始终采用类似BFGS的方法迭代得到新的$B_{k + 1}$。这个方法在实际计算中表现不错。
414 |
415 | 第二个混合的思路是直接对
416 | $$
417 | S_k = \sum_{j = 1}^mr_j(x_k)\nabla^2 r_j(x_k)
418 | $$
419 | 展开类似拟Newton方法的递推估计,比如Dennis, Gay 和 Welsch [90]给出的公式如下:
420 | $$
421 | S_{k + 1} = S_k + \frac{\left(y^\#-S_ks\right)y^T+y\left(y^\# - S_ks\right)^T}{y^Ts} - \frac{\left(y^\# - S_ks\right)^Ts}{\left(y^Ts\right)^2}yy^T\tag{10.43}
422 | $$
423 | 其中
424 | $$
425 | \begin{eqnarray}
426 | s &=& x_{k + 1} - x_k,\\
427 | y &=& J_{k + 1}^Tr_{k + 1} - J_k^Tr_k,\\
428 | y^\# &=& J_{k + 1}^Tr_{k + 1} - J_k^Tr_{k + 1}.
429 | \end{eqnarray}
430 | $$
431 |
432 | ## 正交距离回归(Orthogonal Distance Regression)
433 |
434 | 这种思想基于这样的假设,即我们的回归是"正确的"。也就是$\phi(x;t_j)$和$y_j$的不一致主要是由输入和输出的扰动决定的。这个时候,我们设法在最小化“误差投影”的意义下得到参数回归估计。也就是,假设
435 | $$
436 | \begin{equation}
437 | y_j = \phi(x; t_j + \delta_j) + \epsilon_j, j = 1, 2, \cdots, m,
438 | \tag{10.44}
439 | \end{equation}
440 | $$
441 | 这里$\delta_j$和$\epsilon_j$都是未知的小扰动。而回归的具体模型为
442 | $$
443 | \begin{equation}
444 | \min_{x, \delta_j, \epsilon_j} \frac12 \sum_{j = 1}^m \omega_j^2\epsilon^2 + d_j^2\delta_j^2, \quad \mbox{s.t.} (10.44).
445 | \tag{10.45}
446 | \end{equation}
447 | $$
448 | 这里$\omega_j$和$d_j$称为权重(weight),一般从模型或经验获得(嗯?!神经网络警告...)注意这里(10.45)将(10.44)当作约束。
449 |
450 | 要解决上述问题,我们实际上需要求解的无约束问题如下(其实一直有一点超纲,这些都是约束优化的方法):
451 | $$
452 | \begin{equation}
453 | \min_{x, \delta} F(x, \delta)=\frac12\sum_{j = 1}^m w_j^2\left[y_j - \phi(x;t_j + \delta_j)\right]^2 + d_j^2\delta_j^2=\frac12\sum_{j = 1}^{2m}r_j^2(x, \delta),
454 | \tag{10.46}
455 | \end{equation}
456 | $$
457 | 其中$\delta = (\delta_1, \delta_2, \cdots, \delta_m)^T$,以及
458 | $$
459 | \begin{equation}
460 | r_j(x, \delta) = \begin{cases}w_j\left[\phi(x; t_j + \delta_j) - y_j\right], &j = 1, 2, \cdots, m.\\
461 | d_{j - m}\delta_{j - m}, & j = m + 1, \cdots, 2m.\end{cases}
462 | \tag{10.47}
463 | \end{equation}
464 | $$
465 | 现在(10.46)已经成为一个$m + n$维($\delta$也是未知量)的最小二乘问题,我们可以用之前提到的所有方法去求解。但是直接求解这个问题的代价有点大。
466 |
467 | 好在(10.46)的Jacobi矩阵是有特殊结构可以在CG或LM方法中加以利用的。注意到
468 | $$
469 | \frac{\partial r_j}{\partial \delta_i} = \frac{\partial \left[\phi(x;t_j + \delta_j) - y_j\right]}{\partial \delta_i} = 0, i, j = 1, 2, \cdots, m, i \neq j,
470 | $$
471 | 且
472 | $$
473 | \frac{\partial r_j}{\partial x_i} = 0, j = m + 1, m + 2, \cdots, 2m, i = 1, 2, \cdots, n.
474 | $$
475 | 以及对$j = 1, 2, \cdots, m$和$i = 1, 2, \cdots, m$,有
476 | $$
477 | \frac{\partial r_{m + j}}{\partial \delta_j} = \left\{\begin{array}{rr}d_j & i = j, \\ 0 & \mbox{其它}.\end{array}\right.
478 | $$
479 | 因此,我们可以对Jacobi矩阵做如下分块
480 | $$
481 | \begin{equation}
482 | J(x, \delta) = \left[\begin{array}{cc}\hat{J} & V\\0 & D\end{array}\right],
483 | \tag{10.48}
484 | \end{equation}
485 | $$
486 | 其中$V$和$D$是$m \times m$阶对角阵,$\hat{J}$是$m \times n$阶矩阵,是函数$w_j\phi(t_j + \delta_j; x)$关于$x$的偏导数(Jacobi阵)。Boggs,Byrd和Schnabel[30]建议用LM方法去求解(10.46),而对应(10.48),将步长和残量都做对应划分:
487 | $$
488 | p = \left[\begin{array}{c}p_x \\p_\delta\end{array}\right], r = \left[\begin{array}{c}\hat{r_1}\\ \hat{r}_2\end{array}\right],
489 | $$
490 | 于是对应的正规方程组为
491 | $$
492 | \left[\begin{array}{cc}\hat{J}^T\hat{J}+\lambda I & \hat{J}^TV\\V\hat{J}&V^2 + D^2 + \lambda I\end{array}\right]\left[\begin{array}{c} p_x\\p_\delta\end{array}\right]=-\left[\begin{array}{c}\hat{J}^T\hat{r}_1\\V\hat{r}_1+D\hat{r}_2\end{array}\right].
493 | \tag{10.49}
494 | $$
495 | 注意到右下角这块$V^2 + D^2 + \lambda I$是一个对角阵,因此$p_\delta$的计算是容易的。也就是我们实际上只需要求解一个$n \times n$阶的线性系统即可。
496 |
497 |
--------------------------------------------------------------------------------
/lecture_notes/Conjugate_Gradient_Methods.md:
--------------------------------------------------------------------------------
1 | # 共轭梯度法(Conjugate Gradient Methods, CG)
2 |
3 | 本章讨论的共轭梯度法,既是一种求解大规模稀疏线性系统的方法,也是一种求解非线性优化问题的基本方法。本章我们会同时讨论它的线性和非线性算法。
4 |
5 | 线性的CG法最早由Hestenes和Stiefel在1950年代作为一种针对对称正定线性系统的求解算法引入。有别于Gauss消去法,CG法的效率由系数矩阵的特征分布决定,因此适当的预处理显得格外重要。最早的非线性CG算法则有Fletcher和Reeves于1960年代引入,它的一个早期应用就是针对大规模非线性优化问题。CG法的一个特点是它不需要存储矩阵(作为优化算法时),同时它的算法效率比最速下降法高。
6 |
7 |
8 |
9 | ## 线性CG法
10 |
11 | 在本节,我们集中讨论线性算法,因此默认算法和模型都是线性的,不再刻意强调。最早的CG法是针对如下的线性系统的求解算法:
12 | $$
13 | \begin{equation}
14 | Ax = b,
15 | \tag{5.1}
16 | \end{equation}
17 | $$
18 | 其中$A$是$n\times n$的对称正定矩阵。问题(5.1)等价于优化问题:
19 | $$
20 | \begin{equation}
21 | \min \phi(x) \overset{\mathrm{def}}=\frac12 x^TAx-b^Tx,
22 | \tag{5.2}
23 | \end{equation}
24 | $$
25 | 显然,问题(5.1)和(5.2)是同解的。这一点不难通过
26 | $$
27 | \begin{equation}
28 | \nabla \phi(x)=Ax-b\overset{\mathrm{def}}=r(x)
29 | \tag{5.3}
30 | \end{equation}
31 | $$
32 | 看出。特别地,对$x=x_k$,我们记
33 | $$
34 | \begin{equation}
35 | r_k=Ax_k-b,
36 | \tag{5.4}
37 | \end{equation}
38 | $$
39 |
40 | ## 共轭方向法(conjugate direction methods, CD)
41 |
42 | 首先给出向量组共轭的概念:向量组$\{p_0, p_1, \cdots, p_{n-1}\}$被称为是关于$n$阶对称正定矩阵$A$共轭的,若
43 | $$
44 | \begin{equation}
45 | p_i^TAp_j = 0, \forall i \neq j.
46 | \tag{5.5}
47 | \end{equation}
48 | $$
49 | 注:显然,共轭向量组是线性无关向量组,故至多包含$n$个向量。
50 |
51 |
52 |
53 | 假设我们已经有一组共轭向量组,那么我们依次沿个向量对$\phi$的最小值做精确搜索,即
54 | $$
55 | \begin{equation}
56 | x_{k+1}=x_k+\alpha_kp_k,
57 | \tag{5.6}
58 | \end{equation}
59 | $$
60 | 其中$\alpha_k$是精确步长
61 | $$
62 | \begin{equation}
63 | \alpha_k=-\frac{r_k^Tp_k}{p_k^TAp_k},
64 | \tag{5.7}
65 | \end{equation}
66 | $$
67 | 则不论初值如何取,第$n$步的结果$x_n$就是全局最优解$x^*$。这件事情可以整理成如下定理:
68 |
69 | 注:这里
70 | $$
71 | \begin{array}{ll}
72 | & (A(x_k+\alpha_kp_k)-b)^Tp_k = 0 \\
73 | \Rightarrow & (Ax_k - b)^Tp_k + \alpha_kp_k^TAp_k = 0\\
74 | \Rightarrow & \alpha_k=-\frac{r_k^Tp_k}{p_k^TAp_k}.
75 | \end{array}
76 | $$
77 |
78 |
79 |
80 |
81 |
82 | **定理5.1** 对任意$x_0\in\mathbb{R}^n$,由公式(5.6)和(5.7)产生的序列$\{x_k\}$,$n$步收敛至线性系统(5.1)的最优解$x^*$。(同时也是(5.2)的最优解。)
83 |
84 |
85 |
86 | **证明:**由$\{p_i, i = 0, \cdots, n-1\}$线性无关,故向量$x^* - x_0 \in \mathbb{R}^n$可由其线性表出,即
87 | $$
88 | x^* - x_0 = \sigma_0 p_0 + \sigma_1 p_1 + \cdots + \sigma_{n - 1} p_{n - 1},
89 | $$
90 |
91 | 其中$\sigma_k \in \mathbb{R}$,$k = 0, 1, \cdots, n - 1$。上式两边同乘以$p_k^TA$再运用共轭性质(5.5),有
92 | $$
93 | \sigma_k = \frac{p_k^T A (x^* - x_0)}{p_k^T A p_k}.
94 | \tag{5.8}
95 | $$
96 | 注:由(5.5),$p_k^TAp_i = 0$,除了$i = k$以外。
97 |
98 | 若$x_k$由(5.6)和(5.7)产生,则
99 | $$
100 | x_k = x_0 + \alpha_0 p_0 + \alpha_1 p_1 + \cdots + \alpha_{k - 1} p_{k - 1}.
101 | $$
102 | 同样地,上式两边同乘以$p_k^TA$再运用共轭性质(5.5),有
103 | $$
104 | p_k^T A (x_k - x_0) = 0,
105 | $$
106 | 因此
107 | $$
108 | p_k^T A (x^* - x_0) = p_k^T A (x^* - x_k + x_k - x_0) = p_k^T A (x^* - x_k) + p_k^T A (x_k - x_0),
109 | $$
110 | 注:上式第二项是0。
111 |
112 | 即
113 | $$
114 | p_k^T A (x^* - x_0) = p_k^T A (x^* - x_k) = p_k^T (b - A x_k) = -p_k^T r_k.
115 | $$
116 | 注:$A x^* = b$,$r_k = \nabla \phi(x_k) = A x_k - b$。
117 |
118 | 由(5.8),$\sigma_k = \alpha_k$。$\Box$
119 |
120 | 在进一步讨论如何产生共轭组之前,我们先考虑一下共轭方向法的几何意义。
121 |
122 | 如果(5.2)的矩阵$A$是一个对角阵,那么几何上$\phi(x)$的等高线就是一系列长短轴和坐轴平行的(超)椭球。于是我们只要沿各个坐标方向$e_1, e_2, \cdots, e_n$做精确搜索,那么至多$n$步就能收敛到$\phi(\cdot)$的全局最优解。但如果$A$不是对角阵,那么其等高线仍然是椭球,但长短轴不再和坐标轴平行。我们也不能沿坐标方向做$n$步精确搜索就得到全局最优解。书上提供了2D的例子图像,大家可以自己在Matlab中绘制一下。在这种情况下,一个明显的思路是通过(线性)坐标变换将系数为$A$的二次型$\phi(\cdot)$变换为对角化二次型,也即定义$\hat{x}$满足
123 | $$
124 | \begin{equation}
125 | \hat{x} = S^{-1}x,
126 | \tag{5.9}
127 | \end{equation}
128 | $$
129 | 其中$S$是$n \times n$矩阵,且
130 | $$
131 | S = \left[p_0, p_1, \cdots, p_{n - 1}\right],
132 | $$
133 | 这里$S$的列向量$\{p_0, p_1, \cdots, p_{n - 1}\}$是关于$A$两两共轭的向量组。于是(5.2)对应的变换为
134 | $$
135 | \hat{\phi}(\hat{x}) \overset{\mathrm{def}}{=} \phi(S\hat{x}) = \frac 1 2 \hat{x}^T(S^T A S)\hat{x}-(S^Tb)^T\hat{x}.
136 | $$
137 | 注意这里$S^TAS$是对角阵,因此在此变换下,我们可以实现沿坐标轴$\hat{e}_1, \hat{e_2}, \cdots, \hat{e}_n$做$n$步精确搜索得到$\phi(\hat{x})$的全局最优解。等价于在原$x$坐标系下,沿
138 | $$
139 | p_{i - 1} = S\hat{e}_i
140 | $$
141 | 做搜索。也即,在$x$坐标系下,沿$\{p_0, p_1, \cdots, p_{n - 1}\}$做$n$步精确搜索,会得到$\phi(x)$的全局最优解。
142 |
143 | 这里我们顺便提一下一个接下去会用来简化算法的事实:
144 | $$
145 | \begin{equation}
146 | r_{k + 1} = r_k + \alpha_k A p_k.
147 | \tag{5.10}
148 | \end{equation}
149 | $$
150 | 注:由(5.4),
151 | $$
152 | \begin{array}{rcl}
153 | r_{k + 1} &=& Ax_{k + 1} - b\\
154 | & = & A(x_k + \alpha_kp_k) - b\\
155 | & = & Ax_k - b + \alpha_kAp_k\\
156 | & = & r_k + \alpha_kAp_k.
157 | \end{array}
158 | $$
159 | 下面这个定理进一步证明了不但共轭方向法的最终解是最优的,而且它的每一步解$x_k$在其走过的方向张成的子空间中也是最优的。
160 |
161 | **定理 5.2** 子空间扩充(Expanding Subspace Minimization) 令$x_0\in\mathbb{R}^n$是任意初值,假设序列$\{x_k\}$是由共轭方向法(5.6)和(5.7)产生,则
162 | $$
163 | \begin{equation}
164 | r_k^Tp_i= 0, i = 0, 1, \cdots, k - 1,
165 | \tag{5.11}
166 | \end{equation}
167 | $$
168 | 并且$x_k$是正定二次问题$\phi(x) = \frac12x^TAx - b^Tx$在子空间
169 | $$
170 | \begin{equation}
171 | \{x \left| x = x_0 + \mathrm{span}\{p_0, p_1, \cdots, p_{k - 1}\}\right.\}
172 | \tag{5.12}
173 | \end{equation}
174 | $$
175 | 上的最优解。
176 |
177 | **证明:** 先证点$\tilde{x}$是$\phi$在子空间(5.12)的最优解当且仅当
178 | $$
179 | r(\tilde{x})^Tp_i = 0,i = 0, 1, \cdots, k - 1.
180 | $$
181 | 定义
182 | $$
183 | h(\sigma) = \phi(x_0 + \sigma_0p_0 + \cdots + \sigma_{k - 1}p_{k - 1}),
184 | $$
185 | 其中$\sigma = (\sigma_0, \sigma_1, \cdots, \sigma_{k - 1})^T$。因为$h(\sigma)$是严格凸的,所以有唯一的极值点$\sigma^*$满足
186 | $$
187 | \frac{\partial h(\sigma^*)}{\partial \sigma_i} = 0, i = 0, 1, \cdots, k - 1.
188 | $$
189 | 由链式法则及(5.3),有
190 | $$
191 | r(\tilde{x})^Tp_i=\nabla\phi(x_0 + \sigma^*_0p_0 + \cdots + \sigma^*_{k - 1}p_{k - 1})^Tp_i = 0, i = 0, 1, \cdots, k - 1.
192 | $$
193 | 注:由链式法则,
194 | $$
195 | \frac{\partial h(\sigma^*)}{\partial \sigma_i} = \nabla\phi(x_0 + \sigma^*_0p_0 + \cdots + \sigma^*_{k - 1}p_{k - 1})^Tp_i, i = 0, 1, \cdots, k - 1.
196 | $$
197 | 再证$x_k$满足(5.11)。对$k = 1$,我们知道
198 | $$
199 | x_1 = x_0 + \alpha_0p_0
200 | $$
201 | 是$\phi$沿$p_0$方向的最小值,且满足$r_1^Tp_0 = 0$。假设对$i = 0, 1, \cdots, k - 2$,均有$r_{k - 1}^T p_i = 0$,则
202 | $$
203 | r_k = r_{k - 1} + \alpha_{k - 1}A p_{k - 1},
204 | $$
205 | 因此由$\alpha_{k - 1}$定义(5.7),有
206 | $$
207 | p^T_{k - 1} r_k = p^T_{k - 1} r_{k - 1} + \alpha_{k - 1}p_{k - 1}^T A p_{k - 1} = 0.
208 | $$
209 | 同理,对$i = 0, 1, \cdots, k - 2$,有
210 | $$
211 | p_i^Tr_k = p_i^Tr_{k - 1} + \alpha_{k - 1}p_i^TAp_{k - 1} = 0,
212 | $$
213 | 这里$p_i^Tr_{k - 1} = 0$是因为归纳假设,而$\alpha_{k - 1}p_i^TAp_{k - 1} = 0$则是由于共轭性质。由此我们已经证明对$i = 0, 1, \cdots, k - 1$有$r_k^Tp_i = 0$。由归纳法,命题得证。$\Box$
214 |
215 | 这个定理告诉我们,$r_k$和之前的全部搜索方向都是正交的。(换言之,第$k$步的残量在之前所有已经搜索过的方向上投影都是零,也即之前的方向上的搜索都已经完成,是最优的。)现在我们只要有一组关于$A$的极大共轭方向组,我们就能用共轭方向法在$n$步完成$\phi(x)$的最小值搜索。比如,$A$的全部特征向量显然符合要求。但是,这件事情本身的代价就不低于寻找$\phi(x)$的最小值或者求解线性方程组$Ax=b$。一个更好的方法是去构造一组极大共轭方向组。我们在高等代数中,学习过如何构造极大正交组的Schmidt方法,而现在,Gram-Schmidt方法可以看作是在共轭组上的推广。由此,我们可以在共轭方向法的基础上,一边构建共轭组,一边沿共轭方向搜索$\phi(x)$的全局最优解。这就是共轭梯度法(CG)。
216 |
217 | ### CG法的基本性质
218 |
219 | CG法实现的关键是在已知$p_0, p_1, \cdots, p_{k - 1}$的基础上构建$p_k$。而实际上,和用Gram方法构建正交组一样,我们只需要利用$p_{k - 1}$和$r_k$就够了。更早的方向并不需要用到,因为$r_k$的性质,$p_k$会自然和它们共轭。令
220 | $$
221 | \begin{equation}
222 | p_k = -r_k + \beta_k p_{k - 1},
223 | \tag{5.13}
224 | \end{equation}
225 | $$
226 | 这里我们通过参数$\beta_k$来调节使得$p_k$在这个组合下和$p_{k - 1}$共轭,即两边同乘以$p_{k - 1}^TA$,有
227 | $$
228 | p_{k - 1}^TAp_k = -p_{k - 1}^TAr_k + \beta p_{k - 1}^TAp_{k - 1} = 0,
229 | $$
230 | 于是
231 | $$
232 | \beta = \frac{r_k^TAp_{k - 1}}{p_{k - 1}^TAp_{k - 1}}.
233 | $$
234 | 而对$p_0$,我们可以选取在$x_0$的最速下降方向。由此,我们得到CG法的具体形式:
235 |
236 | **算法5.1**(简单CG法, CG-Preliminary Version)
237 |
238 | 给定$x_0$;
239 |
240 | 设置$r_0 \leftarrow Ax_0 - b$,$p_0 \leftarrow -r_0$,$k \leftarrow 0$;
241 |
242 | while $r_k \neq 0$
243 | $$
244 | \begin{equation}
245 | \alpha_k \leftarrow -\frac{r_k^Tp_k}{p_k^TAp_k};
246 | \tag{5.14a}
247 | \end{equation}
248 | $$
249 |
250 | $$
251 | \begin{equation}
252 | x_{k + 1} \leftarrow x_k + \alpha_k p_k;
253 | \tag{5.14b}
254 | \end{equation}
255 | $$
256 |
257 | $$
258 | \begin{equation}
259 | r_{k + 1} \leftarrow Ax_{k + 1} - b;
260 | \tag{5.14c}
261 | \end{equation}
262 | $$
263 |
264 | $$
265 | \begin{equation}
266 | \beta_{k + 1} \leftarrow \frac{r_{k + 1}^TAp_k}{p_k^TAp_k};
267 | \tag{5.14d}
268 | \end{equation}
269 | $$
270 |
271 | $$
272 | \begin{equation}
273 | p_{k + 1} \leftarrow -r_{k + 1} + \beta_{k + 1} p_k;
274 | \tag{5.14e}
275 | \end{equation}
276 | $$
277 |
278 | $$
279 | k \leftarrow k + 1;
280 | $$
281 |
282 | end while;
283 |
284 | 这个算法是之前叙述的直接表示,适合用于理解CG法的性质。但是用于实际计算和编程时,应该采用我们后面将会介绍的进阶版本。下面的定理给出了CG法的两个重要性质:首先,全部残量$r_i$是两两正交的,$i = 0, 1, \cdots, n -1$;其次,直到$k$步的残量$r_k$和搜索方向$p_k$各自分别张成的线性子空间是同一个:
285 | $$
286 | \begin{equation}
287 | \Kappa(r_0, k) \overset{\mathrm{def}}{=} \mathrm{span}\{r_0, Ar_0, \cdots, A^kr_0\}.
288 | \tag{5.15}
289 | \end{equation}
290 | $$
291 | 该子空间称为$k$阶克基于$r_0$的雷洛夫子空间(the Krylov subspace of degree $k$ for $r_0$)。
292 |
293 | **定理 5.3** 假设CG迭代的第$k$步没有收敛到$\phi(x)$的全局极小值$x^*$,则有:
294 | $$
295 | \begin{eqnarray}
296 | r_k^Tr_i &=& 0, i = 0, 1, \cdots, k - 1, \tag{5.16}\\
297 | \mathrm{span}\{r_0, r_1, \cdots, r_k\} &=& \mathrm{span}\{r_0, Ar_0, \cdots, A^kr_0\}, \tag{5.17}\\
298 | \mathrm{span}\{p_0, p_1, \cdots, p_k\} &=& \mathrm{span}\{r_0, Ar_0, \cdots, A^kr_0\}, \tag{5.18}\\
299 | p_k^TAp_i &=& 0, i = 0, 1, \cdots, k - 1. \tag{5.19}
300 | \end{eqnarray}
301 | $$
302 | 因此,序列$\{x_k\}$至多$n$步收敛到$x^*$。
303 |
304 | **证明:**归纳法(induction)。结论(5.17)和(5.18)对$k = 0$是平凡的(trivial)。而由算法(5.19)对$k = 1$成立。现假设以上结论对$k$成立(归纳假设,the induction hypothesis),则需证$k + 1$的情形亦成立。
305 |
306 | 事实上,由归纳假设,
307 | $$
308 | r_k \in \mathrm{span}\{r_0, Ar_0, \cdots, A^kr_0\}, p_k \in \mathrm{span}\{r_0, Ar_0, \cdots, A^kr_0\},
309 | $$
310 | 对第二式两边同乘以$A$,有
311 | $$
312 | \begin{equation}
313 | Ap_k \in \mathrm{span}\{Ar_0, A^2r_0, \cdots, A^{k+1}r_0\}.
314 | \tag{5.20}
315 | \end{equation}
316 | $$
317 | 再由(5.10)及第一式,有
318 | $$
319 | r_{k + 1} \in \mathrm{span}\{r_0, Ar_0, \cdots, A^{k + 1}r_0\}.
320 | $$
321 | 因此
322 | $$
323 | \mathrm{span}\{r_0, r_1, \cdots, r_{k + 1}\} \subset \mathrm{span}\{r_0, Ar_0, \cdots, A^{k + 1}r_0\}.
324 | $$
325 | 另一面,由(5.18),我们有
326 | $$
327 | A^{k + 1} r_0 = A(A^k r_0)\in \mathrm{span}\{Ap_0, Ap_1, \cdots, Ap_k\},
328 | $$
329 | 再由(5.10),
330 | $$
331 | Ap_i = (r_{i + 1} - r_i) / \alpha_i, i = 0, 1, \cdots, k,
332 | $$
333 | 于是
334 | $$
335 | A^{k + 1}r_0 \in \mathrm{span}\{r_0, r_1, \cdots, r_{k + 1}\},
336 | $$
337 | 即
338 | $$
339 | \mathrm{span}\{r_0, Ar_0, \cdots, A^{k + 1}r_0\} \subset \mathrm{span}\{r_0, r_1, \cdots, r_{k + 1}\},
340 | $$
341 | 因此(5.17)得证。
342 |
343 | 而用类似的从$k$到$k + 1$的推导可证明(5.18),即:
344 | $$
345 | \begin{array}{rcll}
346 | && \mathrm{span}\{p_0, p_1, \cdots, p_k, p_{k + 1}\} &\\
347 | &=& \mathrm{span}\{p_0, p_1, \cdots, p_k, r_{k + 1}\} & \mbox{由(5.14e)}\\
348 | &=& \mathrm{span}\{r_0, Ar_0, \cdots, A^kr_0, r_{k + 1}\} & \mbox{由归纳假设}\\
349 | &=& \mathrm{span}\{r_0, r_1, \cdots, r_k, r_{k + 1}\} & \mbox{由(5.17)}\\
350 | & =& \mathrm{span}\{r_0, Ar_0, \cdots, A^{k + 1}r_0\}. & \mbox{由(5.17)}
351 | \end{array}
352 | $$
353 | 接下去继续归纳证明(5.19)。对(5.14e)两边同乘以$Ap_i$,$i = 0, 1, \cdots, k$,有
354 | $$
355 | \begin{equation}
356 | p_{k + 1}^T Ap_i = -r_{k + 1}^TAp_i + \beta_{k + 1}p_k^TAp_i.
357 | \tag{5.21}
358 | \end{equation}
359 | $$
360 | 由$\beta_k$定义(5.14d),上式右端当$i = k$时为零。而对$i \leq k -1$,由(5.19)的归纳假设,$p_0, p_1, \cdots, p_k$均两两共轭,由定理5.2,
361 | $$
362 | \begin{equation}
363 | r_{k + 1}^Tp_i = 0, i = 0, 1, \cdots, k.
364 | \tag{5.22}
365 | \end{equation}
366 | $$
367 | 再由(5.18),我们有对$i = 0, 1, \cdots, k - 1$,成立
368 | $$
369 | \begin{eqnarray}
370 | Ap_i \in A \mathrm{span}\{r_0, Ar_0, \cdots, A^ir_0\} &=& \mathrm{span}\{Ar_0,A^2r_0, \cdots, A^{i + 1}r_0\}\\
371 | &\subset& \mathrm{span}\{p_0, p_1, \cdots, p_{i + 1}\}.
372 | \tag{5.23}
373 | \end{eqnarray}
374 | $$
375 | 联合(5.22)和(5.23),我们有
376 | $$
377 | r_{k + 1}^TAp_i = 0, i = 0, 1, \cdots, k - 1,
378 | $$
379 | 因此对$i = 0, 1, \cdots, k - 1$,(5.21)的第一项为零。再由(5.19)的归纳假设,其第二项也为零。综合有
380 | $$
381 | p_{k + 1}^TAp_i = 0, i = 0, 1, \cdots, k.
382 | $$
383 | 也即(5.19)成立。
384 |
385 | 于是CG法产生的各搜索方向确实是共轭的,由定理5.1,此方法至多$n$步收敛至全局最优解。
386 |
387 | 而对(5.16)的证明不需要归纳法。因为$\{p_i\}$是共轭组,由(5.11)我们有
388 | $$
389 | r_k^Tp_i = 0, i = 0, 1, \cdots, k - 1; k = 1, 2, \cdots, n - 1.
390 | $$
391 | 由(5.14e),
392 | $$
393 | p_i = -r_i + \beta_ip_{i - 1},
394 | $$
395 | 于是有
396 | $$
397 | r_i \in \mathrm{span}\{p_i, p_{i - 1}\}, i = 1, 2, \cdots, k - 1.
398 | $$
399 | 于是由
400 | $$
401 | r_k^Tr_0 = -r_k^Tp_0 = 0
402 | $$
403 | 以及(5.11),(5.16)成立。$\Box$
404 |
405 | 注:这里
406 | $$
407 | r_k^Tr_i = r_k^T(a_1p_i + a_0p_{i - 1}),
408 | $$
409 | 由(5.11),皆为零。这个定理的证明过程并不复杂,也不困难,主要阅读障碍可能来自语言。这是一篇很不错的专业英语范文。
410 |
411 | 这个证明的起点是$p_0$必须是$x_0$的最速下降方向$-r_0$,否则结论不成立。而现在我们知道这里两两共轭的是各搜索方向$p_k$,而各梯度$r_k$实际上是两两正交的。因此"共轭梯度法"其实有歧义。实际上是搜索方向关于$A$共轭而不是梯度。
412 |
413 | ### 实用(A Practical Form)共轭梯度法
414 |
415 | 利用定理5.2和5.3,我们将CG法改造的更加适用于编程实现。首先由(5.14e)和(5.11),可以将(5.14a)改为
416 | $$
417 | \alpha_k = \frac{r_k^Tr_k}{p_k^TAp_k}.
418 | $$
419 | 其次,由(5.10),
420 | $$
421 | \alpha_k A p_k = r_{k + 1} - r_k,
422 | $$
423 | 于是再次应用(5.14e)和(5.11),我们可以简化$\beta_{k + 1}$的形式:
424 | $$
425 | \beta_{k + 1} = \frac{r_{k + 1}^Tr_{k + 1}}{r_k^Tr_k}.
426 | $$
427 | 最终,我们将算法改造成:
428 |
429 | **算法5.2**(CG)
430 |
431 | 给定$x_0$;
432 |
433 | 设置$r_0 \leftarrow Ax_0 - b$,$p_0 \leftarrow -r_0$,$k \leftarrow 0$;
434 |
435 | while $r_k \neq 0$
436 | $$
437 | \begin{equation}\alpha_k \leftarrow \frac{r_k^Tr_k}{p_k^TAp_k};\tag{5.24a}\end{equation}
438 | $$
439 |
440 | $$
441 | \begin{equation}x_{k + 1} \leftarrow x_k + \alpha_k p_k;\tag{5.24b}\end{equation}
442 | $$
443 |
444 | $$
445 | \begin{equation}r_{k + 1} \leftarrow r_k + \alpha_kAp_k;\tag{5.24c}\end{equation}
446 | $$
447 |
448 | $$
449 | \begin{equation}\beta_{k + 1} \leftarrow \frac{r_{k + 1}^Tr_{k + 1}}{r_k^Tr_k};\tag{5.24d}\end{equation}
450 | $$
451 |
452 | $$
453 | \begin{equation}p_{k + 1} \leftarrow -r_{k + 1} + \beta_{k + 1} p_k;\tag{5.24e}\end{equation}
454 | $$
455 |
456 | $$
457 | k \leftarrow k + 1;
458 | $$
459 |
460 | end while;
461 |
462 | 这里主要减少了矩阵向量乘法的工作量,同时增加了可以缓存重复实用的中间变量。这里需要指出的是,CG方法主要针对大规模问题,对于规模不大的问题($n < 10^5$),直接分解效果可能更好。
463 |
464 | ### 收敛率
465 |
466 | 尽管$n$步精确收敛是一个看上去很不错的收敛速度,但由于CG法处理的总是大规模问题($n >> 10^5$),所以实际上这个速度仍然是不够的。幸好,CG法当具备一些性质时,其实际收敛速度可以远远高于$n$步。
467 |
468 | 由(5.24b)和(5.18),我们有
469 | $$
470 | \begin{eqnarray}
471 | x_{k + 1} &=& x_0 + \alpha_0 p_0 + \cdots + \alpha_kp_k \\
472 | &=& x_0 + \gamma_0 r_0 + \gamma_1Ar_0 + \cdots + \gamma_k A^k r_0,
473 | \tag{5.25}
474 | \end{eqnarray}
475 | $$
476 | 其中$\gamma_i$是在基$\{r_0, Ar_0, \cdots, A^kr_0\}$下的标出系数。现定义$P_k^*(\cdot)$为系数为$\gamma_0, \gamma_1, \cdots, \gamma_k$的$k$次多项式,则
477 | $$
478 | P_k^*(A) = \gamma_0I + \gamma_1 A + \cdots + \gamma_kA^k,
479 | $$
480 | 由(5.25),我们有
481 | $$
482 | \begin{equation}
483 | x_{k + 1} = x_0 + P_k^*(A) r_0.
484 | \tag{5.26}
485 | \end{equation}
486 | $$
487 |
488 | 我们现在指出全部头$k$步限制在由(5.15)定义的Krylov子空间的算法中(即所有采取这$k$个方向的搜索算法),算法5.2是最优的。这里,我们的最优是基于算子范数
489 | $$
490 | \begin{equation}
491 | \|z\|_A^2=z^TAz.
492 | \tag{5.27}
493 | \end{equation}
494 | $$
495 | 由$\phi$的定义(5.2)以及$x^*$是$\phi$的全局最优解,我们有
496 | $$
497 | \begin{equation}
498 | \frac12\|x - x^*\|=\frac12(x - x^*)^TA(x - x^*) = \phi(x) - \phi(x^*).
499 | \tag{5.28}
500 | \end{equation}
501 | $$
502 | 而定理5.2指出$x_{k + 1}$是$\phi$在
503 | $$
504 | \left\{x \left| x = x_0 + \mathrm{span}\left\{p_0, p_1, \cdots, p_{k}\right\}\right.\right\}
505 | $$
506 | 上的最优解,由定理5.3之(5.18),上述空间就是
507 | $$
508 | \left\{x \left|x_0 + \mathrm{span}\left\{r_0, Ar_0, \cdots, A^kr_0\right\}\right.\right\}.
509 | $$
510 | 于是在所有以$\left\{I, A, A^2, \cdots, A^k\right\}$为基的多项式$P_k(A)$中,$P_k^*$是问题
511 | $$
512 | \begin{equation}
513 | \min_{P_k} \|x_0 + P_k(A)r_0 - x^*\|_A
514 | \tag{5.29}
515 | \end{equation}
516 | $$
517 | 的最优解。
518 |
519 | 现在,
520 | $$
521 | r_0 = Ax_0 - b = Ax_0 - Ax^* = A(x_0 - x^*),
522 | $$
523 | 所以
524 | $$
525 | \begin{equation}
526 | x_{k + 1} - x^* = x_0 + P_k^*(A)r_0 - x^* = \left[I + P_k^*(A)A\right](x_0 - x^*).
527 | \tag{5.30}
528 | \end{equation}
529 | $$
530 | 令$0 < \lambda_1 \leq \lambda_2 \leq \cdots \leq \lambda_n$是$A$的特征值,而$\nu_1, \nu_2, \cdots, \nu_n$是对应特征向量(因此两两正交),于是
531 | $$
532 | A = \sum_{i = 1}^n\lambda_i \nu_i \nu_i^T.
533 | $$
534 | 注:等价于
535 | $$
536 | A = Q\Lambda Q^T,
537 | $$
538 | 其中$Q$是对角阵,其列向量为特征向量,$\Lambda = \mathrm{diag}\{\lambda_1, \lambda_2, \cdots, \lambda_n\}$.
539 |
540 | 由于特征向量组是$\mathbb{R}^n$的一组基,我们有
541 | $$
542 | \begin{equation}
543 | x_0 - x^* = \sum_{i= 1}^n \xi_i \nu_i,
544 | \tag{5.31}
545 | \end{equation}
546 | $$
547 | 这里$\xi_i$是表出系数。由高等代数中的定理,$P_k(\lambda_i)$是$P_k(A)$的特征值,且$\nu_i$亦是$P_k(A)$的对用特征向量,因此
548 | $$
549 | P_k(A)\nu_i = P_k(\lambda_i)\nu_i, i = 1, 2, \cdots, n.
550 | $$
551 | 将上式和(5.31)一起代入(5.30),有
552 | $$
553 | x_{k + 1} - x^* = \sum_{i = 1}^n\left[1 + \lambda_iP_k^*(\lambda_i)\right]\xi_i\nu_i,
554 | $$
555 | 由
556 | $$
557 | \begin{eqnarray*}
558 | \|z\|_A^2 &=& z^TAz \\
559 | &=& z^T \sum_{i = 1}^n \lambda_i \nu_i\nu_i^Tz\\
560 | &=& \sum_{i = 1}^n \lambda_i(\nu_i^Tz)^2,
561 | \end{eqnarray*}
562 | $$
563 | 我们有
564 | $$
565 | \begin{eqnarray}
566 | \|x_{k + 1} - x^*\|_A^2 &=& \sum_{i = 1}^n \lambda_i \left[\nu_i^T \sum_{i = 1}^n\left[1 + \lambda_i P_k^*(\lambda_i)\right]\xi_i\nu_i\right]^2 \\
567 | &=& \sum_{i = 1}^n \lambda_i \left[1 + \lambda_i P_k^*(\lambda_i)\right]^2\xi_i^2\quad (\mbox{正交性}).
568 | \tag{5.32}
569 | \end{eqnarray}
570 | $$
571 | 由$P_k^*$的最优性,我们有
572 | $$
573 | \begin{eqnarray} \|x_{k + 1} - x^*\|_A^2 &=& \min_{P_k}\sum_{i = 1}^n \lambda_i\left[1 + \lambda_i P_k(\lambda_i)\right]^2\xi_i^2\\
574 | &\leq& \min_{P_k}\max_{1 \leq i \leq n}\left[1 + \lambda_iP_k(\lambda_i)\right]^2\left(\sum_{j = 1}^n\lambda_j\xi_j^2\right)\\
575 | &=&\min_{P_k}\max_{1 \leq i \leq n}\left[1 + \lambda_iP_k(\lambda_i)\right]^2\|x_0 - x^*\|_A^2, \tag{5.33}
576 | \end{eqnarray}
577 | $$
578 | 这里,注意到
579 | $$
580 | \|x_0 - x^*\|_A^2 = \sum_{j = 1}^n \lambda_j \xi_j^2.
581 | $$
582 | 公式(5.33)提示我们,CG法的收敛速度,和因子
583 | $$
584 | \begin{equation}
585 | \min_{P_k}\max_{1 \leq i \leq n}\left[1 + \lambda_iP_k(\lambda_i)\right]^2
586 | \tag{5.34}
587 | \end{equation}
588 | $$
589 | 相关。
590 |
591 | **定理 5.4** 若$A$只有$r$个互异的特征值,则CG法$r$步收敛到最优解。
592 |
593 | **证明:**假设$A$的特征值$\lambda_1, \lambda_2, \cdots, \lambda_n$只有$r$个互异的值$\tau_1 < \tau_2 <\cdots <\tau_r$。定义多项式
594 | $$
595 | Q_r(\lambda) = \frac{(-1)^r}{\tau_1\tau_2\cdots\tau_r}(\lambda - \tau_1)(\lambda - \tau_2)\cdots(\lambda - \tau_r),
596 | $$
597 | 则有
598 | $$
599 | Q_r(\lambda_i) = 0, i = 1, 2, \cdots, n,
600 | $$
601 | 以及
602 | $$
603 | Q_r(0) = 1.
604 | $$
605 | 因此$Q(\lambda) - 1$是一个$r$次多项式,且$0$是它的根。于是
606 | $$
607 | \bar{P}_{r - 1}(\lambda) = \frac{Q_r(\lambda) - 1}{\lambda}
608 | $$
609 | 是一个$r - 1$次多项式。在(5.34)中,令$k = r - 1$,则有
610 | $$
611 | 0 \leq \min_{P_{r - 1}}\max_{1 \leq i \leq n}\left[1 + \lambda_iP_{r - 1}(\lambda_i)\right]^2 \leq \max_{1 \leq i \leq n}\left[1 + \lambda_i\bar{P}_{r - 1}(\lambda_i)\right]^2 = \max_{1 \leq i \leq n} Q_r^2(\lambda_i) = 0.
612 | $$
613 | 因此(5.34)对应的常数对$k = r - 1$为$0$,也即
614 | $$
615 | \|x_r - x^*\|_A^2 = 0,
616 | $$
617 | 即$x_r = x^*$成立。$\Box$
618 |
619 | 进一步的分析(Luenberger[195])能给出下面更精确的结果:
620 |
621 | **定理 5.5** 若$A$的特征值为$\lambda_1 \leq \lambda_2 \leq \cdots \leq \lambda_n$,我们有
622 | $$
623 | \begin{equation}
624 | \|x_{k + 1} - x^*\|_A^2 \leq \left(\frac{\lambda_{n - k} - \lambda_1}{\lambda_{n - k} - \lambda_n}\right)^2\|x_0 - x^*\|_A^2.
625 | \tag{5.35}
626 | \end{equation}
627 | $$
628 | 我们不会在这门课给出这个定理的证明。但是这个定理告诉我们的一个事实是假设$A$的特征值中的$\lambda_1, \lambda_2, \lambda_{n - m}$都是相对接近$1$的小量,而其余$m$个则远大于$1$。那么该定理告诉我们
629 | $$
630 | \|x_{m + 1} - x^*\| \approx \epsilon\|x_0 - x^*\|,
631 | $$
632 | 这里$\epsilon = \lambda_{n - m} - \lambda_1$是一个相对小量。
633 |
634 | ### 预处理(Preconditioning)
635 |
636 | 上面的分析给我们的启示是如果能调整$A$的特征值分布,那么我们能够提高CG法的求解速度。这一技术被称为预处理,并且在当前
637 |
638 | 的大规模计算中是必须的手段。它的基本想法仍然是线性变换
639 | $$
640 | \begin{equation}
641 | \hat{x} = Cx.
642 | \tag{5.37}
643 | \end{equation}
644 | $$
645 | 于是$\phi$变为
646 | $$
647 | \begin{equation}
648 | \hat{\phi}(\hat{x})=\frac12\hat{x}^T(C^{-T}AC^{-1})\hat{x}-(X^{-T}b)^T\hat{x}.
649 | \tag{5.38}
650 | \end{equation}
651 | $$
652 | 如果$C^{-T}AC^{-1}$能够有更好的特征值分布,那么显然$\hat{\phi}$在CG法中会更快收敛。本着这个想法,我们实际上并不需要显示地做这个变换和逆变换,而是只需要将等效算子作用在算法中实现即可。或者说,令对称正定矩阵
653 | $$
654 | M = C^TC,
655 | $$
656 | 我们只需将CG算法改成:
657 |
658 | **算法5.3**(Preconditioned CG)
659 |
660 | 给定$x_0$,预处理子(Preconditioner)$M$;
661 |
662 | 设置$r_0 \leftarrow Ax_0 - b$;
663 |
664 | 解线性方程组$M y_0 = r_0$;
665 |
666 | 设置$p_0 \leftarrow -y_0$,$k \leftarrow 0$;
667 |
668 | while $r_k \neq 0$
669 | $$
670 | \begin{equation}\alpha_k \leftarrow \frac{r_k^Ty_k}{p_k^TAp_k};\tag{5.39a}\end{equation}
671 | $$
672 |
673 | $$
674 | \begin{equation}x_{k + 1} \leftarrow x_k + \alpha_k p_k;\tag{5.39b}\end{equation}
675 | $$
676 |
677 | $$
678 | \begin{equation}r_{k + 1} \leftarrow r_k + \alpha_kAp_k;\tag{5.39c}\end{equation}
679 | $$
680 |
681 | $$
682 | \begin{equation}
683 | \mbox{解线性方程组} My_{k + 1}=r_{k + 1};
684 | \tag{5.39d}
685 | \end{equation}
686 | $$
687 |
688 | $$
689 | \begin{equation}\beta_{k + 1} \leftarrow \frac{r_{k + 1}^Ty_{k + 1}}{r_k^Ty_k};\tag{5.39e}\end{equation}
690 | $$
691 |
692 | $$
693 | \begin{equation}p_{k + 1} \leftarrow -y_{k + 1} + \beta_{k + 1} p_k;\tag{5.39f}\end{equation}
694 | $$
695 |
696 | $$
697 | k \leftarrow k + 1;
698 | $$
699 |
700 | end while;
701 |
702 | 注意当$M = I$是,算法5.3就是算法5.2。也即不做任何预处理。由于预处理几乎是必须的,因此算法5.3才是真正意义上实用的线性CG法。
703 |
704 | ### 实用预处理子
705 |
706 | 很遗憾,预处理子是基于具体问题的,并不存在“最佳”预处理子。但是当我们直接面对矩阵(失去矩阵如何产生的具体物理信息时),有一些常见的预处理办法值得参考。比如对称超松弛(symmetric successive over-relaxion, SSOR)算子,不完全Cholesky(incomplete Cholesky)分解等等。请大家自行参阅文献。
707 |
708 | ## 非线性共轭梯度法
709 |
710 | 当我们的目标函数$f$是一般非线性函数时,CG方法自然失去了$n$步精确收敛的特性,共轭也只发生在局部,因此两两共轭也无从谈起。然而,理论分析和实际测试都表明,按照CG法的思路构建的非线性搜索方法,在实际工作中有不错的效果。
711 |
712 | ### Fletcher-Reeves方法,FR
713 |
714 | Fletcher和Reeves在[107]中提出了这种方法,基本思路就是设法将线性CG法移植到非线性问题中。关键改动在于对$\alpha_k$采用了非精确搜索,将$r_k$用局部$\nabla f_k$代替。由于预处理失去意义,这里的移植实际上是基于算法5.2的。
715 |
716 | **算法5.4**(FR)
717 |
718 | 给定$x_0$;
719 |
720 | 计算$f_0 = f(x_0)$,$\nabla f_0 = \nabla f(x_0)$;
721 |
722 | 设置$p_0 \leftarrow -\nabla f_0$,$k \leftarrow 0$;
723 |
724 | while $\nabla f_k \neq 0$
725 | $$
726 | \mbox{计算}\alpha_k, \mbox{用某种非精确策略,如Wolfe条件};
727 | $$
728 |
729 | $$
730 | \begin{equation}x_{k + 1} \leftarrow x_k + \alpha_k p_k;\end{equation}
731 | $$
732 |
733 | $$
734 | \mbox{计算}\nabla f_{k + 1};
735 | $$
736 |
737 | $$
738 | \begin{equation}\beta_{k + 1}^{\mathrm{FR}} \leftarrow \frac{\nabla f_{k + 1}^T\nabla f_{k + 1}}{\nabla f_k^T\nabla f_k};\tag{5.41a}\end{equation}
739 | $$
740 |
741 | $$
742 | \begin{equation}p_{k + 1} \leftarrow -\nabla f_{k + 1} + \beta_{k + 1}^{\mathrm{FR}} p_k;\tag{5.41b}\end{equation}
743 | $$
744 |
745 | $$
746 | k \leftarrow k + 1;
747 | $$
748 |
749 | end while;
750 |
751 | 这个算法看上去更加简单。它本质上会在一个不断共轭的方向上搜索问题的局部最优。但是注意它每一步都更新了局部信息$\nabla f_k$的值,因此它的$n$步整体效率有可能优于一步Newton法。(事实上,由于CG法实际迭代步数远小于$n$,因此这里实际等效一步Newton法的步数也同样可能更小。)这里对(5.41a)还有一些其他选择,比如:
752 |
753 | ### Polak-Ribiere方法,PR
754 |
755 | $$
756 | \begin{equation}
757 | \beta_{k + 1}^{\mathrm{PR}} = \frac{\nabla f_{k + 1}^T(\nabla f_{k + 1} - \nabla f_k)}{\|\nabla f_k\|^2}.
758 | \tag{5.44}
759 | \end{equation}
760 | $$
761 |
762 | 一个更加稳定的做法是:
763 | $$
764 | \begin{equation}
765 | \beta_{k + 1}^+ = \max\{\beta_{k + 1}^{\mathrm{PR}}, 0\}.
766 | \tag{5.45}
767 | \end{equation}
768 | $$
769 | 此外还有大量针对一般情形和特殊情形的变形,这里的一个原则是希望这一项能尽可能在计算上稳定,同时能更多引入新的局部信息。比如:
770 | $$
771 | \begin{equation}
772 | \beta_{k + 1}^{\mathrm{HS}} = \frac{\nabla f_{k + 1}^T(\nabla f_{k + 1} - \nabla f_k)}{(\nabla f_{k + 1} - \nabla f_k)^Tp_k},
773 | \end{equation}
774 | $$
775 | 等等。
776 |
777 | ### 重启
778 |
779 | 之前提到过,非线性CG法$n$步迭代的效果近似于一步Newton法。事实上,这里有一个更加实际的问题,就是局部信息的继承。从$x_0$出发的局部信息,通过迭代被之后的方向和步长所吸收,但是:其一,当经过一定的步数以后,实际上它已经失效了,因为如果$f$是一个正定二次型,它应该已经收敛了;其二,当$x_k$离$x_0$足够远时,就像信任域方法中讨论的那样,这种继承信息不但无助于算法提升效率,反而有害。因此,每隔一定步数$m$,我们应该重新设置整个算法,即将$p_m$重新设置为$-\nabla f(x_m)$,将计数器$k$置为$0$。这个技术被称为重启(restart)。在实际计算中,对大规模问题,不论时线性(因为受到机器扰动的影响)还是非线性的Krylov子空间迭代法(CG法是其中之一),重启几乎都是必须的。
780 |
781 |
--------------------------------------------------------------------------------