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

对于传统的可微的目标函数, 直接使用梯度下降法即可。 而对于不可微的情况下, 就是 近端梯度法 表现的时机了。 简而言之, 目标函数必可写成如下的形式:

f ( x ) = g ( x ) + h ( x ) f(x)=g(x)+h(x) f(x)=g(x)+h(x)
其中 g ( x ) g(x) g(x) 可微, 而 h ( x ) h(x) h(x) 不可微 。 这时候, 近端梯度法的迭代公式为:

x k = prox ⁡ t h ( ⋅ ) ( x k − 1 − t ∇ g ( x k − 1 ) ) (1) \boldsymbol{x}^{k}=\operatorname{prox}_{t h(\cdot)}\left(\boldsymbol{x}^{k-1}-t \nabla g\left(\boldsymbol{x}^{k-1}\right)\right)\tag{1} xk=proxth(⋅)​(xk−1−t∇g(xk−1))(1)
其中, prox ⁡ t h ( ⋅ ) \operatorname{prox}_{t h(\cdot)} proxth(⋅)​ 为 近端投影算子, 由下式给出:
prox ⁡ t h ( ⋅ ) ( x ) = arg ⁡ min ⁡ z 1 2 t ∥ x − z ∥ 2 2 + h ( x ) (2) \operatorname{prox}_{t h(\cdot)}(\boldsymbol{x})=\arg \min _{\boldsymbol{z}} \frac{1}{2 t}\|\boldsymbol{x}-\boldsymbol{z}\|_{2}^{2} + h(x)\tag{2} proxth(⋅)​(x)=argzmin​2t1​∥x−z∥22​+h(x)(2)
两式中, t t t 均代表步长。

好了,这就是近端梯度法的算法步骤了, 似乎非常简洁明了: 先根据 g ( x ) g(x) g(x)做一个梯度下降, 再根据 h ( x ) h(x) h(x)做一个近端投影。 那么问题来了, 为什么可以这样做, 意义又是什么?直接看下面的公式:

x k = prox ⁡ t h ( ⋅ ) ( x k − 1 − t ∇ g ( x k − 1 ) ) = arg ⁡ min ⁡ z h ( z ) + 1 2 t ∥ z − ( x k − 1 − t ∇ g ( x k − 1 ) ) ∥ 2 2 = arg ⁡ min ⁡ z h ( z ) + t 2 ∥ ∇ g ( x k − 1 ) ∥ 2 2 + ∇ g ( x k − 1 ) ⊤ ( z − x k − 1 ) + 1 2 t ∥ z − x k − 1 ∥ 2 2 = arg ⁡ min ⁡ z h ( z ) + g ( x k − 1 ) + ∇ g ( x k − 1 ) ⊤ ( z − x k − 1 ) + 1 2 t ∥ z − x k − 1 ∥ 2 2 ≈ arg ⁡ min ⁡ z h ( z ) + g ( z ) \begin{aligned} \boldsymbol{x}^{k} &=\operatorname{prox}_{t h(\cdot)}\left(\boldsymbol{x}^{k-1}-t \nabla g\left(\boldsymbol{x}^{k-1}\right)\right) \\ &=\arg \min _{\boldsymbol{z}} h(\boldsymbol{z})+\frac{1}{2 t}\left\|\boldsymbol{z}-\left(\boldsymbol{x}^{k-1}-t \nabla g\left(\boldsymbol{x}^{k-1}\right)\right)\right\|_{2}^{2} \\ &=\arg \min _{\boldsymbol{z}} h(\boldsymbol{z})+\frac{t}{2}\left\|\nabla g\left(\boldsymbol{x}^{k-1}\right)\right\|_{2}^{2}+\nabla g\left(\boldsymbol{x}^{k-1}\right)^{\top}\left(\boldsymbol{z}-\boldsymbol{x}^{k-1}\right)+\frac{1}{2 t}\left\|\boldsymbol{z}-\boldsymbol{x}^{k-1}\right\|_{2}^{2} \\ &=\arg \min _{\boldsymbol{z}} h(\boldsymbol{z})+g\left(\boldsymbol{x}^{k-1}\right)+\nabla g\left(\boldsymbol{x}^{k-1}\right)^{\top}\left(\boldsymbol{z}-\boldsymbol{x}^{k-1}\right)+\frac{1}{2 t}\left\|\boldsymbol{z}-\boldsymbol{x}^{k-1}\right\|_{2}^{2} \\ & \approx \arg \min _{\boldsymbol{z}} h(\boldsymbol{z})+g(\boldsymbol{z}) \end{aligned} xk​=proxth(⋅)​(xk−1−t∇g(xk−1))=argzmin​h(z)+2t1​∥∥​z−(xk−1−t∇g(xk−1))∥∥​22​=argzmin​h(z)+2t​∥∥​∇g(xk−1)∥∥​22​+∇g(xk−1)⊤(z−xk−1)+2t1​∥∥​z−xk−1∥∥​22​=argzmin​h(z)+g(xk−1)+∇g(xk−1)⊤(z−xk−1)+2t1​∥∥​z−xk−1∥∥​22​≈argzmin​h(z)+g(z)​

