我的凸优化学习之路

 发表于 2018-01-17 |  |  浏览 3399次

 字数统计: 2,903 字 |  阅读时长 ≈ 10 分钟

“凸优化理论真的很美”这是我学习完之后得到的切身感受。然而,在没认识到庐山真面目之前,她给我的感受却恰恰是个“冰山美人”,让人即爱又恨。明明知道,她在工程中具有非常多的应用,但各种技术细节却总让我冥思苦想,真是个磨人的小妖精!

本来我的课题是多目标优化,主要研究内容是将智能优化算法扩展到多目标优化领域。涉及的优化算法主要是遗传算法,差分进化,粒子群算法等。读的文献清一色地“鼓吹”智能优算优于传统的(基于梯度的)优化算法,如最速下降法,牛顿法,拟牛顿法等。可以说,我跟传统的数学优化算法无缘,大家楚汉之界,泾渭分明。

然而,古人云“天下大事,分久必合,合久必分”,近几年,多目标优化领域最新的研究方向就是将智能优化算法与传统的优化算法相结合。在这个方向上,华人学者张青富提出的MOEA/D是典型代表,该算法的核心思想是将多目标优化问题通过权重向量转化为多个单目标优化问题,并同时求解。沿着这个思路,我想寻找创新点。

工欲善其事必先利其器,为了打基础,我需要系统地学习下最优化理论。可是,之前研究生课《最优化理论》早就被我忘得一干二净(事实上,我不确定上过这门课)。那就只好自学。翻开当年的课本,清华大学陈宝林的《最优化理论与算法》,满页的公式对于非数学系的我真是相当不友好。如果没有人教,自学的话相当吃力,至少单纯型法(Simplex Method),我当年是看不懂的。

于是在网上寻找相关的视频教程,发现都是运筹学的相关课程,内容又乱又杂,良莠不齐,很是让人失望,几乎没有人讲得清晰透彻。偶然间,看到加拿大维多利亚大学陆吾生教授在华东师范大学讲授的暑期课程,如获至宝。陆教授写了一本书《Practical Optimization Algorithms and Engineering》,而该课程基本上就是按照这本书的内容讲授,只不过速度比较快。陆老师讲课深入浅出,非常让人容易接受。课程内容也是干货十足,不仅有传统的线性规划,还讲到了正定规划和多项式规划,在我看来真的是诚意十足,眼界大开。这里不得不吐槽下国内很多老师的讲课,很Boring,很多问题只告诉你怎么做,却不告诉你为什么?这样考试可能会得高分,却不是真正的做学问,学完之后很快就会忘。“授人以鱼不如授人以渔”!(陆老师2016年在我校讲授过机器学习的课程,当时没得到消息,没去听课,甚是遗憾)。

学习完陆老师的课之后,就接触了凸优化领域相当著名的一本书,美国斯坦福大学Boyd教授(2017年当选中国工程院院士)所著的《Convex Optimization》。怀着激动地心情翻开前几页,心情down到了谷底,这TM都讲的什么?相对内点,对偶范数,凸锥,逐点上确界等等概念接踵而至,劈头盖脸,我怎么感觉自己什么都不会了?凸优化真的这么难么?真是备受打击!不得已,这本书就被我束之高阁了。

又过了一段时间,因为课题需要,研究了一下图论中的二分图最大权匹配问题,自然而然地涉及线性规划问题(Linear Programming)。然后就在网上找了台湾国立交通大学的公开课,上面有美国北卡莱罗纳大学方述诚教授暑期课程线性规划,就像当年看陆吾生教授的课一样,感觉棒棒哒!当学生能够遇到这样的老师真幸福至极。方老师采用启发式教学,很多概念都会用几何的语言解释,学习的过程畅快淋漓。记得当年在寝室,一看就是一下午。上完课的收获就是,我感觉我自己智力还在线,内功已经修炼到一定程度,可以攻克凸优化这个大山了。另外提一点,方老师开设的另外一门课《非线性规划》也是非常的好(还未看完)。

接着再次翻看Boyd的《凸优化》,突然发现貌似没有以前那么难了,很多概念能模模糊糊地看懂了。但还是感觉不顺畅。

于是再次求助万能的网络,找到了印度的公开课网站上面有众多高质量的课程,这些课程多数由印度理工学院(相当于国内清华北大)所提供。其中《Convex Analysis》这门课看了前10课吧,总结下来,干货十足,但是感觉更像是数学系的课程,不太适合工科。另外一点:印度人的英语真的是让人蛋疼。所以作罢,等有时间再看吧。(另外,我觉得我越来越像数学系的了,居然对抽象代数和我微分几何感兴趣)。

我在网上有猎奇的嗜好,所以会在AMAZON上搜索凸优化相关的图书,偶然间遇到《Optimization Model》,看评论相当不错。然而网上却找不到电子版。所以只好求助图书馆,然而上海图书馆也没有这本书。我就只好把希望寄托在万能的淘宝上,结果惊喜地发现,有这本书的电子版,然后花费20元大洋购入。

