最优化理论期末复习笔记 Part 1

在一定的约束条件 x ∈ Ω x \in \Omega xΩ 下,调整一组可变参数 x x x,使设计目标 f ( x ) f(x) f(x) 达到最优值(最大/最小)

机翼最优化设计

描述机翼的方法:

  1. 给定点插值

  2. 自由型面方法

肋板结构优化

最初的方法是,预先给定一些洞,然后调整这些洞的大小和边界

可以想到,这种方法对初始值敏感

一开始设置为实心的,然后调整每一个点的密度

某一点的密度远远小于其他地方的密度时,可以认为是挖空的

数学基础

线性代数/向量/矩阵理论

多元函数分析

凸优化问题(凸集与凸函数问题)

无约束问题的最优化条件

线性代数

从行的角度

N 维矩阵(方程组)的第 i 行表示一个 N-1 维的解空间,比如 2 维矩阵(方程组)的每一行表示一条直线

从列的角度

考:线性代数方程的解,存在性

矩阵的每一列视为一个列向量,矩阵 A A A 与列向量 x x x 的乘积,可以视为矩阵 A A A 第 i 列与 x x x 中第 i 个元素相乘,对 i 求和, A x = b Ax = b Ax=b

有解,就是说明矩阵 A A A 的每个列向量展开的空间之中有 b b b

行列式的几何解释

线性变换的面积

向量范数和矩阵范数

向量范数

1-范数:

∣ ∣ x ∣ ∣ 1 = ∑ i = 1 n ∣ x i ∣ \vert \vert x \vert \vert_1 = \sum_{i=1}^{n} \vert x_i \vert ∣∣x1=i=1nxi

2-范数:

∣ ∣ x ∣ ∣ 2 = ( ∑ i = 1 n ∣ x i ∣ 2 ) 1 2 \vert \vert x \vert \vert_2 = (\sum_{i=1}^{n} \vert x_i \vert^2)^{\frac{1}{2}} ∣∣x2=(i=1nxi2)21

∞-范数:

∣ ∣ x ∣ ∣ ∞ = max ⁡ 1 ⩽ i ⩽ n ∣ x i ∣ \vert \vert x \vert \vert_{\infty} = \max_{1 \leqslant i \leqslant n} \vert x_i \vert ∣∣x=max1inxi

p-范数:

∣ ∣ x ∣ ∣ p = ( ∑ i = 1 n ∣ x i ∣ p ) 1 p \vert \vert x \vert \vert_p = (\sum_{i=1}^{n} \vert x_i \vert^p)^{\frac{1}{p}} ∣∣xp=(i=1nxip)p1

矩阵范数的更强的性质的意义

为矩阵范数加上第四个性质 ∣ ∣ A B ∣ ∣ ≤ ∣ ∣ A ∣ ∣ ⋅ ∣ ∣ B ∣ ∣ \vert \vert AB \vert \vert \leq \vert \vert A \vert \vert \cdot \vert \vert B \vert \vert ∣∣AB∣∣∣∣A∣∣∣∣B∣∣

我们希望对一个矩阵不断做变换的时候,变换之后的结果的范数不断变小,然后如果我们能证明他有一个下限,如果这个下限还为 0,那么就相当于把变换之前的矩阵变换到了另一个目标矩阵

例如初等变换 P n ⋯ P 2 P 1 A = A − 1 P_n \cdots P_2 P_1 A = A^{-1} PnP2P1A=A1

为矩阵范数加上第五个性质 ∣ ∣ A x ∣ ∣ ≤ ∣ ∣ A ∣ ∣ μ ⋅ ∣ ∣ x ∣ ∣ \vert \vert Ax \vert \vert \leq \vert \vert A \vert \vert _{\mu} \cdot \vert \vert x \vert \vert ∣∣Ax∣∣∣∣Aμ∣∣x∣∣

则称矩阵范数 ∣ ∣ ⋅ ∣ ∣ μ \vert \vert \cdot \vert \vert _{\mu} ∣∣μ 与向量范数 ∣ ∣ x ∣ ∣ \vert \vert x \vert \vert ∣∣x∣∣ 是相容的

那么根据这个不等式可以得到 ∣ ∣ A x ∣ ∣ ∣ ∣ x ∣ ∣ ≤ ∣ ∣ A ∣ ∣ μ \dfrac{\vert \vert Ax \vert \vert}{\vert \vert x \vert \vert} \leq \vert \vert A \vert \vert _{\mu} ∣∣x∣∣∣∣Ax∣∣∣∣Aμ

进一步,若存在 x ≠ 0 x \ne 0 x=0 使成立:

∣ ∣ A ∣ ∣ μ = max ⁡ x ≠ 0 ∣ ∣ A x ∣ ∣ ∣ ∣ x ∣ ∣ = max ⁡ ∣ ∣ x ∣ ∣ = 1 ∣ ∣ A x ∣ ∣ \vert \vert A \vert \vert _{\mu} = \max_{x \ne 0} \dfrac{\vert \vert Ax \vert \vert}{\vert \vert x \vert \vert} = \max_{\vert \vert x \vert \vert = 1}\vert \vert Ax \vert \vert ∣∣Aμ=maxx=0∣∣x∣∣∣∣Ax∣∣=max∣∣x∣∣=1∣∣Ax∣∣

取 x 的各个分量 最大值是可以作为标准的唯一值

这是跟向量 x 有关的,称为向量 x 的诱导范数

令 x = 1,那么就与 x 的大小无关,但是跟计算 x 范数的方式有关

因为令了 x = 1,所以这个诱导范数表示单位圆/球/超球面上的所有向量 x 经过线性变换后得到的所有向量 Ax 中最长的那个的范数

几种向量范数诱导的矩阵范数

1 范数诱导的矩阵范数

∣ ∣ A ∣ ∣ = max ⁡ 1 ≤ j ≤ n ∑ i = 1 m ∣ A i j ∣ \vert \vert A \vert \vert = \max_{1 \leq j \leq n}\sum_{i=1}^{m}\vert A_{ij} \vert ∣∣A∣∣=1jnmaxi=1mAij

为什么?

首先把 A 写成列向量的形式 A = [ A 1 A 2 A 3 ] A = [A_1 A_2 A_3] A=[A1A2A3]

所以 A x = A 1 ∗ x 1 + A 2 ∗ x 2 + A 3 ∗ x 3 Ax = A_1 * x_1 + A_2 * x_2 + A_3 * x_3 Ax=A1x1+A2x2+A3x3

两边求一范数,就是

∣ ∣ A x ∣ ∣ 1 = ∣ ∣ ∑ j = 1 n A j x j ∣ ∣ ≤ ∑ j = 1 n \begin{align} \notag \vert \vert Ax \vert \vert_1 &= \vert \vert \sum_{j=1}^{n} A_j x_j \vert \vert \\ \notag \leq \sum_{j=1}^{n}\\ \end{align} ∣∣Ax1j=1n=∣∣j=1nAjxj∣∣

无穷范数诱导的矩阵范数

∣ ∣ A ∣ ∣ = max ⁡ 1 ≤ i ≤ n ∑ j = 1 m ∣ A i j ∣ \vert \vert A \vert \vert = \max_{1 \leq i \leq n}\sum_{j=1}^{m}\vert A_{ij} \vert ∣∣A∣∣=1inmaxj=1mAij

为什么?

首先把 A 写成行向量的形式

A = [ ( A 1 T ) T ; ( A 2 T ) T ; ( A 3 T ) T ] A = [(A_1^T)^T;(A_2^T)^T;(A_3^T)^T] A=[(A1T)T;(A2T)T;(A3T)T]

∣ ∣ A x ∣ ∣ ∞ = max ⁡ 1 ≤ i ≤ n ∣ ∣ A i T x ∣ ∣ ∞ ≤ max ⁡ 1 ≤ i ≤ n ∣ ∣ A i T [ 1 , 1 , ⋯   , 1 ] T ∣ ∣ ∞ = max ⁡ 1 ≤ i ≤ n ∑ j = 1 m ∣ A i j ∣ \vert \vert Ax \vert \vert_{\infty} = \max_{1 \leq i \leq n} \vert \vert A_i^Tx \vert \vert_{\infty} \leq \max_{1 \leq i \leq n} \vert \vert A_i^T[1,1, \cdots, 1]^T \vert \vert_{\infty} = \max_{1 \leq i \leq n} \sum_{j=1}^{m} \vert A_{ij} \vert ∣∣Ax=max1in∣∣AiTxmax1in∣∣AiT[1,1,,1]T=max1inj=1mAij

2 范数诱导的矩阵范数

∣ ∣ A ∣ ∣ = max ⁡ { λ ∣ λ ∈ λ ( A T A ) } \vert \vert A \vert \vert = \max\{\sqrt{\lambda} \vert \lambda \in \lambda(A^TA)\} ∣∣A∣∣=max{λ λλ(ATA)}

为什么?

∣ ∣ A x ∣ ∣ = ∣ x T A T A x ∣ 1 / 2 \vert \vert Ax \vert \vert = \vert x^TA^TAx \vert ^{1/2} ∣∣Ax∣∣=xTATAx1/2

