SW Yao's

关于cmu选课

2018/11/23 Share

这个是从入学开始就一直想写的一个话题,网上关于CMU选课的讨论虽多,但都主要是system向的,所以我找了些值得一提的课,写一个data向的。内容整理完善后会发到知乎上(出乎我意料的是相当多人看过我的知乎呢,don’t be a stranger, leave a comment~),欢迎大家提意见。

先说点题外话,写这个有两个受众:1. 还在选grad school的同学 2. 在选课的同学。如果是在选校的同学, 一般我是建议来CMU,CMU不但有北美最大的SCS院,其中包括Computer Science Department (CSD), Institute for Software Research (ISR), Human-Computer Interaction Institute (HCII), Computational Biology Department, Language Technologies Institute (LTI), Machine Learning (ML), Robotics Institute (RI), SCS院之外还有Information Networking Institute (INI) (这是什么东西没有听说过哈哈哈哈哈), Department of Statistics, Department of Electrical and Computer Engineering (ECE), Heinz College等。无疑是做CS及其相关的最大生态圈了。选课自由度大的话,基本可以在CMU学到你想了解的任何知识。对于选课的同学,有些人问过我有什么水课推荐,这个时候我都不知道说啥,一方面我没有上过一门水课,另一方面要上水课来CMU干啥?学费比别的地方恨不得贵几倍。有一个流传盛广的myth说的是公司招聘不看你上过什么课,我不知道为啥会有人对这点深信不疑,正常人都愿意招个上了很多硬核课,真正杠过CMU的人,现在美国招聘也只有一两家是只看刷题的了。

10605 Machine Learning with Large Dataset. 这门是校友回学校招聘会特别重视的一门课 (另一门是Distributed Systems, 有好几个版本,很多校友会特别问是不是用Go的那个版本)。我上的是William Cohen教的,这个老哥说话只有一个调,一句话又说得比较长,就有点像催眠曲。我上的时候每次都坐第一二排,很奋力地想认真听完,结果每次都睡得很香。slides也是东拼西凑来的,经常缺上下文,一页乱七八糟放一大堆字这种。这门课主要讲传统ml算法的分布式版本和一些优化算法performance (memory, runtime efficiency)的技巧,通常是用一点点精度下降换大幅度的performance提升,是在业界非常实用的技能。这门课主要好在作业,还带着撸mapreduce, hadoop, spark. 虽然大家都觉得讲得烂,但毕竟内容重要,作业也不错,所以不得不上。

10701 Introduction to Machine Learning (phd version). 感觉phd version听起来挺酷炫,但实际上内容浅尝辄止。Barnabas, Ziv和William Cohen都是讲课烂得五十步笑百步的。这门课我Office Hour去得少,碰到的TA都不太行,听说也是有比较厉害的。讲下来这门课没有优点了,但10601又太浅了,所以大家还是没办法,只能上这门。

16720 Computer Vision (section B). 这门讲传统CV,是来CMU想做computer vision必上的一门 (传统或deep learning都适用)。因为End-to-end的Deep Learning是不能解决一切问题的,数据量不够大的时候训不出端到端网络,就得用很多传统CV方法,还有deep learning的不确定性和不可解释性的问题。另外,解决实际问题而不是学校里的toy dataset的时候,也需要搭一个图像处理pipeline,deep learning通常只是pipeline里面最后一环。section A和section B好像不太一样,按教授说法是section B进度快不少,作业也难,但听同学说区别不是很大。section B是Simon Lucey教的,这人简直是个rock star,对CV各个方向理解很深,主要是从数学角度,直达本质。他常说最好的研究 (CMU的研究哈哈哈) 不是在一个问题或者比赛上超过state of art一个点半个点,而是能定义问题,比如提出Deep Learning,提出GAN等。而且他喜欢数学上对算法的改进,说这种让算法order of magnitude faster的研究是真正有意义的. 作业也很棒,花的时间的多少取决于有没有相关经验,对机器学习公式的编程实现和python矩阵运算比较熟的不用花太多时间。这门课很好地结合了BC (before convolution)和AD (after deep-learning) (用他的说法)。有一次的作业从识别特征点的keypoint detector,写到用来match keypoint的feature descriptor,然后是计算Planar Homography的RANSAC robust版本,再写到把多张照片合成一张的全景图算法,最后实现一个把物体的三维模型投影在二维图像上的Augment reality,成就感爆炸!还有一次写用Lucas-Kanade的实时object tracking, moving-object detection. 另一次写利用两张图片做3D reconstruction。最近一次写的是handwritting recognition,输入是image of handwritting (如下图),输出就是一行一行的英文字符+数字。搭一个pipeline,先用blur + threshold + morphology等预处理图片,再按connected group of pixels分开成各个字符,识别出每个字符的bounding box (如下图),利用heuristic或者clustering算法分成不同行,到这一步之前没有任何deep learning, 全是传统CV. 最后把每个字符单独甩给deep learning识别,就得到输出了。炫到爆栈,而且实现是手写,而不是调opencv或sklearn的现成high level包的。感觉这门课是CV领域的15513.

