《PhD Journey》Chapter 1 Fall 2017

《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。幸好抱上了大腿AWZW,他是ZXX請來的外援。AWZW給我提供了一些關鍵代碼,最後涉險過關了。

第三次作業還是Kaggle上的房地產項目,在第二次作業的基礎之上,增加了一些問題。這一次是團隊合作。我找了ZXX和韓國妹子THNL三個人組隊。由於這次作業的deadline和CSE548的第一次期中考試在同一天,我決定提前把我的部分做完,這樣最後兩天可以複習期中考試。我做的部分是設計distance function和clustering,其中前者是後者的重要組成部分。Distance function是計算兩個房屋之間的距離,距離越小說明兩個房屋越接近。聚類就是把相近的房屋聚成一類,標準就是自己設計的距離函數。

大Project是DS的重頭戲。這個project分爲三個部分:proposal report,progress report,final report。三個人合作:ZXX,LHNL,我。我們通過GitHub管理代碼,用overleaf在線寫report。跨度從10月中旬到12月6日。Proposal階段主要是選題:Do Popular Songs Endure? 預測一個歌曲在未來的流行程度。實際操作是:獲取美國上個世紀60年代的歌曲的數據,預測它們現在的流行程度,預測值和現在的真實值是誤差。結果發現我們選的這個題目,是最多人選擇的題目(臭味相同),事後證明這也可能是最糟糕的題目。做這個項目的過程比較痛苦,方向和思路改了多次,一直在磕磕絆絆的艱難前行。整體而言,LHNL和我的貢獻相對較多,ZXX相對較少。LHNL和我都能獨立找到可以做的方向,然後按照自己的思路做下去。ZXX不是那麼積極主動,大多數時間在等待LHNL和我給她提供思路和方向,當然給她思路和方向之後,她是認認真真完成的。這個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老師是Zhenhua Liu,不是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是LHNL,另外一個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道大題,題目涉及很多概率和統計,對於我來說不簡單,每道題我都需要花不少功夫研究怎麼做,我也因此學了不少。我參考了一個學期這門課作業的答案。上一個學期這門課是一個研究生的課,這個學期是本科生的課。區別就是本科生的課刪減了一部分內容和作業。


Advisor

目前暫定的導師是Anshul Gandhi,印度人,當時在申請的SOP裏面寫了三個教授,其中一個是Anshul。他的PhD是研究數據中心的性能分析的,後來研究分佈式計算和雲計算。大範圍是系統,側重於把理論應用到系統中。第一個學期做了他的CSE390的TA,發現他人很好。從第一個學期中間開始,他開始弄group meeting了:一個是自己的團隊,一個是和Zhenhua的團隊一起。我不用做報告,去聽聽就行了。如果不出意外的話,就跟他做研究了。他這個方向潛力和空間很大,而且不像機器學習那樣子太火,競爭太激烈。


結語

第一個學期壓力真是非常大,所有的環境都是新的,終究算是熬過來了,能做到的都做到了。從11月下旬感恩節開始,到12月18日考試完畢,這期間一直在按照個人極限模式運行。下個學期需要加強時間和情緒管理能力。好好鍛鍊身體,經常壓力特別大,需要強大的抗壓能力。我給下學期定了一個小目標:在零點之前睡覺。


Last update: 2020/6/11

喜歡或者覺得有幫助,記得點贊,收藏,甚至打賞喲~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章