因为 ∣ ∣ x T A T A x ∣ ∣ \vert \vert x^TA^TAx \vert \vert ∣∣xTATAx∣∣ 中的 A T A A^TA ATA 是一个矩阵的转置乘上这个矩阵本身,所以他是一个对称矩阵,对称矩阵一定可以相似对角化

∣ x T A T A x ∣ 1 / 2 = ∣ x T P T Λ P x ∣ 1 / 2 = ∣ y T Λ y ∣ 1 / 2 = ∣ ∑ i = 1 n λ i y i 2 ∣ 1 / 2 = λ max ⁡ ∣ ∑ i = 1 n λ i λ max ⁡ y i 2 ∣ 1 / 2 ≤ λ max ⁡ \vert x^TA^TAx \vert ^{1/2} = \vert x^TP^T \Lambda Px \vert ^{1/2} = \vert y^T \Lambda y \vert ^{1/2} = \vert \sum_{i=1}^{n} \lambda_i y_i^2 \vert ^{1/2} = \sqrt{\lambda_{\max}}\vert \sum_{i=1}^{n} \dfrac{\lambda_i}{\lambda_{\max}} y_i^2 \vert ^{1/2} \leq \sqrt{\lambda_{\max}} xTATAx1/2=xTPTΛPx1/2=yTΛy1/2=i=1nλiyi21/2=λmax i=1nλmaxλiyi21/2λmax

此时 λ i λ max ⁡ ≤ 1 \dfrac{\lambda_i}{\lambda_{\max}} \leq 1 λmaxλi1

y 取对应 λ i = λ max ⁡ \lambda_i = \lambda_{\max} λi=λmax 时的 y i = 1 y_i = 1 yi=1,其他的 y i = 0 y_i = 0 yi=0 时,不等式

P 是正交的,所以一定是满秩的,然后 x 是任意取的,所以 Px 不会掉维度,所以 Px 可以等于任意值,所以 y = Px 可以取到上面要求的值,所以不等式的等号可以被取到

各种范数之间的等价性

用无穷范数证出来的性质可以推广到 1 范数上

向量与矩阵序列的收敛性

某一个向量/矩阵序列的范数 = a, a ≠ 0 a \ne 0 a=0,那么不能证明这个向量/矩阵序列收敛,因为范数不等于 0 的话,那么其实相当于这个向量/矩阵在某种意义上的长度不等于 0

比如一个向量的二范数收敛为 1,也就是这个向量的长度始终为 1,但是这个向量的方向可以任意,那么这个向量序列的向量的方向如果一直是任意的话,那么即使向量长度不变,也不是收敛的

所以说范数收敛不能保证向量/矩阵收敛,因为范数只是表征长度的量,而向量/矩阵是有方向的

函数的可微性与展开

一维优化问题

每一步迭代:用简单的近似函数 f 0 f_0 f0 去代替复杂函数 f ( x ) f(x) f(x)

怎么选择 f 0 f_0 f0?一般是泰勒展开

泰勒展开需要知道 f ( x ) f(x) f(x) 的导数

泰勒展开一般取多少项?一般取二次项就够了

为什么是二次?二次函数是有极值的,三次函数不一定有

f 0 f_0 f0 的极值是可以知道的,然后我们把 x 移动到 f 0 f_0 f0 的极值点的位置,然后在这个极值点的位置对原函数展开,求新的 f 0 f_0 f0,继续移动。直到不再移动的时候就是收敛了。

当然这样不一定会收敛到极小值,也可能收敛到极大值,但是这是有方法解决的

如果不知道 f ( x ) f(x) f(x) 的导数?其他方法?

插值

差分代替微分

f ( x ) ≈ f 0 ( x ) = f ( x 0 ) + ∇ f ∣ x 0 ( x − x 0 ) + 1 2 ( x − x 0 ) T ∇ 2 f ∣ x 0 ( x − x 0 ) f(\bf x) \approx f_0(\bf x) = f(\bf x_0) + \nabla f \vert_{\bf x_0}(\bf x - \bf x_0) + \dfrac{1}{2}(\bf x - \bf x_0)^T \nabla^2 f \vert_{\bf x_0}(\bf x - \bf x_0) f(x)f0(x)=f(x0)+∇fx0(xx0)+21(xx0)T2fx0(xx0)

其中 x \bf x x 是向量, ∇ \nabla 表示梯度, ∇ 2 \nabla^2 2 表示 Hesse 矩阵

存在这些导数的条件是足够光滑

误差: o ( ( x − x 0 ) 2 ) o((\bf x - \bf x_0)^2) o((xx0)2)

如果是用一次函数来近似,那么

f ( x ) = f ( x 0 ) + ∇ f ∣ x 0 ( x − x 0 ) + o ( ∣ ∣ x − x 0 ∣ ∣ ) f(\bf x) = f(\bf x_0) + \nabla f \vert_{\bf x_0}(\bf x - \bf x_0) + o(\vert\vert \bf x - \bf x_0 \vert\vert) f(x)=f(x0)+∇fx0(xx0)+o(∣∣xx0∣∣)

如果是二次函数来近似,那么

f ( x ) ≈ f 0 ( x ) = f ( x 0 ) + ∇ f ∣ x 0 ( x − x 0 ) + 1 2 ( x − x 0 ) T ∇ 2 f ∣ x 0 ( x − x 0 ) + o ( ∣ ∣ x − x 0 ∣ ∣ 2 ) f(\bf x) \approx f_0(\bf x) = f(\bf x_0) + \nabla f \vert_{\bf x_0}(\bf x - \bf x_0) + \dfrac{1}{2}(\bf x - \bf x_0)^T \nabla^2 f \vert_{\bf x_0}(\bf x - \bf x_0) + o(\vert\vert \bf x - \bf x_0 \vert\vert^2) f(x)f0(x)=f(x0)+∇fx0(xx0)+21(xx0)T2fx0(xx0)+o(∣∣xx02)

J = [ ∂ f ( x ) ∂ x 1 ⋯ ∂ f ( x ) ∂ x n ] = [ ∇ T f 1 ( x ) ⋮ ∇ T f m ( x ) ] = [ ∂ f 1 ( x ) ∂ x 1 ⋯ ∂ f 1 ( x ) ∂ x n ⋮ ⋱ ⋮ ∂ f m ( x ) ∂ x 1 ⋯ ∂ f m ( x ) ∂ x n ] \mathbb{J}=\left[\begin{array}{ccc} \dfrac{\partial \mathbf{f}(\mathbf{x})}{\partial x_{1}} & \cdots & \dfrac{\partial \mathbf{f}(\mathbf{x})}{\partial x_{n}} \end{array}\right]=\left[\begin{array}{c} \nabla^{T} f_{1}(\mathbf{x}) \\ \vdots \\ \nabla^{T} f_{m}(\mathbf{x}) \end{array}\right]=\left[\begin{array}{ccc} \dfrac{\partial f_{1}(\mathbf{x})}{\partial x_{1}} & \cdots & \dfrac{\partial f_{1}(\mathbf{x})}{\partial x_{n}} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial f_{m}(\mathbf{x})}{\partial x_{1}} & \cdots & \dfrac{\partial f_{m}(\mathbf{x})}{\partial x_{n}} \end{array}\right] J=[x1f(x)xnf(x)]= Tf1(x)Tfm(x) = x1f1(x)x1fm(x)xnf1(x)xnfm(x)

雅可比矩阵是向量值函数的导数

∇ f = [ ∂ f ( x ) ∂ x 1 ⋯ ∂ f ( x ) ∂ x n ] \nabla f = \left[\begin{array}{ccc} \dfrac{\partial f(\mathbf{x})}{\partial x_{1}} \\ \cdots\\ \dfrac{\partial f(\mathbf{x})}{\partial x_{n}} \end{array}\right] f= x1f(x)xnf(x)

∇ 2 f = ∇ ∇ f = [ ∂ ∇ f ( x ) ∂ x 1 ⋯ ∂ ∇ f ( x ) ∂ x n ] = [ ∂ f ( x ) ∂ x 1 2 ∂ f ( x ) ∂ x 1 ∂ x 2 ⋯ ∂ f ( x ) ∂ x 1 ∂ x n ⋯ ∂ f ( x ) ∂ x n ∂ f ( x ) ∂ x n ∂ x 2 ⋯ ∂ f ( x ) ∂ x n 2 ] \nabla^2 f = \nabla \nabla f = \left[\begin{array}{ccc} \dfrac{\partial \nabla f(\mathbf{x})}{\partial x_{1}} \\ \cdots\\ \dfrac{\partial \nabla f(\mathbf{x})}{\partial x_{n}} \end{array}\right] \\ =\left[\begin{array}{ccc} \dfrac{\partial f(\mathbf{x})}{\partial x_{1}^2} & \dfrac{\partial f(\mathbf{x})}{\partial x_{1}\partial x_{2}} \cdots & \dfrac{\partial f(\mathbf{x})}{\partial x_{1}\partial x_{n}}\\ \cdots\\ \dfrac{\partial f(\mathbf{x})}{\partial x_{n}} & \dfrac{\partial f(\mathbf{x})}{\partial x_{n}\partial x_{2}} \cdots & \dfrac{\partial f(\mathbf{x})}{\partial x_{n}^2} \end{array}\right] 2f=∇∇f= x1f(x)xnf(x) = x12f(x)xnf(x)x1x2f(x)xnx2f(x)x1xnf(x)xn2f(x)

