28 October 2015

1. 引言

Proximal算法是用于求解凸优化问题的方法之一,当无约束的凸优化问题可微,我们可以用梯度下降算法求解;当无约束的凸优化目标函数不可微,我们可以采用次梯度算法求解;当存在约束时,我们可以采用proximal相关梯度算法求解,这是因为,当目标函数存在约束时,我们可以把约束写入目标函数,但是这时候往往目标函数就从可微变成不可微,例如线性回归加入,记为,那么很明显,目标函数前半部分为凸且连续可微,但后半部分为凸但不连续可微。因此,proximal算法就是用于求解目标函数形如(其中可微而不可微)形式无约束问题的下降算法。

虽然,我们仍然可以采用次梯度算法求解上述问题,但是该算法时间复杂度较高,这里所要讲述的proximal method既是可以降低复杂度至

2. Proximal Mapping

对于形如形式的目标函数,如果为连续可导的凸函数,而仅为凸函数,我们则可以通过proximal mapping将函数映射为,转而求解的最优解。

  • (可表征为约束):

其中,记为:

3. Proximal Gradient Descent

如果为可微的凸函数,那么我们可以采用梯度下降算法更新梯度,即。我们对做二阶泰勒展开,获得如下梯度下降算法梯度更新表达式:

因此,对于proximal gradient descent算法,我们保持中的不动,仅对做泰勒展开(因为可微),即:

通过上式,我们可以获得proximal gradient descent算法梯度更新表达式:

其中,为当前迭代次数,为了使得上式和梯度下降形式保持一致,我们可以将上式改写为:

其中 

4. 实例(ISTA)

(1) 当时,,即,为梯度下降算法(gradient descent);

(2) 当时,,所以该算法对应投影梯度下降算法(projected gradient descent),如下图:

(3) 当,问题可理解为LASSO问题,目标函数(lasso criterion)为

根据上面介绍的proximal mapping,我们知道上式可写为:

因此,针对L1 norm的proximal gradient descent算法的梯度更新公式为:

其中,。该方法也称为iterative soft-thresholding algorithm(ISTA)算法。下图是该方法与次梯度算法在迭代次数为1000时目标函数误差结果,从结果可以看出,ISTA算法收敛速度明显优于subgradient method

(4) 当时,梯度更新公式变为,一般我们成为proximal minimization algorithm。

综上所述,我们可以把promixal gradient descent算法看成是梯度下降等算法的一般形式,通过改变的定义,我们可以衍伸出不同的下降算法的一般形式。

5. 收敛性分析

对于proximal gradeint descent收敛性分析,我这里就不在给出相关证明,其证明方法与梯度下降次梯度算法类似,假设是L-Lipschitz,且为凸函数,那么固定步长的proximal gradeint descent算法收敛性满足:

算法收敛速度为,因此该算法收敛速度和梯度下降一致,但是,需要注意的是这里收敛速度的指该算法与梯度下降算法在达到同样的误差时所需要的迭代次数是一致的,不要理解成二者收敛需要的时间是一致的,因为这里的收敛速度不是指的数据结构中得程序步的概念。

与梯度下降算法类似,我们也可以采用Backtracking line search来自动调整每次更新的步长。对于每一次迭代,首先设置,然后判断是否满足,如果满足则进行下一次迭代;如果不满足则压缩(shrink)。对于采用Backtracking line search的proximal gradient descent算法其收敛速度为:

其中,

5. 加速(Acceleration)

Nesterov提出可以对promixal gradient descent算法进行加速,使其收敛速度更快,根据Ryan教授所讲,虽然理论上他可以达到更快的收敛速度,但是一般在优化过程中很少使用加速,转而大多使用warm starts。warm starts通过不断收敛的值,来逼近最优解。一般情况下,仅需要通过有限的网格搜索,即可获得与acceleration一样的效果。

加速算法一般步骤为:

设定初始值为,然后对于重复更新:


时,与proximal gradient更新一致,随后,在每次更新的时候增加一些冲量(momentum)。下图是次梯度、proximal gradient和Nesterov acceleration在lasso问题上收敛结果的对比。

需要指出的是,Nesterov acceleration算法并不算是下降算法,其收敛过程有点类似涟漪(ripples)的形状,不是单调下降,因此该算法也称为Nesterov ripples

该算法在固定步长的情况下,收敛条件满足:

由此可以看出,Nesterov加速算法收敛速度为。当然,我们仍然可以采用backtracking方法实现步长的自动更新,即判断每次更新是否满足下式:。但是与梯度下降和proximal gradient不同的是,这里每次迭代不从开始,而是从上一次迭代的最终步长开始,其收敛速度为:

