《CS PhD Journey》Chapter 1 Fall 2017

版权声明:本文为博主原创文章,未经博主允许不得转载。博客主页:http://blog.csdn.net/u013390476 https://blog.csdn.net/u013390476/article/details/78879973

《CS PhD Journey》Chapter 1 — Fall 2017


前言

在开学之前,CS学院有一个orientation。在参加orientation的路上,发现自己被一群印度人包围了。这里印度人真多,CS学院80%以上的印度人。上午的orientation是MS和PhD一起,下午是MS和PhD分开。下午的时候,我看到了大部分的CS PhD,得知我这一届来自大陆的CS PhD有11个人,印度人(以及长得像印度人的巴基斯坦人等)加起来大概有二十来个,总共有四十多个人。在orientation上获取的重要数据:大概只有50%的CS PhD会最终毕业拿到doctor学位,大概有50%的CS PhD会更换最初分配的导师。

第二周开始上课,我选了三门课:CSE519 Data Sciences Fundamentals, CSE548 Analysis of Algorithms, CSE591 Topics in Computer Sciences (Smart Energy Computing)


CSE519 Data Science Fundamentals

Data Science (DS) 是非常火的一个方向,我也比较感兴趣,于是选了DS。老师是Steven Skiena,德高望重的一个老师。除了知道几个常见的机器学习(ML)算法之外,DS我几乎是零基础,这注定了这门课将会较为艰难。首先,我Python几乎不会,然而DS的作业和项目都要用Python。老师建议的编程环境是Jupyter Notebook,没有用过。还好这些东西上手都比较快。

总共有三次作业(20%),一个大Project(50%),期末考试(30%),额外奖励(10%)。

第一次作业是看DS项目视频,写感想。视频是Fall 2014 Data Science的学生做的大Project的录像,30分钟。通过看视频,大概了解DS的项目是怎么一回事了,学生遇到了什么问题,是怎么解决的。

第二次作业是Kaggle上的房地产项目。Kaggle给了一个三百万行、五十几列的CVS文件作为数据,一行就是一个房屋,一个房屋有五十几个特征(五十几列)。预测的房屋的价格和真实值的误差的对数。我按照作业的要求一步一步做,前面几个简单的问题一一解决,但是在deadline的前一天,最重要的问题(调用ML算法,得到结果,分析结果)还没有做,而且该如何做我还没有头绪。最后一天晚上,熬夜赶due。幸好抱上了大腿WZW,他是XX请来的外援。WZW给我提供了一些关键代码,最后涉险过关了。

第三次作业还是Kaggle上的房地产项目,在第二次作业的基础之上,增加了一些问题。这一次是团队合作。我找了XX和韩国妹子HNL三个人组队。由于这次作业的deadline和CSE548的第一次期中考试在同一天,我决定提前把我的部分做完,这样最后两天可以复习期中考试。我做的部分是设计distance function和clustering,其中前者是后者的重要组成部分。Distance function是计算两个房屋之间的距离,距离越小说明两个房屋越接近。聚类就是把相近的房屋聚成一类,标准就是自己设计的距离函数。

大Project是DS的重头戏。这个project分为三个部分:proposal report,progress report,final report。三个人合作:XX,HNL,我。我们通过GitHub管理代码,用overleaf在线写report。跨度从10月中旬到12月6日。Proposal阶段主要是选题:Do Popular Songs Endure? 预测一个歌曲在未来的流行程度。实际操作是:获取美国上个世纪60年代的歌曲的数据,预测它们现在的流行程度,预测值和现在的真实值是误差。结果发现我们选的这个题目,是最多人选择的题目(臭味相同),事后证明这也可能是最糟糕的题目。做这个项目的过程比较痛苦,方向和思路改了多次,一直在磕磕绊绊的艰难前行。整体而言,HNL和我的贡献相对较多,XX相对较少。HNL和我都能独立找到可以做的方向,然后按照自己的思路做下去。XX不是那么积极主动,大多数时间在等待HNL和我给她提供思路和方向,当然给她思路和方向之后,她是认认真真完成的。这个DS项目我最大的体会:数据是最重要的,也是最难的。我们这个项目从头到尾都比较艰难,其根本原因,在于难以找到合适而且足够多的数据。我们的结局是:数据少,而且数据质量一般般。这注定了我们的项目得分不高(跟我们选择一样题目的团队也应该不高)。我估计90%的时间都耗费在搞数据上面了。这个项目对于我而言,确实很难,但是我也同样收获巨大。通过这个项目,我基本上把DS的各个环节都打穿了。攒下了很多Python编程经验,较为熟练的掌握了一些核心Python包:Pandas,Numpy,sklearn,Matplotlib 等。可以独立写爬虫程序获取数据了。最后提一点,我的爬虫程序在Wikipedia上面爬数据,然而Wiki上面有一些数据缺失,这导致我有不少数据空缺。我在人工填补这些空缺的时候,为了达到更好的结果,有意的操作了一点点数据。

