| 选课类别:计划 | 教学类型:理论课 |
| 课程类别:本科计划内课程 | 开课单位:电子工程与信息科学系 |
| 课程层次:专业核心 | 学分:4.0 |
王杰老师的《机器学习》课程被评价为中科大西区最硬核的课程之一。老师备课认真,通过PPT与板书授课,涵盖了有监督学习、无监督学习和强化学习等多个重要模块。课程内容扎实,从线性回归到深度学习再到强化学习,帮助学生打下坚实的机器学习理论基础。此外,许多学生反映课程讲义详尽、出色,助力于独立学习。
这门课程的难度主要体现在前半部分的凸优化理论,需要学生对数学基础有较高要求,尤其是线性代数和数学分析。作业量大,涉及复杂的数学证明和编程任务。大作业通常要求手写算法,实用性强,但需要投入大量时间和精力。多位点评者指出作业和考题难度较高,但能够有效巩固课堂知识。
考试内容涵盖了课程的各个模块,题目灵活以检测学生的理解能力为主,设计得较为合理。虽然期中、期末考试题量大,但只要掌握讲义内容并认真完成作业,取得好成绩并非不可能。有评论指出,考试时可能存在时间紧张的情况,但王老师的考试设计注重授课目标而非背诵能力。此外,多位同学反映,课程给分慷慨,老师会根据实际情况做出调整。
优点方面,课程被认为是打好机器学习理论知识的良好途径,尤其适合大二、大三有数学基础的学生。许多毕业生和从业者认可其在研究实践中的重要性。缺点在于课程负担过重,解析和作业有时与课堂教学脱节。部分学生感到压力巨大,不太适合数学基础较弱的学生。
考虑到课程内容的深度和难度,对机器学习感兴趣且有扎实数学基础的学生,尤其是计划从事相关研究工作的学生,这门课值得选修。对于数学基础较薄弱的同学,可能需要权衡自己的时间精力与学业目标。
大三路人,大二结束的时候希望未来能够从事机器学习方面的研究。我在大三下学期自学看过课程的讲义(没有选课),能感觉到王老师是在努力将这门课讲明白,真的希望同学们入门机器学习领域的。大三秋季正是一些同学开始接触科研的时间,回想起来如果我大三上学期能够抓住选课机会,那么在完成机器学习方向的科研任务的时候会更加得心应手,而不是在一无所知的状态下浪费时间吧。无论是对机器学习方向有兴趣的同学,还是应数和统计方向的同学,强烈建议通过选这门课来打好自己的理论基础和实践能力。
我就从一个学习者的角度,抛开应试的成分谈谈课程的学习。先梳理一下课程的内容吧:
为人不识陈近南,做了英雄也枉然:
做AI方向不了解ML,即便门门4.3也是枉然!强推这门课作为入门选择。个人认为课程的导论部分非常考验讲课老师的功力,能看出老师对这个领域整体理解、动向关注和讲课能力。本课程这部分课件内容非常非常丰富。从人工智能的概述到机器学习总体分类,每一页的PPT都做得很精致,包含了大量的素材,几乎每一页都有恰到好处的配图,让人看着非常舒服。
弄梅骑竹嬉游日,门户初相识
有监督学习的基本任务是分类和回归。课程正式内容从线性回归和贝叶斯回归开始,用一套严谨的数学语言介绍了在线性回归和贝叶斯回归角度下回归问题的建模和求解。这一部分的数学推导比较基本,彻底理解是很有必要的。
咬定青山不放松,立根原在破岩中
从最基本的数学分析知识开始,到凸集和分离定理,再到凸函数和次微分,进入到凸优化的领域。这部分学起来可能比较枯燥痛苦,但学完会觉得学的很扎实,一步一个脚印。这部分的作业值得吹爆,认真做完一定很有收获!有很多数学分析、凸优化的标准内容,也有课上没有涉及但也很重要的点。可以看出老师和助教对凸优化的把握还是很老辣的。
千淘万漉虽辛苦,吹尽狂沙始到金
个人认为凸优化算法是这门课的第一个高潮!虽然凸优化上面安排的课时相比于数院和管院的优化类课程不算多,但是安排还是很紧凑的。之前我对凸优化有一定的了解,讲义里一个多月的时间从点集拓扑开到shrinkage-operator和ISTA,看完直呼过瘾。这部分的证明可能对于不是数学专业的同学来说比较难消化,可非常经典。特别是ISTA收敛性的证明,类似的思路在优化方向经常被用到,强烈建议好好理解。
春风得意马蹄疾,一日看尽长安花
越过了凸优化这座大山,课程的车速加快,集中介绍传统有监督学习的方法。贝叶斯分类器、决策树、逻辑回归、SGD和支持向量机等一一登场,逐渐迎来课程第二个高潮。由于课程安排循序渐进,在难度加大的情况下,这部分的内容并不是那么难上手,很多结论是建立在之前的内容上。同时,学习这一部分的内容时,不能迷失在数学推导里。这些机器学习方法很多是建立在实际问题上的,学习的同时要注意理解这些方法是怎么来的。要弄明白需要完成一件什么任务、有什么条件、问题是如何建模的;解决问题最原始的想法是什么、实施想法过程中遇到什么困境、如何解决这些困境。
柳暗花明又一村,千树万树梨花开
课程的又一高潮。在有监督学习的范围内,从传统的机器学习方法到深度学习方法。一般教科书对于卷积神经网络如何提取特征的描述非常模糊,这门课用一个具体的手写数字“7”识别的例子,真的把卷积神经网络学习特征模板的原理讲的清清楚楚。
长风破浪会有时,直挂云帆济沧海
强化学习是监督学习和无监督学习之外的一种新的机器学习范式。这部分用一个大白走迷宫的例子,深入浅出介绍强化学习的基本概念。课程主页上的大作业也是用强化学习方法训练一个玩Artari游戏的AI。
到了大三逐渐明白,上课应该关注的不仅仅是授课内容,在听课的过程中我们可以观察到老师的科研作风态度、研究关注的taste、课程逻辑把握和讲义的写作等方面,这些都值得我们用心学习。没有在现场听过王老师的机器学习课算是一种遗憾吧,下学期一定会补上。大三同学们可以大胆选课呀!
相关文章和视频:
LASSO和近端梯度法:最优化计算方法7.1节
拉格朗日对偶:王木头的视频
KKT条件:Karush-Kuhn-Tucker (KKT)条件
SVD、PCA相关:如何从直觉内核上理解奇异值分解
强化学习:强化学习路线推荐及资料整理、王树森深度强化学习视频(可以只看前4P)、王树森讲义(github)
课程:人工智能专业唯一一门有用的专业课(悲。课程属于导论性质,有一定难度,但并不是特别难,可能更适合在大二开设。讲义很好,我基本没听课。
作业:在线性代数方面,可提前学习MIT线性代数和《矩阵论》(矩阵论·第2版 (方保镕,周继东,李医民) (Z-Library).pdf)的前半部分,最起码要搞清楚列空间、零空间、行空间、左零空间以及它们之间的关系。做作业时用好StackExchange网站。
大作业:建议提前学习《深度学习入门2:自制框架》(深度学习入门2:自制框架_去水印版.pdf),这是我23年阅读体验最爽的技术类书籍。
考试:期中的难度较大,一些难题需要用到各种技巧,有点像高中数学中选择和填空的难题。期末试题难度较小且答题时间充足。


科大本科生涯遇过最硬核的课,当初写作业的时候天天骂骂咧咧,甚至考完试,王杰老师给我奶上了90,我依然骂骂咧咧,因为感觉付出和回报完全不成正比,但当保研出去参加各种面试的时候,只能说万分感谢这门课,帮我复习了之前学的那么多数学课,面试问到机器学习的时候完全不怵。感谢打了个不错的底子。
作为与这门课连续“纠缠”了两个学期(21春选课的学生、21秋助教)的学生,我也来贡献一个回答。和很多回答所说的一样,这门课从王老师到助教,再到授课内容和认真听下来的学生,就是两个字——硬核。为了保证讲义、作业、习题课、考试等各方面的质量,王老师倾注了大量的心血,每一届的助教也都投入了极多的精力和时间(应该是同学们的三四倍不止)。由于本课程的学分、必修选课人数偶尔会改变,所以学校设置的助教指标也是不固定的。但无论学校给了多少助教岗位,王老师也都会保证每学期至少四位助教。出于希望本课程越开越好,同学们的选课体验越来越好的期待,我写了这个评课回答,来与大家分享我对本课程的看法,以及我对本课程的正确打开方式的理解,供大家参考。
0. 先放两个链接:
(1)课程主页:EE3001 - Machine Learning (Fall 2021) | MIRA Lab。往年的课程内容、讲义和作业都可以在课程主页上看到。
(2)B站上的课程介绍视频:少年班课程介绍_哔哩哔哩_bilibili。包含学科背景、授课内容介绍、课程特点介绍等等。
1. 关于授课内容:
(1)课程内容主要分为有监督学习、计算学习理论、无监督学习和强化学习这几个模块。其中有监督学习应该算是最重点的模块,既包含了大部分最重要的传统机器学习算法,也包含了很多凸优化理论。
(2)这门课的一大特点,就是重视理论基础。所有的算法,都是从要解决的问题出发,到做了哪些假设,到公式的推导,再到最终的结果,这些步骤都是一步一步在黑板上写出来的。这样的讲课逻辑,目的是能够让学生真正能够学懂算法,而不是仅仅了解而已。一些同学可能认为学机器学习只要听说了一些算法,会调包就行。往大了说,这样学根本没有触碰到机器学习的灵魂。往小了说,正如一些同学提到的那样,“当保研出去参加各种面试的时候,只能说万分感谢这门课”,如果今后参加某个相关的面试,和面试官聊到某个机器学习算法,你是真懂还是假懂,真的是很容易问出来的。再往小了说,如果学生对底层的算法思想不了解,能知道什么时候适用什么算法吗?很可能连调包都调不对…… 所以不要再觉得机器学习算法会调包就行,掌握底层的算法原理是非常重要的。也希望今后学习这门课的同学能够抱着把算法学懂的目的。
(3)很多同学感到前半个学期凸优化理论这部分很难。凸优化在机器学习中有多重要,我在这里就不多赘述了。客观来讲,这部分内容比较重视理论基础,对于非数院的同学而言,如果之前不太习惯严谨的理论推导,可能确实有一定难度。也正是考虑到这一点,课程特意设置了课时,用于回顾线性代数和数学分析等一些基础的数学知识,只要用心,学会这些内容还是没那么难的。(说实话,春季学期作为学生的我学这部分的时候,会觉得内容比较硬核,但要说有多难还真谈不上。)
(4)如果你认真听课,其实不难发现,科大每位用心讲课的老师,授课内容中或多或少都会反映出其在自己的科研领域中的独特体会。比如这门课程中有一些sparse learning相关的内容。王老师在这个领域强到什么地步呢——之前做过不少教科书级别的工作;我读过的近年做sparse learning的文章,每一篇都引用过王老师的工作,甚至有些一次就引了四五篇。我觉得在科大上了四年课,能够听到一些这样的内容才是最值的。
2. 关于作业:
(1)作业题大部分都是王老师亲自出的,有一部分是我们几位助教一起出的,王老师也会一题一题检查并修改。而且题目和课程内容一样每年会有更新。所有作业题都围绕一个核心原则,就是要让学生能够真正理解机器学习算法,并且掌握这些机器学习方法背后的“元知识”。
(2)日常作业的话有理论题和一些小规模的编程题。理论部分的题,有一些是经典的结论,有一些是算法的延申讨论,还有一些是从具体的科研问题中抽象出来的。个别题对非数学系的学生而言可能确实有一定难度,但是只要认真思考和完成,肯定是很有收获的。编程的题,有一些是让实现某个经典算法,有一些是让观察某种现象,还有一些我们在科研中踩过的坑(泪),这些题助教们都一行一行实现过一遍,确认代码量不太大才布置的,只要代码能力还过得去,应该都还比较简单。每一道作业题都是经过精心设计的,都是想让学生通过这道题掌握背后的某个知识,以及真正掌握算法。
(3)一些学生反映了作业难度和作业量的问题之后,我们在一些有难度的题后面加了提示,并且在作业里设置了一些选做题。(选做题也一样都是精心设计的呢)之后的作业量我觉得应该真不算多了。但是这门课并不是每周都布置作业,频率大约是两周一次,但总有同学喜欢拖到最后一天再写,那肯定是写不完的……所有的作业题助教也都会在习题课上进行讲解,这里还想说一句,如果哪些题有助教没讲清楚的地方也希望同学们在习题课上及时提出。
(4)每学期会有一个分组完成的大作业。21春季学期是让不调包完成一个NLP的分类任务(我是手写了一个神经网络,不过有同学用了朴素贝叶斯好像效果也还行),秋季学期是让完成一个DQN算法(提供了两个选择:手写网络实现状态引擎输入,或调包实现图像输入)。说实话我感觉对于每个做机器学习,尤其是做DL的同学来说,没有手写过一次神经网络,科研生涯都是不完整的。以我个人的经历而言,了解网络内部反向传播的机制,在实际应用以及调参debug的过程中真的帮助太大了。我本科是数学系的,也没怎么练过代码,但在之后的科研中我感觉自己debug的能力至少不算差,我觉得这很大程度上要归功于我在21年春季学期的大作业中完完整整实现过一个CNN。而且客观讲,手写神经网络听起来麻烦,只要真的理解了原理,其实也没那么难。总之这个大作业如果认真完成的话收获肯定是很大的。
3. 关于考试和给分:
(1)首先,考试的目的很明确:是为了考察学生的理解,而不是背诵默写。王老师也说了他出题的原则:让能背诵的学生考一个还不错的分数,但是考不了高分。
(2)先说说我作为学生参加的21春季学期的期末考试。一些回答说要把所有讲义上的内容背下来。其实当时期末那阵子因为在忙各种事情,我几乎只复习了几个小时就去考试了(当然就算复习了估计我也背不下来讲义)……基本上大部分题目都是考场上手推的,虽然时间可能有点紧,但是最终结果也还不错。所以说只有会背才能考高分肯定是不对的。
(3)再说说我作为助教对秋季学期考试的看法。这学期的考试的两个特点要比春季学期明显很多:1) 首先是题目很灵活,但都不难。只要理解了课上讲的算法,完全不需要背诵,也可以比较轻松地做出来。2) 其次是不少题目其实是有很具体的科研问题作为背景的。 总之我认为这学期的题目水平还是相当高的。王老师也说以后出题也都会出这种难度不大但考察理解的题,还是希望选课的同学都能把内容掌握吃透,而不是背诵默写。
(4)最后是给分,其实这是个本来最不应该关注,但实际上大家都最关注的话题。优秀率应该是给满了。相信上过课的同学回忆一下自己卷子做成啥样,再想想最后的给分,一定不会觉得在给分上被亏待了……虽然我不希望大家因为某门课给分好而去选课,但还是要说大家如果对机器学习感兴趣,欢迎来选这门课,给分肯定会让你满意。
RL学习最优策略,其余部分均转化为寻找一个函数的极值点,也叫优化,NN拟合函数也是使得损失函数最小,一样的。
对于每一个优化问题,如老师所述,我们关心的是解的存在性,唯一性,连续性(未讨论),
解的存在性判定是一个非常困难的问题,这门课中学到的工具有1)连续函数在紧致集上有极值;2)对有约束问题的强对偶性(未证明)——连续凸函数在多面体空间中有几何乘子(Lagrange对偶问题的解=原问题的解),但未必有最优解(可能不在定义域内或无法取得);二次型+线性函数在多面体空间中有几何乘子且可取得最优解。
其他的,如闭区域上强凸可导函数必有唯一最优解,就是1)(闭+连续->有极值点,强凸反证易得解唯一,
解的唯一性一般用反证法结合其他,如强凸函数的性质
至于如何寻找最优解,最朴素的是梯度下降,
对无约束问题,课程介绍了凸函数的ISTA(Iterative-Shrinkage-Thresholding- Algorithm)——即利用凸函数的Lipschitz连续性,将寻找两个未知凸函数的最优解转化为一个凸函数的最优解+一个二次函数的解,有效性由凸函数的性质保证;
对回归问题,课程介绍了SGD方法(升级版),利用凸函数的Lipschitz连续性和强凸函数的性质(这俩得出来的不等式形式相同,不等号恰好相反)保证有效性,这里的定义epsilon_k要看清,才能读懂推导;
对于有约束问题,课程用Lagrange对偶法,对偶问题解的有效性有直观的几何解释,对偶解有效要求满足complement Slackness(这个好像叫KTT?),
在soft-margin SVM问题,对偶解的范围与空间中样本点和分割、支持平面的关系相对应;
然后将以上应用,
针对ML的分类任务,若样本的自变量离散,可用DT或Naive Bayes;若样本的自变量连续,用Logistic回归(其实也可以用回归树,不了解);
课程没讲ML的聚类(彭老师的大数据算法的第四部分详尽地介绍多种聚类,忘光了,童鞋们可作为补充)和标注
视线转到样本,PCA是无监督学习数据降维而保持主要特征的方法,
NN中,Backtrack算梯度,若是用矩阵的点积表示,我还是看不懂~~
RL中,Bellman方程讨论了每个状态的长远收益,Plan可以直接学习V,也可以先任取两个策略,利用Bellman方程得V,由此在st选出新的策略pi(st)......
本课程另一个重要的收获是给定问题,将假设表示成样本概率(建模?)
1)线性回归中,假设Y=WX+epsilon~N(0,epsilon),请表示出样本的MLE
2)在邮件分类问题中,用贝叶斯准则后MLE估计,如何将X的各特征概率转化
3)在logistic回归中,假设P(X|Y=0)~N(mu_i,epsilon_i),试表示出样本的MLE,
其他杂七杂八的还包括Multi-armed Bandit的行为选择(退火,Boltzman机,忘光了,请帮采集指正,谢谢dalao),邻回归,
还有所有凸函数(恒>=0)问题(如logstic问题)若是加上了一个自变量的二阶范数,必有解,任取一个点,函数值为T,则自变量的范数必须<=T^0.5,转为闭区域,紧致集连续函数必有双极值,故必有解
这门课收获很多,捡起来以前学过的数学,学一点点深的数学,王老师有独到的理解,授课非常细致深入,
这门课的凸集的性质、凸函数的子差分、分类问题、分割平面、支持平面从坐标系上看都很直观,自然强调数形结合。
比如线性回归的解可以看作y在X形成的子空间的投影,
判断凸函数(epigrahph)时举的各种很典型的例子,
以及之前课堂上随机抛出的小问题,
介绍Naive Beyas分类器2种简化的动机,
SVM最优解的2种几何意义(从定义域看,固定乘数视为切平面最低切点,对偶问题\(\alpha_i\)通过SMO方法迭代取得),
尤其是yang学长,在繁重的科研任务之下,还要负责讲课(math_review),给我们出质量超级高的作业题和期中考,还有精彩的答疑(yang学长作为丘赛优胜和数竞决赛dl,讲解答案的时候不局限于答案本身,关于拓扑入门给了不少我这种采集认为很独特的视角,作为一个计科采集也能有机会摸到一点数学),答疑也非常耐心,非常nice;
统计了一下,Huang助教应该是讲课最多的(NN+RL+开始的实验课+习题课常客),但Huang助教表示这些基础概念的讲解不能展现其良好的统计分析水准;
白助教讲解CNN的损失函数时,分享了他在MSE和MAE中选择MAE作为损失函数的原因,我觉得这些经验很有效和宝贵;
还有低调的吕助教,问就是在认真地批改作业,还有习题课讲解hhh
最后,希望王老师和各位助教gg们能高抬贵手,让采集们过个好年~(期末算错了不少😢😢)
出分了,太菜了被同学们卷烂了,擦线4.0,有点难过,还行吧
期末基本是计算题+作业题+若干理解性的判断题+RL/DL算法描述题,
第二题线性回归后两问没读懂(好像挺难的),后面也没时间看了,
最后一题Bellman方程矩阵形式求逆求错(连着后面一问4+4=8分),方程形式也代错概率了(-2),考前也没试过V可以通过奖励直接列方程计算(以为非要代矩阵形式方程,知道的话可以简化不少,没读懂讲义,卒),随机过程也学得不好,多少有点后遗症,
作业题出现的拉格朗日乘子和解的存在性的两个反例自然也没去记住-2,
还有二元的logistic回归=二维平面上的线性分类(✓),也判错了-2,这个是在做实验的时候意识到的,
其他做出来了,虽然有些平时写出来的作业题考场上都还要临时推导一次,没背住
再次感谢这门课提醒我 薄弱的数学基本功+对内容 的偏差 ~~
这门课说起来是18周,但只上了15周的正课,这学期砍去了贝叶斯回归的内容,精华在于讲义和配套的作业
讲课:王老师上课会带着我们阅读一遍讲义,并给出一些原因、几何意义、拓展,即使讲得比较随意,也给了我这种采集很多启发,讲义是科大课程里质量最高的,推荐把讲义打印出来,认真听讲做笔记,尤其是前半学期的凸优化部分
助教:确实是很辛苦,
作业:作业题相比原版删去了不少难题,但几乎都是对讲义内容的进一步提问,可以深化理解,其实可以出得更多更难点
但非常喜欢举反例,hw6 ex2 一道题8小问举了7问反例,挺糟心的
作业题也不公布答案,只能去上习题课,但是难的证明题考试基本都没出现,影响不大,习题课去的话可以保证作业原题能背出来,
考试:期中基本没有原题,考察了求凸函数的偏导、凸性判断的常见方法这些的应用,还有若干挺有意思的证明题,基本放空
期末=作业题+计算题(但第二题后两问我还没读懂,可能挺难的?),背诵得熟练的童鞋们都提前交卷了
实验:1. 学了表格数据的读取和预处理,2. 按照 机器学习实战.pdf 实现相关算法的时候,对理解是有帮助的
给分:不错
总之,“ 这门课是中科大为数不多真的想让你弄懂一些东西的课 ”,这倒是。
希望我将来回顾这门课的时候,
还能够记得 \(f(\vec v)=sup\{\langle \vec x,\vec v\rangle,\vec x\in C\}\)是凸函数(此时\(\vec v\)是\(\vec x\)在集合C上的normal vector,但怎么证咧),
还能够记得集合上的点是沿凸函数的子梯度正方向上的点在这个集合上的投影,
还能够记得如何用lagrange对偶方法求Primal问题的几何意义~
可能最后再更新一波,有一个也许对不少同学很重要的问题也许一直都没有得到回答——我为什么要学习这些东西?
对于有部分数学积累或背景的同学,一个浅显的答案是大部分人数学不是很好,学这些东西能体现出自己的优越感;当我说我喜欢概率论,喜欢随机过程的时候,我喜欢的到底是什么,答案可能是过程简洁,推导灵活,但这些东西并没有用,
再多扯一点,以前学数竞的时候,那些人喜欢吹什么"为了人类心智的荣耀",但我觉得不要用你代表人类吧,当你看见食不果腹,当你看见没有你那样优越条件的人在生活线上苦苦挣扎的时候,你跟他们说虽然你什么都不能为他们做,但你是“为了人类心智的荣耀”,你觉得好笑吗
习题课上,我问刘助教,现在类似的方向里到处都是矩阵,那我是不是应该再去学一门矩阵论,刘助教的回答是这些东西没有用。
在未来的研究或者工作中,有用,是一个至关重要的标准,自私点讲,它决定着个人的收益,如果相比于你的竞争者你不能体现出你的有用,没有HR会优先雇佣你;另一方面,我们学习这些课程,也不应该只是为了自己的喜好,要学以致用,创造社会价值,反过来讲,当同学大佬们的工作能够创造出社会价值的时候,我们才能有更多的成就感和自豪感,进而激发我们前进的动力,相互促进。
这一点在科大尤为明显,相信科大的同学们,在学习大物实验、学习力学电磁学、光学原子物理或量子物理的时候,一定有这样的抱怨,如果一个东西对我的发展没有任何帮助,那我为什么要去学习;或者我学了很多东西,但收益甚微,我是否应该避免,我以为答案是肯定的
因为知识是学不完的
—— 避免学习那些没用的东西,学习的过程中一定要努力把这些东西用起来,产生价值,才不枉一任辛苦。
这个角度讲,刘助教大四的时候准备大数竞赛,后来去准备丘赛,或许也没有认真读相关论文或者扎实自己的代码能力来得实在。
鉴于此,王老师鼓励相关专业的同学们不要局限于算法岗,去做GPU,并且向我们展示了贵实验室的各个方向,但相关代码能力确实需要多锻炼hhh
作为21年秋季学期的选课学生,这门课的任务量是我整个学期的一半左右,但同时收获却大于我整个学期收获的一半。如果将来想要从事 AI 方向的研究,这门课是相当重要的一门课,因为可以学到很多机器学习非常底层的思想,就比如 SVM 的核心思想是为最大化间隔,以及可以使用 kernel 将 SVM 应用到非线性可分的情况下,再比如神经网络本质就是一个函数,将一个分布映射到另一个分布上,类似的思想还有很多,在这难以一一列举。(上述想法不一定完全正确哈,欢迎将来选课同学有更深理解之后来打我脸哈~)
还有一点值得提的是,对比阅读其他 AI 方向课程的 slides或 lectures,王老师的课程讲义准备得是相当用心,也是非常清晰易懂的。lectures上会将每一个定义和推导都写得非常详细,每一个 notation 也是经过反复推敲定下来的,就是为了让学生可以更加容易看懂。有什么疑问也可以和助教交流,助教都是非常 nice 的人,课程之外的一些问题也可以问哈~
我看楼上已经有对这门课程的详细介绍了,在此我就不赘述啦~
关于我上课的感受,这是我在科大听到的讲得最清晰的课之一,原因在于把每一个概念的定义和推导在黑板上推导得非常清晰,而非只是将结论放到 slides上然后让大家记住。其次是建议每次上课做好笔记,虽然课程 lectures会发到课程主页上,但课上王老师会讲很多 intuitive 的解释或理解,这些对理解深层次的意义是非常有帮助的。关于考试,期中考试当时感觉思维强度比较大,但平时对概念就有自己的思考其实也不会太难。期末出题就相对中规中矩一些,大部分只要上课听了认真复习了,基本都可以写出来。总的来说非常庆幸有机会上了机器学习这门课,在这门课上可以得到很多 insights,这些 insights 在我之后的科研当中也起到了相当重要的作用。俗话说工欲善其事必先利其器,那么这门课可以说就是教你如何使用机器学习当中的工具,以及为什么要有这样的工具产生,在产生过程中遇到了什么困难,以及最后是怎么解决的。这些 insights 对你之后发现新的工具也非常有帮助。
作为下学期的助教先来占个坑。我最近也有在准备下学期上课的 DQN lecture,准备过程中体会到了一个好的 lecture 应该是前后逻辑严密,notation 清晰易懂。我和另一位大神反复修改讲稿的逻辑和措辞,相信之前的师兄师姐也是如此。在之后的科研论文写作当中也应该注意逻辑和措辞。
来科大上过的最有收获的课程。
课程内容:今年课程主要讲了线性回归、逻辑回归、贝叶斯分类器、决策树、(简单的卷积)神经网络、支持向量机、主成分分析以及讲了一点强化学习的内容。王杰老师很注重原理的讲解和推导,备课很认真讲得也很透彻(常年在计科上那些老师念ppt的课给我搞怕了),上课来不及讲的内容会作为作业给大家思考。
作业/实验:作业量有亿点点大,除了第一次作业我用latex写的之外,其余的都是手写(因为latex太费时间了orz),每次作业时间差不多在5-10h,作业题一部分是老师上课没有证明完的内容,一部分是当节知识的应用,用于帮助理解课程内容,如果认真完成的话收获不会少,唯一的缺点就是由于每年的作业题目几乎一样,所以助教并不会公布答案,只会在习题课上对作业进行讲解。另外,作业每题都会有个小标题,不会的时候直接把标题作为关键词搜索还是可以很容易得到相关内容的。一共布置了七次作业,作业中有一共五个编程练习:线性回归、梯度下降法、逻辑回归、贝叶斯分类器、PCA。大作业是写一个多标签的分类器,只能说选对模型很重要,不然可能做很多的无用功。(顺便感谢跟我一起做大作业的两位hxd)
考试:讲过的内容全部都会涉及到,题目几乎都是作业题,题量很大,想要做完并且拿一个好一点的分数的话最好能够把一些证明直接背下来(不建议这样做,这除了拿一个好分数外没有更多的意义),作业题也要全部弄懂。
目前还没有出总评,可以预料到这是我大学分数最低的一门课程了(出分后来把这句话划掉),但好在收获巨大,无论是数学基础还是编程能力都提升很多,作为外院同学选这门课还是赚的。所以,如果你能分配充足的时间,又想对机器学习有一个入门级别的了解,选这个课就对了~
最后感谢zq学长,在这门课上给我很多帮助。
7.22出分更新:王杰奶王啊!我期末大爆炸,卷面应该是40%+,最后总评给了89,感动哭了!这优秀率肯定爆了,大家快来选啊www
//更新:这门课还贡献了本科生涯目前最舒服的一次组队经历。
大二下来选的,管统专业,过来贡献一个数据点jpg.
课程难度和收获大小前面两位学长已经说过了,确实是一门需要花时间但能学到很多的课程,上学期在家又比较摸鱼,这门课上花的时间感觉 约等于 实分析+ 复分析,主要是毫无编程基础刚开始配个环境都可以弄很久,latex也手生常常写作业一两天,码latex又是大半天过去了..
这学期一共八次作业,4个还是5个编程小题(包括线性回归,SGD,Naive bayes, SVD啥的),大作业是手写CNN + 实现DQN算法,详情课程主页上有。 写作业的感受确实有些题目需要花挺多时间才能弄出来,得自己额外看一些资料,同时作业的涉及面很广,从基础的微分,矩阵求导,期望的chebyshev不等式到很难的SVM推导都涵盖在里面,可以说一套做下来课程内容应该是会扎实很多。作业中确实会有些偏分析的题目,课程开始讲的一些 开闭集性质,凸集性质在数分b3里都有学过,算一点小小的优势。然后作业给分可以看得出助教每道题都是认真改的,会给细致的小分,没有标答,可以问助教或者参考往年答案。
关于考试: 备考时间大概一周半,主要是学期中学的有些没学懂复习(预习)花了挺久,考试内容基本上是每个主要部分出一道题,然后外加第一题10个判断对错(比较送分),难度的话和作业感觉相当,内容也有相当多是作业和讲义里面的常用技术和分析方法,建议考前务必熟练(重要的可以默写一下jpg. 如GD,SGD收敛推导,SVM推导,PAC计算,PCA计算等等..)
关于给分:个人作业分百分制大概 90/100, 也就班上中上水平..似乎还有两次分数在40% 以后orz..然后期末考试海星,大作业感觉有些拉胯调了一个星期的参还是没弄太好..看总评深感调分力度巨大给力 (王老师yyds ),总之这么课平常认真学考前复习好成绩应该是不成问题的。
一些其他感受:给9分是因为作业实在是有些多了..然后没有太多编程基础的同学来选这门课建议自己多和助教和班上同学交流(再次感谢两位和我一起做project 的bro). 一学期学下来收获肯定是很多的
----------------------分割线--------------------
为什么我发布后评课就只剩一半辽,又重新码了一遍orz...
在科大遇到的最硬核的一门课,王老师非常注重理论和原理的讲解,比如对SVM的推导讲得非常清晰,这门课硬核的地方在于作业,基本10道题中有9道数学证明题(可能略显夸张),像我这种菜鸡一次作业基本要做几天,我记得最慢的一次是,从早上起来开始做,到晚上十点才做完两题,基本时间都花费在用google搜答案和各种参考书上,还是全英文的。当然到最后也感觉自己的数理基础又提高了很多
接下来说说这门课的缺点(仅代表个人意见):
最后,提醒给各位学弟学妹,王老师是对学术要求非常高的老师,所以最好不要在群里问一些如,需不需要用latex,英文写作业,期末需不需要用英文作答等等这种非常上进的问题,问了之后王老师一定会满足你的要求(手动狗头),我们这届就是教训,(不过期末考试用英文作答好像没什么,因为平时作业就是用英文写的,hhh)
补充一下给分:平时作业+大作业+期末,本来还有两次小测,因为疫情也就没了,期末考试10道判断,9道大题,3小时,满分120,比平时作业要简单,我记得还有一题PCA推导送分,所以平时这些推导一定要自己过一遍,我期末卷面也就90多,平时作业也就中位数左右,最后给分感觉符合预期,至少优秀率应该基本给满了,所以大家不要怕担心拉gpa,想学到知识选这门课没毛病
硬核课程,2.5学分但远不止2.5学分,愿意花时间认真学的可以选。
关于课程内容:
这门课最硬的地方是优化理论,关于这方面别的评论已经介绍的很详细了。凸集分离定理这部分会涉及一些开集闭集的东西(信院好像没怎么讲过),不过愿意啃还是可以啃下来的。
课程后期难度骤减,深度学习部分主要难点在反向传播,但其实也就是链式法则,花时间理解一下公式(矩阵求导)也不是很难。强化学习只讲了两节课,大部分是介绍,没什么难度。
关于作业和考试:
一共八次作业,王老师给的作业每道题目前面都会说明这是什么问题,不会的网上搜一下一般也能搜到。所以作业认真做拿个高分应该不难。

