【Heskey带你玩模拟】凸优化笔记
作者:互联网
优化:从一个可行解的集合(满足约束的可行解)中,寻找出最优的元素
Basic Concept
条件数:\(Ax=B\) 中 \(||A||\cdot||A^{-1}||\)
物理意义:线程方程组的解对b中的误差或不确定度的敏感性的度量(该数量在数值计算中的容易程度的衡量,低条件数是良态的)
1. 梯度下降
梯度下降又称最速下降法
无约束优化:
\[\min_{x\in R^n}f(x) \]可以通过迭代的方式,将 \(x_0\) 迭代到最优解对应的点 \(x^\star\):
\[x_{t+1}=x_t+\gamma_td_t \]where:
-
\(d_t\):搜索方向
-
\(\gamma_t\):步长
梯度下降法希望得到一个在该点下降最快的方向,来使得我们的迭代过程尽可能的高效
3. 牛顿法
要求解 \(f(x)=0\),可以通过选取迭代初值 \(x_0\),通过牛顿迭代公式逼近 \(x^\star\)
\[x_{t+1}=x_t-\frac{f(x_t)}{f^\prime(x_t)} \]3.1 牛顿法在最优化上的应用
补充:
Jacobian矩阵
Hessian矩阵
函数 \(F:R^n\rightarrow R^m\) 由 \(m\) 个实函数构成:\(y_1(x_1,...,x_n),...,y_m(x_1,...,x_n)\) 则,
Jacobian矩阵:
\[J_F(x_1,...,x_n)= \left[ \begin{array}{3} \frac{\part y_1}{\part x_1}&...&\frac{\part y_1}{\part x_n}\\ ...&...&...\\ \frac{\part y_m}{\part x_1}&...&\frac{\part y_m}{\part x_n} \end{array} \right] \]Hessian矩阵:
\[H(F)(x)= \left[ \begin{array}{4} \frac{\part^2 F}{\part x_1^2}&\frac{\part^2 F}{\part x_1\part x_2}&...&\frac{\part^2 F}{\part x_1\part x_n}\\ \frac{\part^2 F}{\part x_2x_1}&\frac{\part^2 F}{\part x_2^2}&...&...\\ ...&...&...&...\\ \frac{\part^2 F}{\part x_nx_1}&\frac{\part^2 F}{\part x_nx_2}&...&\frac{\part^2 F}{\part x_n^2} \end{array} \right] \](1) 迭代方程
优化问题也就是找极值点 \(f^\prime(x^\star)=g(x)=0\),迭代公式变为
\[x_{t+1}=x_t-\frac{g(x_t)}{g^\prime(x_t)}=x_t-f^{\prime\prime}(x_t)^{-1}f^\prime(x_t) \]因此,迭代方程为:
\[x_{t+1}=x_t+d=x_t-\nabla^2f(x_t)^{-1}\nabla f(x_t) \]高维的情况下:
\[x_{n+1}=x_n-[Hf(x)n]^{-1}\nabla f(x_n),\quad n\ge0. \]其中,\(H\) 为hessian矩阵
在高维情况下,变成线性系统求解问题:
\[x_{n+1}-x_n=-[Hf(x_n)]^{-1}\nabla f(x_n)\\ x=-[Hf(x_n)]^{-1}\nabla f(x_n)\\ [Hf(x_n)]x=-\nabla f(x_n)\\ Ax=B \](2) 算法
选定初始 \(x_0\),取 \(\epsilon>0\),Loop:
- 若 \(||\nabla f(x_t)||<\epsilon\),停止循环
- 计算梯度:\(\nabla f(x_t)\)
4. 共轭梯度
共轭梯度法(CG)是实现共轭方向法的一个方法。由于CG是通过梯度信息来获取共轭方向的,所以我们称之为共轭梯度法。
4.1 共轭向量组
在共轭梯度法中,我们想得到的并不是一组相互正交的搜索方向,而是一组相互共轭的搜索方向
设 \(Q\) 是正定矩阵,若对于两个不同的非零向量满足:
\[d_i^TQd_j=0 \]则称 \(d_i,d_j\) 为共轭方向
若 \(d_0,d_1,...,d_{n-1}\) 均两两满足以上性质,则称为共轭向量组 ,顺着共轭向量组走,不受条件数影响
二次型的共轭向量组:目标二次型Hessian矩阵的平方根逆矩阵的列向量组
4.2 共轭方向法的框架
对于一般的函数,想要求得共轭向量组:
给定初始值 \(x_0\) 和阈值 \(\epsilon>0\),令 \(k=0\)
计算 \(g_0=\nabla f(x_0)\) 和初始下降方向,满足 \(d_0^Tg_0<0\),Loop:
-
如果 \(||g_k||<\epsilon\),停止迭代
-
线搜索确定步长:\(\alpha_k=arg\min_\alpha f(x_k+\alpha d_k)\)
-
更新迭代点:\(x_{k+1}=x_k+\alpha_kd_k\)
-
采用某种共轭方法计算得到 \(d_{k+1}\),使得 \(d_{k+1}^TGd_j=0\)
-
令 \(k=k+1\)
4.3 共轭方向法的本质
共轭向量组彼此是线性无关的,线性无关的 \(n\) 个向量可以张成一个 \(n\) 维空间,即:第 \(k\) 次得到的搜索方向正交于前面 \(k-1\) 次搜索方向张成的线性空间,新增一个共轭向量,原本的空间就被拓展了维度
共轭方向法的搜索逻辑:先在 \(R\) 上找到最棒的解,然后得到下一个共轭方向,拓展我们的搜索维度,在 \(R^2\) 上搜索,找到最棒的解,这样迭代下去,直到我们的搜索维度达到原问题的维度 \(R^n\)
也就是说,我们每次都是在保证我们已经在目前的这个子空间(或者说线性流形)上已经达到最优了,然后我们再拓展这个子空间的维度,直到这个子空间拓展得和我们原问题得搜索空间一样时,那么得到的解就是最好的
子空间拓展定理:
空间搜索定理说明了:第 \(k+1\) 次得到的迭代点处的梯度值与之前所有的搜索方向正交,也就是说之前所有的搜索方向再梯度方向上分量都为0,这个方向是“前人”没有探索过的方向,我们需要在这个新的方向上探索更新迭代点
4.4 共轭梯度法
共轭梯度法:通过梯度信息来获得共轭的搜索方向
(1) 搜索方向的构建
构建要求
- 所有搜索方向共轭
- 搜索方向 \(d_k\) 仅仅是 \(-g_k\) 和 \(d_{k-1}\) 的线性组合,即:
其中:
\[\beta_{k-1}=\frac{g_k^Tg_{k}}{g_{k-1}^Tg_{k-1}} \]等价的共轭梯度公式还有很多,以上的 \(\beta\) 只是其中一个(FR [Fletcher-Reeves]公式)
步长:
\[\alpha_k=\frac{g_k^Tg_k}{d_k^TGd_k} \](2) 共轭梯度法
目的:要解线性系统:\(Ax=b\) 或者优化二次型:\(f=\frac12x^TGx+b^Tx\)
给定迭代初始值 \(x_0\) 和阈值 \(\epsilon>0\)
- 如果是二次型,计算梯度值:\(g_0=Gx_0+b\)
- 如果是解线性系统,计算残差:\(g_0=b-Ax_0\)
令 \(d_0=-g_0,k=0\),Loop:
- 如果 \(||g_k||<\epsilon\),停止迭代
- 确定步长:\(\alpha_k=\frac{g_k^Tg_k}{d_k^TGd_k}\)
- 更新迭代点:\(x_{k+1}=x_k+\alpha_kd_k\)
- 计算新的梯度/残差:\(g_{k+1}=Gx_{k+1}+b\)
- 计算组合系数:\(\beta_{k}=\frac{g_{k+1}^Tg_{k+1}}{g_{k}^Tg_{k}}\)
- 计算共轭方向:\(d_{k+1}=-g_{k+1}+\beta_kd_k\)
- 令 \(k=k+1\)
(3) 预处理共轭梯度
preconditioning
\[Ax=b \]如果 \(A\) 的性质不好,则可以先乘以预处理矩阵
\[M^{-1}Ax=M^{-1}b \]总结
- 共轭梯度法是共轭方向法的一种实现。
- 共轭方向的搜索其实就是搜索子空间的拓展。
- 共轭梯度的组合系数 有多种等价的计算方式,一般采用最简洁的FR公式。
- 共轭梯度法的计算效率高,不涉及矩阵运算。
- 共轭梯度法依赖于线搜索,非精确线搜索不能保证共轭性和下降性。
标签:frac,迭代,梯度,笔记,Heskey,part,搜索,共轭,模拟 来源: https://www.cnblogs.com/Heskey0/p/16481696.html