牛顿莱布尼茨公式对多维的拓展

F ( x + h ) = F ( x ) + ∫ 0 1 ∇ F ( x + τ h ) T h d τ \bf F(\bf x+\bf h) = \bf F(\bf x) + \int_0^1 \nabla \bf F(\bf x+\tau \bf h)^T \bf h d \tau F(x+h)=F(x)+01F(x+τh)Thdτ

F , x , h \bf F, \bf x, \bf h F,x,h 是列向量

Lipschitz 连续

∣ ∣ F ( x ) − F ( y ) ∣ ∣ ≤ L ∣ ∣ x − y ∣ ∣ \vert\vert F(x) - F(y) \vert\vert \leq L \vert\vert x - y\vert\vert ∣∣F(x)F(y)∣∣L∣∣xy∣∣

自变量在变化的时候,函数值的变化始终是在一个线性范围内的

知道这个条件,我们可以估计 F ( x ) F(x) F(x) 的大小

给定一个抽象的函数,可以替换成一个线性的函数

中值定理

收敛性分析中,可能用到向量值函数的中值定理

设向量值函数 F 连续可微:

(1): 对任意的 x,y

∣ ∣ F ( x ) − F ( y ) ∣ ∣ ≤ s u p 0 ≤ t ≤ 1 ∣ ∣ F ′ ( y + t ( x − y ) ) ∣ ∣ ∣ ∣ x − y ∣ ∣ \vert\vert F(x) - F(y) \vert\vert \leq \mathrm{sup}_{0 \leq t \leq 1} \vert\vert F'(y+t(x-y)) \vert\vert \vert\vert x-y \vert\vert ∣∣F(x)F(y)∣∣sup0t1∣∣F(y+t(xy))∣∣∣∣xy∣∣

其实就是向量值函数的值的范数/变量的范数 < 向量值函数的导数(雅可比矩阵)的值

一维情况:

∣ f ( x ) − f ( y ) x − y ∣ ≤ s u p 0 ≤ t ≤ 1 ∣ f ′ ( y + t ( x − y ) ) ∣ \vert \dfrac{f(x)-f(y)}{x-y} \vert \leq \mathrm{sup}_{0 \leq t \leq 1} \vert f'(y+t(x-y)) \vert xyf(x)f(y)sup0t1f(y+t(xy))

sup 相当于一个范围内的最大值

(2): 对任意的 x,y,z

∣ ∣ F ( y ) − F ( z ) − F ′ ( x ) ( y − z ) ∣ ∣ s u p 0 ≤ t ≤ 1 ∣ ∣ F ′ ( z + t ( y − z ) ) − F ′ ( x ) ∣ ∣ ⋅ ∣ ∣ y − z ∣ ∣ \vert\vert F(y) - F(z) - F'(x)(y-z) \vert\vert \mathrm{sup}_{0 \leq t \leq 1} \vert\vert F'(z+t(y-z)) - F'(x)\vert\vert \cdot \vert\vert y-z \vert\vert ∣∣F(y)F(z)F(x)(yz)∣∣sup0t1∣∣F(z+t(yz))F(x)∣∣∣∣yz∣∣

书上写错了,最后面那个是 y-z

一维情况:

∣ f ( y ) − f ( z ) y − z − f ′ ( x ) ∣ ≤ s u p 0 ≤ t ≤ 1 ∣ f ′ ( z + t ( y − z ) ) − f ′ ( x ) ∣ \vert \dfrac {f(y) - f(z)}{y-z} - f'(x) \vert \leq \mathrm{sup}_{0 \leq t \leq 1} \vert f'(z+t(y-z)) - f'(x)\vert yzf(y)f(z)f(x)sup0t1f(z+t(yz))f(x)

由上述定理的结论 (2) 可推得

∣ ∣ F ′ ( u ) − F ′ ( v ) ∣ ∣ ≤ L ∣ ∣ u − v ∣ ∣ \vert\vert F'(u) - F'(v) \vert\vert \leq L \vert\vert u-v \vert\vert ∣∣F(u)F(v)∣∣L∣∣uv∣∣

则对任意的 x,h

∣ ∣ F ( x + h ) − F ( x ) − F ′ ( x ) h ∣ ∣ ≤ L ∣ ∣ h ∣ ∣ 2 \vert\vert F(x+h)-F(x)-F'(x)h \vert\vert \leq L \vert\vert h \vert\vert^2 ∣∣F(x+h)F(x)F(x)h∣∣L∣∣h2

凸优化问题

考:什么是凸集,凸函数

凸集 对于 x , y ∈ D x,y \in D x,yD, 有 λ x + ( 1 − λ ) y ∈ D \lambda x + (1-\lambda)y \in D λx+(1λ)yD

集合中任意两个端点,组成的线段上的任何点也属于这个集合

凸函数 对于 x , y ∈ D x,y \in D x,yD, 有 f ( λ x + ( 1 − λ ) y ) ≤ λ f ( x ) + ( 1 − λ ) f ( y ) f(\lambda x + (1-\lambda)y) \leq \lambda f(x) + (1-\lambda)f(y) f(λx+(1λ)y)λf(x)+(1λ)f(y)

函数中任意两个端点上的函数值,组成的线段上的任何点的值都大于函数在该点的函数值

凸优化:可行集是凸集,目标函数都是凸函数

对于凸优化问题,目标函数的任意局部极小值点都是其全局极小值点

证明:

反证法:

x ∗ x^* x 是一个局部极小值点

假设 x ∗ x^* x 不是全局极小值点,那么在可行域内存在 x o x^o xo,满足 f ( x o ) < f ( x ∗ ) f(x^o) < f(x^*) f(xo)<f(x)

因为可行域是凸集,所以 α x o + ( 1 − α ) x ∗ \alpha x^o + (1-\alpha)x^* αxo+(1α)x 在可行域内

又因为目标函数是凸函数,所以

f ( α x o + ( 1 − α ) x ∗ ) ≤ α f ( x o ) + ( 1 − α ) f ( x ∗ ) ≤ α f ( x ∗ ) + ( 1 − α ) f ( x ∗ ) = f ( x ∗ ) f(\alpha x^o + (1-\alpha)x^*) \leq \alpha f(x^o) + (1-\alpha)f(x^*) \leq \alpha f(x^*) + (1-\alpha)f(x^*) = f(x^*) f(αxo+(1α)x)αf(xo)+(1α)f(x)αf(x)+(1α)f(x)=f(x)

α \alpha α 取充分小时, f ( α x o + ( 1 − α ) x ∗ ) = f ( x ∗ ) f(\alpha x^o + (1-\alpha)x^*) = f(x^*) f(αxo+(1α)x)=f(x)

这与 f ( x ∗ ) f(x^*) f(x) 是局部极小值矛盾

凸函数的判断

f 在 D 一阶可微

充要条件:

f ( x ) ≥ f ( x ∗ ) + ∇ f ( x ∗ ) T ( x − x ∗ ) f(x) \geq f(x^*)+ \nabla f(x^*)^T(x-x^*) f(x)f(x)+f(x)T(xx)

对一个点一阶泰勒展开,也就是得到一个超平面,超平面上的值都小于函数值

严格凸的充要条件:

f ( x ) > f ( x ∗ ) + ∇ f ( x ∗ ) T ( x − x ∗ ) f(x) > f(x^*)+ \nabla f(x^*)^T(x-x^*) f(x)>f(x)+f(x)T(xx)

正定矩阵

考:Hessian 矩阵正定表示什么含义

对于一元函数,二阶导大于 0 意味着开口向上

h T ∇ 2 f ( x ) h ≥ 0 h^T \nabla^2 f(x) h \geq 0 hT2f(x)h0 半正定

h T ∇ 2 f ( x ) h > 0 h^T \nabla^2 f(x) h > 0 hT2f(x)h>0 正定

其中 h 类似 h = [ x y ] h = \left[\begin{array}{ccc} x \\ y \end{array}\right] h=[xy]

矩阵正定,代表一个开口向上的抛物面

那就说明每一步迭代都会稳定

f 在 D 二阶可微

进一步,如果 h T ∇ 2 f ( x ) h ≥ c ∣ ∣ h ∣ ∣ 2 h^T \nabla^2 f(x) h \geq c\vert \vert h \vert \vert^2 hT2f(x)hc∣∣h2 一致正定

其中 c ∣ ∣ h ∣ ∣ 2 c\vert \vert h \vert \vert^2 c∣∣h2 就是一个抛物面

f 在 D 上凸 充要条件 ∇ 2 f ( x ) \nabla^2 f(x) 2f(x) 对 D 半正定

f 在 D 上严格凸 ∇ 2 f ( x ) \nabla^2 f(x) 2f(x) 对一切 D 正定

