400-123-4567
公司动态 行业新闻
最优化复习笔记(总结向)
浏览量:    所属栏目:【行业新闻】    时间:2024-07-08
不清楚 Lagrange 乘子法本质和对偶方法的请移步:kirigaya.cn/blog/articl
封面作者:Ar極光

一个约束优化问题(constraint optimization problem,简称 COP)往往被如下定义:  \\begin{aligned}&\\min_{x\\in\\Omega}f(x)\\\\ \	ext{s.t.}&\\quad c_i(x)=0, \\forall i \\in \\mathcal E.\\\\ &\\quad c_j(x) \\le 0,\\forall j \\in \\mathcal I \\end{aligned}\\\\

满足上述约束条件且在定义域的点被称为 可行点,所有可行点构成该优化问题的 可行域

当前寻得的极值点记作 x^* 倘若对于满足c_i(x^*), i\\in \\mathcal I 的所有 i 构成的集合称为激活不等式约束,所有 激活不等式约束等式约束 的并集称为激活约束,记作 \\mathcal A

花写的 A,是 active inequality constraints 的第一个字母

显然,激活约束 \\mathcal A 是关于可行点而言的。

含不等式的 COP 仍然可以通过 Lagrange 进行求解:  \\min_{x,\\lambda}L(x, \\lambda)=f(x) + \\lambda^T c(x)\\\\其中 \\lambda \\in \\mathbb R^{|\\mathcal E| + |\\mathcal I|} 。化成 Lagrange 乘子法是需要满足一些条件的,这些针对 \\mathcal E\\mathcal I 的条件统称为 KKT 条件:

满足 KKT 的点不一定是原问题的最小值点。

LICQ 是 线性无关约束条件(Linear independence constraint qualification)的简称。它是一个比 KKT 条件更强的条件,满足 KKT 的可行点不一定满足 LICQ

对于可行域中的一个点 x_0 ,如果它满足:  \\{\
abla c_i(x_0)\\}, i\\in \\mathcal A\\\\是线性无关的,那么就称 x_0 这个点 满足 LICQ

如果满足 Slater 条件,那么 满足 KKT 条件 对于凸优化(后面会讲)的最优点而言是充要条件

对于可行域内的一个点 x_0 ,如果它满足如下条件,那么就称满足 Slater 条件 \\forall i\\in \\mathcal E, c_i(x_0)=0\\\\ \\forall j \\in \\mathcal I, c_i(x_0) < 0\\\\

Slater 条件对于 KKT 而言是一个很强的条件,在求解 Lagrange 时,非常容易把 c_i(x), i\\in \\mathcal I 干到等于零。

Lagrange + 惩罚项:

如果只有等式约束:  L_\\sigma (x, \\lambda)=f(x) + \\sum_{i\\in\\mathcal E}\\lambda_i c_i(x) + \\frac{\\sigma^2}{2}\\sum_{i\\in\\mathcal E}c_i(x) ^2\\\\ 如果含有不等式约束,引入互补松弛(Complementary Relaxation)变量 s_i \\ge 0 s_i + c_i(x)=0, i\\in \\mathcal I\\\\ 此时的 增广拉格朗日方法 写成:  \\begin{aligned}L_\\sigma (x, \\lambda)=f(x) &+ \\sum_{i\\in\\mathcal E}\\lambda_i c_i(x) + \\sum_{i\\in\\mathcal I}\\mu_i(c_i(x) + s_i) \\\\  &+ \\frac{\\sigma^2}{2}\\left(\\sum_{i\\in\\mathcal E}c_i(x) ^2 + \\sum_{i\\in\\mathcal I}(c_i(x) + s_i) ^2 \\right), s_i \\ge 0 \\end{aligned}\\\\

ADMM (Boyd, Parikh, & Chu, 2011) 在解决如下形式的 COP 时有奇效:  \\min_{x, y}f(x) + g(y) \\\\ s.t.\\quad Ax + By=c\\\\ ADMM 会解决该问题的 增广拉格朗日问题:  L_\\sigma(x, y, \\lambda)=f(x) + g(y) + \\lambda^T (Ax + By - c) + \\frac{\\sigma}{2}||Ax + By - c||_2^2\\\\ ADMM 在第 k 轮,每次只优化问题一组变量,拿优化得到的极值点带入目标函数继续优化下一个变量,所有变量全部得到优化后, k 轮才算结束:

  1. x_{k+1}\\leftarrow \緻set{x}{\\arg\\min}L_\\sigma(x, y_k, \\lambda_k) .
  2. y_{k+1}\\leftarrow \緻set{y}{\\arg\\min}L_\\sigma(x_{k+1}, y, \\lambda_k) .
  3. \\lambda_{k+1}\\leftarrow \\lambda_k + \	au \\sigma (Ax_{k+1}+By_{k+1}- c)