第三个等式来自于把 1 2 t ∥ z − ( x k − 1 − t ∇ g ( x k − 1 ) ) ∥ 2 2 \frac{1}{2 t}\left\|\boldsymbol{z}-\left(\boldsymbol{x}^{k-1}-t \nabla g\left(\boldsymbol{x}^{k-1}\right)\right)\right\|_{2}^{2} 2t1​∥∥​z−(xk−1−t∇g(xk−1))∥∥​22​ 一项拆开, 而第四个等式 则是去掉了与 z z z 无关的项 t 2 ∥ ∇ g ( x k − 1 ) ∥ 2 2 \frac{t}{2}\left\|\nabla g\left(\boldsymbol{x}^{k-1}\right)\right\|_{2}^{2} 2t​∥∥​∇g(xk−1)∥∥​22​, 增加了 g ( x k − 1 ) g\left(\boldsymbol{x}^{k-1}\right) g(xk−1) 一项, 第五步的不等式则是来自于泰勒展开的 二阶展开。 最后综合看结论就是:

x k ≈ arg ⁡ min ⁡ z f ( z ) \boldsymbol{x}^{k} \approx \arg \min _{\boldsymbol{z}} f(z) xk≈argzmin​f(z)

因此, 近端梯度法实质上就是求取了目标函数的最小值。 而随着迭代的进行, 越逼近最优解, 泰勒展开也越精确。

近端梯度下降法 (proximal gradient descent)相关推荐

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

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

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

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

  3. 近端梯度法(Proximal Gradient Descent)

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

  4. ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自网上的免费课程和一些经典书籍,免费课 ...

  5. [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)

    本文转自:https://blog.csdn.net/walilk/article/details/50978864 引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记, ...

  6. 50行代码,带你理解梯度下降法(Gradient Descent Method)

    梯度下降法是一种常见的优化算法,在机器学习中应用很广泛.本文从代码的角度,带你理解梯度下降法. 优化算法 优化指的是改变x以最小化或最大化某个函数 f(x) 的任务.通常以最小化 f(x) 指代大多数 ...

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

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

  8. 机器学习数学知识补习——梯度下降(Gradient Descent)

    导数 导数与微分: 图中的Δy.dy等符号的意义及关系如下: Δx:x的变化量: dx:x的变化量 Δ x Δx Δx趋于0时,则记作微元 d x dx dx: Δy: Δ y = f ( x 0 + ...

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

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

最新文章

  1. 分布式系统的面试题11
  2. java闭包lambda,闭包在groovy vs闭包在java 8(lambda表达式)?
  3. spark的python开发安装方式_PyCharm搭建Spark开发环境的实现步骤
  4. tensorflow怎样调用gpu_tensorflow / tensorflow-gpu / tensorflow-cpu区别?
  5. 安全——《微服务设计》读书笔记
  6. 关于neo4j初入门(2)
  7. 08_提升方法Boosting1_统计学习方法
  8. Pony.ai签约落户广州南沙,计划年底前推出无人车队
  9. JVM篇2:[-加载器ClassLoader-]
  10. 使用 Swiftype 给 Hexo 搭建的博客添加站内搜索功能
  11. 2018百度之星初赛B轮 p1m2
  12. 自由落体运动c语言编程_欧姆龙NX PLC 轴运动功能块,ST和梯形图双语言
  13. java连接数据库实现基本的增删改查
  14. 基于FFmpeg的Qt视频播放器
  15. EPLAN中的edz文件的用法
  16. 【网络】Padavan 路由器固件开启教育网 IPv6
  17. C++第14周项目1 - 动物怎么叫
  18. 横向浅析Small,RePlugin两个插件化框架
  19. 计算机丢失msvcr100.dll解决办法,如何解决Msvcr100.dll丢失问题?两种方法可以解决...
  20. MT【305】丹德林双球

热门文章

  1. 什么是 CI/CD?(翻译)
  2. android 播放wav代码,播放简短的.wav文件 - Android
  3. Cocos2d-x 窗口大小调整
  4. 从统计角度剖析布林带:Python实战与量化调优思路
  5. css:使用div绘制一条竖线
  6. 目前互联网比较赚钱的项目
  7. 电商网站之更新订单状态
  8. Revit建模软件:如何在Revit中准确放置族组件?
  9. 图书管理系统java课设_JavaGUI图书管理系统(可作课程设计)
  10. easyui datagrid-detailview 嵌套高度自适应