最后是期末考试,期末考试是从课本课后习题里面抽取题目。课本就是我们的老师Skiena自己编的。我意识到我们的Project无法拿到高分,于是把很多经历投入到刷额外奖励上面,为拿A/A-做最后一搏。额外奖励就是做课本课后习题,然后发到老师的网页上,给大家看。我负责刷第4和第10章的课后习题(学号%12+1 or +7)。我把很多精力放在4,10两章,其后果是其他章节的时间减少了。我最后由于时间有限,把线性代数这一章节跳过了,最后的考试就有一道线性代数的题目我一点也不会,其实如果稍微看看课本,把那一个章节的课后习题做一做的话,也不难。机器学习那一章节里面抽了一道SVM的题目,我也完全不会。线性代数和SVM的题目我把答案猜对了,但是没有过程。

这门课的成绩:三次作业分别为100,97,100;大Project三次report分别为85,85,88;期末考试为81。额外分数具体值不知道,但是它为我最后涉险拿A-有不少贡献。三次作业我都比平均值高了不少。大Project的前两次report我都略微低于中位数,最后的report我应该是约等于中位数。最后的期末考试我低于中位数87分,我没有想到这么多人考的这么好。最后我非常惊险的拿到了A-!这门课估计有略多于一半的人拿到了A-/A。这门DS过程很难,但是学到了很多,最后是一个美好结局。


CSE548 Analysis of Algorithms

我认为算法分析是计算机科班生最重要的一门课(机器学习第二,操作系统第三)。算法分析分为MS班和PhD班,我上的PhD班(不过也有AMS的硕士混入),这个学期的老师是Sekar。这个老师是搞system security的,他讲算法的风格是:非常抽象,不注重细节,注重算法的高层面的东西。算法课不需要写代码, 全部是算法的理论分析。分为5次作业,3次quiz,2次midterm,1个final。作业和quiz每个占3分,midterm每个占19分,final占38分。其中作业是两个人提交一份作业。前四次作业我和AMS的BF合作,然后他退课了,第五次作业我和CS PhD的P合作。

在第一次midterm之前,学了分而治之,基本的图论,贪心,和一点动态规划。这些内容我以前都会,所以感觉不难。老师花了很多时间讲分而治之,以前我看似“显然”的算法,我重新深入学习了一遍之后,有了全新的理解。特别是我推算出masters theorem公式以及很多应用之后,我对分而治之(以及递归)有了更为深入的认识。第一次quiz就没有发挥好,比如masters theorem公式居然就背错了。第一个midterm发挥正常,就是最后一题很难把矩阵和图论裹在一起,没搞明白。

第一和第二次midterm之间,学了动态规划,线性编程,最大流/二分图,随机算法,和平摊分析。这个部分是本学期最难的部分。这里好多内容以前我不会,而且这些东西本身如果要难起来,可以很难。不过,有时候越是难的东西,啃下来之后,收获也越大。动态规划花了我很多时间,算是弄明白它的精髓了(用状态转移方程来表达最优子问题之间的内在依赖关系)。在分摊分析和随机算法中,老师花了很多时间讲解哈希表。以前我觉得哈希表是一个很简单的东西,结果老师在把哈希表完全讲穿了之后,我才发现原来哈希表里面有这么多学问:用分摊分析来研究哈希表的放大和缩小,用随机算法来研究哈希表的冲突。第四次作业关于分摊算法和随机算法,是最难的。第二次quiz考了动态规划,图的最短路径的变形,最大流/二分图。第二次midterm比较难,最难的是一道cache eviction(随机算法)的题目,十几分完全不会。