我感觉是,函数二阶可微的时候,也可以用一阶可微时的那个充要条件,只是说,当函数二阶可微的时候,我们还可以有另外一个充要条件,这两个充要条件对于二阶可微的函数来说是同时有效的

无约束问题的最优性条件

考:必要条件,充分条件

一阶必要条件

x ∗ x^* x 是局部极小点,那么有 g ( x ∗ ) = 0 g(x^*) = 0 g(x)=0

g ( x ) g(x) g(x) 为一阶导数

二阶必要条件

x ∗ x^* x 是局部极小点,那么有 g ( x ∗ ) = 0 g(x^*) = 0 g(x)=0, G ( x ∗ ) G(x^*) G(x) 是半正定矩阵

g ( x ) g(x) g(x) 为一阶导数, G ( x ) G(x) G(x) 为二阶导数

半正定的性质: d T G ( x ∗ ) d d^TG(x^*)d dTG(x)d 表示一个抛物面

二阶充分条件

f f f 二阶连续可微, g ( x ∗ ) = 0 g(x^*) = 0 g(x)=0 G ( x ∗ ) G(x^*) G(x) 正定,那么 x ∗ x^* x 是局部极小点

其中, G ( x ∗ ) G(x^*) G(x) 正定, f f f 二阶连续可微 -> 在 x ∗ x^* x 的邻域里面, G ( x ∗ + θ α d ) G(x^*+\theta \alpha d) G(x+θαd) 正定

充要条件

考:二次函数什么时候有最小值

是凸函数,是一阶连续可微,那么 g ( x ∗ ) = 0    ⟺    g(x^*) = 0 \iff g(x)=0 x ∗ x^* x 是全局极小点

一般算法框架

考:线搜索的框架

  1. 给定初始化参数及初始迭代点 x 0 x_0 x0,置 k : = 0 k := 0 k:=0

  2. x k x_k xk 满足某种终止准则,停止迭代,以 x k x_k xk 作为近似极小点

  3. 通过求解 x k x_k xk 处的某个子问题确定下降方向 x k x_k xk

  4. 通过某种搜索方式确定步长因子 α k \alpha_k αk,使得 f ( x k + α k d k ) < f ( x k ) f(x_k + \alpha_k d_k) < f(x_k) f(xk+αkdk)<f(xk)

  5. x k + 1 : = x k + α k d k , k : = k + 1 x_{k+1} := x_k + \alpha_k d_k, k := k + 1 xk+1:=xk+αkdk,k:=k+1,转步 2

线搜索

这里讲的是一般算法框架中的第 4 步中的“某种搜索方式”

考:已知搜索方向,给出一维方向上的表达式

x k + 1 : = x k + α k d k x_{k+1} := x_k + \alpha_k d_k xk+1:=xk+αkdk

精确线搜索

单峰区间

考:单峰区间的原理和步骤

进退法找近似单峰区间的时候,实际上是找到了高低高三个点,你是不知道两个端点之间的函数值分布的情况的

黄金分割方法

考:黄金分割的原理,具体步骤

找完近似单峰区间之后,接下来要继续找细分后的近似单峰区间,那么其实一个区间里面要知道四个点

然后我希望下一次找单峰区间的时候,能够尽可能利用到上一步采样的点

因为每一次算点的函数值都会很费时

使得新的小区间与旧的大区间成比例,那么可以复用三个点

也就是每迭代一步,只需要增加三个点

已知两个点,怎么算中间两个点?

设已知 a, b, l = (b-a), 第一个点 a + 0.382 l, 第二个点 a + 0.618 l

已知四个点,怎么知道取左侧三个点还是取右侧三个点?

比较中间两个点之间的大小,如果左 < 右,说明是 低-高,那么就和左边端点组成 高-低-高,所以我们取左侧三个点;右侧同理

无法执行黄金分割的情况

进退法只能找到高低高三个点

黄金分割的一开始是,取两侧的高点,然后在中间先按照黄金分割插入两个点,然后看左侧三个点满足高低高还是右侧满足,选择满足高低高的那一侧递归

但是假设一开始我插入了两个点之后,我发现这两个点都大于我两侧的高点,那么我现在找不到高低高了

那么这就意味着我无法执行黄金分割了

一种方法是我换一个分割方法,也就是换一个“插点-找高低高-插点-找高低高”的思路

另外一种方法就是直接放弃精确线搜索,直接把一开始进退法找到的近似单峰区间的高低高的低点,作为下一步的线搜索的起点

牛顿法
原理

函数 f ( x ) f(x) f(x) x k x_k xk 处近似为二次泰勒展开

f ( x ) ≈ f k ( x ) = f ( x k ) + f ′ ( x k ) ( x − x k ) + 1 2 f ′ ′ ( x k ) ( x − x k ) 2 f(x) \approx f_k(x) = f(x_k) + f'(x_k)(x-x_k) + \dfrac{1}{2}f''(x_k)(x-x_k)^2 f(x)fk(x)=f(xk)+f(xk)(xxk)+21f′′(xk)(xxk)2

以近似函数导数为零的点来近似函数 f ( x ) f(x) f(x) 的极小值点

f k ′ ( x ) = f ′ ( x k ) + f ′ ′ ( x k ) ( x − x k ) = 0 f'_k(x) = f'(x_k) + f''(x_k)(x-x_k) = 0 fk(x)=f(xk)+f′′(xk)(xxk)=0