草草地地翻看完这本书之后,感觉相逢恨晚——这真的是凸优化学习之路上的第一本书啊。整本书好像知道初学者哪里不会,哪里不懂似的,总是在你理解有困难的时候提供帮助。而且,本书在最开始还提供了线性代数的相关知识,对于后续课程的学习大有裨益,这也是Boyd的书所缺乏的。后来才知道,这本书是美国加州大学伯克利分校上课的教材,作者Laurent El Ghaoui确实了解学生学习的难度。

看完之后,再看Boyd的图书,就畅通无阻了。什么对偶理论,KKT条件,原本面目可憎,居然亲切起来。而且,居然能体会到,理论之美,前人怎么会有这样的想法,真的是太棒了。另外,Youtube上还有Boyd教授的上课视频作为补充(课程代号EE364A),虽然我认为他讲的课没有书写的好。

Boyd的《凸优化》分分为三部分:理论,应用和算法。理论部涉及:凸集合,凸函数,凸优化问题,优化条件,对偶等内容。应用部分主要是将工程中常见的问题抽象为凸优化问题。而算法部分主要是以内点法为主。

我个人认为,这本书作为凸优化的入门图书其实并不适合,主要原因有三点:

  1. 内容太多,中文版《凸优化》将近700页,对于初学者,学习主干内容就可以了,可能也就200多页,但是前提是有人指导。
  2. 算法内容有限,很多同学学习凸优化的目的可能更想学习算法部分,但该书主要讲解内点法,对于现在热门的次梯度法,近邻算子法等没有涉猎。
  3. 有更合适的入门书籍《Optimization Model》.

综上所述,我认为学习凸优化理论比较合适的路径是:

  1. 学习/复习线性代数和多元微积分的知识。
    实际上,凸优化理论综合使用了线性代数和微积分的相关知识,比如方向导数,雅克比矩阵,海森矩阵,KKT条件等。
    这里强烈推荐MIT公开课《线性代数》,Gilbert Strang教授主讲,学完之后,你会对线性代数有全新的认识。(没错,我是Strang教授的迷弟,为他疯狂打Call)
  2. 学习《Optimization Model》
    这门课的学习过程,可以结合方述诚教授的《线性规划》和《非线性规划》的适配,学习效果更佳。
  3. 学习《凸优化》
    有了1和2的准备,其实《凸优化》这本书已经差不多学习了60%,剩下的就是丰满自己的羽翼啦,把各个知识点串起来,形成网络。如果你有时间,还可以再看看台湾Chong-yung Chi老师写的一本书《Convex Optimization in signal and communication》,虽然书名是一本应用导向的书,但其实主要内容是理论和算法,真正应用的部分不算多。关键是讲解很细致。

经过上述学习过程,对凸优化理论的认识就比较深刻了。比方说你能够对支持向量机(Support Vector Machine)的对偶形式(Duality)不再陌生。能够对KKT条件的每个条件说出其中的道理,并能给出几何解释。但是,我发现以上所学习的也只是初级知识,内容大概是斯坦福大学的EE364A和加州伯克利分校EE127AT的内容,它们分别还有后续课程EE364B哥EE227BT两门课。这两门课涉及的内容主要是次梯度法,近邻算子,ADMM等优化算法,这算法主要是针对机器学习当中的问题而提出的,学习的难度也是不小,目前为也在学习当中(学无止境呀)。

在这个过程中,在卡内基梅隆大学的教学视频《Convex Optimization》,在Youtube可以观看,包括2015、2016两年的视频,主讲人是Ryan Tibshirani(此君的老爸很厉害,同样在CMU,是LASSO的发明人),小伙子的PPT做的很不错,就是语速很快。PPT同样不错的还有UC Berkeley的EE227BT,和UCLA的EE236B。下面列出目前学习的资料:

学校 教授 初级 进阶
Standford Stephen P. Boyd EE364A EE364B
UC berkeley Laurent El Ghaoui EE127AT EE227BT
UCLA L. Vandenberghe EE236A EE236B/EE236C
CMU Ryan Tibshirani 10-725 10-725

以上所列资料都是非常优秀的教程,在学习的时候可以相互参考。实际上,看他们的PPT真是赏心悦目呀!

至于凸优化的应用,包络信号处理,图像处理,计算金融,控制,几何问题,试验设计等等。但我认为最重要的领域是机器学习(Machine Learning),实际上机器学学习里面绝大多数问题(除了神经网路)最终都可以归结为凸优化问题,因此,用凸优化的视角学习机器学习,真的是很惬意。

总结这几年学习凸优化的心得,发现凸优化其实并不难,关键是要用心学习。对关键概念的理解要深入,尤其是多思考,很过概念的引入动机是什么,多去发现问题,多去想反例。把知识形成网络,多思多考,才能融会贯通!

“吾生也有涯 而知也无涯”,希望大家在学习凸优化的路上痛并快乐着!

转载于:https://www.cnblogs.com/rswss/p/11451428.html