其中 \	au \\in (0, \\frac{\\sqrt 5 + 1}{2}]\	au=1 时上述方法和增广拉格朗日一致。

收敛速率:未知。但是实验表明似乎是一次收敛。


设点集 A \\subset \\mathbb R^n , 如果 \\forall x, y \\in A\\forall \	heta \\in (0, 1) ,下式成立:  (1 - \	heta) x + \	heta y \\in A\\\\ 则称 A 是一个凸集。

如果点 x \\in \\mathbb R^n 可以写成有限个点的线性组合(在有限个点组成的单纯形开集内):  x=\\sum_{i=1}^m \	heta_i x_i\\\\其中 \\sum_{i=1}^m\	heta_i=1 \\land \	heta_i \\ge 0 代表是单纯形。则称 x 是 点集 \\{x_1, ...,x_m\\} 的凸组合。

设点集 A \\subset \\mathbb R^n , 我们称 A 所有可能的凸组合构成的集合为 凸包,记作 \\mathrm{conv}A .

一个函数 f:\\Omega \	o \\mathbb R 被称为凸函数,需要满足两个条件:

  1. f 的定义域 \\Omega 是凸集
  2. \\forall x_1, x_2 \\in \\Omega, \\forall \	heta \\in[0, 1] ,下式成立:

 f(\	heta x_1 + (1 - \	heta) x_2) \\le \	heta f(x_1) + (1 - \	heta) f(x_2)\\\\

假设我们现在有一个约束优化问题:  \\min_{x\\in\\Omega}f(x)\\quad s.t. \\quad c_i(x) \\le 0, i\\in\\mathcal I\\\\ 这个约束优化问题在满足如下两个条件的情况下被称为凸优化:

凸优化隐含了许多的结论:


详细博客:最优化方法复习笔记(一)梯度下降法、精确线搜索与非精确线搜索(推导+程序) x_{k+1}=x_k - \\alpha_k \
abla f(x_k)\\\\ \\alpha_k 是当前这步的步长,确定方法为精准线搜索和非精准线搜索:

精准线搜索:  \\hat \\alpha_k=\緻set{\\alpha}{\\arg\\min}f(x_k - \\alpha \
abla f(x_k))\\\\代价太大,一般不用。非精准线搜索有几个渐进式的经典方法。后面会讲。

在二次型上的最坏收敛速率 \\frac{f(x_{k+1}) - f(x^*)}{f(x_k) - f(x^*)}\\le (1 + \\frac{2}{1+\\kappa})^2\\\\一般情况下,梯度下降法收敛速率为线性(一次收敛速率)证明请移步 最优化方法复习笔记(二)梯度下降法的全局收敛与收敛速率

详细博客:最优化方法复习笔记(三)牛顿法及其收敛性分析 x_{k+1}=x_k - \
abla ^2 f(x_k) ^{-1}\
abla f(x_k)\\\\牛顿法局部收敛性(2018年证明):  \\exists B >0, \\mu>0, \\quad s.t.\\quad \\frac{||x_{k+1}- x^*||}{||x_k - x^*||^2 }\\le \\frac{B}{2\\mu}\\\\所以牛顿法靠近最优点时是二次收敛的,这与在数值分析中的结论一致。

没学过的同学可以在复习完后学习一下数值分析,对于计算机类的学生而言,数值分析还是很重要的一门课。不要牛顿法学完了,连怎么编程实现根号2的计算(只能用加减乘除)都不会

优点:

缺点:

详细博客:最优化方法复习笔记(四)拟牛顿法与SR1,DFP,BFGS三种拟牛顿算法的推导与代码实现

