Numerical Optimization和Convex optimization 两本书的选择? - 知乎https://www.zhihu.com/question/49689245
Numerical Optimization和Convex optimization 两本书的选择?
Numerical Optimization和Convex optimization 两本书的选择?
11 个回答
本人优化方向Phd一枚,两本书都很认真的读过。这两本都是很有名的优化入门书籍,都写的很棒,不需要太多基础就能读懂。怎么读看你的需求。
Numerical Optimization我认为是必读的。这本书讲了各种优化算法,对于经典的方法覆盖非常全面。相对于其他优化的入门著作,这本书理论比较少,但把每个算法原理都讲得很明白,而且讲了每种算法在使用中很多practical的问题,这是我认为这本书很好的一个方面(做优化的人大部分数学出身,大牛们一般不屑于去讨论practical issue,但真的用起来的时候,你就会发现这些问题是很重要的)。无论是针对以后做优化方向的研究工作的,还是只是需要应用优化算法的,我觉得都可以读这本书。
Convex Optimization这本书相对来说更加理论一些,介绍的算法比较少。虽然涉及到的理论都是比较初级的,但写的很清楚,例子非常多,如果认真读完并且做下后面的习题,可以帮你打下比较扎实的理论基础。我PhD刚入学时,老板就要求我们先把这本书前几章理论部分刷完。
接下来说一些具体的建议:
- 如果你想知道如何将问题formulate成优化问题、这个优化问题的性质是怎样的能否求到全局最优化、如何将你的问题转换成一个常见形式的优化问题(比如LP、SDP等)以便于利用现有的求解器求解,而并不关心优化算法本身的原理,那么请读Convex Optimization;
- 如果你已经知道了你的问题的数学形式,但想寻求更好的优化算法来有效的求解,那么请读Numerical Optimization;
- 如果你想对优化领域有比较完整的理解,那么这两本书都是要读的。如果这两本书都读完了,想更进一步,Nolinear Programming和Introductory Lectures on Convex Optimization等书会是你很好的选择。
同优化phd一枚,本科数学背景。赶的巧,master学了convex optimization,phd一年级学了nonlinear optimization, 反正都死厚就对了。
课程设置上:
convex optimization 那本书当时只节选了第一部分theory和第三部分algorithms, 第二部分applications花了五分钟说个梗概就直接跳过了(傲娇的数学系。。)
numerical optimization 那本书略去了第十,十一,十三,十四章,多加了凸集凸函数,数值误差和对偶的内容。其它的章节都详略差不多的刷了一遍。
其它的章节,就默认我没翻过吧。。
ok, 现在来说对比:
convex optimization
1. 更偏技巧和建模,看完可以长不少见识,有很多将实际问题转化成具体优化问题的例子(现在留下印象最深的是多面体内最大体积球的一个例子,但有更多当时觉的很巧妙的例子)。
2. 全书不见一个定理,都是小标题混着正文冷不丁就证完一个结论,所以需要自己花些时间整理出重点。证明实用为主,是简化或强化假设之后的证明,但是很直观(凸集分离定理证明,第三章算法收敛性证明等)
3. 主要围绕凸优化,问题不局限于实数域变量,会有很多矩阵变量(log(detX)这种鬼)
4. 有很多感觉在其它地方很少看到,也不常用到的内容(Generalized inequalities, Quasiconvex, vector-optimization),可以直接跳过吧。
5. 强推凸集,凸函数和对偶三个章节和课后习题,直观清晰图文并茂的解释了一些并不是很容易理解的概念。课后习题是很好的拓展。
6. 真正的优化算法部分简略粗犷,只介绍了经典的算法框架和收敛结果,在这个部分建议跳入numerical optimization的坑。
7. 网上有Boyd本人和其TA的课程视频,课件内容基本照搬课本,可以观看。
numerical optimization
1. 默认已了解和熟悉基本优化算法。
2. 更偏理论和算法,看完会对数值优化有较为全面的认识(不覆盖全局优化算法,随机下降算法,和启发式算法),图示清楚明白(尽管有些图很乱),算法有详细的伪代码可以逐一实现和体会,更有叙述和讨论很直观的对算法思路和发展予以解释,非常值得阅读。基本不关注建模。
3. 全书结构清晰,章节内容大框架,定理算法例子讨论各有标识,相对很容易找到自己需要的部分。证明严谨全面递进,结论完整。
4. 主要围绕数值优化,包含凸优化中实数变量的部分,但基本不限定在凸优化的范围,处理更general的函数优化。对每一种算法框架都有深入的讨论和延伸。强推第二章无约束优化和第十二章约束优化以建立数值优化理论基础。
5. 在经典算法框架之外,增加很多practical章节以更加实际实用的方式来解决问题。
6. 部分习题略难,相当多的题目是为了完整书中的证明。不过可以找到习题答案,很详尽。
7. 好书好书好书。可以当字典来用。
如果我现在回头看的话,建议是精读convex optimization的第一部分(去掉某些不那么“重要”的内容),了解第三部分,然后转入numerical optimization,精读需要的章节,这是本字典。
题外强推Introductory Lectures on Convex Optimization: A basic course, 简单霸道的四大章,非线性优化,光滑优化,非光滑优化,结构优化。我只看到第二章,但必然是要读完的。这书从high-level来讨论优化问题,有很多“犀利”的观点和技巧,读完第一章已然获益匪浅。
关于随机下降算法,numerical optimization的作者之一Nocedal和其合作者有篇综述文章Optimization Methods for Large-Scale Machine Learning,干货满满,在今年的ICML上有一个tutorial,slides在这里Stochastic Gradient Methods For Large-Scale Machine Learning.
所有的这些书,都是完美精排可以免费下载的,这真是令人感动。
stanford.edu 的页面 convex optimization 730页,size 6M
agh.edu.pl 的页面 numerical optimization 651页,size 5.5M
psu.edu 的页面 Introductory Lectures on Convex Optimization 212页,size 845K
题主提到了凸优化,boyd的convex optimization是一个更好的入门教科书,因为本书更好的组织了凸优化的知识体系,向你展示了凸优化理论背后的内涵(对偶理论,包括会给你打基本的凸分析的基础),凸优化广泛的实际应用(最小二乘,线性插值,假设检验,分类,各种几何问题)和针对不同凸优化问题的算法。
相比之下,nocedal和wright的numerical optimization确实对各类凸优化算法总结的更全,然而从对知识结构组织的角度来看我不认为这是一本好的教科书,而更是一本工具书,将各类算法机械的拼凑起来成为了一本字典。如果没有凸优化的big picture在心里,我会比较担心直接上手本书会lost在无边无际的detail中。
所以实际上还是要针对题主的需求。(i)如果是想先打打知识基础(为做研究做准备),那么boyd的书是起步更好的选择(不过如果题主是想读优化方面PhD的话我觉得这本书不是一定要读的,bertsekas,bertsimas和yinyu ye的教科书都可以作为代替),后续可以考虑选择nemirovski和nesterov这两位优化界巨擘的凸优化讲义作为加深(我个人觉得这两位的讲义是把凸优化理论讲的最透彻的,没有之一);
(ii)另一方面,如果题主单纯只是有特定的应用问题需要求解,那么前面这些理论或许也是多余的,因为优化确实也有非常应用的一面,然而nocedeal的numerical optimization仍然不是必要的,因为如何建模实际上是更重要的,对凸问题我们完全可以在matlab/julia/C++中建模然后交给Gurobi/Mosek这些专业的solver来搞定,这比自己人为写一个内点算法或者一阶算法一般都是要快得多的;即使是问题有特定的结构需要用特定的算法来求解,我们也没必要翻那本numerical optimization一点一点拿个算法出来看(很多特定算法都有更好的单独note可以学习),更何况这本书并没有囊括最近的一些热门的凸优化算法,比如ADMM,对此boyd也有一篇非常好的monograph写的非常简单易懂,还有示范的code。
从应用角度来回答。
Numerical optimization是讲述求解优化问题局部解的高效算法,包括各种一阶算法和(拟)二阶算法,比如最速梯度,共轭梯度,BB梯度,牛顿下降,拟牛顿法等。约束优化通常都是转化为一系列无约束优化问题SUMT来处理的,这里有很多的penalty和barrier技巧及对应的Lagrange理论。从每次迭代中确定步长与方向的先后顺序又分出,先确定方向后确定步长的线搜索法和先确定步长后确定方向的信赖域法。内容很庞杂,实际应用很需要经验。
Convex optimization这本书的前部分似乎理论很多,但其实这本书的目的既不在于介绍凸分析的理论,也不在于讲解求解凸问题的内点算法。这本书是面向应用的,重点是让读者学会识别和判断凸问题,或者说凸建模。在Boyd这本书里,讲解了大量的实际问题的凸模型,但都是点到即止,一旦一个问题被识别为是凸的,就基本认为已经解完了,具体的求解过程交给CVX软件和SDPT3、SEDUMI、SCS solver。识别一个凸问题的技巧大体分为三类,基本的凸集凸函数定义和对偶理论,标准的线性规划锥二次规划半定规划几何规划,和Disciplined convex programming(翻译为规范凸优化?就是各种保凸运算准则)。
以上是一个算法应用人员的学习总结,供参考。综上,对于计算机系出身的,个人推荐Numerical Optimization。
最后,读完Numerical Optimization这本书,对于优化的基本理论的理解提升了,但具体怎么写程序还是不会。因此,这里讲一下,如果是外行,直接学些gams,ampl的用法去吧,不要再理论上纠结太多,大概看看就行了。不过请注意,区分局部优化与全局优化的区别。