我的凸优化学习之路(转)相关推荐

  1. 凸优化学习(二)——凸集

    注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中的凸优化部分的内容进行翻译学习. 2. 凸 ...

  2. 数学不好是原罪——凸优化学习笔记(个人学习记录汇总)

    中科大凸优化课程学习笔记 中科大凌青老师的课(现中山大学教授):中科大-凸优化 形而上学,不行退学,共勉!博客为个人手写笔记整理存档,不喜勿看. 凸优化学习笔记(一) 持续更新--

  3. 凸优化学习:PART1凸集

    凸优化学习PART1 一.引言:优化问题简介 优化问题的定义 凸优化是优化的一种,是优化中比较容易的问题.在讲解优化问题前,首先说明什么是优化/数学规划(Optimization/Mathematic ...

  4. 凸优化学习-(二十九)有约束优化算法——增广拉格朗日法、交替方向乘子法(ADMM)

    凸优化学习 我们前面说过,拉格朗日法在实际中应用不大.为什么呢?因为 α \alpha α的取值很难取,这就导致拉格朗日法鲁棒性很低,收敛很慢,解很不稳定.于是就有了今天的增广拉格朗日法和ADMM. ...

  5. 凸优化学习笔记 11:对偶原理 拉格朗日函数

    前面讲了凸优化问题的定义,以及一些常见的凸优化问题类型,这一章就要引入著名的拉格朗日函数和对偶问题了.通过对偶问题,我们可以将一些非凸问题转化为凸优化问题,还可以求出原问题的非平凡下界,这对复杂优化问 ...

  6. 凸优化学习笔记:QP及SOCP问题

    凸优化学习笔记:QP及SOCP问题 QP问题 定义 是什么 几何意义 QP.QCQP.LP之间的关系 例子 最小二乘及回归问题 多面体间距离 方差定界问题 基于随机费用的线性规划(考虑随机变量的优化问 ...

  7. 凸优化学习笔记 15:梯度方法

    前面的章节基本上讲完了凸优化相关的理论部分,在对偶原理以及 KKT 条件那里我们已经体会到了理论之美!接下来我们就要进入求解算法的部分,这也是需要浓墨重彩的一部分,毕竟我们学习凸优化就是为了解决实际当 ...

  8. 凸优化学习-(十八)对偶性Duality 拉格朗日函数与对偶函数

    凸优化学习 对偶性是凸优化学习的核心,重中之重. 学习笔记 一.拉格朗日函数与对偶函数 对于一个普通优化问题: min⁡f0(x)s.t.fi(x)≤0i=1⋯mhi(x)=0i=1⋯p\begin{ ...

  9. 凸优化学习笔记 10:凸优化问题

    前面讲了那么多关于凸集.凸函数的知识,然而都是铺垫,现在我们才来到了这门课的重头戏部分--凸优化问题! 文章目录 1. 一般优化问题 2. 凸优化问题 2.1 凸优化问题定义 2.2 凸优化问题的最优 ...

  10. 凸优化学习笔记(一)

    文章目录 写在前面 仿射/凸/凸锥(集/组合/包) 几种重要的凸集:超平面与半空间/球和椭球/多面体/单纯形/对称(半)正定矩阵 凸集的交集,保凸运算:仿射函数/缩放和移位/透视函数/线性分段函数 凸 ...

最新文章

  1. Spring学习(8)--- @Autowired注解(一)
  2. 石川es6课程---5、函数-参数
  3. C# OpenGL 环境配置和入门程序
  4. 面试官给我挖坑:rm删除文件之后,空间就被释放了吗?
  5. 虚拟机架云服务器,云服务器 虚拟机架设
  6. linux 权限 mask,【自学Linux】Linux用户、组、权限(一)
  7. [渝粤教育] 郑州航空工业管理学院 电工电子技术基础 参考 资料
  8. android手机生成pdf格式文件,Android根据pdf模板生成pdf文件
  9. Java毕业设计-学生选课管理系统
  10. wifi android kernel,android wifi 驱动框架简介
  11. 身为程序员,与程序员有关的电影你看过几部? 一只猫
  12. linux 性能测试 跑分,测试10秒钟,分析8小时,性能评估只看跑分可不够
  13. 深度图像修复的回顾和改进:使用生成对抗网络基于Patch的图像修复
  14. C语言核心知识点Day05
  15. 日记(docker)
  16. springboot基于微信小程序的宿舍管理系统
  17. Blender:导入obj渲染及导出图片+深度图+法向图
  18. hyperf使用curl产生的超时问题
  19. 微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(MyEclipse + SVN)
  20. python除法有余数时+1

热门文章

  1. 关于socket的简单的客户服务端编程
  2. Apache Flink 1.10.0 重磅发布,年度最大规模版本升级!
  3. 我是如何通过思维系统实现年薪50万的?
  4. 今天我点亮了CSDN博客专家殊荣
  5. 打开pdf文件提示文件过大_如何把pdf文件进行分割?拆分pdf文件的方法分享
  6. html如何连接外部网页,怎么链接一个外部的css文件?
  7. mysql 日期格式化_每天一个常用MySQL函数-from_unixtime等
  8. php类型cms,自定义存储类型
  9. 计算机专业基础 -- 数据结构入门与算法基础知识
  10. linux容器返回宿主机,Linux下Docker容器访问宿主机网络