-> x k + 1 = x k − f ′ ( x k ) f ′ ′ ( x k ) x_{k+1} = x_k - \dfrac{f'(x_k)}{f''(x_k)} xk+1=xkf′′(xk)f(xk)

算法
  1. 给出 x 1 ∈ R , k : = 1 x_1 \in \mathcal{R}, k := 1 x1R,k:=1

  2. 计算 f ′ ( x k ) , f ′ ′ ( x k ) f'(x_k), f''(x_k) f(xk),f′′(xk)

  3. 如果 f ′ ( x k ) = 0 f'(x_k) = 0 f(xk)=0,则停。否则更新:

    x k + 1 = x k − f ′ ( x k ) f ′ ′ ( x k ) x_{k+1} = x_k - \dfrac{f'(x_k)}{f''(x_k)} xk+1=xkf′′(xk)f(xk)

收敛速度

因为 ∣ x k + 1 − x ∗ ∣ / ∣ x k − x ∗ ∣ → 0 \vert x_{k+1} - x^* \vert / \vert x_k - x^* \vert \rightarrow 0 xk+1x∣/∣xkx0,所以是超线性收敛

算误差的时候

x k + 1 − x ∗ x_{k+1} - x^* xk+1x 算是 k+1 步的误差

将牛顿法的迭代公式代入

x k + 1 − x ∗ = x k − f ′ ( x k ) f ′ ′ ( x k ) − x ∗ = x k − x ∗ − f ′ ( x k ) f ′ ′ ( x k ) x_{k+1} - x^* = x_k - \dfrac{f'(x_k)}{f''(x_k)} - x^* = x_k - x^* - \dfrac{f'(x_k)}{f''(x_k)} xk+1x=xkf′′(xk)f(xk)x=xkxf′′(xk)f(xk)

其中 x k − x ∗ x_k - x^* xkx 就是 k 步的误差

所以我们希望把后面的 f ′ ( x k ) f ′ ′ ( x k ) \dfrac{f'(x_k)}{f''(x_k)} f′′(xk)f(xk) 也写成某步的误差

用牛顿莱布尼茨公式: f ′ ( x k ) f ′ ′ ( x k ) = f ′ ( x ∗ ) + ∫ x ∗ x k f ′ ′ ( x ) d x f ′ ′ ( x k ) \dfrac{f'(x_k)}{f''(x_k)} = \dfrac{f'(x^*) + \int_{x^*}^{x_k}f''(x)\mathrm{d}x}{f''(x_k)} f′′(xk)f(xk)=f′′(xk)f(x)+xxkf′′(x)dx

因为 f ′ ( x ∗ ) = 0 f'(x^*) = 0 f(x)=0

所以 f ′ ( x k ) f ′ ′ ( x k ) = ∫ x ∗ x k f ′ ′ ( x ) d x f ′ ′ ( x k ) \dfrac{f'(x_k)}{f''(x_k)} = \dfrac{\int_{x^*}^{x_k}f''(x)\mathrm{d}x}{f''(x_k)} f′′(xk)f(xk)=f′′(xk)xxkf′′(x)dx

所以 x k − x ∗ − f ′ ( x k ) f ′ ′ ( x k ) = f ′ ′ ( x k ) ( x k − x ∗ ) − ∫ x ∗ x k f ′ ′ ( x ) d x f ′ ′ ( x k ) = ∫ x ∗ x k f ′ ′ ( x k ) − f ′ ′ ( x ) d x f ′ ′ ( x k ) x_k - x^* - \dfrac{f'(x_k)}{f''(x_k)} = \dfrac{f''(x_k)(x_k - x^*) -\int_{x^*}^{x_k}f''(x)\mathrm{d}x}{f''(x_k)} = \dfrac{\int_{x^*}^{x_k}f''(x_k) - f''(x)\mathrm{d}x}{f''(x_k)} xkxf′′(xk)f(xk)=f′′(xk)f′′(xk)(xkx)xxkf′′(x)dx=f′′(xk)xxkf′′(xk)f′′(x)dx

因为 f ′ ′ ( x ∗ ) ≠ 0 f''(x^*) \ne 0 f′′(x)=0 所以 x k x_k xk 充分靠近 x ∗ x^* x 时,由保号性,也有 f ′ ′ ( x k ) ≠ 0 f''(x_k) \ne 0 f′′(xk)=0

所以分母不为 0,就不管了

李普希兹连续时, ∣ f ′ ′ ( x k ) − f ′ ′ ( x ) ∣ ⩽ M ∣ x k − x ∗ ∣ \vert f''(x_k) - f''(x)\vert \leqslant M \vert x_k - x^*\vert f′′(xk)f′′(x)Mxkx

又因为 d x \mathrm{d}x dx 也是与 x k − x ∗ x_k - x^* xkx 同阶,所以 ∫ x ∗ x k f ′ ′ ( x k ) − f ′ ′ ( x ) d x = o ( ∣ x k − x ∗ ∣ 2 ) \int_{x^*}^{x_k}f''(x_k) - f''(x)\mathrm{d}x = o(\vert x_k - x^*\vert^2) xxkf′′(xk)f′′(x)dx=o(xkx2)

割线法

牛顿法需要计算二阶导数。如果我们不知道二阶导数?

那么就用差商代替导数,即

f ′ ′ ( x k ) ≈ f ′ ( x k ) − f ′ ( x k − 1 ) x k − x k − 1 f''(x_k) \approx \dfrac{f'(x_k)-f'(x_{k-1})}{x_k - x_{k-1}} f′′(xk)xkxk1f(xk)f(xk1)

从牛顿法可以导出:

x k + 1 = x k − f ′ ( x k ) x k − x k − 1 f ′ ( x k ) − f ′ ( x k − 1 ) x_{k+1} = x_k - f'(x_k)\dfrac{x_k - x_{k-1}}{f'(x_k)-f'(x_{k-1})} xk+1=xkf(xk)f(xk)f(xk1)xkxk1

抛物线方法
原理

考:精确线搜索的抛物线方法

他是一个在 x k , x k − 1 , x k − 2 x_k, x_{k-1}, x_{k-2} xk,xk1,xk2 三点的二次插值函数

f ( x ) = f ( x k ) + ( x − x k ) f [ x k , x k − 1 ] + ( x − x k ) ( x − x k − 1 ) f [ x k , x k − 1 , x k − 2 ] f(x) = f(x_k) + (x - x_k)f[x_k, x_{k-1}] + (x-x_k)(x-x_{k-1})f[x_k,x_{k-1}, x_{k-2}] f(x)=f(xk)+(xxk)f[xk,xk1]+(xxk)(xxk1)f[xk,xk1,xk2]

其中 f [ x k , x k − 1 ] = f ( x k ) − f ( x k − 1 ) x k − x k − 1 f[x_k, x_{k-1}] = \dfrac{f(x_k)-f(x_{k-1})}{x_k - x_{k-1}} f[xk,xk1]=xkxk1f(xk)f(xk1)

f [ x k , x k − 1 , x k − 2 ] = f [ x k , x k − 1 ] − f [ x k − 1 , x k − 2 ] x k − x k − 2 f[x_k,x_{k-1}, x_{k-2}] = \dfrac{f[x_k, x_{k-1}] - f[x_{k-1}, x_{k-2}]}{x_k - x_{k-2}} f[xk,xk1,xk2]=xkxk2f[xk,xk1]f[xk1,xk2]

是函数 f ( x ) f(x) f(x) 的一阶和二阶差商

差商是一种描述这个插值函数的方法

也可以用拉格朗日插值多项式来描述

算法

给定三个点,构建插值函数

用一阶导等于 0 来找这个插值函数的极小点

在三个插值点和这个找到的极小点之间,找左侧三个点是高低高还是右侧三个点是高低高

类似黄金分割也是不断找新的三个点

得到新的三个插值点,循环

与黄金分割的对比

与其他方法对比,黄金分割,确定三个点之后,新的点总是在这三个点里面的,所以区间总是收缩的

如果按照书上的方法,抛物线方法的初始时刻三个点选择 s 0 , s 0 + h , s 0 + 2 ∗ h s_0, s_0 + h, s_0 + 2*h s0,s0+h,s0+2h,那么这三个点不一定是高低高的,所以构建出的抛物线的最低点不一定是在这三个点之间,所以你的搜索区间不一定是收缩的

所以更好的方法是,一开始进退法找到了高低高三个点,然后把这三个点用来作为抛物线方法的初始三个点

抛物线方法与黄金分割的不同就是,插点方法的不同:黄金分割根据黄金比例来决定插点的位置,抛物线方法是根据近似的抛物线的最低点的位置来决定插点的位置

之后,递归条件仍然是一样的,找左侧三个点是高低高还是右侧三个点是高低高

判断插点位置的注意事项

要注意的是,判断插点的位置是用近似的抛物线,但是判断左侧三个点和右侧三个点的时候,点的取值是要代入原函数取值的

因为这里很容易写错,插点的函数值取值容易写错成,从抛物线最低点取到 x 的位置,然后把 x 代入抛物线取值

实际上正确的是,从抛物线最低点取到 x 的位置,然后把 x 代入原函数取值

非精确线搜索

一开始距离极小值点比较远的时候,使用精确线搜索也没有什么意义,反而迭代更多

准则:这一步的函数值比上一步的函数值小多少

Armijo-Goldstein 准则

要求这一步的函数值小于上一步的函数值

进一步,要求这一步的函数值相比于上一步的函数值有一定的下降量

每一步选择下降最快的方向,整体可能并不是下降最快的

g k T d k < 0 \mathbf{g}_k^T \mathbf{d}_k < 0 gkTdk<0 保证这是一个下降的方向

所以要求 f ( x k ) + ρ α k g k T d k f(x_k) + \rho \alpha_k \mathbf{g}_k^T \mathbf{d}_k f(xk)+ραkgkTdk 有一个下降量,它相当于一个斜线

自然,我们知道这个斜线的斜率是不确定的,那么斜率就可能是一个问题,比如,如果斜率选择不当,可能导致击中的原函数的点的值与处发现很接近,也就是每一步下降的幅度可能会小

所以我们要想办法把 α = 0 \alpha = 0 α=0 附近的区域刨去

所以再要求 f ( x k ) + ( 1 − ρ ) α k g k T d k f(x_k) + (1-\rho) \alpha_k \mathbf{g}_k^T \mathbf{d}_k f(xk)+(1ρ)αkgkTdk 也有一个下降量

又因为我们希望 f ( x k ) + ( 1 − ρ ) α k g k T d k f(x_k) + (1-\rho) \alpha_k \mathbf{g}_k^T \mathbf{d}_k f(xk)+(1ρ)αkgkTdk 击中的点是 α = b \alpha = b α=b f ( x k ) + ρ α k g k T d k f(x_k) + \rho \alpha_k \mathbf{g}_k^T \mathbf{d}_k f(xk)+ραkgkTdk 击中的点是 α = c \alpha = c α=c

又希望可行区间是 ( b , c ) (b,c) (b,c) 那么就是希望 b < c b<c b<c,那么就是希望 f ( x k ) + ( 1 − ρ ) α k g k T d k f(x_k) + (1-\rho) \alpha_k \mathbf{g}_k^T \mathbf{d}_k f(xk)+(1ρ)αkgkTdk 的斜率的绝对值比 f ( x k ) + ρ α k g k T d k f(x_k) + \rho \alpha_k \mathbf{g}_k^T \mathbf{d}_k f(xk)+ραkgkTdk 更大

所以要求 0 < ρ < 1 / 2 0 < \rho < 1/2 0<ρ<1/2

Wolfe-Powell 准则

之前的 Armijo-Goldstein 准则衡量“一定的下降量”是使用函数值来衡量的

现在这个 Wolfe-Powell 准则衡量“一定的下降量”是使用斜率 g k T d k \mathbf{g}_k^T \mathbf{d}_k gkTdk 来衡量的

也就是,假设了 f ( x k ) + ρ α k g k T d k f(x_k) + \rho \alpha_k \mathbf{g}_k^T \mathbf{d}_k f(xk)+ραkgkTdk 击中的点是 α = c \alpha = c α=c

然后希望有一定的斜率,那么设可接受斜率是初始斜率的 σ \sigma σ

那么我个人觉得有两种方法

一种是假设 f ( x k ) + σ α k g k T d k f(x_k) + \sigma \alpha_k \mathbf{g}_k^T \mathbf{d}_k f(xk)+σαkgkTdk 击中的点是 α = e \alpha = e α=e

还有一种是他设的,取原曲线上斜率为 σ α k g k T d k \sigma \alpha_k \mathbf{g}_k^T \mathbf{d}_k σαkgkTdk 的位置是 α = e \alpha = e α=e

可行区间为 ( e , c ) (e,c) (e,c)

他这种设法还可以使得精确解的最小值包含在 ( e , c ) (e,c) (e,c)

为了保证 e < c e<c e<c 需要 ρ < σ \rho < \sigma ρ<σ

σ < 1 \sigma < 1 σ<1 是为了使得 σ α k g k T d k \sigma \alpha_k \mathbf{g}_k^T \mathbf{d}_k σαkgkTdk 代表的斜率的线更靠近水平一点,这样就可以避开 x k x_k xk 点,也就是避开 α = 0 \alpha = 0 α=0 的附近

Armijo 准则的实现

考:Armijo 准则知道怎么算

β m \beta^m βm 随着步数 m m m 从 0 开始增加

  1. 给定 β ∈ ( 0 , 1 ) , σ ∈ ( 0 , 0.5 ) \beta \in (0,1), \sigma \in (0,0.5) β(0,1),σ(0,0.5),令 m : = 0 m := 0 m:=0

  2. 若不等式

    f ( x k + β m d k ) ⩽ f ( x k ) + σ β m g k T d k f(x_k +\beta^m d_k) \leqslant f(x_k) + \sigma \beta^m g_k^T d_k f(xk+βmdk)f(xk)+σβmgkTdk

    成立,置 m k : = m , x k + 1 = x k + β m k d k m_k := m, x_{k+1} = x_k + \beta^{m_k} d_k mk:=m,xk+1=xk+βmkdk,停算,否则,转步 3

  3. m : = m + 1 m := m + 1 m:=m+1,转步 2

线搜索方法框架

搜索方向与负梯度方向的夹角小于 90 度

线搜索方法的收敛性

f ( x k ) f(x_k) f(xk) 单调下降且有界

f ( x k ) − f ( x k + 1 ) → 0 f(x_k)-f(x_{k+1}) \rightarrow 0 f(xk)f(xk+1)0

意味着

x k + 1 = x k + o ( d k ) x_{k+1} = x_{k} + o(d_k) xk+1=xk+o(dk)

∣ ∣ a ⋅ b ∣ ∣ ⩽ ∣ ∣ a ∣ ∣ ⋅ ∣ ∣ b ∣ ∣ \vert \vert a \cdot b \vert \vert \leqslant \vert \vert a \vert \vert \cdot \vert \vert b \vert \vert ∣∣ab∣∣∣∣a∣∣∣∣b∣∣

d k / ∣ ∣ d k ∣ ∣ d_k / \vert \vert d_k \vert \vert dk/∣∣dk∣∣ 是单位向量

所以 [ g ( ε ) − g k ] T d k / ∣ ∣ d k ∣ ∣ ⩽ ∣ ∣ g ( ε ) − g k ∣ ∣ [g(\varepsilon)-g_k]^T d_k / \vert \vert d_k \vert \vert \leqslant \vert \vert g(\varepsilon)-g_k \vert \vert [g(ε)gk]Tdk/∣∣dk∣∣∣∣g(ε)gk∣∣

之后的 ∣ ∣ g ( ε ) − g k ∣ ∣ ⩽ 1 / 2 ∗ ϵ 0 \vert \vert g(\varepsilon)-g_k \vert \vert \leqslant 1/2 * \epsilon_0 ∣∣g(ε)gk∣∣1/2ϵ0 其中 1 / 2 ∗ ϵ 0 1/2 * \epsilon_0 1/2ϵ0 是人为取的

lim ⁡ k → ∞ ∇ f ( x k + 1 ) T s k / g k T s k = 1 \lim_{k \rightarrow \infty}\nabla f(x_{k+1})^T s_k/g_k^T s_k = 1 limkf(xk+1)Tsk/gkTsk=1

这就是表示,这一步的斜率和下一步的斜率一样

但是 Armijo 准则要求 ρ < σ < 1 \rho < \sigma < 1 ρ<σ<1 于是矛盾

书上的一个问题,想要证明小于号变成大于号,但是万一一开始就满足大于号的话,就没有这个转变的过程了

梯度法和牛顿法

这里讲的是一般搜索框架中的“确定下降方向”

最速下降法(梯度法)

最速下降法(梯度法)取负梯度方向作为

牛顿法

牛顿法取 G k d k = − g k G_k d_k = -g_k Gkdk=gk 的解 d k d_k dk 作为下降方向

阻尼牛顿法

阻尼牛顿法引入线搜索方程保证收敛性,也就是,用牛顿法确定下降方向(搜索方向),有了搜索方向之后再沿这个搜索方向做 Armijo 搜索

修正牛顿法

基本/阻尼牛顿法中要每一步的 Hesse 矩阵正定,才能保证牛顿方向为下降方向

每一步怎么判断 Hesse 矩阵是否正定?直接算 dTGd? 不用,因为你是用 G k d k = − g k G_k d_k = -g_k Gkdk=gk 算出来的解 d k d_k dk,所以你只要用 g k T d k g_k^T d_k gkTdk 验证就好了,如果 g k T d k < 0 g_k^T d_k < 0 gkTdk<0,表示求出来的搜索方向 d k d_k dk 确实与负梯度成锐角,那么就说明 Hesse 矩阵正定,否则不是正定

那么 Hesse 矩阵不正定时,不能保证牛顿方向为下降方向,该怎么办?

牛顿/梯度混合法在 Hesse 矩阵不正定时用梯度下降法,也就是求出的 d k d_k dk 不对时,直接令 d k d_k dk 为负梯度

修正牛顿法在 Hesse 矩阵对角线上加一个正数保障正定性

也就是之前的算法都是用 G k d k = − g k G_k d_k = -g_k Gkdk=gk 算出来的搜索方向 d k d_k dk

现在修正牛顿法用 ( G k + μ k I ) d k = − g k (G_k + \mu_k I) d_k = -g_k (Gk+μkI)dk=gk 算出来搜索方向 d k d_k dk

共轭方向法和共轭梯度法

首先,共轭方向法不等于共轭梯度法

考虑有极小值的函数

一次函数没有,所以考虑二次函数

多元函数 f ( x ) = 1 / 2 x T G x + b T x + c f(x) = 1/2 x^TGx + b^Tx + c f(x)=1/2xTGx+bTx+c

它的一阶导 ∇ f = G x + b \nabla f = Gx + b f=Gx+b

求极小值就是求 G x + b = 0 Gx + b = 0 Gx+b=0

求极小值就是等价于求这个线性代数方程组的解

有直接求解的方法或者迭代求解的方法

找一个解就是找这个 n 维空间的一个点

因为这个点在 n 维空间内,所以这个点可以表达成这个 n 维空间的 n 个线性独立的基向量的线性组合

直接的方法的话,就是直接确定这个线性组合的系数

迭代求解的,比如之前讲到的最速下降法和基本牛顿法

最速下降法的问题是他是一阶收敛速度,收敛速度太慢

基本牛顿法用 G k d k = − g k G_k d_k = -g_k Gkdk=gk 算出来搜索方向 d k d_k dk

其中要算一个二阶导 Hesse 矩阵,对于工程问题计算量太大

现在我们希望有一个方法,把这个确定 n 个系数的过程分为 n 步,每一步确定一个系数

要求我们第 i 步求解不会影响我们之前求解出来的系数

那么就是要求我们的线性组合的 n 个线性独立的基向量,他不单单是线性独立的,还需要是正交的

每一步找距离精确点最近

在第 i 步上,沿着第 i 个基向量走,走到误差最小的点,所以这个时候,迭代向量在第 i 个基向量的方向上的投影,已经等于距离精确点在第 i 个方向上的投影

为了求第 i 步的长度,利用 e i e_i ei d i d_i di 垂直 e i ⋅ d i = 0 e_i \cdot d_i = 0 eidi=0 来计算,其中 e i = x i − x ∗ e_i = x_i - x^* ei=xix

但是 x ∗ x^* x 不知道,所以我们新增一个要求 e i T G d i = 0 e_i^TGd_i = 0 eiTGdi=0,其中的 x ∗ x^* x 项会变成 G x ∗ = b Gx^* = b Gx=b,这样就可以求了

那么其实我们现在不用 e i ⋅ d i = 0 e_i \cdot d_i = 0 eidi=0 来求 e i e_i ei

我们直接用 e i T G d i = 0 e_i^TGd_i = 0 eiTGdi=0 来求 e i e_i ei

这就相当于我们新定义了一个内积的形式 < a , b > = a T G b = 0 <a,b> = a^TGb = 0 <a,b>=aTGb=0

那么要求 n 个基向量互相正交,也就是 < d i , d j > = d i T G d j = δ i j <d_i, d_j> = d_i^TGd_j = \delta_{ij} <di,dj>=diTGdj=δij

要求第 i 步的基向量 d i d_i di 与梯度方向 g 内积 < 0

也是用二次函数拟合,所以误差也是二次

收敛速度的证明

定理 21 第 i 步找的极小值点是函数曲面的等值线与第 i 步的基向量与之前的基向量张成的线性流形相切的点

比如第一步,极小值是 d 1 d_1 d1 这个线与函数曲面的等值线相切的点

第二步,极小值是 d 1 , d 2 d_1,d_2 d1,d2 张成的平面与函数曲面的切点

第三步,…

现在我们的要求改为了 n 个基向量是 G 共轭的

n 个基向量是 G 共轭可以推出这 n 个基向量是线性无关的,反证法

定理 21 的作用是,极小值意味着梯度 = 0

我们在共轭方向法中,下降方向虽然不是第 i 个点的梯度,但是我们需要知道第 i 个点的梯度来判断我们第 i 个点的下降方向是否是合理的,是否是使得函数下降的

那么我们要求第 i+1 点的梯度时,这个第 i+1 点的梯度是垂直于前 i 个基向量张成的流形

因此我们要证明第 i+1 点的梯度垂直于前 i 个基向量张成的流形

证明过程…两部分

解释第一部分:第 i 步的搜索搜索到的第 i + 1 步的点,它和第 i + 1 点处梯度相互垂直

计算过程中需要用到 G,也就是海森矩阵,怎么避免计算?

构造 d

公式略

系数为 0 的时候就是每一步为负梯度方向,就是最速下降

所以公式是负梯度减去负梯度在旧基向量方向上的投影,才能得到新的 d 与旧的 d 相互 G 共轭

这些系数就用新的 d 与旧的 d 相互 G 共轭来求

求的过程中,公式推导用到了

G x = g Gx = g Gx=g

还用到了 g k ∗ g k − 1 = 0 g_k * g_{k-1} = 0 gkgk1=0

因为根据公式 g k − 1 g_{k-1} gk1 就是 d 0 d_0 d0 d k − 1 d_{k-1} dk1 的线性组合

g k g_k gk 已经证了和 d 0 d_0 d0 d k − 1 d_{k-1} dk1 张成的流形垂直,所以就是与 d 0 d_0 d0 d k − 1 d_{k-1} dk1 都垂直

另一种讲法

把精确解 x ∗ x^* x 拆成 d d d 的线性组合

如果 d i d_i di 之间是正交的,那么用 a i d i = x d i a_id_i = xd_i aidi=xdi 可以求出 a i a_i ai

但是现在精确解是未知的

( ∑ a i d i − x ∗ ) T G d j = 0 (\sum{a_i d_i} - x^*)^TGd_j=0 (aidix)TGdj=0

未知 x ∗ x^* x 的时候,如果用 d 这个线性组合把 x ∗ x^* x 分解得很精确,那么 ∑ a i d i − x ∗ = 0 \sum{a_i d_i} - x^* = 0 aidix=0 上式就成立

拆开:

( ∑ a i d i ) T G d j − ( x ∗ ) T G d j = 0 (\sum{a_i d_i})^TGd_j - (x^*)^TGd_j=0 (aidi)TGdj(x)TGdj=0

这个精确解 x ∗ x^* x 还是未知,还是要处理

( x ∗ ) T G d j (x^*)^TGd_j (x)TGdj 是一个标量,所以 ( x ∗ ) T G d j = ( ( x ∗ ) T G d j ) T (x^*)^TGd_j = ((x^*)^TGd_j)^T (x)TGdj=((x)TGdj)T

( x ∗ ) T G d j = ( ( x ∗ ) T G d j ) T = d j T G T x ∗ = d j T G x ∗ = d j T b (x^*)^TGd_j = ((x^*)^TGd_j)^T = d_j^T G^T x^* = d_j^T G x^* = d_j^T b (x)TGdj=((x)TGdj)T=djTGTx=djTGx=djTb

x ∗ x^* x 就没了

怎么求第 k 步的搜索方向

共轭方向法只是确定了每一个搜索方向之间都要满足 G 共轭,在 k-1 步沿着 d k − 1 d_{k-1} dk1 搜索了之后,还要确定 d k d_k dk

如果仅仅是使用 G 共轭这个条件的话,可以求,但是要求 G

为了避免计算这个 G

我们把第 k 步搜索方向取为前 k−1 步搜索方向与第 k 步负梯度的线性组合

这个方法就叫做共轭梯度法

这就是共轭方向法和共轭梯度法的区别

d k = − g k + β k − 1 d k − 1 + ∑ i = 0 k − 2 β k i d i d_k = -g_k + \beta_{k-1}d_{k-1} + \sum_{i=0}^{k-2}\beta_{k}^i d_i dk=gk+βk1dk1+i=0k2βkidi

根据 d k d_k dk d i , i = 0 , . . . , k − 1 d_i, i = 0, ..., k-1 di,i=0,...,k1 G 共轭来确定线性组合中的系数

0 = d k − 1 T G d k = − d k − 1 T G g k + β k − 1 d k − 1 T G d k − 1 + ∑ i = 0 k − 2 β k i d k − 1 T G d i 0 = d^T_{k-1}Gd_k = -d^T_{k-1}Gg_k + \beta_{k-1}d^T_{k-1}Gd_{k-1}+ \sum_{i=0}^{k-2}\beta_{k}^i d^T_{k-1}Gd_i 0=dk1TGdk=dk1TGgk+βk1dk1TGdk1+i=0k2βkidk1TGdi

为什么这里要把 0 到 k-2 和 k-1 分开写?

经过 k-1 步之后 0 到 k-2 的搜索方向和 k-1 步的搜索方向 G 共轭,所以

d k − 1 T G d i = 0 d^T_{k-1}Gd_i = 0 dk1TGdi=0

所以上式最后一项消去

现在变成

0 = − d k − 1 T G g k + β k − 1 d k − 1 T G d k − 1 0 = -d^T_{k-1}Gg_k + \beta_{k-1}d^T_{k-1}Gd_{k-1} 0=dk1TGgk+βk1dk1TGdk1

-> β k − 1 = g k T G d k − 1 d k − 1 T G d k − 1 \beta_{k-1} = \dfrac{g^T_{k}Gd_{k-1}}{d^T_{k-1}Gd_{k-1}} βk1=dk1TGdk1gkTGdk1

因为 G 是二阶导,所以乘以一个方向之后就是一阶导

或者这么想 g ( x ) = ∇ f ( x ) = G x + b , G ( x ) = ∇ 2 f ( x ) = G g(x) = \nabla f(x) = Gx + b, G(x) = \nabla^2 f(x) = G g(x)=f(x)=Gx+b,G(x)=2f(x)=G

所以 g 1 − g 0 = G ( x 1 − x 0 ) = α 0 G d 0 g_1 - g_0 = G(x_1 - x_0) = \alpha_0 G d_0 g1g0=G(x1x0)=α0Gd0

所以 G d k − 1 = 1 / α 0 ∗ ( g k − g k − 1 ) Gd_{k-1} = 1/\alpha_0 * (g_k -g_{k-1}) Gdk1=1/α0(gkgk1)

上式化为

β k − 1 = g k T G d k − 1 d k − 1 T G d k − 1 = g k T ( g k − g k − 1 ) d k − 1 T ( g k − g k − 1 ) \beta_{k-1} = \dfrac{g^{T}_{k}Gd_{k-1}}{d^T_{k-1}Gd_{k-1}} = \dfrac{g^{T}_{k}(g_k -g_{k-1})}{d^T_{k-1}(g_k -g_{k-1})} βk1=dk1TGdk1gkTGdk1=dk1T(gkgk1)gkT(gkgk1)

其中用到了转置。因为最后计算结果是标量,所以可以随意转置

因为每一步确定搜索方向之后,沿着这个方向,不管是精确线搜索还是非精确线搜索,都是确定到了极小值点才停止,所以每一步走完之后的负梯度方向之间应该是互相垂直的

g k T g k − 1 = 0 g^T_k g_{k-1} = 0 gkTgk1=0

又因为我们前面证明过了第 i 步找的极小值点是函数曲面的等值线与第 i 步的基向量与之前的基向量张成的线性流形相切的点

也就是 g k T d i = 0 , i = 0 , . . . , k − 1 g^T_k d_i = 0, i = 0, ..., k-1 gkTdi=0,i=0,...,k1

那么上式化为

β k − 1 = g k T G d k − 1 d k − 1 T G d k − 1 = g k T ( g k − g k − 1 ) d k − 1 T ( g k − g k − 1 ) = g k T g k d k − 1 T g k − 1 \beta_{k-1} = \dfrac{g^{T}_{k}Gd_{k-1}}{d^T_{k-1}Gd_{k-1}} = \dfrac{g^{T}_{k}(g_k -g_{k-1})}{d^T_{k-1}(g_k -g_{k-1})} = \dfrac{g^{T}_{k}g_k}{d^{T}_{k-1}g_{k-1}} βk1=dk1TGdk1gkTGdk1=dk1T(gkgk1)gkT(gkgk1)=dk1Tgk1gkTgk

再次使用我们对 d 的假设: d k = − g k + β k − 1 d k − 1 + ∑ i = 0 k − 2 β k i d i d_k = -g_k + \beta_{k-1}d_{k-1} + \sum_{i=0}^{k-2}\beta_{k}^i d_i dk=gk+βk1dk1+i=0k2βkidi 代入到分母的那个 d k − 1 d_{k-1} dk1 中,和 g k − 1 g_{k-1} gk1 一乘,0 到 k-2 的 d 和 k-1 的 g 相乘是 0,所以消到只剩下 k-1 的 g 乘 k-1 的 g

β k − 1 = g k T G d k − 1 d k − 1 T G d k − 1 = g k T ( g k − g k − 1 ) d k − 1 T ( g k − g k − 1 ) = g k T g k d k − 1 T g k − 1 = g k T g k g k − 1 T g k − 1 \beta_{k-1} = \dfrac{g^{T}_{k}Gd_{k-1}}{d^T_{k-1}Gd_{k-1}} = \dfrac{g^{T}_{k}(g_k -g_{k-1})}{d^T_{k-1}(g_k -g_{k-1})} = \dfrac{g^{T}_{k}g_k}{d^{T}_{k-1}g_{k-1}} = \dfrac{g^{T}_{k}g_k}{g^{T}_{k-1}g_{k-1}} βk1=dk1TGdk1gkTGdk1=dk1T(gkgk1)gkT(gkgk1)=dk1Tgk1gkTgk=gk1Tgk1gkTgk

这样就求出了 β k − 1 \beta_{k-1} βk1

那么接下来求其他系数。根据 d k d_k dk d j , j = 0 , . . . , k − 2 d_j, j = 0, ..., k-2 dj,j=0,...,k2 G 共轭:

0 = d j T G d k = − d j T G g k + β k − 1 d j T G d k − 1 + ∑ i = 0 k − 2 β k i d j T G d i , j = 0 , . . . , k − 2 0 = d^T_j G d_k = -d^T_{j}Gg_k + \beta_{k-1}d^T_{j}Gd_{k-1}+ \sum_{i=0}^{k-2}\beta_{k}^i d^T_{j}Gd_i, j = 0, ..., k-2 0=djTGdk=djTGgk+βk1djTGdk1+i=0k2βkidjTGdi,j=0,...,k2

其中,因为各个搜索方向 G 共轭,所以 d j T G d k − 1 = 0 d^T_{j}Gd_{k-1} = 0 djTGdk1=0 中间那项消掉

对于第三项同理,因为 G 共轭,所以消到只剩下 dj 乘 dj 的那项

上式化简为

0 = − d j T G g k + β k j d j T G d j , j = 0 , . . . , k − 2 0 = -d^T_j G g_k + \beta_k^j d_j^T G d_j, j = 0, ..., k-2 0=djTGgk+βkjdjTGdj,j=0,...,k2

-> β k j = G g k T d T d T d j T G d j \beta_k^j = \dfrac{G g_k^T d^Td^T}{d_j^T G d_j} βkj=djTGdjGgkTdTdT

其中用到了转置。因为最后计算结果是标量,所以可以随意转置

与之前一样,根据 G d k − 1 = 1 / α 0 ∗ g k − g k − 1 Gd_{k-1} = 1/\alpha_0 * g_k -g_{k-1} Gdk1=1/α0gkgk1

上式化为 β k j = G g k T d T d T d j T G d j = 1 α k g k T ( g j + 1 − g j ) d j T G d j \beta_k^j = \dfrac{G g_k^T d^Td^T}{d_j^T G d_j} = \dfrac{1}{\alpha_k}\dfrac{g_k^T(g_{j+1}-g_{j})}{d_j^T G d_j} βkj=djTGdjGgkTdTdT=αk1djTGdjgkT(gj+1gj)

又因为每一步走完之后的负梯度方向之间应该是互相垂直的

所以 g k T g j + 1 = 0 , g k T g j = 0 g_k^T g_{j+1} = 0, g_k^T g_{j} = 0 gkTgj+1=0,gkTgj=0

所以 β k j = G g k T d T d T d j T G d j = 1 α k g k T ( g j + 1 − g j ) d j T G d j = 0 \beta_k^j = \dfrac{G g_k^T d^Td^T}{d_j^T G d_j} = \dfrac{1}{\alpha_k}\dfrac{g_k^T(g_{j+1}-g_{j})}{d_j^T G d_j} = 0 βkj=djTGdjGgkTdTdT=αk1djTGdjgkT(gj+1gj)=0

也就是 0 到 k-2 前的系数为 0

对于非线性问题

对于线性问题,有连等式成立

β k − 1 = g k T G d k − 1 d k − 1 T G d k − 1 = g k T ( g k − g k − 1 ) d k − 1 T ( g k − g k − 1 ) = g k T g k d k − 1 T g k − 1 = g k T g k g k − 1 T g k − 1 \beta_{k-1} = \dfrac{g^{T}_{k}Gd_{k-1}}{d^T_{k-1}Gd_{k-1}} = \dfrac{g^{T}_{k}(g_k -g_{k-1})}{d^T_{k-1}(g_k -g_{k-1})} = \dfrac{g^{T}_{k}g_k}{d^{T}_{k-1}g_{k-1}} = \dfrac{g^{T}_{k}g_k}{g^{T}_{k-1}g_{k-1}} βk1=dk1TGdk1gkTGdk1=dk1T(gkgk1)gkT(gkgk1)=dk1Tgk1gkTgk=gk1Tgk1gkTgk

但是对于非线性问题,其中任意一个确定 β k − 1 \beta_{k-1} βk1 的等式都不等价

用不同的等式确定 β k − 1 \beta_{k-1} βk1,就可以是一种不同的算法

这里说的线性问题说的是,共轭方向法等价于解 ∇ f ( x ) = G x + b = 0 \nabla f(x) = Gx + b = 0 f(x)=Gx+b=0

二次终止性

当使用精确线搜索方法时,对于正定二次目标函数极小值问题,共轭方向法至多在n步内即可求得其唯一极小点,这称为二次终止性。

共轭梯度法也有这个性质

对于非二次目标函数(即更一般的非线性目标函数)极小值问题,共轭梯度法不具有二次终止性。但是收敛很快。为什么?

因为靠近精确解的时候,误差也比较小,所以也能得到好的结果

这说了个寂寞

从内积角度看傅里叶变换

函数展开,先确定基函数,再确定基函数的系数

对于泰勒展开,基函数是 (x-x0)^n 基函数的系数是通过要求函数与展开式在某点的各阶导数相等来确定的

f ( x 0 ) = F ( x 0 ) f(x_0) = F(x_0) f(x0)=F(x0)

f ′ ( x 0 ) = F ′ ( x 0 ) f'(x_0) = F'(x_0) f(x0)=F(x0)

f ′ ′ ( x 0 ) = F ′ ′ ( x 0 ) f''(x_0) = F''(x_0) f′′(x0)=F′′(x0)

但是这就要求原函数有 n 阶导数

一种更有效的展开方法:要求函数与展开式与 x^n 乘积的积分相等

不要求原函数是光滑的

可积的要求比可微的要求低

∫ f ( x ) d x = ∫ F ( x ) d x \int f(x)\mathrm{d}x = \int F(x)\mathrm{d}x f(x)dx=F(x)dx

∫ f ( x ) x d x = ∫ F ( x ) x d x \int f(x)x\mathrm{d}x = \int F(x)x\mathrm{d}x f(x)xdx=F(x)xdx

∫ f ( x ) x 2 d x = ∫ F ( x ) x 2 d x \int f(x)x^2\mathrm{d}x = \int F(x)x^2\mathrm{d}x f(x)x2dx=F(x)x2dx

提出 a 交换求和和积分号,得到线性代数方程组

(…)

这做了个什么事呢?这相当于对两个函数定义了一个内积

f ( x ) ⋅ g ( x ) = ∫ f ( x ) g ( x ) d x f(x) \cdot g(x) = \int f(x) g(x) \mathrm{d}x f(x)g(x)=f(x)g(x)dx

inf ⁡ F x = ∫ f x \inf F x = \int f x infFx=fx

( F − f ) ⋅ x i (F-f) \cdot x^i (Ff)xi 相当于 F 与 f 之间的误差垂直于 x i x^i xi

求到的是距离 f 误差最小的一个函数

取 n 个基函数的时候,和取 n + 1 个基函数的时候,得到的线性代数方程组是不一样的

得到的 a1 a2 a3 是可能会变的

所以每次加一个基函数的时候,都要重新求解一次

我们希望的是每增加一次基函数,之前求解出来的 a1 a2 a3 都不会变

这就需要每一次增加的基函数和之前的基函数都是正交的

傅里叶积分选取的基函数之间都是正交的,就满足这个条件

线性方程组的求解分为两大类

直接法和迭代法

直接法,比如高斯消元和 LU 分解

迭代法,例如雅可比迭代

回到我们的共轭方向法,假设我们已经知道了所有的 d1 d2 d3,那么共轭方向法就是一个直接法

但是我们换一个角度想,假设我们一开始什么基向量都不知道,我们是一步步构造 d1 d2 d3 的

构造 d1,解一次,得到 a1,然后再构造 d2,再解,得到 a2

所以也可以视为迭代法

在取每一步方向 d 的时候要用到 G 共轭,为了避免计算 G,把 d 写成一个形式

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值