SR1(全称 Symmetric Rank-One,William C. Davidon 1956)算法:  \\begin{align}令H_0=I,&给出迭代初值x_0和迭代停止阈值\\epsilon>0,重复如下过程:\\\\ &计算梯度:\
abla f(x_k)\\\\ &如果||\
abla f(x_k)||<\\epsilon\\\\ &计算搜索方向:d_k=-H_k\
abla f(x_k)\\\\ &更新迭代点x_{k+1}=x_k-d_k\\\\ &更新矩阵:H_{k+1}=H_k+\\frac{(s_k-H_ky_k)(s_k-H_ky_k)^T}{(s_k-H_ky_k)^Ty_k}\\end{align}\\\\ DFP(Davidon, Fletcher, Powell 1959)算法:  \\begin{align}令H_0=I,&给出迭代初值x_0和迭代停止阈值\\epsilon>0,重复如下过程:\\\\ &计算梯度:\
abla f(x_k)\\\\ &如果||\
abla f(x_k)||<\\epsilon\\\\ &计算搜索方向:d_k=-H_k\
abla f(x_k)\\\\ &更新迭代点x_{k+1}=x_k-d_k\\\\ &更新矩阵:H_{k+1}=H_k+\\frac{s_ks_k^T}{s_k^Ty_k}-\\frac{H_ky_ky_k^TH_k}{y_k^TH_ky_k}\\end{align}\\\\ BFGS(Broyden,Fletcher, Goldfarb, Shanno 1970)算法:  \\begin{align}令H_0=I,&给出迭代初值x_0和迭代停止阈值\\epsilon>0,重复如下过程:\\\\ &计算梯度:\
abla f(x_k)\\\\ &如果||\
abla f(x_k)||<\\epsilon\\\\ &计算搜索方向:d_k=-H_k\
abla f(x_k)\\\\ &更新迭代点x_{k+1}=x_k-d_k\\\\ &更新矩阵:H_{k+1}=H_k+\\Bigg(1+\\frac{y_k^TH_ky_k}{s_k^Ty_k}\\Bigg)\\frac{s_ks_k^T}{s_k^Ty_k}-\\Bigg(\\frac{s_ky_k^TH_k+H_ky_ks_k^T}{s_k^Ty_k}\\Bigg) \\end{align}\\\\

优点:

缺点:

详细博客:最优化方法复习笔记(六)共轭梯度法

基于 Fletcher-Reeves 公式的共轭梯度法(FR-CG):  \\begin{align}首先给出&迭代初值x_0,阈值\\epsilon>0\\\\ 计算梯度&值g_0=Gx_0+b,令d_0=-g_0,k=0,重复以下步骤:\\\\ &1.\\quad如果||g_k||<\\epsilon,停止迭代\\\\ &2.\\quad通过线搜索算法获取步长\\alpha_k\\\\ &3.\\quad更新迭代点:x_{k+1}=x_k+\\alpha_kd_k\\\\ &4.\\quad计算新的梯度:g_{k+1}=\
abla f(x_{k+1})\\\\ &5.\\quad计算组合系数:\\beta_k=\\frac{g_{k+1}^Tg_{k+1}}{g_k^Tg_k}\\\\ &6.\\quad计算共轭方向:d_{k+1}=-g_{k+1}+\\beta_kd_k\\\\ &7.\\quad令k=k+1,转第2步。 \\end{align}\\\\ 在二次型下共轭梯度法的收敛速率为:  \\frac{f(x_{k+1}) - f(x^*)}{f(x_k) - f(x^*)}\\le\\frac{\\sqrt{\\kappa}-1}{\\sqrt{\\kappa}+1}\\\\其中 \\kappa 为条件数。可以看出来,共轭梯度法是线性收敛的。而且在相同条件数下,比梯度下降法的速度快。


假设当前已经得到了一个下降方向 d_k ,在不暴力求解的情况下如何获取一个合适的步长 \\alpha_k 来进行更新呢?下面的准则给出了判断一个步长 \\alpha_k 是“好步长”的条件。

直观理解:最优化方法复习笔记(一)梯度下降法、精确线搜索与非精确线搜索(推导+程序)

下面三个方法的本质都是在建立曲线和直线的不等式,看一眼图并将式子化为 \\phi(\\alpha)=f(x_k+\\alpha d_k) 和它的导数的形式就能快速看懂。

 f(x_k + \\alpha d_k) \\le f(x_k) + \\rho\\alpha d_k^T \
abla f(x_k), \\quad \\rho\\in(0, 1)\\\\

缺点: \\alpha=0 也满足 Armijo 准则,容易卡住不动。

 \\begin{aligned}f(x_k + \\alpha d_k) &\\le f(x_k) + \\rho\\alpha d_k^T \
abla f(x_k) \\\\ f(x_k + \\alpha d_k) &\\ge f(x_k) + (1 - \\rho)\\alpha d_k^T \
abla f(x_k), \\quad \\rho\\in(0, \\frac12)  \\end{aligned}\\\\

