选课类别:基础 | 教学类型:理论课 |
课程类别:研究生课程 | 开课单位:数学科学学院 |
课程层次:本研贯通 | 学分:4.0 |
陈士祥老师的《最优化算法》课程内容丰富,主要涵盖了连续优化领域的多种算法和理论。20个PPT的主要内容包括凸集、凸函数、优化问题(如QCQP,SDP等)、KKT条件、梯度法、次梯度法、投影梯度法、增广拉格朗日算法、ADMM、分块坐标下降法以及随机优化算法等。课程内容较为深入,特别是与运筹学相比进一步深化了一些概念,例如共轭函数、对偶理论的应用、加速梯度法、条件梯度法等。学生提醒大二的数理基础较差的同学需慎重选择,因为课程难度不低,特别是没有运筹学基础的情况下,可能会有学习障碍。
课程的考试被描述为计算量大,综合性强,并且题目选取偏向细节和边边角角的知识点,而不是作业时常出现的内容。尽管考试与预期有出入,但由于大题难度均匀,助教评分较为宽松,给分也被反映为非常优异。作业方面,作业与课程内容关联度高,布置时间充裕,但难度较高,经常需要借助战友互帮互助来完成。全年共有五次书面作业,一次程序设计和一次论文汇报。程序设计相对简单,使用Python或Matlab完成,两小时可以完成。论文汇报则具有挑战性,但主要依赖于所选的论文难度。
总体来看,给分相当慷慨,部分学生认为自己考试表现不佳却得到优良的总评。助教在作业中给出的答案偶有模糊之处,但整体比其他课程更严谨。学生强调陈老师的调分力度强劲,并表扬他的PPT内容详实且补充了许多前沿研究成果。然而,一些学生提到上课过程中理解困难,尤其是课上例子太少,老师节奏较快,使得重点难以抓住。
对于对计算数学或优化算法感兴趣并已有一定理论基础(如运筹学)的学生,选修此课应是较为理想的选择,因为这门课不仅拓展了理论视野,更可直接应用于科研。未有相关基础的同学尤其是非数学专业的学生,需考虑自身的数学功底和对课程的可投入时间,在必要情况下再选修,以避免过多时间困于复杂的数学推导和算法理解之中。
课越来越听不懂了,真的好难好难。希望老师能看看评课社区救救我。现在上课感觉就是东西一大堆,啥重要啥是介绍分不清,挨个看挨个算都要花好长时间。真心希望能简化一下PPT或者和运筹一样出一份阶段性重点知识点讲义。再这样下去要被逼得退课了。。。真的太难了啊啊啊啊啊啊
作业太难了,一道题盯着一两周毫无进展,而且几乎每道题都是这样。几乎没有收获,不如发答案多抄几遍先抄会。
什么都不会→作业不会做→没人可以问→什么都不会,无解!
优化运筹是一门丑陋的学问
正在wisconsin-madison的cs进行暑研,刚看到隔壁的Stephen Wright教授上ICM 60分钟报告了,我们cs人也是能上ICM的😭😭
从个人角度,优化研究主要结合两个方面:一是对特定问题结构的深入思考,这部分内容通常不在课程范畴之内,更多需要通过阅读论文来不断积累与理解思考;二是掌握基本的分析工具与优化算法的核心思想,而这正是最优化算法课程所能夯实的基础。在完成这门课的学习后,我认为是完全具备了读paper以及上手研究的能力的。所以如果在学完这门课后对优化有兴趣,完全可以联系一些老师来进行优化方面的科研。
课程内容的设置上,基本介绍的都是连续优化的内容,而且几乎都是是光滑的。我觉得大致可以从以下两个思路去理解,一是从无约束的梯度下降法出发,到如何处理有约束的问题,从而得到投影梯度法,近似点映射,ALM等算法;二是从deterministic的梯度出发,到如果我们只能得到梯度的一个无偏估计,那么该如何处理问题(这部分讲的不是很多,但事实上课程中介绍的deterministic的算法基本上都有stochastic的版本)
连续优化事实上和机器学习中的很多问题都有着紧密的联系,比如优化器中采用的sgd, adam等算法,而最近新提出muon算法相较之前常用的sgd,adam在大模型的训练中又有着神奇的优势。从优化的角度,我们可以考虑为什么muon会更好,以及在训练中何时该采用何种算法等有趣的问题。欢迎对优化感兴趣的同学来和我交流呀😘
Btw 发现科大数学出身的学长学姐目前在优化领域的还不少,提供一些参考,Niao He(ETH),Yingying Li(UIUC),Yao Xie(GT),Jiawei Zhang(UWM),Shaoning Han(NUS), Sanyou Mei(HKUST)
一共20个PPT,主要内容为:
L2:凸集
L3:凸函数
L4:优化问题介绍(QCQP,SDP等)
L5:最优化条件(KKT)
L6:梯度法和收敛性
L7:次梯度法
L8:投影梯度法、条件梯度法
L9:近似点映射
L10:近似点梯度法
L11:加速梯度法
L12:牛顿法
L13:BFGS
L14:对偶算法
L15:增广拉格朗日算法
L16:ADMM
L17:分块坐标下降法
L18:随机优化算法
L19:方差缩减技术&更优秀的SGD
除了L8,L11,L14,L17,L19其余均在运筹学中讲过,只不过深浅度不同,所以上这门课之前建议先上完运筹学
关于讲课,个人认为前半段是核心,涉及很多优化中的技术,包括对偶问题求解和共轭函数的性质,强凸性和L光滑等推导,大部分结论和收敛性分析都挺精妙的,尤其是我注意到强凸和L光滑的所有性质全部对应,包括余强制性等,写在一块看真是优美。后半部分讲的是几个经典的算法,很多都是介绍其应用和扩展的分析,并不需要太花时间理解。老师前后内容讲的速度基本相同,而前面内容密度较大,导致如果没有上过运筹会非常难上手,希望老师明年能够稍微调整一下节奏。
此外,老师的PPT做的非常好,补充了很多相关的研究成果,在未来如果使用到了相关算法可以把PPT当成资料来查询,很方便。
关于作业,仍旧继承运筹的良好风格,作业与内容基本挂钩,每四个PPT布置一次作业,每次作业留的时间都巨长,时间很充分,但是抱持对DDL的尊敬,我一直都是最后两天写,一般通过战友之间的互帮互助一个晚上就写完了。每次是4-5个题,难度有点大,不过复习重看作业的时候发现还是蛮基础的,还是平常没认真的问题,如果每次讲完把PPT整理好应该不会太困难。
作业答案每次助教都会写一个pdf,写的还行,应该都是对的,不过有一点省略,不太方便理解,这点比运筹好太多了,运筹答案里面相当多错误和伪证。下学期应该会当运筹学的助教,届时希望能出一份严谨易读的答案。
关于代码作业和课上pre,都挺简单的。代码作业是一个逻辑回归问题,可以选择使用梯度法或者ADMM求解,MATLAB和Python都可以用,GPT写出来大体是对的,需要修改,我因为有一个小地方一直没搞对花了一整天的时间(老师上课原话说两三个小时就写完了,不好评价)
关于考试,个人评价是非常怪,最开始一个小时直接给我干懵逼了没怎么写题,和我yy中的完全不一样,我以为还是作业的形式布置六七个题,每个题对应一次作业的一些内容,什么凸函数判断啊算近似点算子啊写个迭代格式什么的,结果上来考了个松弛和紧性(如果没记错紧这个概念PPT好像没讲),后面更是说简单也简单说难也难,一度成为文科题目,有让你解释线搜索准则为什么好这种题。感觉考的挺边边角角的,可能是陈老师的风格吧,上学期运筹判断题也有两个考的很细完全忘了。明年的同学可以专门往感觉不会考的角落看看。
刚刚出给分,助教应该是不小心把全部人的分数发出来了,目测中位数和平均分都是50一丢丢,78以下到87以上断层了,crazy
给分就不用多说了,肯定非常猛的,虽然高分助教似乎说往下调了
给个回忆卷:Final.pdf
不愧是陈爹,给分超级好,期末考大概开根乘十了。
助教可能是不小心把所有人的成绩都放出来了,我算了一下,平均分是 55.29,中位数是 56.5(去 0),直接 78~87 断层了,太可怕。
这门课在运筹学之后上会感到极度舒适。虽然内容和运筹学重合不少,但深度更深,没有上过运筹学的话可能一下子新东西有点多,而上过运筹学之后可以更快的理解更深入的部分。
学期初在这一门课和另一门研课直接来回摆动,最后还是选了这门课,因为我相信陈士祥,✝陈门✝
上来的几节课先系统的介绍了凸分析的相关工具,这是运筹学中较为缺失的一部分,而这门课很好的补全了这一部分内容。SDP、凸集分离定理、对偶锥、具体的有李氏光滑函数和强凸函数性质的再一次阐述、共轭函数等。在上学期讲的次梯度中也更进一步细化了理论知识。
后半部分是各种各样的数值优化算法,其中老师上课不乏有趣的见解,可以让我们更好的理解优化算法。虽然老师的 PPT 很多地方和 PKU 的教案重合(这个老师在 PPT 开头就说过了),但老师也有很多自己加上的精华部分,如算法各种各样的有趣的性质,也给了诸多的参考文献。
即使是最简单的梯度下降法,也有非常多有趣的性质。老师上课提到了 Implicit Regularization,除了这个外,还有诸如 Margin Maximization、Simplicity Bias、Feature Averaging、Sharpness Minimization、Grokking 等。在 TCS 与 ML 结合的分支——Learing Theory 中,非常关心梯度下降法的这些性质,尝试发现和证明它们,因为这些性质可以帮我们理解实际机器学习中出现的各种各样的现象。
只不过总计下来花了 7.5 学分才将 PKU 的最优化教科书学完,会不会有点慢呢?我不是很了解。
作业有些题挺难的,但反正 DDL 够长,可以慢慢想,还是可以想出来点东西的。实验确实不难,但也算很有意义。我上学期运筹学实验三选二选了 Simplex 和 Dijkstra,都是吃高中信奥的老本,偷懒没有选剩下一个和优化相关的实验,所以这学期是我初次实操数值优化算法。并不难,用 Python 写两个小时差不多了,但可以对算法理解更好一些。比如我在写 FISTA 的时候,线搜索乱写,直接硬套 Armijo,导致发散了。过了一个小时,去认真翻书,才发现原来线搜索需要这么写才能保证收敛,总的下来还算有收获。而且老师要求「报告美观」,这让我 LaTeX 水平大大提升。
再来说说考试,期末考很符合计算数学的特点,都在算。只不过时间不太够,最后没有算完,而且有些文科题目也让我有一点懵逼。最后结果比自己预估的低一些,但陈老师是真的捞!
下学期想去带运筹学助教,查卷时找老师问了问,说可以,希望不要出尔反尔。但其实作为非数院出身的我,数理基础是很差的,只希望到时候不要拖同事的后退(瑟瑟发抖)。
上课有点迷,听不懂想干什么,上课来听的人越来越少。ppt详略主次也没有北大的教案清晰。
一个建议: 本人大三下选课, 在上一个学期已经选过运筹且学的不错, 这个学期这门课整体也轻松了一些. 不过客观的说, 这门课的内容还是很有难度的, 对计算或者运筹优化方向感兴趣的大二数院同学如果想选课, 需要注意几个问题:
课程内容: 这门课比运筹更加注重优化算法的介绍, 没有涉及运筹很大篇幅的线性规划求解部分, 介绍了LP, QP, QCQP, SOCP, SDP等几种特殊形式的问题. 对于对偶理论, 本课程引入并着重介绍了共轭函数, 以及如何利用共轭函数求解对偶问题, 另外还介绍了对于广义不等式和对偶锥的对偶问题. 算法部分, 在运筹介绍的算法以外, 本课程还介绍了条件梯度法(Frank-Wolfe方法), 对偶算法(对偶梯度上升法和对偶近似点梯度法), 分块坐标下降法(Block Coordinate Descent). 当然, 对于运筹以及介绍过的内容, 这门课程大部分都有加深, 例如在近似点介绍了Moreau 分解, 在SGD算法介绍了SAG, SAGA, SVRG方差缩减技术等等.
陈老师的PPT内容都比较详实, 对于每个知识, 都有很多例子补充, 不过这些例子都很有难度, 可能经常涉及的是一些在矩阵空间(例如\(\mathcal{S}^n, \mathcal{S}_+^n\)上的优化), 以及一些矩阵分析的技术.
考试: 今年考了判断题, 难度都是运筹难度. 大题考察了次梯度, 对偶问题强对偶定理, 近似点算子的性质和计算, 最后用实例非负矩阵分解考察KKT条件和分块坐标下降法的迭代, 最大割问题考察凸松弛方法和ALM迭代. 大题的难度整体比较平均, 考察也比较全面. 期末最终平均分48.71, 中位数48.
给分: 总评由作业, 实验, 论文汇报, 期末考构成. 本学期一共五次作业, 一次实验(可以使用FISTA或者ADMM). 论文汇报可以2~3人组队, 这一项给分都是9或者10, 基本上是做了就行. 陈老师的给分应该是没得说的nice的, 我前三项都全做了, 期末考81, 总评94(大三了不在乎什么卡绩那些东西啦). 今年出分很快, 6.20期末考, 6.25就出分了哈哈
总而言之, 这门课内容充实硬核, 对相关方向感兴趣的同学一定可以从中学到很多有用的知识!
最后可以贴一个个人复习时做的笔记, 主要也就是整理了一下陈老师PPT上的内容以及一些习题解答, 同时参考去年本站Peanut_Tang用户给的2024回忆卷写的一份解答. 正好运筹当时也做了一个复习笔记, 我就把两者合在一起了, 有需要的同学可以看看(不过陈老师的PPT内容已经很好了哈哈)
上课根本听不懂,就是定义+定义+定理,例子太少了(当然可能也是内容比较多)
除了泛函讲过的东西就没听懂过…还好老师给的资料很详细也很丰富,看资料自学足够了
更新:老师备课好认真,讲的也很好,听不懂是我太菜了呜呜
吐槽一下今年第二次作业答案,直接用大于小于号当内积的尖括号来用,看着好别扭😓,还有第四次作业答案,助教正交相似和正交相抵分不清
整体来说任务量不算多,五次作业和一个程序作业,一次pre,上台就是满分,卷子比去年的大概简单些?我大概只会六七十分的样子,好像大家都是研究生,总评75万岁那种,分数普遍不高,想拿高分感觉挺难的
老师很好,是我太菜上课听不懂。这里写给非数学专业的同学:尽量别选这门课,难度很大,非常坐牢。如果只对怎么解决优化问题,应用优化算法感兴趣,不关注算法背后的原理的,没必要选这门课,它需要一定的数学功底,对数学接触少的人跟看天书没什么区别,符号晦涩,思维跳跃,牢底坐穿。
如果实在为了学分没得选,陈老师这门课一定不会让你失望。首先是陈老师开了BB,高新同学不用奔波了。考试题比作业简单很多,而且考试评分占比也不大,只有50%,其余50%是作业、程序设计、论文分享。最重要的是给分真的很好,像我这样的坐牢人,考前把考点记一记,考试时把送分题拿一拿,普通题公式套一套,难题胡诌两句,最后总评>75。
本人没学过运筹学,所以这门课的内容对我来说几乎都是新的。
内容很丰富,例子很多,算法收敛性的证明也很详细,并且提供了很多较为前沿的论文来进一步阅读。但是也因为内容太多,上课感觉重点不突出,听课的人也很少。
作业:5次题目(一次5题以内),不算很难,但经常有难算的和意思不清楚的题目,发的答案有时也让人怀疑其正确性。后半学期汇报一篇论文,想水过可以选简单的。一次编程作业,比较容易,基本上一天可以做完。
调分力度无敌了。
这门课程70%的内容与运筹学相同,我讲讲不同点:
加入了更多矩阵相关的优化问题,比如半定优化;引入了共轭函数,更加系统地介绍了对偶理论以及应用;介绍了条件梯度法、加速梯度法、分块坐标下降法。
运筹学中的单纯形法、流算法、动态规划、信赖域该课程没有涉及。
个人认为运筹学学完马上选这门课比较好,几乎不用听什么课,最后考前看看ppt就好了。
任务:五次书面作业,一次编程作业,一次论文报告
书面作业有点难度,编程作业比较水,论文报告看你选的什么论文,有的很简单,有的很难。
考试:难度大概比运筹学期末高20-30%,送分题不少,不过没有运筹学那么简单(可能是因为老师没像运筹学一样给题库)
选课建议:对于准备保研本校的同学,如果时间充足可以大三下选;如果不准备保研,可有可无
注:以上评论主要面向大三下考虑选课的同学