总目录

一、 凸优化基础(Convex Optimization basics)

  1. 凸优化基础(Convex Optimization basics)

二、 一阶梯度方法(First-order methods)

  1. 梯度下降(Gradient Descent)
  2. 次梯度(Subgradients)
  3. 近端梯度法(Proximal Gradient Descent)
  4. 随机梯度下降(Stochastic gradient descent)

三、对偶

  1. 线性规划中的对偶(Duality in linear programs)
  2. 凸优化中的对偶(Duality in General Programs)
  3. KKT条件(Karush-Kuhn-Tucker Conditions)
  4. 对偶的应用及拓展(Duality Uses and Correspondences)
  5. 对偶方法(Dual Methods)
  6. 交替方向乘子法(Alternating Direction Method of Multipliers)

近端梯度法(Proximal Gradient Descent)

在凸优化问题中,对于可微分的目标函数,我们可以通过梯度下降法(gradient descent)迭代求解最优解,而对于不可微分的目标函数,通过引入次梯度(subgradient)也可以迭代求解最优解,然而比起梯度下降法,次梯度法的速度比较缓慢。为此,针对于一些整体不可微分但却可以分解的目标函数来说,我们可以使用一种更快的算法——近端梯度法。

1. 可分解的目标函数

考虑一个目标函数可以分解为如下形式的两个函数:
f ( x ) = g ( x ) + h ( x ) (1) f(x)=g(x)+h(x) \tag{1} f(x)=g(x)+h(x)(1)

其中, g ( x ) g(x) g(x)是凸函数且是可微分的, h ( x ) h(x) h(x)也是凸函数但可能不可微分。使用近端梯度下降,可以实现 O ( 1 / ϵ ) O(1/\epsilon) O(1/ϵ)的收敛率( ϵ = f ( x ( k ) ) − f ( x ∗ ) \epsilon=f(x^{(k)})-f(x^*) ϵ=f(x(k))−f(x∗),即当前迭代结果与最优解之间的偏差)。通过对近端梯度法加速,可以达到 O ( 1 / ϵ ) O(1/\sqrt\epsilon) O(1/ϵ ​)收敛速率。

2. 梯度下降法回顾

对于一个可微分的凸函数 f ( z ) f(z) f(z),假设起始点在 x x x,则可以做二阶泰勒展开:
f ( z ) ≈ f ( x ) + ∇ f ( x ) T ( z − x ) + 1 2 ∇ 2 f ( x ) ∥ z − x ∥ 2 2 (2) f(z)\approx f(x)+\nabla f(x)^T(z-x)+\frac{1}{2}\nabla^2f(x)\|z-x\|^2_2 \tag{2} f(z)≈f(x)+∇f(x)T(z−x)+21​∇2f(x)∥z−x∥22​(2)

通过替换 ∇ 2 f ( x ) = 1 t I \nabla^2f(x)=\frac{1}{t}I ∇2f(x)=t1​I,可以得到
f ( z ) ≈ f ( x ) + ∇ f ( x ) T ( z − x ) + 1 2 t ∥ z − x ∥ 2 2 (3) f(z)\approx f(x)+\nabla f(x)^T(z-x)+\frac{1}{2t}\|z-x\|^2_2 \tag{3} f(z)≈f(x)+∇f(x)T(z−x)+2t1​∥z−x∥22​(3)

最小化上述二次近似
x + = arg ⁡ min ⁡ z f ( x ) + ∇ f ( x ) T ( z − x ) + 1 2 t ∥ z − x ∥ 2 2 (4) x^+=\arg\min_zf(x)+\nabla f(x)^T(z-x)+\frac{1}{2t}\|z-x\|^2_2 \tag{4} x+=argzmin​f(x)+∇f(x)T(z−x)+2t1​∥z−x∥22​(4)

可以得到下一个点的位置
z = x + = x − t ∇ f ( x ) (5) z=x^+=x-t\nabla f(x) \tag{5} z=x+=x−t∇f(x)(5)

这就是我们常见的梯度下降的迭代更新策略。