16824 Visual Learning. 讲深度学习在CV领域的应用,重视网络架构方面。Abhinav Gupta教的,讲得也很不错,也可以算一个rock star,他和Simon Lucey的不同点在于,Simon是从数学角度理解CV,而他从信息的角度理解深度学习网络架构。比如一个action recognition需要时序信息,需要背景(context)信息,还有在做classification的时候是否需要各种low level的局部信息和high level的全局信息的结合,怎么根据需要的信息设计network architecture. 这门课作业倒没什么意思,从TensorFlow写到PyTorch,TensorFlow那次基本把所有人都写哭了,纷纷表示就算Jeff Dean拿刀逼着我也不再用TensorFlow了,这事惊动了Google Brain (不知道他们怎么知道的哈哈哈),赶紧联系了TA和Gupta问老师和学生们有没有意见反馈,他们很想听…

11785 Introduction to Deep Learning. Bhiksha Raj讲的,CMU的印度老师口音其实都不重,他讲得尤为清楚。他每学期好像都有个一两次会拿把玩具大宝剑去上课,并把那个大宝剑当教鞭来指屏幕….. 直接说作业吧,四次作业全是语音识别,因为Bhiksha就是做这个的。四次作业分别从不同角度beat同一个语音识别数据集,一开始从frame level用MLP做frame level classification,然后用CMU Sphinx提供language model和decoder的非端到端方式,再后面用比较新的CTCLoss和attention-based model端到端地解决这个问题。这门课作业量相当大,有一次作业checkpoint (一周)是就复现一篇内容相当多的论文的所有trick… 要知道我刚来CMU的那个学期和两个队友,三个人捯饬大半个学期,熬了不少夜,才复现了一篇难度更低的论文… 实际上deep learning里面,CNN网络实现起来难度很低,RNN就复杂不少,要实现attention-based encoder-decoder network再加上beam search decoder和ensembler真的就难上加难。而且这门课是没有上界的,没有什么标准答案,可以无止尽地加各种paper里面的trick来屠榜,或者用不同feature和参数组合做ensemble。实现完基本之后,要是感兴趣还可以优化GPU memory和runtime efficiency. 这门课好好撸过后实现上绝对不会再有任何问题。顺便一提,保守估计,我上的时候每周花30小时左右,算特别重的课了 (要想达到baseline就收工,那一周12小时都不用)。

15645 Database Systems. 最后提到这门是不想给一个错误的信息,让大家觉得弄data的人就不应该上system课。实际上CMU的system课经过时间打磨,一门比一门好,即使做data也该上一些。这门database systems重点不是写或者优化SQL的,而是讲怎么从头到尾造一个database system,教不少efficient的数据结构 (B+Tree等),对锁, concurrent transaction和logging讲得比Distributed systems里面细很多,收获很大。load也很有点大,用C++写的,虽然说珍爱生命远离C艹,但我不入地狱谁入地狱不是?

结束。

CATALOG