第二次midterm和final之间,上课内容是字符串算法,NP问题。字符串主要就是McNaughton-Yamada算法从NFA直接构造DFA,KMP,AC自动机,用rolling hash作字符串匹配等等。老师快速覆盖了很多NP问题,但是都没有深入讨论。字符串算法是科班生必备算法。NP问题有助于了解计算机的基础理论层面的问题。第三次quiz考了KMP,trie,AC自动机,rolling hash。最后的final很难,5道大题中只有一道很简单的题目会做,一道关于矩阵和图的题目做了一大半,其他三道题目都不会做。其中一道是设计分而治之的算法,很遗憾没有想明白;一道是edit distance的变形,没有思路;一道应该是要应用布隆过滤器和动态规划来解决问题,很难不会。除了大题,前面的小题大部分都能做,小题里面考了很多关于NP的问题,出乎意料。

五次作业全部100分;三次quiz分别为71.4,100,71.4;两次midterm分别为79.8和65.2;final为47.2。其中作业和quiz都乘10处以7,midterm和final的卷面分都不是100,最后放缩到100分。五次作业有四次的中位数是100,还有一次是98.6。三次quiz的中位数分别为83.33,100,71.4。两次midterm的中位数是70.2和54.6。Final的中位数未知,我估算在30分出头。我最后的加权平均分是67.8分,拿了A-。 这门课最后只有16个人, 中位数分数应该低于60,我估算是58分。


CSE591 Topics in Computer Science (Smart Energy Computing)

选这个课的主要目的是避免选3个qualifier课程,那样子太累,精力不够。591老师是Zhenghua,不是qualifier,有很多AMS专业的上这门课,CS的倒是不多。这门课十分轻松,作业很少,而且没有考试,最后就做了两次作业,做了一个项目,而且这个项目要求较低,核心工作主要是队友作的,我没有花费太的的功夫。两次作业里面,有一个作业是著名的Netflix Prize,主要我们把程序跑一下有结果就行了,可以参考网上现成的代码,老师对我们的误差不做要求,主要是体验一下这个过程。老师最后分也很松,拿了A。


Teaching Assistant

第一个学期我是两个1/2 TA,CSE215 Foundations of Computer Science和CSE390 Probability and Statistics for Data Science,老师分别为Esmaili和Anshul。Anshul是我暂定的导师。CSE215有接近100人,有一个full TA和两个1/2 TA,full TA是HNL,另外一个1/2 TA是Luc。我负责1/4的学生,不到25人。这门课前后总共7次作业,3次quiz,2次midterm,1个final。这门课的作业很蛋疼,每次20道题左右,每次好多烦人的证明题和一些啰里八嗦的大题,改起来我很痛苦(学生做起来估计更痛苦)。老师还不给答案,搞的我花钱注册了Chegg,那里有答案。啰里八嗦的大题只要结果正确我就给满分,证明题只要做了我就给满分 ,不看过程。CSE390有五十来个人,有我1/2 TA和一个1/4 TA。1/4 TA是一个硕士,估计想赚一点外快。这门课轻松多了,总共6次作业,2次midterm。其中我负责4次作业,。由于三个人合作写一份作业,所以每次只有不到20份作业要改。每次作业只有大约5道大题,题目涉及很多概率和统计,对于我来说不简单,每道题我都需要花不少功夫研究怎么做,我也因此学了不少。我参考了一个学期这门课作业的答案。上一个学期这门课是一个研究生的课,这个学期是本科生的课。区别就是本科生的课删减了一部分内容和作业。TA的工资一开始是921.91刀每两周,十月中旬涨到940.91。


Advisor

目前暂定的导师是Anshul Gandhi,印度人,当时在申请的SOP里面写了三个教授,其中一个是Anshul。他的PhD是研究数据中心的性能分析的,后来研究分布式计算和云计算。大范围是系统,侧重于把理论应用到系统中。第一个学期做了他的CSE390的TA,发现他人很好。从第一个学期中间开始,他开始弄group meeting了:一个是自己的团队,一个是和Zhenghua的团队一起。我不用做报告,去听听就行了。如果不出意外的话,就跟他做研究了。他这个方向潜力和空间很大,而且不像机器学习那样子太火,竞争太激烈。


结语

第一个学期压力真是非常大,所有的环境都是新的,终究算是熬过来了,能做到的都做到了。从11月下旬感恩节开始,到12月18日考试完毕,这期间一直在按照个人极限模式运行。下个学期需要加强时间和情绪管理能力。好好锻炼身体,经常压力特别大,需要强大的抗压能力。我给下学期定了一个小目标:在零点之前睡觉。


注:这个回忆录是一个公开版本。和本人电脑里面的原始版本相比,内容有所删减。删除了只想自己看见的部分。

Last update: 2018/1/17

猜你喜欢

转载自blog.csdn.net/u013390476/article/details/78879973
PHD
cs1
今日推荐