3. 近端投影

如果 f f f不可微,但可以分解为上述的两个函数 g g g和 h h h,则我们仍然可以使用平滑部分 g g g的二次近似来定义向最小值走的一步:
x + = arg ⁡ min ⁡ a g ( z ) + h ( z ) ≈ arg ⁡ min ⁡ z g ( x ) + ∇ g ( x ) T ( z − x ) + 1 2 t ∥ z − x ∥ 2 2 + h ( z ) (6) \begin{aligned} x^+&=\arg\min_a g(z)+h(z) \\ &\approx \arg\min_z g(x)+\nabla g(x)^T(z-x)+\frac{1}{2t}\|z-x\|^2_2+h(z) \tag{6} \end{aligned} x+​=argamin​g(z)+h(z)≈argzmin​g(x)+∇g(x)T(z−x)+2t1​∥z−x∥22​+h(z)​(6)

式(6)可以写成:
x + = arg ⁡ min ⁡ z 1 2 t ∥ z − ( x − t ∇ g ( x ) ) ∥ 2 2 + h ( z ) : = p r o x h , t ( x − t ∇ g ( x ) ) (7) x^+=\arg\min_z\frac{1}{2t}\|z-(x-t\nabla g(x))\|^2_2+h(z):=prox_{h,t}(x-t\nabla g(x)) \tag{7} x+=argzmin​2t1​∥z−(x−t∇g(x))∥22​+h(z):=proxh,t​(x−t∇g(x))(7)

其中,近端函数 p r o x prox prox定义为
p r o x h , t ( x ) = arg ⁡ min ⁡ z 1 2 t ∥ z − x ∥ 2 2 + h ( z ) (8) prox_{h,t}(x)=\arg\min_z\frac{1}{2t}\|z-x\|^2_2+h(z) \tag{8} proxh,t​(x)=argzmin​2t1​∥z−x∥22​+h(z)(8)

4. 近端梯度下降

使用近端函数,我们可以定义一个迭代过程,叫做迭代梯度下降。其过程如下:
首先,选择一个初始点 x ( 0 ) x^{(0)} x(0),然后重复:
x ( i ) = p r o x h , t i ( x ( i − 1 ) − t i ∇ g ( x ( i − 1 ) ) ) , i = 1 , 2 , 3 , . . . (9) x^{(i)}=prox_{h,t_i}(x^{(i-1)}-t_i\nabla g(x^{(i-1)})), i=1,2,3,... \tag{9} x(i)=proxh,ti​​(x(i−1)−ti​∇g(x(i−1))),i=1,2,3,...(9)

使用该方法有几个优点:

  1. 对于许多 h h h函数,其近端投影 p r o x h , t prox_{h,t} proxh,t​有解析解;
  2. p r o x t prox_{t} proxt​仅仅依赖于 h h h,因此可以被用于不同的 g g g函数;
  3. g g g可以是任意复杂的函数,只要我们能计算其梯度;

4.1 例子:迭代软阈值算法(ISTA)

考虑下面lasso问题:
min ⁡ β ∈ R p 1 2 ∥ y − X β ∥ 2 2 + λ ∥ β ∥ 1 (10) \min_{\beta \in \mathcal{R}^p}\frac{1}{2}\|y-X\beta\|^2_2+\lambda\|\beta\|_1 \tag{10} β∈Rpmin​21​∥y−Xβ∥22​+λ∥β∥1​(10)

令 g ( β ) = 1 2 ∥ y − X β ∥ 2 2 g(\beta)=\frac{1}{2}\|y-X\beta\|^2_2 g(β)=21​∥y−Xβ∥22​, h ( β ) = ∥ β ∥ 1 h(\beta)=\|\beta\|_1 h(β)=∥β∥1​。对于目标函数的近端映射可以用软阈值法来计算:
p r o x h , t ( β ) = arg ⁡ min ⁡ z 1 2 t ∥ β − z ∥ 2 2 + λ ∥ z ∥ 1 = S λ t ( β ) (11) prox_{h,t}(\beta)=\arg\min_z \frac{1}{2t}\|\beta-z\|^2_2+\lambda\|z\|_1=S_{\lambda t}(\beta) \tag{11} proxh,t​(β)=argzmin​2t1​∥β−z∥22​+λ∥z∥1​=Sλt​(β)(11)