缺点:会卡在局部极大值和鞍点上。

 \\begin{aligned}f(x_k+\\alpha d_k) &\\le f(x_k) + \\rho \\alpha d_k^T\
abla f(x_k) \\\\ d_k^T \
abla f(x_k +\\alpha d_k) & \\ge \\sigma d_k^T \
abla f(x_k), \\quad \\rho \\in(0, 1), \\sigma \\in (\\rho, 1) \\end{aligned}\\\\


考虑 n 个样本 x_i 的优化问题。样本学习可以抽象成每一个样本对应于一个单独的学习器 f_i(x)i 对应样本, x 对应学习参数。目标在于最小化所有学习器的平均值:  \\min_x f(x)=\\frac{1}{n}\\sum_{i=1}^n f_i(x)\\\\

 x_{k+1}=x_k - \\alpha_k \\frac1n\\sum_{i=1}^n \
abla f_i(x_i)\\\\

 x_{k+1}=x_k - \\alpha_k \
abla f_ j(x_k)\\\\

j 是从 \\{1, ..., n\\} 中随机采样的数字,一般情况下,不放回抽样,服从均匀分布。

下面开始是在 torch 中常用的优化器合集。都是基于 SGD 开发的。


torch 中 optim.SGD 的实际实现方式。  x_{k+1}=x_k- \\alpha_k \\frac{1}{m}\\sum_{i=1}^m f_{k_i}(x_k)\\\\ 其中 k_i(i=1,...,m) 是从 \\{1, ..., n\\} 中随机采样的数字,一般情况下,不放回抽样,服从均匀分布。

m 是 batch size 。当 m=1 , MBGD=SGD,当 m=n 时, MBGD=GD


torch.optim.SGDmomentum 参数的实现,默认为 0

带上历史信息,从而逃出局部最小值:  x_{k+1}=x_k + \\gamma (x_k - x_{k - 1}) -\\alpha_k \
abla f_j(x_k)\\\\

torch.optim.SGDnesterov 参数的实现,默认为 False

提前估计动量调转后的梯度,更加灵活地适应优化问题的几何特性,从而在某些情况下取得更快的收敛速度。  x_{k+1}=x_k + \\gamma (x_k - x_{k - 1}) - \\alpha_k \
abla f_j (x_k + \\gamma (x_k - x_{k - 1}))\\\\

torch.optim.Adagrad 的实现。

通过引入衰减因子自动在优化后期减小学习率,从而收敛  x_{k+1}=x_k - \\frac{\\alpha}{e_k}\
abla f_j(x_k), \\quad e_k=\\sqrt{\\epsilon + \\sum_{i\\le k}|| \
abla f_{j_i}(x_i)||^2}\\\\优点:在 BP 的梯度比较稀疏(很多情况都是这样)时很管用。

缺点:容易提前收敛


torch.optim.RMSprop 的实现。

不对衰减因子进行梯度累计,因为容易提前中止,转而对衰减因子进行实时更新:  x_{k+1}=x_k -\\frac{\\alpha}{e_k}\
abla f_j(x_k), \\quad e_k=\\sqrt{ \\beta e_{k - 1}^2 + (1 - \\beta) || \
abla f_j(x_k) ||^2}\\\\ 默认情况下 \\beta=0.9


动量法和 RMSProp 的结合,torch.optim.Adam 的实现.  x_{k+1}=x_k - \\frac{\\alpha}{\\sqrt{v_k}+ \\epsilon}m_k\\\\ 其中 m 是动量项, v 是衰减因子项,两者定义分别参考了 SGDM 和 RMSProp:  \\hat m_k=\\beta_1 m_{k - 1}+ (1 - \\beta_1) \
abla f_j(x_k), \\quad  v_k=\\beta_2 v_{k-1}+ (1 - \\beta_2) || \
abla f_j(x_k) ||^2\\\\ torch 中, 权重项的默认值为: \\beta_1=0.9, \\beta_2=0.999 .

网站首页 高德娱乐简介 高德注册 高德登录 高德新闻 高德APP下载 高德代理加盟 联系我们

Copyright © 2012-2018 首页-高德娱乐-注册登录站 版权所有
电话:400-123-4567      手机:13800000000
E-mail:admin@youweb.com      联系人:张生
地址:广东省广州市天河区88号

琼ICP备xxxxxxxx号

扫一扫  关注微信

平台注册入口