作者:naiyan wang (weibo:@winsty homepage:http://winsty.net/)
小編: 本文是港科大博士@winsty 受小編之邀在博士畢業之際分享的一個個人總結。他的研究興趣是計算機視覺和數據挖掘,博士期間發表多篇高質量的論文。文中的問題和解答都出自winsty之手,作者非常真誠地分享了自己四年來的經驗和心得,是小編看過最干貨的求學經驗分享文章,非常值得推薦給大家。
說明:本文版權歸作者所有,如需轉載請聯系作者 @winsty (Email: winsty@gmail.com)
經常會有同學來問我關于PhD學習的問題,接著這個機會把這些零碎的問題都整理起來,也算是對四年PhD學習的一個交待。
問題一:什么是PhD?
相信很多同學在最開始入學時候的一個疑問就是,為什么我學的是XX專業,但是我最后的學位叫做哲學博士(Doctor of Philosophy)?這個誤解大多是源于對Philosophy的誤解。我很推崇在coursera課程Introduction to Philosophy的第一節課中的定義:Philosophy is the activity of working out the right way of thinking about things. 如果能正確理解這句話,那么PhD的意義就十分明了:習得專業知識只是PhD學習中的一部分,更重要的是面對一個未知的問題時,不慌不亂,梳理出問題的邏輯,并有一套科學的方法去分析。這也就是為什么經常會說贏家通吃的原因。這一點在下一個問題中具體展開講。在此,我也特別推薦兩門coursera的課程,我覺得可以作為每個PhD 101課程:Introduction to Philosophyhttps://www.coursera.org/learn/philosophy 和 Philosophy and the Sciencehttps://www.coursera.org/course/philsci
問題二:讀PhD期間應該習得最重要的能力是什么?
這里不談具體的技術,因為每個學科,甚至就算是CS下面的子領域,對于具體技術的需要也相距甚遠。但是一些共通的能力包括:
- 定義問題的能力:說得高大上一些,PhD的使命是開拓人類知識的荒野,所以只去解決一些已有問題并不是PhD全部的意義
說得接地氣一些,畢業之后的工作中,并不是每個問題都有明確的定義,可能我們拿到的只是一個定性描述的需求。那么我們需要:1)定義這個問題的輸入輸出; 2)定義預期結果和milestone 3)把定性描述的內容通過嚴謹定量的形式表述出來。 - 分析負面結果的能力:我十分厭惡的一點就是,在本科的各種實驗課中,實驗報告中只允許有成功和預期的結果,而不允許出現失敗的結果,并輔以足夠的分析。在這種模式下,大部分學生都喪失了分析負面結果的能力,往往遇到不如預期的結果就毫無頭緒,完全不知從何下手。而往往負面結果才是我們在research中最經常遇到的情況。通過合理假設、推理、實驗最終定位問題所在:究竟是我們對問題的setting假設就出錯了,還是數據質量不如意,還是我們在實現中出現了錯誤?這才是一個PhD應該做的。在CS的框架下,我們往往說的debug能力和動手能力正是這方面的一個很好例證。
- Presentation和English writing的能力:很多時候我們需要把research通過一個更容易讓人信服的形式展現給別人。這其中包括如何講一個引人入勝的story,如何展現清晰的思考邏輯,如何分配詳略和重點,如何運用語言等等。前兩點尤其重要。但也是很多中國學生最容易忽視的一點。在CMU時,聽說我導師做postdoc的時候,他的導師曾經建議他選修學校的drama課程,由此可見頂級的researcher對于這方面能力的要求。確實,讀過他的一些paper,尤其是introduction章節,給了我一種耳目一新的感覺。雖然我在PhD入學的第一年就被導師教育要重視這個方面的練習,不過直到畢業也沒達到一個比較滿意的程度。:( 這是一個需要長期培養的能力。
問題三:我到底要不要讀PhD,讀PhD一般的歷程是怎樣的,什么時候可以PhD畢業?
第一個問題回答起來其實非常簡單,借用本科導師張志華老師當年給我們說的一句話:“如果你還猶豫要不要讀PhD,那么你就不適合。” 決定讀PhD應該是非常自然的一個決定,應該是源于自己對未知的興趣,而絕不是迫于家庭期望或逃避找工作進入社會的現實。后者會在PhD四年或五年內過得十分痛苦。人生有限,為什么要在最美好的二十歲花費四五年的時間在自己不喜歡的事情上呢?如果你對這個問題的答案是不猶豫,那么恭喜你,你已經達到了王國維所說的人生三重境界的第一重:“昨夜西風凋碧樹。獨上高樓,望盡天涯路。”
PhD入學后,除了少數極優秀的同學可以很快找到自己的步伐之外,大多數同學都會經歷一個迷茫和低谷期:我應該具體嘗試什么樣的topic?為什么看別人的paper都覺得如此厲害?為什么我很努力地工作,但是看上去依舊毫無進展?同時生活上的各種壓力也會如期而至,比如在國外的同學會存在文化的差異,各種感情變故等等。這個期間可以短至幾個月,甚至也會長到兩三年。這基本上也是每個PhD都會經歷的過程。這個時候希望能回想一下當初來讀PhD的初衷,堅持下來,這本身就是一場歷練。不忘初心,方得始終。經過這些洗禮,那么你應該已經達到了第二重境界:“衣帶漸寬終不悔,為伊消得人憔悴。”
如果你一直在正確的道路上堅持,之前的努力一定不會白費。你會突然發現某一天,你可以很快點破一個新問題的insight,可以不卑不亢地點評一個paper的優缺點,可以輕松看出原來遙不可及的paper中的各種trick。恭喜你,此時發paper對于你肯定不會是一個問題,你可以PhD畢業了。此乃第三重境界:“眾里尋他千百度,暮然回首,那人正在燈火闌珊處。”
問題四:不同等級學校之間的差別在哪里?
首先說在PhD期間,導師的影響遠遠大于學校的影響。所以如果非得要在導師和學校兩者之間做出選擇的話,我會選擇導師。我分別在ZJU,HKUST和CMU三所學校求學。想必這三所學校在CS方面的平均科研實力大家都很清楚。我個人感受不同等級學校之間的差異在以下三點有所體現:
- 老師的自我要求和視野:這點不必多說,在ZJU大部分老師還在苦苦追求SCI的時候,HKUST的老師們大多還在想怎么讓自己的paper在頂級會議/期刊上接收,CMU每個老師想的是怎樣做有影響力的研究,怎樣做十年二十年后還會讓人記得的研究。
- 學生的主觀能動性:就像在第一個問題中提到的,在越好的學校,想主動做研究的學生就越多。工作刻苦程度自然不必多提,另外想想你周圍同學都在發NIPS/ICML的時候,你怎么好意思去把目標定在一些不入流的SCI期刊。
- 資源:僅舉一例,在CMU的時候,基本每周都會有來自世界各地的頂級researcher來給talk,而且學生大多會有一對一的交流時間,可以得到他們對正在進行項目的針對性指導。這樣的機會在其他學校可能幾個月甚至一年才會有一次。除此之外,在人脈方面的差距更不用多提。
問題五:什么樣的導師是一個好的導師?
首先學術能力,人脈關系這些硬條件不必多談。主要來說下對學生的指導和學生之間的關系。每個人的學習習慣不同,適合的導師風格自然也不同。有些人適合事無巨細的指導,有些人適合導師給予充分自由,只在關鍵時刻指點。其實這個問題的一個簡單回答是:好的導師在學生畢業后,學生還愿意繼續與之合作。有很多PhD畢業之后,就再完全不愿意和導師再打交道,把畢業視為一種解脫。這不得不說對于學生和導師兩人都是一種悲哀。僅舉一例,最近幾年我們組的PhD學生有一大半都是導師原來的學生推薦過來的。這也從側面印證了之前學生對導師的肯定。更不用說像CUHK湯曉鷗教授這樣可以把大多數得意弟子畢業后重新招回團隊中的。簡而言之,一個好的導師應該為學生發展著想,而不是把學生當作苦力: 這一點說起來容易,但是真正能做到的屈指可數。這其中包括:
- 把培養能力作為第一位,不著急追求短期目標:這里的能力不僅僅包括學術能力,也包括前面提到的presentation,writing能力等等。見識過太多導師對學生說畢業標準是XX篇paper或者今年內一定要投出去XX篇paper,而肯讓學生花時間踏實下來認真讀讀經典paper和書籍的基本沒見過。我十分慶幸本科時能遇到一個這樣為學生考慮的老板。
- 給予學生選擇的權利:一位好的導師不應該時時把自己的想法強加于學生,而是應該劃定一個大的范圍,尊重學生的個人選擇。這點尤其體現在對于research topic的選擇上。絕大部分PhD的悲劇都是源于不得不做一個自己完全沒有興趣的topic。
這里特別感謝我本科的導師張志華教授和PhD導師Dit-Yan Yeung教授。前者在本科階段引起了我對ML和CV的興趣,并給我打下了堅實的數學基礎。后者在四年的PhD學習期間培養了我嚴謹的科研習慣,更重要地是給予了我充分的自由,使我可以選擇我感興趣有熱情的topic來研究。能遇到這樣兩位優秀的導師是我職業生涯中最為幸運的事情。這里傳送一個前段時間對張老師的一個采訪和張老師自己寫的對于教學的看法:http://cos.name/2015/09/interview-of-zhangzhihua/http://bcmi.sjtu.edu.cn/~zhzhang/teaching.pdf
問題六:如何選擇合適的topic?
記得我四年前第一次見到PhD導師的時候,他跟我反復強調的一點就是找到一個好的topic,你的PhD就成功了一半。你可以花一年甚至更長的時間找一個可以作為PhD thesis的題目。當時還不是很能理解,直到現在再回頭去想這段話,才能明白其中的深刻意義。我覺得找到一個合適的topic要至少從以下兩個方面考慮:
- 興趣:當你在一個領域內見識得足夠多之后,那個始終讓你感到興奮的問題就是合適的方向!很多同學覺得做research沒意思,其實原因在于能接觸到的有意思問題實在有限。拓展視野,接觸更大世界的方法基本有三個:1) 到更好的學術機構,接觸更高水平的researcher:我在CMU的半年,三觀被顛覆了很多次。經常會發出感慨,這個事情居然還可以這樣做,我之前連想都沒敢想過。2)參與高水平的學術會議:在會議上,除了可以快速瀏覽到一個領域的top researcher的工作外,更重要的是可以和這些人面對面交流。很多自己平時難以理解的問題經過高水平的討論后都會變得清晰。3)跟蹤最新的學術論文:如果以上兩點都沒有機會,在學校里也可以努力完成這個目標。一個最好的資源平臺就是arxiv。如何快速閱讀大量paper在下面的問題里詳細再講。
- 個人的優勢和劣勢:除了興趣之外,選擇topic也要考慮一些個人背景和能力的限制。每個人最好能清楚認識自己在智商和能力上的優勢和劣勢。以我自己為例,我的優勢并不在大量數學證明推理上(并不是說數學不重要,相反十分重要),雖然如果有需要我也可以去做,但是在這方面比我更擅長,更有創造力的大有人在。我的優勢在于理解透一篇paper之后,可以快速講出insight,并清晰地和之前的工作進行類比,在直覺上定性地快速挖掘問題的本質。另外之前參加編程比賽的經歷也讓我在實現idea方面能夠更快更準。這使我更容易在偏應用的一些領域做出好工作。相反,一個數學系背景的同學可能優勢在于對公式的敏感,而coding需要花費他很多精力。這樣一些偏理論方面的研究就再合適不過。
選擇topic是整個PhD學習期間最重要的事情,沒有之一。然而這恰恰又是最personal的一件事情,沒有一個標準的流程。在做出最終決定之前,不妨多咨詢一些經驗人士的意見。
問題七:如何快速閱讀大量paper?
這應該是剛剛入門的同學最頭疼的一個問題。首先要說的一點是,并不是每篇paper都需要讀,也不是每篇paper都需要精讀。Not every paper is created equal. 我一般會看兩類paper:1)和自己在做的topic很相關; 2) paper的作者很出名,有質量保障。大部分paper我都會在10到15分鐘之內掃過idea,然后決定需不需要精讀。具體在讀paper的時候,要掌握一個點線面的關系(這里借用一些ML里manifold的說法可能會更傳神哈):
- 點:我們可以把每一篇paper看作一個點,讀完每篇paper,我們應該可以衡量出每個點質量和價值。
- 線:我們需要把每個點embed到整個領域發展的一條線或者manifold中,我們需要知道每個paper在整個領域中處于什么一個位置?這個paper是milestone級別的工作還是一個incremental的工作?是前人什么樣的工作啟發了這樣一篇paper?這個paper解決了這個領域中的什么問題?還有什么open的問題有待解決?
- 面:每個PhD可能只可以在一到兩條線上有比較深的理解,但是這不意味著就不需要求了解別的線。相反,我是十分反對做research只盯眼前topic這樣的做法,其實很多線是會交叉的。舉兩個我自己的例子:
- 我當初第一篇做tracking的paper就是發現當時所有的sparse tracker在在線更新模板的時候都采取了非常heurisitic的方法,沒有一個robust并且principled的辦法。而恰恰我一年前paper中的想法經過一些改動可以非常好地解決這個問題。
- 我PhD期間最滿意的一篇paper也是這樣。在那一個學期的組會上,組內著重討論的一個topic是crowdsourcing,看上去這與我手頭在做的tracking沒有任何聯系。我在實驗中發現不同tracker的結果差異非常大,那么一個直接的想法就是能否可以借鑒crowdsourcing的想法改進結果呢?不過現成的算法都不太適合tracking這個問題的性質,所以我把crowdsourcing擴展到了temporal structured data上。最終的paper無論在模型的優美程度,實現的通用性還是最終的性能上都比較讓我滿意。
當然在不是自己在做的線上,我們沒有必要sample太密的點,我們只需要:1. 精讀一些經典之作 2. 略讀一些paper的idea,知道這個paper做了什么事情,而具體怎么做的并不需要立即搞清楚。換句話說,在腦海中index了一下每一個領域的boundary。以后在有需要的時候,我們可以很快找到相關的paper再去精讀。
問題八:什么是好的research?
首先說,這是一個見仁見智的問題,和每個人背景尤其相關。例如一個常見的鄙視環就是做理論的會鄙視做應用的,覺得毫無新意。做應用的反而覺得做理論的大多證明了一些毫無意義的定理,都不work。首先,懂得尊重別人的research,對自己不懂的東西不亂發表意見是一種美德。其次任何一個research可以至少從方法的創新性和性能這兩方面劃分,所以我們會有四種劃分(為了方便表述,下面的好和差都是相對而言):
- 創新性低,性能差:這樣的research應該是每個人避免的,除了浪費自己和他人的寶貴時間,沒有任何意義。 可惜就算在頂級會議里這樣的工作還是不少。
- 創新性低,性能好:這也可以算作一個solid的work,尤其是可以講清楚為什么一些小的改動會提升性能,這些不起眼的trick往往包含著對問題本身的insight。工業界尤其歡迎這樣的工作。
- 創新性高,性能差:俗稱的“挖坑”的工作。這樣的工作包括提出一個全新的問題或者對一個已有問題的全新解法。這樣的工作雖然可能在文章中只提出了非常簡單的baseline,或性能并不能比過最好的已有方法,但是可以啟發大量后續的research。這是典型的學術界中的好工作。例如CVPR中的oral paper大多屬于這個類型。
- 創新性高,性能好:這樣的research自然是最好,不過大多數時候是可遇不可求的,往往需要“時勢造英雄”。
就算是同一個人,在不同階段對于什么是好的research的定義也會變化。例如我自己,在接觸research的初期會比較喜歡fancy的模型,然后逐漸強調一個工作的性能,對一切性能達不到state-of-the-art的統統不感興趣,再到現在能夠相對客觀地評價一個paper的優缺點,能從前面提到的第二類第三類的paper里分別汲取營養。我想這個過程也應該是PhD成長的必經經歷吧。
問題九:PhD期間在公司實習和外出訪問有沒有意義?
這其實取決于具體的實習類型和實習的公司,以及更重要的是畢業后的定位。在北美,基本每個PhD都會有至少一次的公司實習經歷。實習是一個很好的機會,它可以讓我們切換視角來重新審視自己的工作,并且認識很多同領域的小伙伴。我自己算是有三段這樣的經歷,都給我帶來了很大的收獲:
- 第一次是在大四的時候在MSRA。算在我research的啟蒙階段
- 第二次是PhD三年級的時候,在Baidu IDL參加Imagenet LSVRC比賽。
- 第三次是緊接著在IDL的實習,在CMU訪問半年。
最后兩次的感受尤其深刻,在這之前雖然也會號稱做一些CV,但是現在回想看看,其實非常邊緣。這半年多的經歷,可以讓我分別從工業界和學術界兩個角度明白真正做CV的人思考問題的方式和他們真正關注的核心問題。
總之,在導師允許的情況下,盡量多出去走走,換個環境走出自己的confortable zone,你會發現一個不一樣的世界。
問題十:PhD期間除了寫paper之外還有沒有一些別的有益的學術活動?
下面列舉兩個我參加過,而且感覺收獲很大的事情:
- 參加各種比賽: 比賽是一個以性能為導向的事情,所以參加比賽的目的并不在于創新方法,而在于:1)通過接觸更真實的數據,增強對問題的認識和理解:這一點在各種data mining比賽中感受尤其深刻。對數據和業務本身的認識理解遠遠重要于模型本身,傳送一個我在知乎上的回答:http://www.zhihu.com/question/24533374/answer/34631808 2)對已有paper去偽存真:這一點在我參加imagenet LSVRC 2014的比賽時感受尤其深刻。在參加這個比賽之前,我雖然讀過很多CNN相關的paper,但是并沒有真正動手跑過大規模實驗。在這個比賽過程中,我嘗試實現了很多之前的paper,結果正如所料,絕大多數并不work。但是極少數work的idea讓我對CNN這個結構本身得到了很多insight,直接指導了我后續的工作。繼續傳送一下一年多以前關于這個比賽的一個知乎回答:http://www.zhihu.com/question/24904450/answer/29418425
- 參加各種開源項目:相對而言,research code大多是小規模demo性質的。參與貢獻到一個真實世界中的codebase和獨自寫research code是完全不同的兩種體驗。十分有幸參與到了DMLC項目中,向各位大神學習了很多不可能在學校中習得的技術,這也是我PhD期間一段十分寶貴的經歷。繼續給DMLC和mxnet做個廣告:https://github.com/dmlc/mxnet
以上便是我對四年PhD學習的一些思考,更多像是對自己二十歲前半段的一個小結。讀PhD從來不是一件容易的事情,但也絕不會是一件時時痛苦的煎熬。不忘初心,方得始終,祝愿大家都玩得愉快 
聲明:本文是作者特邀文章,版權歸作者所有,如需轉載聯系作者 @winsty (Email: winsty@gmail.com)
閱讀記錄:read twice