近端梯度法(Proximal Gradient Descent)
总目录
一、 凸优化基础(Convex Optimization basics)
- 凸优化基础(Convex Optimization basics)
二、 一阶梯度方法(First-order methods)
- 梯度下降(Gradient Descent)
- 次梯度(Subgradients)
- 近端梯度法(Proximal Gradient Descent)
- 随机梯度下降(Stochastic gradient descent)
三、对偶
- 线性规划中的对偶(Duality in linear programs)
- 凸优化中的对偶(Duality in General Programs)
- KKT条件(Karush-Kuhn-Tucker Conditions)
- 对偶的应用及拓展(Duality Uses and Correspondences)
- 对偶方法(Dual Methods)
- 交替方向乘子法(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)=t1I,可以得到
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+=argzminf(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+=argaming(z)+h(z)≈argzming(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+=argzmin2t1∥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)=argzmin2t1∥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)
使用该方法有几个优点:
- 对于许多 h h h函数,其近端投影 p r o x h , t prox_{h,t} proxh,t有解析解;
- p r o x t prox_{t} proxt仅仅依赖于 h h h,因此可以被用于不同的 g g g函数;
- 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} β∈Rpmin21∥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(β)=argzmin2t1∥β−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)=argzmin2t1∥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)=argzmin2t1∥x−z∥22+Ic=argz∈Cmin2t1∥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)=argzmin2t1∥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,然后重复下面的步骤:
将之前的迭代结果作为动量,计算 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)使用 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−tkXT(Xβ(k−1)−y))(22)
参考资料
CMU:Convex Optimization
近端梯度法(Proximal Gradient Descent)相关推荐
- 近端梯度下降法 (proximal gradient descent)
本文参考了知乎的文章 机器学习 | 近端梯度下降法 (proximal gradient descent), 写的非常棒,但感觉有些微的赘余, 因此以这篇博客,希望更精简地介绍 近端梯度下降法 这种略 ...
- 【优化】近端梯度下降(Proximal Gradient Descent)求解Lasso线性回归问题
文章目录 近端梯度下降的背景 常见线性回归问题 近端算子(Proximal Operator) 近端梯度下降迭代递推方法 以Lasso线性回归问题为例 参考资料 近端梯度下降的背景 近端梯度下降(Pr ...
- LASSO近端梯度下降法Proximal Gradient Descent公式推导及代码
文章目录 LASSO by Proximal Gradient Descent Proximal Gradient Descent Framework近端梯度下降算法框架 Proximal Gradi ...
- python实现次梯度(subgradient)和近端梯度下降法 (proximal gradient descent)方法求解L1正则化
l1范数最小化 考虑函数,显然其在零点不可微,其对应的的次微分为: 注意,的取值为一个区间. 两个重要定理: 1)一个凸函数,当且仅当,为全局最小值,即 为最小值点 : 2)为函数(不一定是凸函数) ...
- UA MATH567 高维统计专题3 含L1-norm的凸优化2 Proximal Gradient Descent
UA MATH567 高维统计专题3 含L1-norm的凸优化2 Proximal Gradient Descent Proximal Gradient Descent的公式推导 Proximal O ...
- APG(Accelerate Proximal Gradient)加速近端梯度算法 和 NAG(Nesterov accelerated gradient)优化器原理 (一)
文章目录 前言 APG(Accelerate Proximal Gradient)加速近端梯度算法[^1] PGD (Proximal Gradient Descent)近端梯度下降法推导[^2] E ...
- 随机梯度下降(Stochastic gradient descent)
总目录 一. 凸优化基础(Convex Optimization basics) 凸优化基础(Convex Optimization basics) 二. 一阶梯度方法(First-order met ...
- UA MATH567 高维统计专题3 含L1-norm的凸优化4 Nesterov方法与Accelerate Proximal Gradient
UA MATH567 高维统计专题3 含L1-norm的凸优化4 一阶方法的加速 Nesterov方法 Accelerate Proximal Gradient (APG) 梯度下降与Proximal ...
- APG(Accelerate Proximal Gradient)加速近端梯度算法 和 NAG(Nesterov accelerated gradient)优化器原理 (二)
文章目录 前言 NAG优化器 APG 与 NAG的结合 Pytorch 代码实现 总结 附录 公式(11)推导 引用 前言 近期在阅读Data-Driven Sparse Structure Sele ...
最新文章
- 【数理知识】《数值分析》李庆扬老师-第8章-矩阵特征值计算
- 纯干货!文字识别在高德地图数据生产中的演进
- 配电基础知识汇总,99%的人都收藏了!
- 信息学奥赛一本通 1411:区间内的真素数 | OpenJudge NOI 1.13 23:区间内的真素数
- 【目标检测】FPN(Fature Pyramid Network)详解
- MPlayer配置文件
- three.js两个点给线条加宽度_2020湘乡线条立体逼真方兴装饰诚信服务
- 大龄开发者究竟该何去何从?2019年Python全栈工程师,都是开发人员改怎么转向高收入?
- 查看本机的用户 net user
- python提取列表中文本_Python正则表达式:从文本文件中提取关键字后的元组列表...
- c+字符串数组_了解C ++字符串数组
- 线程同步机制的区别与比较及进程通信方法
- 试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点
- java对话框进度条_java进度条
- 用JavaScript做一个日历和用canvas做一个时钟
- 小米6刷peixl安卓8详细教程
- 深圳租房你必须知道的问题有哪些?
- Java中文英文数字混合掩码_Java8 中文教程
- 有哪些业务会用到物理服务器?
- 谷歌高效开发的秘密:来自谷歌前员工的软件开发工具指南