欢迎加入我爱机器学习QQ6群:337537549

凸优化-Proximal GD相关推荐

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

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

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

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

  3. 凸优化中如何改进GD方法以防止陷入局部最优解

    在对函数进行凸优化时,如果使用导数的方法(如:梯度下降法/GD,牛顿法等)来寻找最优解,有可能陷入到局部最优解而非全局最优解. 为了防止得到局部最优,可以对梯度下降法进行一些改进,防止陷入局部最优. ...

  4. 详解机器学习的凸优化、图神经网络、强化学习、贝叶斯方法等四大主题

    AI是一门入门简单,但想深入却很难的学科,这也是为什么AI高端人才一直非常紧缺的重要原因.在AI领域技术领域,我们可以说机器学习功底决定了一个人的上限也不为过.为什么?机器学习就像物理学中的数学,如果 ...

  5. 文献翻译__人工智能时代医学图像重建中的凸优化算法(第4、5、6章)

    文章下载–我的Gitee Convex optimization algorithms in medical image reconstruction-in the age of AI 人工智能时代医 ...

  6. 详解GCN、GAT、凸优化、贝叶斯、MCMC、LDA

    如果你准备发AI方向的论文,或准备从事科研工作或已在企业中担任AI算法岗的工作.那么我真诚的向大家推荐,贪心学院<高阶机器学习研修班>,目前全网上应该找不到类似体系化的课程.课程精选了四大 ...

  7. 详解凸优化、贝叶斯、MCMC、GCN

    几年前如果熟练使用TensorFlow,同时掌握基本的AI算法就可以很容易找到一份高薪的工作,但现在不一样了,AI岗位的要求越来越高,对知识的深度也提出了更高的要求. 如果现在一个面试官让你从零推导S ...

  8. 姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖

    近日,美国艾尔弗·斯隆基金会(The Alfred P. Sloan Foundation)公布了2019年斯隆研究奖(Sloan Research Fellowships)获奖名单,华裔学者鬲融获此 ...

  9. GCN、GAT、凸优化、贝叶斯、MCMC、LDA

    加入AI行业拿到高薪仅仅是职业生涯的开始.现阶段AI人才结构在不断升级,对AI人才的要求也不断升高,如果对自己没有很高的要求,其实很容易被快速发展的趋势所淘汰. 为了迎合时代的需求,我们去年推出了&l ...

  10. 凸优化“傻瓜”教程-----凸优化基础知识

    目录 凸优化基础知识 1.AI问题是什么? 2.对于常见的优化问题,我们可以写成什么形式? 3.针对一般的优化问题,我们从哪几个方向思考? 4.什么样的问题是凸优化问题? 4.1凸优化问题需要同时满足 ...

最新文章

  1. 解决烦人的img与input不能水平对齐的问题
  2. 【阅读笔记】Thinking in Java 对象入门
  3. 80端口被占用pid 4,svhost等占用的解决方法
  4. 5G NR — Massive MIMO 与波束赋形
  5. 为您的Web应用程序启用两因素身份验证
  6. ubuntu下安装django
  7. Python Tuple:一文彻底粉碎元组
  8. Apache Prefork、Worker和Event三种工作模式分析
  9. linux sata硬盘热交换,学员原创-杨欢最详细西数硬盘热交换流程
  10. 小猫爪:PMSM之FOC控制04-SVPWM
  11. python网络爬虫实践收获_python网络爬虫实习报告
  12. MATLAB图形句柄
  13. Codecademy学习Python
  14. 本地策略和组策略,更改安全设置和用户权限分配兼容性问题
  15. ip中继对接_【关关闯关】AR和Cisco 2900通过SIP IP中继对接案例
  16. java制作海报工具类,java操作图片贴图,java给图片添加文字,调整字体颜色大小间距
  17. 共轭转置矩阵及matlab实现
  18. 尽人事,听天命,十二轮面试最终圆梦字节,记一次最难面试记录
  19. Linux下安装配置Cobra教程
  20. nes模拟器java怎么用_PC版FC模拟器怎么用 VirtuaNES使用设置教程

热门文章

  1. redhat 生产环境版本选择
  2. jquery 操作表格实例
  3. java-第十一章-类的无参方法-模拟ATM机进行账户余额查询
  4. SQLite介绍及使用
  5. 佐藤hiroko-爱拯救了我(步之物语)
  6. dis的前缀单词有哪些_学好单词得靠词根词缀来帮忙
  7. SpringMVC 统一异常处理
  8. mac下如何把本地项目上传到Github
  9. 图解think php,图解ThinkPHP5框架(三):配置类Config.php源码解读
  10. 【CF1369D】TediousLee(找规律递推——计数)