比如这个就搜dual problem+sparse logistic regression。
3次quiz,前两次quiz题目配置有点问题,两道送分题+一道巨难的题(只有几个大佬能现场搞定)。quiz3倒是很简单,都是ppt里面的例子或者稍微变个型。
期末考试比quiz3稍难一点,但送分题也不少,比起前两次quiz的难度还是比较简单的。
可能是王老师经历quiz1quiz2之后发现高估了大家的水平所以开始放水。
关于大作业:
大作业比较硬。自己手写一个图片分类器,不允许用包。这需要自己check很多反向传播的细节,代码能跑了之后还要玄学调参,需要花不少时间(我们组从12月中旬开始搞,断断续续搞到1月初才搞完),但自己写下来了收获会很大,对coding的能力也是很大的提升。
关于给分:
给分还行,80分以上55%(调分前只有25%),目测优秀率30+%。
最后赞一下这门课的几个助教,都是王老师的学生,感觉助教之间关系很好,也都很负责。
这门课是目前人工智能班体验最佳的课!在这门课上第一次感受到什么是扎实的数理基础233333旁边数院选修同学上课看起来也没有很轻松。
和一般的以简单样例为主的机器学习入门课不同,王杰老师的课贯穿矩阵分析,概率统计,凸优化,泛函分析。使得一个在饱受离散数学三部曲折磨的人重新get到数学之美。对看paper帮助也很大。
收获是真的大,耗时也是真的多,堪比微积分,学期内基本一般学习的时间都在学这门课lol。一共七八次平时作业,平均每次作业至少花费一整个周末(还是到各地讲义上四处搜刮答案拼凑的)当然学期末的时候大家也基本都有以前作业蛮简单的感觉,说明可能真的入门了。
期末考试一共十个判断和九道大题。其中有一个要求证明在没有利普斯连续性的情况下证明凸函数的某个gradient descent的性质,考场上很懵逼。还有手动推到CNN反向传播的gradient(比较简单),VC-dim的证明(是一个矩形的很懵逼2333),PCA的计算,求解拉格朗日对偶问题,softSVM的证明(改变自作业题的hard margin SVM)。每一道题都不是很容易,期末满分120只有14个人及格....(个人觉得主要是大四同学,可能平时没有花什么时间学,期末速成也比较困难,所以考试比较惨淡,但其实没有那么夸张)
大作业是要求基于numpy写face verification system。直接调研一下state-of-art模型然后翻译成numpy就可以了。训练的时候比较困难(如果会cuda编程可能好写),可以用预训练的模型然后fine-tune
最后给分老师调分幅度还是蛮大的,基本相比学期初说的20%作业+20%project+20%小测+40%期末都抬了手
推荐MIT那本线代教材,里面一些基本的线性代数的东西对这门课最开始上道很有帮助。
总得来说这门课收获很大,很有国外一门课的感觉,老师付出也很多,助教相当负责(而且数理基础超级超级扎实发paper也相当nb!!!),在时间允许的情况下非常推荐~
唯一美中不足的是作业内容基本是上课没有证明完的东西,上完课本来就很懵逼然后写作业就更懵逼...如果能有一些补充材料会大大提高学习效率
凸优化好难啊,这个作业和lecture note里面gap好大啊,完全是面向stack exchange写作业。为什么感觉相比之下Boyd都不算很困难...
上课都是定义引理证明,对于我这种数理基础比较薄弱的同学感觉蛮枯燥. 相比于另外一门课 数字图像处理,这门课无聊太多了。
不过老师的想法是好的,cover的topic都应该是做机器学习必须掌握的内容。
----
update 1.14
我错了,王杰老师是神!这门课是神!虽然我没有去上课,但是课程内容是非常非常棒的!作业确实难度大,但是多讨论,多思考会有收获的!不要畏难而不选这个课!
下学期优化算法见!
先说结论:这是我这个学年,甚至是在科大本科三年感觉到收获最大的一门课。
关于课程内容:这应该是王杰老师第3次或者第4次开这门课,显然对于整个课程框架的设计要合理了许多。整个架构应该是参考了诸如CS229这样的国外优质机器学习课程。主要分为三个部分:
相较于往年学长学姐评价而言,应该是削减了不少凸优化的内容,而更关注于机器学习本身。我个人认为凸优化的知识在机器学习中是重要的,但不是最主要的。我认为只有少数同学今后会继续从事与优化和理论机器学习相关的工作,而更多人以后用到的是机器学习的general idea。如果在一门仅有2.5学分的机器学习课上过分强调凸优化而忽略一些基本模型的idea,我个人认为是不合适的,因此今年这样的课程体系改变是较为合理的。
关于作业:根据助教反馈的情况,这学期作业占比达到了40%。(当然也有可能是疫情回来大家考的都很菜提高了作业比例)。总共有8次小作业(一次10道题左右,要求LaTeX排版提交,我一般写一次作业要一整天比较菜2333)以及1次大作业(每年都会变,2-3人一组的coding和报告,今年是利用DQN打Atari游戏)。小作业难点在于数学,尤其是前几次作业中的一些关于closure,开闭集性质,projected gradient descent收敛性证明等等,对于数理基础不好的人很不友好,这种题我一般都是Google半天才能搞定。大作业的难点在于不能借助任何有autograd功能的深度学习框架复现paper,基本上就是用numpy写DQN from scratch。加上DQN这玩意本来也不是很稳定,调参调了不少时间(手动感谢大佬队友自己写了个autograd)。作业可以得到助教的小分反馈,有问题可以问助教,但是不会公布答案。
关于课堂:王老师课堂还是没话说的,在信院可能除了6系信息论以外很难看到有一门课的课堂能有这么扎实的推导。王老师课堂前期以板书为主,后期进入了NN,RL之后以PPT为主。讲的还是很清楚的,看得出来王老师本人对ML这些模型以及GD等优化方法理解的还是很深的。唯一遗憾的是由于疫情只能隔着屏幕上课,无法身临其境地感受。
关于考试:3个小时题量是真的大,但是这些题也确实没有故意刁难我们。120满分我大概光没写的就快20分了,还是疫情期间太浪了没好好复习2333。试卷基本上是一章一道题。第一题是一些概念的判断,然后是linear regression和对偶、logistic regression和对偶、某个变体SVM和对偶、PAC、CNN求导、PCA、value iteration还有Lipschitz连续下的收敛性(讲义都有)等等。
关于给分:我只想说王老师给分真的无敌了,我考这逼样都能满绩,这个给分是真滴香!
这门课贼硬,磕牙!!!
老师的作业贼多,但都布置得感觉很合理,属于那种一道题想10min,然后想通后会有那种茅塞顿开的感觉。但与之对应的作业量以及耗时就会非常惊人,基本上每周至少得去图书馆泡半天来看懂上课的ppt,再泡上一天去写作业。
上他的课不可谓不痛苦,但也是收获满满。
非必修的话,有胆色的可以去挑战一下。
加油!!!
首先,建议教务处将这门课学分提高至6到8学分,这门课讲的东西很多,但是因为时间太少,以及老师前边讲一些基础的东西速度稍显过慢,一些内容(比如pca)一节课就讲完了,这样显得在不同内容之间跳跃的跨度过大,频率过快。其次,老师在备课与讲义的整理方面确属一流。几位助教也都是好助教。作业量很大,而且由于不能迟交,导致即使很多题变成了选做,本人也经常临ddl而题没做,乃抚ipad而长嗟。所以选这门课请注意不要透支身体,合理安排时间。
给分挺好的。这作为一门导论性质的课,我觉得大二的学生就可以选了,如果精力充沛的话。
和诸位所说相同,课和作业都超难 好在考试不难,全部都是课件例题,每章都有,最后一章没怎么细看,考了原题没做上。 自己按照公式预估75给了83,肯定是调分了,总体来说收获是有的。
吹爆王杰老师,课程内容比较重视基础,有亿点点难不过给分超好(期末卷面炸了 + project用的naive Bayes = 85),适合数学基础扎实(雾)的童鞋学习
王杰老师水平超高,听说是人工智能领域首批6个优青之一,对待科研和教学都十分认真,经常在课上强调不要只是为了刷一个高分而学习(他在第一节课也强调了这门课不是为了难为学生的),要真正去思考、领悟,这样才能有所收获。(好像王老师回国之后在工业界,貌似是滴滴,也待过一段时间?)
助教之间关系好好啊2333333,好像都是王老师的学生。水平也超高,棒棒哒。
本课程用到的数学只有微积分(数学分析)、线性代数、概率论,很多非数院的大三同学觉得难可能是因为太久不用数学有些生疏了。所以我推荐大二的同学们来选这门课,趁着数学还没忘光赶紧来王老师的课上巩固提高一下,相信会有极大收获的!