(模拟)最优化导论笔记
首先,老规矩:
未经允许禁止转载(防止某些人乱转,转着转着就到蛮牛之类的地方去了)
B站:Heskey0
优化:从一个可行解的集合(满足约束的可行解)中,寻找出最优的元素
参考书籍《最优化导论》
凸优化从入门到放弃(目录) - 二十三岁的有德 - 博客园 (cnblogs.com)
无约束优化:梯度为0
等式约束优化:KKT条件(Newton Method)
不等式约束优化:KKT条件(Newton Method)
一. 无约束优化
Basic Concept
条件数:\(Ax=B\) 中 \(||A||\cdot||A^{-1}||\)
物理意义:线程方程组的解对b中的误差或不确定度的敏感性的度量(该数量在数值计算中的容易程度的衡量,低条件数是良态的)
1. 梯度下降
无约束优化:
可以通过迭代的方式,将 \(x_0\) 迭代到最优解对应的点 \(x^\star\):
where:
-
\(d_t\):搜索方向
-
\(\gamma_t\):步长
梯度下降法希望得到一个在该点下降最快的方向,来使得我们的迭代过程尽可能的高效
2. 一维搜索
本节介绍以下算法:
- 黄金分割法(只使用目标函数值 \(f\))
- 斐波那契数列法(只使用目标函数值 \(f\))
- 二分法(只使用目标函数的一阶导数 \(f^\prime\))
- 割线法(只使用目标函数的一阶导数 \(f^\prime\))
黄金分割法:(\(\rho=0.382\))
按照这类比例压缩,不断取值比较左右点大小,缩小区间范围,直到逼近。()
斐波那契数列法:(和黄金分割类似,只是比例按照斐波那契数列的规则压缩区间)
二分法:和黄金分割类似,只是比例按0.5二分压缩。
3. 牛顿法
要求解 \(f(x)=0\),可以通过选取迭代初值 \(x_0\),通过牛顿迭代公式逼近 \(x^\star\)
3.1 牛顿法在最优化上的应用
补充:
Jacobian矩阵
Hessian矩阵
函数 \(F:R^n\rightarrow R^m\) 由 \(m\) 个实函数构成:\(y_1(x_1,...,x_n),...,y_m(x_1,...,x_n)\) 则,
Gradient:
Jacobian矩阵:
Hessian矩阵:
Hessian矩阵是梯度向量g(x)对自变量x的Jacobian矩阵. Jacobian矩阵和Hessian矩阵的理解 - 爱码网 (likecs.com)
(1) 迭代方程
优化问题也就是找极值点 \(f^\prime(x^\star)=g(x)=0\),迭代公式变为
因此,迭代方程为:
高维的情况下:
其中,\(H\) 为hessian矩阵
在高维情况下,变成线性系统求解问题:
其中:
- \(A\): \(f\) 的Hessian
- \(B\): \(f\) 的Gradient
共轭方法、拟牛顿法可以避免求黑塞矩阵的逆以解决计算问题
当 \(f\) 是二次型时,牛顿法只需一次迭代即可从任意初始点x(0)收敛到f的极小的\(x^*\),满足在 \(x^*\) 的梯度=0
(2) 算法
选定初始 \(x_0\),取 \(\epsilon>0\),Loop:
- 计算 \(\Delta x_{nt}\) 和 \(\lambda(x)=(\Delta x^T_{nt}\nabla^2 f(x)\Delta x_{nt})^{1/2}\).
- 若 \(||\nabla f(x_t)||<\epsilon\),停止循环
- 直线搜索:用回溯直线搜索选择步长 \(t\)。(也可设为1)
- 迭代:\(x=x+t\Delta x_{nt}\).
4. 共轭梯度
共轭梯度法(CG)是实现共轭方向法的一个方法。由于CG是通过梯度信息来获取共轭方向的,所以我们称之为共轭梯度法。
4.1 共轭向量组
在共轭梯度法中,我们想得到的并不是一组相互正交的搜索方向,而是一组相互共轭的搜索方向
设 \(Q\) 是正定矩阵,若对于两个不同的非零向量满足:
则称 \(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\) 只是其中一个(FR [Fletcher-Reeves]公式)
步长:
(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\) or \(g_{k+1}=g_k-\alpha_kAd_k\)
- 计算组合系数:\(\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
如果 \(A\) 的性质不好,则可以先乘以预处理矩阵
5. 拟牛顿法
思想:构造Hessian的逆的近似.
方法:
- 秩1算法
- 秩2算法/DFP算法
- BFGS算法
5.1 秩1算法
例:
5.2 秩2算法/DFP算法
5.3 BFGS算法
6. 数学优化中的最小二乘法
最小二乘法:
-
(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小 。
-
最小二乘法还可用于曲线拟合,其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达
solve \(Ax=b\) 等价于
- solve \(A^TAx=A^Tb\), 即 \(x^\star=(A^TA)^{-1}A^Tb\).
- minimize \(f(x)=||Ax-b||^2\),
即可推出
很明显,\(f\) 是一个二次型,其极小点满足 \(\nabla f(x)=2A^TAx-2A^Tb=0\).
该方程位移解为 \(x^\star=(A^TA)^{-1}A^Tb\).
二. 有约束优化
1. 拉格朗日对偶问题 与 KKT
1.1 拉格朗日对偶函数
其中:
- 约束的值域 \(D=\cap dom\, f_i\cap dom\, h_i\).
- 最优值 \(p^\star\).(不假设这个问题是凸的)
拉格朗日对偶:通过添加约束的加权和来增广目标函数。
拉格朗日函数:
拉格朗日函数的作用:因为约束条件对定义域有着很大的限制,因此通过拉格朗日函数的形式去除优化问题的约束条件,取消约束限制对定义域的限制,让优化问题更容易求解.
其中:
- 值域:\(dom\, L=D\times R^m\times R^p\).
- 拉格朗日乘子:\(\lambda_i,v_i\).
- 乘子常量:向量 \(\lambda,v\).
拉格朗日对偶函数(也叫对偶函数):拉格朗日函数关于 \(x\) 取得的最小值
\(\sup(X)\) 是取上限函数,\(\inf(X)\) 是取下限函数
性质:
\(g(\lambda,v)\le p^\star\).
对偶函数是凹的.
1.2 拉格朗日对偶问题
由于\(g(\lambda,v)\le p^\star\),所以可以找到 \(L(x,λ,v)\) 的最小值去作为 \(f_0(x)\) 的最小值,但是存在误差(不等号)。为了减小这个误差,进而又想找到 \(L(x,λ,v)\) 的最小值中的最大值: \(g(λ,v)\)(凹函数)
拉格朗日对偶问题:
对偶最优解(最优拉格朗日乘子):\((\lambda,v)\).
拉格朗日对偶问题是凸优化问题:因为目标函数是凹函数,约束集合是凸集(由于不论原函数是否为凸优化问题,新的问题都是凸的,因此可以方便求解)
设:对偶问题的的最优值记为\(d^\star\),是对偶函数中得到的 \(p^\star\) 的最优下界
强对偶性:\(d^\star=p^\star\).(如果原问题为凸优化问题,一般情况下都成立)
弱对偶性:\(d^\star\le p^\star\).
- 最优对偶间隙:\(p^\star-d^\star\).
1.3 强弱对偶的几何解释
1.4 鞍点
鞍点:一个不是局部最小值的驻点(一阶导数为0的点).
深度学习梯度下降经常遇到的local minimal问题
1.5 KKT条件
第一个不等号取等号的条件:\(\nabla_x(f_0(x)+\lambda^{\star T}f(x)+v^{\star T}h(x))=0\).
第二个不等号取等号的条件:\(\lambda_i^{\star}f_i(x^\star)=0\).
再加上一些定义域条件和原问题约束条件,就构成了KKT条件
KKT条件:
-
原始约束:
\[f_i(x)\le0,\quad i=1,...,m\\ h_i(x)=0,\quad i=1,...,p \] -
对偶约束:\(\lambda\ge0\).
-
梯度条件:\(\nabla_x(f_0(x)+\lambda^{\star T}f(x)+v^{\star T}h(x))=0\).
-
互补性条件:\(\lambda_i^{\star}f_i(x^\star)=0\).
性质:
如果满足强对偶性,那么最优解一定满足 KKT 条件
但是KKT 条件的解不一定是最优解
考虑原问题为凸的,那么若 KKT 条件有解,则原问题一定满足强对偶性,且他们就对应原问题和对偶问题的最优解。
但是需要注意的是,KKT 条件可能无解!此时就意味着原问题不满足强对偶性!
2. 等式约束优化
由KKT条件,其最优解的重要条件是满足:
对于求解等式约束问题有两种方法:
- 任何等式约束优化问题都可以通过消除等式约束转化为等价的无约束问题。
- 使用对偶方法解决。
很多时候,直接处理等式约束比转化为无约束问题要好,这是因为转化之后可能会破坏问题的结构。
2.1 等式约束凸二次规划
假设 \(f\) 是一个二次型
此问题的最优性条件为:
矩阵形式:
此矩阵即 KKT矩阵.
2.2 等式约束的Newton方法
一般情况下,约束 \(Ax=b\) 是非线性方程,很难有解析解。为了方便求解,对目标函数 \(f\) 在 \(x\) 处做二阶近似:
\(x\) 处的Newton下降方向 \(\Delta x_{nt}\) 由以下KKT方程决定:
上面两个问题等价
等式约束的Newton Method算法的框架(可以看出其和无约束情况下完全一样,只是解的线性系统不同)
重复循环:
- 计算Newton方向 \(\Delta x_{nt}\),即求解KKT方程
- 计算Newton减量 \(\lambda(x)=(\Delta x^T_{nt}\nabla^2 f(x)\Delta x_{nt})^{1/2}\).
- 停止准则:如果 \(\lambda^2/2\le\epsilon\),则退出
- 直线搜索:通过回溯直线法确定步长 \(t\)
- 改进:\(x=x+t\Delta x_{nt}\).
3. 不等式约束优化(内点法)
3.1 简介
通过引入对数障碍函数,将不等式约束加入到目标函数,从而使问题转化为带等式约束的凸优化问题,从而可以应用Newton Method求解KKT最优条件,找到最优解
3.2 对数障碍
将问题转化为等式约束问题:
其中:\(I_-\) 是示例函数
\[I_{-}(x)= \left\{ \begin{aligned} &0&if\, x\le0\\ &\infin&otherwise \end{aligned} \right. \]
\[\]
由于 \(I_{-}\) 是不可微函数,不能直接应用Newton Method。所以需要近似示例函数(对数障碍函数):
\(t\) 越大,越接近示例函数
对数障碍函数:
则梯度与Hessian:
3.3 中心路径
近似问题:
简化一下符号表达,对目标函数乘以 \(t\),得到:
对任意的 \(t>0\),上述优化问题存在唯一的最优解 \(x^\star(t)\),将这一系列最优解组成的集合 \(\{x^\star(t)\}\) 称为中心路径。(前面说 \(t\) 是不确定的,因此这一系列解就是不同 \(t\) 对应的最优解)
3.4 障碍方法
为求解上一个subsection的优化问题,给出Newton Method的算法框架:
Loop:
- 中心点步骤:从初始值 \(x\) 开始,采用Newton Method在 \(Ax=b\) 的约束下极小化 \(tf_0+\phi\),最终确定 \(x^\star(t)\).
- 改进:\(x=x^\star(t)\).
- 停止准则:如果 \(m/t<\epsilon\) 则退出
- 增加 \(t\):\(t=\mu t,\quad \mu>1\).
- 近似问题的最优解与原始问题的最优解的误差不超过 \(m/t\),所以在求解时,我们从较小的 \(t\) 开始,不断增大 \(t\) 直至收敛
- 把每次求出的最优解 \(x^∗(t)\) 当作下一个 \(t:=μt\) 的初值,这样Newton Method会收敛更快
总结
- 共轭梯度法是共轭方向法的一种实现。
- 共轭方向的搜索其实就是搜索子空间的拓展。
- 共轭梯度的组合系数 有多种等价的计算方式,一般采用最简洁的FR公式。
- 共轭梯度法的计算效率高,不涉及矩阵运算。
- 共轭梯度法依赖于线搜索,非精确线搜索不能保证共轭性和下降性。