其中, S λ t ( β ) S_{\lambda t}(\beta) Sλt​(β)有解析解,相当于软阈值算子:
[ S λ t ] i = { β i − λ t , β i > λ t 0 , − λ t ≤ β i ≤ λ t β i + λ t , β i < − λ t (12) [S_{\lambda t}]_i=\left\{ \begin{aligned} \beta_i-\lambda t, && \beta_i>\lambda t \\ 0, && -\lambda t\leq \beta_i \leq \lambda t\\ \beta_i+\lambda t, && \beta_i < -\lambda t \end{aligned} \right. \tag{12} [Sλt​]i​=⎩⎪⎨⎪⎧​βi​−λt,0,βi​+λt,​​βi​>λt−λt≤βi​≤λtβi​<−λt​(12)

而 g ( β ) g(\beta) g(β)的梯度为 X T ( X β − y ) X^T(X\beta-y) XT(Xβ−y),因此,我们可以得到近端梯度下降更新策略:
β + = S λ t ( β − t X T ( X β − y ) ) (13) \beta^+=S_{\lambda t}(\beta-tX^T(X\beta-y)) \tag{13} β+=Sλt​(β−tXT(Xβ−y))(13)

5. 特殊情况

近端梯度下降相当于梯度下降法的一种推广,因此也被称为复合梯度下降(composite gradient descent)或者广义梯度下降(generalized gradient descent)。下面几个特殊的情况可以看出为什么称之为广义梯度下降。

5.1 梯度下降

当 h ( x ) = 0 h(x)=0 h(x)=0时,近端映射函数变为:
p r o x t ( x ) = arg ⁡ min ⁡ z 1 2 t ∥ x − z ∥ 2 2 = x (14) prox_t(x)=\arg\min_z\frac{1}{2t}\|x-z\|^2_2=x \tag{14} proxt​(x)=argzmin​2t1​∥x−z∥22​=x(14)

因此,更新策略变为
x ( k ) = x ( k − 1 ) − t k ∇ g ( x ( k − 1 ) ) , k = 1 , 2 , 3 , . . . (15) x^{(k)}=x^{(k-1)}-t_k\nabla g(x^{(k-1)}), k=1,2,3,... \tag{15} x(k)=x(k−1)−tk​∇g(x(k−1)),k=1,2,3,...(15)

即正常的梯度下降法。

5.2 投影梯度下降

当 h ( x ) = I c h(x)=I_c h(x)=Ic​, I c I_c Ic​为集合 C C C的指示函数时,近端映射函数变为:
p r o x t ( x ) = arg ⁡ min ⁡ z 1 2 t ∥ x − z ∥ 2 2 + I c = arg ⁡ min ⁡ z ∈ C 1 2 t ∥ x − z ∥ 2 2 = P C ( x ) (16) \begin{aligned} prox_t(x) &= \arg\min_z\frac{1}{2t}\|x-z\|^2_2+I_c \\ &=\arg\min_{z\in C}\frac{1}{2t}\|x-z\|^2_2 \\ &=P_C(x) \end{aligned} \tag{16} proxt​(x)​=argzmin​2t1​∥x−z∥22​+Ic​=argz∈Cmin​2t1​∥x−z∥22​=PC​(x)​(16)

其中, P C ( x ) P_C(x) PC​(x)表示集合 C C C上的投影算子。
因此,更新策略变为
x ( k ) = P c ( x ( k − 1 ) − t k ∇ g ( x ( k − 1 ) ) ) , k = 1 , 2 , 3 , . . . (17) x^{(k)}=P_c(x^{(k-1)}-t_k\nabla g(x^{(k-1)})), k=1,2,3,... \tag{17} x(k)=Pc​(x(k−1)−tk​∇g(x(k−1))),k=1,2,3,...(17)

即为投影梯度下降法。其先使用正常的梯度更新策略,然后将得到的 x x x投影回集合 C C C中。

5.3 近端最小化算法

当 g ( x ) = 0 g(x)=0 g(x)=0时,更新策略变为:
x ( k ) = arg ⁡ min ⁡ z 1 2 t ∥ x ( k − 1 ) − z ∥ 2 2 + h ( z ) , k = 1 , 2 , 3 , . . . (18) x^{(k)} = \arg\min_z\frac{1}{2t}\|x^{(k-1)}-z\|^2_2+h(z), k=1,2,3,... \tag{18} x(k)=argzmin​2t1​∥x(k−1)−z∥22​+h(z),k=1,2,3,...(18)

其叫做近端最小化算法(proximal minimization algorithm)。其比次梯度方法快,但仅仅适用于近端算子是闭合形式的情况。

6. 加速的近端梯度法

加速的近端梯度法选择1初始点 x ( 0 ) = x ( − 1 ) ∈ R n x^{(0)}=x^{(-1)}\in\mathcal{R}^n x(0)=x(−1)∈Rn,然后重复下面的步骤:

  1. 将之前的迭代结果作为动量,计算 v v v:
    v = x ( k − 1 ) + k − 2 k + 1 ( x ( k − 1 ) − x ( k − 2 ) ) (19) v=x^{(k-1)}+\frac{k-2}{k+1}(x^{(k-1)}-x^{(k-2)}) \tag{19} v=x(k−1)+k+1k−2​(x(k−1)−x(k−2))(19)

  2. 使用 v v v更新 x x x:
    x ( k ) = p r o x t k ( v − t k ∇ g ( v ) ) (20) x^{(k)}=prox_{t_k}(v-t_k\nabla g(v)) \tag{20} x(k)=proxtk​​(v−tk​∇g(v))(20)

第一步 k = 1 k=1 k=1是常规的近端梯度更新。之后,我们使用 v v v代替 x ( k − 1 ) x^{(k-1)} x(k−1)从之前的迭代中搬运一些动量,使得下一步的梯度更新方向与当前的梯度方向不要相差太大。通过对近端梯度法加速,可以达到 O ( 1 / ϵ ) O(1/\sqrt\epsilon) O(1/ϵ ​)收敛速率。

6.1 例子:快速迭代软阈值法(FISTA)

对于式(10)的lasso问题,FISTA的更新策略为:
对于 k = 1 , 2 , 3 , . . . k=1,2,3,... k=1,2,3,...,
v = β ( k − 1 ) + k − 2 k + 1 ( β ( k − 1 ) − β ( k − 2 ) ) (21) v=\beta^{(k-1)}+\frac{k-2}{k+1}(\beta^{(k-1)}-\beta^{(k-2)}) \tag{21} v=β(k−1)+k+1k−2​(β(k−1)−β(k−2))(21)

β ( k ) = S λ t k ( v − t k X T ( X β ( k − 1 ) − y ) ) (22) \beta^{(k)}=S_{\lambda t_k}(v-t_kX^T(X\beta^{(k-1)}-y)) \tag{22} β(k)=Sλtk​​(v−tk​XT(Xβ(k−1)−y))(22)

参考资料

CMU:Convex Optimization

近端梯度法(Proximal Gradient Descent)相关推荐

  1. 近端梯度下降法 (proximal gradient descent)

    本文参考了知乎的文章 机器学习 | 近端梯度下降法 (proximal gradient descent), 写的非常棒,但感觉有些微的赘余, 因此以这篇博客,希望更精简地介绍 近端梯度下降法 这种略 ...

  2. 【优化】近端梯度下降(Proximal Gradient Descent)求解Lasso线性回归问题

    文章目录 近端梯度下降的背景 常见线性回归问题 近端算子(Proximal Operator) 近端梯度下降迭代递推方法 以Lasso线性回归问题为例 参考资料 近端梯度下降的背景 近端梯度下降(Pr ...

  3. LASSO近端梯度下降法Proximal Gradient Descent公式推导及代码

    文章目录 LASSO by Proximal Gradient Descent Proximal Gradient Descent Framework近端梯度下降算法框架 Proximal Gradi ...

  4. python实现次梯度(subgradient)和近端梯度下降法 (proximal gradient descent)方法求解L1正则化

    l1范数最小化 考虑函数,显然其在零点不可微,其对应的的次微分为: 注意,的取值为一个区间. 两个重要定理: 1)一个凸函数,当且仅当,为全局最小值,即 为最小值点  : 2)为函数(不一定是凸函数) ...

  5. UA MATH567 高维统计专题3 含L1-norm的凸优化2 Proximal Gradient Descent

    UA MATH567 高维统计专题3 含L1-norm的凸优化2 Proximal Gradient Descent Proximal Gradient Descent的公式推导 Proximal O ...

  6. APG(Accelerate Proximal Gradient)加速近端梯度算法 和 NAG(Nesterov accelerated gradient)优化器原理 (一)

    文章目录 前言 APG(Accelerate Proximal Gradient)加速近端梯度算法[^1] PGD (Proximal Gradient Descent)近端梯度下降法推导[^2] E ...

  7. 随机梯度下降(Stochastic gradient descent)

    总目录 一. 凸优化基础(Convex Optimization basics) 凸优化基础(Convex Optimization basics) 二. 一阶梯度方法(First-order met ...

  8. UA MATH567 高维统计专题3 含L1-norm的凸优化4 Nesterov方法与Accelerate Proximal Gradient

    UA MATH567 高维统计专题3 含L1-norm的凸优化4 一阶方法的加速 Nesterov方法 Accelerate Proximal Gradient (APG) 梯度下降与Proximal ...

  9. APG(Accelerate Proximal Gradient)加速近端梯度算法 和 NAG(Nesterov accelerated gradient)优化器原理 (二)

    文章目录 前言 NAG优化器 APG 与 NAG的结合 Pytorch 代码实现 总结 附录 公式(11)推导 引用 前言 近期在阅读Data-Driven Sparse Structure Sele ...

最新文章

  1. 【数理知识】《数值分析》李庆扬老师-第8章-矩阵特征值计算
  2. 纯干货!文字识别在高德地图数据生产中的演进
  3. 配电基础知识汇总,99%的人都收藏了!
  4. 信息学奥赛一本通 1411:区间内的真素数 | OpenJudge NOI 1.13 23:区间内的真素数
  5. 【目标检测】FPN(Fature Pyramid Network)详解
  6. MPlayer配置文件
  7. three.js两个点给线条加宽度_2020湘乡线条立体逼真方兴装饰诚信服务
  8. 大龄开发者究竟该何去何从?2019年Python全栈工程师,都是开发人员改怎么转向高收入?
  9. 查看本机的用户 net user
  10. python提取列表中文本_Python正则表达式:从文本文件中提取关键字后的元组列表...
  11. c+字符串数组_了解C ++字符串数组
  12. 线程同步机制的区别与比较及进程通信方法
  13. 试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点
  14. java对话框进度条_java进度条
  15. 用JavaScript做一个日历和用canvas做一个时钟
  16. 小米6刷peixl安卓8详细教程
  17. 深圳租房你必须知道的问题有哪些?
  18. Java中文英文数字混合掩码_Java8 中文教程
  19. 有哪些业务会用到物理服务器?
  20. 谷歌高效开发的秘密:来自谷歌前员工的软件开发工具指南

热门文章

  1. mysql ecos_ecos的dbschema
  2. lustre文件系统部署流程
  3. Java程序员最新职业规划,深度集成!
  4. 不定积分——有理函数积分
  5. GitHub克隆下载代码速度慢解决办法
  6. 【MODIS数据处理#15】分享一个自制的MODIS数据处理工具箱
  7. 新基建背景下,催生智慧园区三维管控系统解决方案
  8. 3Dmax是款怎样的软件?适用范围和喜爱这款软件的人群盘点
  9. 记录【狼追兔子问题】
  10. React实现PPT预览(伪)