一名研究生的自我修養 - 張巖峯老師

今天瀏覽本科學院網站時,看到張巖峯老師博客中的幾篇文章,很有感悟,希望能記錄下來,以後再次學習,侵刪。

一名研究生的自我修養

一、如何學習

研究生階段是學習效率最高的階段。第一是因爲動機純粹,以前上學這麼多年大部分的學習動機只是爲了成績,這個學習動機其實會很大限制同學的主動學習意願,往往是被動學習,爲了成績而學習往往對提升自己能力並沒有那麼大的益處。而研究生階段的學習動機是爲了解決導師項目中的實際問題,它驅動你去主動去尋找答案,去網上搜去問同學老師,這就不同於爲了考試而學習那種低效的方式;第二是因爲研究生階段面臨着生存壓力,好多同學讀研只是因爲自己沒有準備好工作,那麼到了研究生階段,就會有就業壓力,驅使他去主動學習;第三是因爲學習方法更好,以前都是授課方式,研究生階段是項目驅動、問題驅動,這種方式更利於主動學習。

關於學習,大家學了這麼多年都很拿手,但是有幾個我認爲的關鍵,需要跟大家澄清:

第一、輕鬆的學習是無效的。

比如說要背一個單詞integrity,很多同學做法是,把單詞裏的字母逐一讀出來,大聲朗讀多遍integrity,integrity...,然後再把對應的中文釋義讀出來integrity,正直,而且只背第一個釋義。這樣背單詞的效率極爲低下,但很多同學沒有察覺。其實最好的記憶方法是找到詞根,拆解詞根記憶,in是沒有的意思,比如inhappy, inhuman, injustice, impossible。tegr是touch,接觸。連起來就是沒有接觸過的,相當於沒有受污染的,中文是出淤泥而不染。加上ity名詞後綴。就是名詞的正直,廉潔。也擴展到表示一個事物,完整。

或者讀論文,從頭讀到尾,在論文上畫了很多五顏六色的,然後把某些概念再抄一遍,講論文的時候也照着ppt念,其實你只是假裝努力,花了很多時間做了很多無用功。讀論文,應該是先第一讀懂問題,就是motivation,然後自己想我怎麼解決這個問題,想一會,然後看他怎麼做的,是不是比我做的好。不要重複他的話,要用自己話總結描述。認知心理學研究,人們在學習一個概念的時候,花費越多的心思,嘗試用自己的話語去重新演繹它,或者是嘗試理解這個概念在不同語境下的不同意義,就能越牢固地掌握這個概念。很多剛開始讀論文的同學最大的問題不是看不懂論文的貢獻,而是看不懂問題,需要大量背景知識在別人交給你答案前,先嚐試自己解決問題,哪怕在嘗試中會犯下一些錯誤。

第二、不要過於關注結果而忽視了成長的過程。

有兩種人學習的目的不同:第一種爲了證明自己的能力,第二種爲了學到新知識和技能。關注成績而忽視學習與成長讓人不敢冒險,而過於關注自己的形象,就會害怕別人說自己必須竭盡全力才能取得不錯的成果。哈佛和耶魯都不強調考試成績的重要性,因爲學校給大部分學生A,也就是說,只是在成績單上混一個全A並不是一件難事。爲什麼這兩所大學在成績的把控上如此寬鬆?並非它們不知道成績的重要性,而是要向學生們透露一個信息——你們的學業足夠優秀了,你們應該關注課程以外的東西。事實上,在耶魯大學,學生一半的時間都花在了課外活動中,因爲這些看似和考試無關的活動,培養了學生的各種優秀品質,比如拼搏精神、團隊精神、領導能力、社交能力、表達能力、全球視野和社會責任感。事實上,如果在哈佛和耶魯沒有學到這些內容,就失去了在那裏讀書的意義。我也走訪了很多中國的一流工科大學,發現學生把90%的時間都用在了學習和準備考試上。這樣固然可以得到很好的專業訓練,卻讓年輕人在一生中最寶貴的時間裏失去了培養優秀品質和綜合能力的機會。

第三、養成終身學習習慣。

有兩種思維模式,第一種是相信自己的才能是一成不變的——也就是固定型的思維模式——會使你急於一遍遍地證明自己的能力。如果你只擁有一般水平的智力和品德,以及普通的個性——那麼,你最好證明你自己能夠在這些方面達到正常水平,不能讓自己在這些基本的特徵方面看上去或者給人感覺不足。我們當中有些人從很小的時候就被訓練成這種思維模式。我小時候就非常關注自己是不是足夠聰明,在這種思維模式中,全班同學都有一個強烈的目標,就是要讓自己顯得聰明而不是愚蠢。在每次考試或者在課堂上被她叫起來回答問題時,我們整個人都可以說是處在成敗的緊要關頭,誰還會在乎和享受學習的內容呢?我見過的太多人都抱有這種要證實自己的強烈目標——在課堂上,在工作中,甚至在他們的個人關係中。每種時刻都需要他們對自己的智力、個性以及特徵進行證明。每一個時刻,他們都在接受評估:我會成功還是失敗?我看上去是聰明還是愚蠢?我是會被接受還是被拒絕?我看上去像是個成功者還是失敗者?所以你本來手裏只是一對K,非要顯得讓別人以爲你是倆王。

但是,世界上還存在另一種思維模式。在這種思維模式中,這些品質不是你非要打且不得不打的牌,你不需要總在擔心自己手裏只有對十的時候去說服大家和自己,你手裏的是一副同花順。在這種思維模式影響下,你需要打的牌不過是你成長的起始點。這種成長型思維模式建立在這樣一種理念上:你的基本能力是可以通過你的努力來培養的。即使人們在先天的才能和資質、興趣或者性情方面有着各種各樣的不同,每個人都可以通過努力和個人經歷來改變和成長。你可以看到,這種認爲“人的才能可以發展”的信念如何給人們帶來了學習的激情。當你有時間提升自己的時候,爲什麼要浪費時間一遍又一遍地去證明自己的傑出?爲什麼要掩飾自己的不足而不是去改變它們?爲什麼要找那些只能保護自己自尊心的人,而不是那些可以促進你成長的人作爲自己的朋友和搭檔?爲什麼要去找那些自己屢試不爽的事,而不是去選擇一些可以提高自己的事來做呢?即使是(或特別是)事情發展不順利時也能擁有這種想要提升自己並堅持不懈的激情,這就是擁有成長型思維模式的人身上的標誌。這種思維模式,讓人們在人生遭遇重大挑戰的時刻,依然可以茁壯成長。

二、如何科研

研究生階段三年,如果能完整走一遍科研流程的話,將有助於同學們從菜鳥進階爲一個小領域專家。下面分享下個人在指導研究生科研當中的經驗。

第一步. 調研、入門

1. 確定一個感興趣的大領域,比如分佈式系統或者機器學習,或者深度神經網絡。讀這個領域經典算法和技術,也可以是幾本比較好的書,讀完然後再實踐實踐,動手加深理解。這個過程做完就算是初步入門了。

2. 找該領域的頂級會議,比如系統領域的有OSDI、SOSP,機器學習的領域有ICML、CVPR,深度學習的有NIPS、ICLR等等,可以搜CCF會議推薦列表看各領域的頂會列表。然後看近幾年這些頂會的論文,因爲這代表了最新的研究熱點,咱不是說一味的追熱點啊,畢竟對於初學者沒有足夠的領域專業背景,追熱點是最快的方法。因爲熱點往往是該領域最亟待解決的問題,往往是發展最快的小方向,也最容易產生新成果。如果是老問題,人家都研究十幾年了,給你留下的待解決的問題就很少或者不是很重要。當然如果是有幾十年經驗的研究者就不必追熱點,他們知道該領域哪些是fundamental的問題,哪些是最值得研究的問題。

3. 讀了這些前沿論文後,確定一個小方向,比如分佈式系統是個大方向,小方向可能是機器學習分佈式訓練;大方向是深度學習,小方向可能就是graph embedding;大方向是機器學習,小方向可能是半監督學習等等。確定小方向的過程是個知識不斷積累的過程,非常重要,這需要你對大方向有很多瞭解,對小方向有更深入更全面的理解,需要讀好至少100篇以上論文,需要你知道該小方向的研究進展歷史,這需要你知道該小方向別人都在哪方面做工作,做該小方向的頂級研究組都有哪些,他們正在幹什麼。

第二步. 發現問題

這步超級難,如果發現了個好問題,那就是成功的一半。這個問題最好是重要的、本質的、沒有直觀解決方法的。

4. 確定小方向後,你需要閱讀大量的這個小方向的論文和了解開源項目,再不斷聚焦,再確定一個要改進和優化的小小方向,這個可能就是論文的主題。小小方向可能是機器學習分佈式系統中的parameter server通信模型,可能是dynamic graph embedding等。然後就要更聚焦地讀這方面的相關論文,這時候論文就比較少了,幾篇到幾十篇到幾百篇都有可能,這些論文要精讀,花幾個月時間研究一篇論文也不爲過。

5. 挑幾個重要的論文工作實現,也可以找開源的運行跑一跑試一試,idea往往從實際運行中來,光靠讀是不行的。這個跑一跑可能需要你嘗試不同的運行環境,不同的workload數據集,不同的應用場景等。比如,parameter server(PS)模型在本地集羣上跑是不是和paper聲明的一樣、在異構的動態性極強的集羣環境下效果怎麼樣、除了paper提到的算法處理其他算法的時候效果怎麼樣、除了paper提到的數據集換另外一類數據集怎麼樣;graph embedding方法處理密集圖和稀疏圖都怎麼樣,處理動態變化的圖怎麼樣,等等吧。你要發現X方法僅在a環境下好用,在b環境不好用。這個就是發現問題的過程。當然,沒經驗的研究者可能很難想到多種環境、多種workload、多種應用場景,這就需要積累。

另外一個發現問題的方法是從實際生產中來,這個當然是最好的,但是往往是大企業環境下才有這個條件。

6. 確定你發現的問題還沒有被解決。這又需要廣泛的閱讀和調研,但是問題已經很聚焦了,搜索也會很容易,用你特定問題的關鍵字在google 搜索(這裏強烈建議用google,其他搜索引擎基本搜不到),找到解決相關問題的論文。看看這些論文是不是已經解決了該問題,如果解決了,你有兩種方案:第一,該問題已經解決的非常好了,放棄解決該問題。第二,該問題的解決方案還有問題,我還有更好的辦法。我建議後者,最起碼儘量嘗試嘗試。

5和6步是個迭代的過程…

第三步. 分析問題

7. 分析問題產生的本質原因。這個往往和第5步發現問題同時進行。這一步靠的是功底和積累,靠的是對問題的理解程度。理解的越深刻,分析的越透測,你之後產生的解決思路就越有可能正確和有效。比如分佈式機器學習的PS模型在異構環境下、和在處理數據不均勻的情況下就不好,本質原因是其同步的集中式通信模型,造成PS集中服務器往往需要等待。傳統graph embedding方法採用批處理模式,需要graph的全局信息做embedding,當然無法應付動態性非常強的局部更新情況。

8. 基於分析,就是對該問題的深刻理解,產生改進的idea。這個可能很難,可能靠運氣,但我覺得更多的是靠對問題的理解程度,理解的越深刻,本質原因抓的越準,就越可能產生創新idea。讀過一本介紹google企業文化的書,google產品的成功,既不是靠技術能力,也不是靠用戶需求,而是靠技術洞見(insight),這就是對問題本質的深刻理解。比如,PS模型在某環境下問題的本質原因是集中式的同步模型,那麼我們就可以提出嘗試異步通信的模型的idea。

分析能力跟個人的批判性思維、獨立思考能力都有關,而這正是中國人欠缺的,可以通過讀有深刻見地的書籍文章、經常提問來鍛鍊。

第四步. 解決問題

9. 實現你的idea,做大量實驗驗證。這需要動手能力,需要編程能力,需要坐得住。

10. 驗證你的解決方案,根據實驗分析不斷優化你的方法。做了大量試驗後,得到了若干結果,可能是不好的結果,但是不要一下子否定自己的解決方案,這不能說明你的idea不好用。一個好的方法往往經過千錘百煉,同樣,你的idea通常不會一下子就成功。需要你根據實驗結果分析不好的原因,然後基於你的理解改進方法,這是一個反覆不斷迭代的過程。

比如,你發現異步PS模型效果還不如原來的呢。那麼關鍵的是,你要問自己爲什麼?爲什麼理應提升的卻沒有提升?你要看實驗運行的日誌,看看是哪裏慢了,差在哪裏,最後你經過不斷的實驗、分析、思考,你發現了,你提出的異步PS模型雖然沒有了等待開銷,但是計算的有效性卻降低了,結果整體性能反而下降了。那麼你下一次迭代就要想怎麼把這個計算有效性提上來。我又有了個方法,可以評估每次計算的有效性,然後把計算資源都投到有效性高的計算上。OK,idea不錯,那麼怎麼評估有效性呢?不能開銷太大,否則又得不償失了,你可能想到了一種近似地評估方法。重新實現後,發現效果還不錯。OK,恭喜你!你可以準備發論文了!

整個研究過程,導師將起到關鍵的作用導師可能會給你個問題,這是難能可貴的基本幫你做了一半的事了,否則你可能需要花上一年時間找問題。然後整個研究過程,都是在導師的引導下進行,需要定期嚮導師彙報,與導師討論idea和請導師分析實驗結果。最好自己也要經常找同門討論,而不是閉門造車。

第五步. 撰寫論文

11. 設計你的論文,草擬論文的骨架。每一章都寫啥,每一段都寫啥,實驗都做啥。論文的邏輯往往比語言重要的多,邏輯合理的論文更易讀懂,即使咱華人有天生的英語語言缺陷,但是好的邏輯就可以彌補這個不足。寫論文就和講故事一樣,怎麼能把一個事說明白,不那麼簡單,甚至說很難,需要不斷鍛鍊。寫完給老師看,老師同意後進行下一步

12. 寫作論文。這個就是根據骨架填肉的過程,但是這一步也不簡單,特別對於英語不好的同學,寫出來的東西簡直是不忍直視、不堪入目、毀人三觀。研究生沒有寫作經驗,但是要保證寫作態度,畢竟這不是一朝一夕能提高的,需要你不斷積累。

有幾個寫作的方法吧。第一,不要自己想當然,對於不確定的句型,用“”擴上上google搜,看看你這句型有多少人用過,如果沒有幾個人用,那就別用,換個寫法。第二,讀別人論文時,遇到好的句型就記下來,不斷積累才能提高。第三,避免一切語法錯誤,我覺得這個是可以做到的,現在網上那麼多工具都可以用。語法錯誤都避免不了那基本就是態度問題。遺憾的是,我很少遇到能避免語法錯誤的學生,我生氣往往是因爲態度問題,而不是能力問題。第四,儘量用短句用簡單句子,別用長句。你寫論文是爲了讓別人理解你的方法,不是寫文藝作品,能說明白就行。

13. 提煉總結,改進方法。寫作的過程也是屢順自己思路的過程,寫作的過程中往往也能發現自己方法的漏洞,那麼就要繼續回到8,重新思考解決方案,又或者你發現需要補實驗來支撐你的論點,那麼就繼續實現系統做實驗,得到實驗結果。

14. 關於實驗。怎麼做實驗是學生總問的問題,怎麼做科學實驗也是一個很重要的問題,有對照組、無偏的、定量的,這些都是科學實驗的重要要素。如果有解決該問題的其他方法你首先要說明你的方法更好,至少在某一方面更好,這其中可能要涉及到不同的執行環境,或不同的算法數據集。然後設計實驗說明你的方法好在哪裏,用實驗數據說明,比如異步PS和同步PS對比。然後你要進一步用實驗數據說明,異步PS的有效性也提高了,如果不考慮有效性的話那麼結果就不好。然後你的方法是否有些重要的超參數,試試variation導致各種結果。在實驗結果展示方面,要學會用各種工具畫各種圖,把重要的因素用可視化方式體現出來。

第六步. 投稿和看待審稿意見

15. 接下來就是投稿。選一個合適的會議或期刊投稿,這個可以聽老師的,老師基本有這方面的常識,根據你工作的方向和檔次選擇合適的去處。確定好了哪個會議期刊後,就需要按照會議期刊要求來整理論文格式,latex是必會的工具了。之後趕在deadline之前提交論文,這個最後的幾天可能很痛苦,因爲你的論文和方法總有改進的地方,老師的要求會讓你最後幾天是最忙的幾天。但是需要認識到,凡事無完美,你總也改不到完美,你需要一個deadline來督促你完成一個milestone。開始進一步工作或下一個工作。

16. 看待評審意見。接下來是漫長的等待,會議一般是2-3個月的時間,結果可能是接收也可能是拒掉,相比於結果,更應該看評審意見,看看這些意見是否合理,是否能解決,無論是接收還是拒絕,然後接下來就再次回到解決問題的部分,再次開始優化方法的過程。如果是接收了,那就可以準備訂機票開會旅遊去了。如果是拒掉那一般是有比較大的問題,那就再仔細深思下一下你的方法。繼續優化,還是降低檔次投個差點的會,就看你導師的了。

第七步. 後續

17. 宣傳你的工作,擴大影響力。首先你可能是要去參加會議,做個漂亮的ppt,反覆演練,爭取有比較好的演講效果。有時你導師有機會去一些地方做報告,把這個工作介紹一下,都是擴大影響力的方法。

18. 開放源碼。還有是儘量把自己工作的代碼和數據開放,掛到網上,讓別人來使用,接受別人的改進意見或者是簡單的debug。咱不是專業的工程人員,也不用指望你的成果可以馬上用於生產,個人覺得開放代碼主要是爲了讓別人更好滴了解你的方法,這有助於擴大影響力,產生後續研究工作。如果有人引用你的論文、或諮詢論文內容、又或是使用了你的代碼和數據,這也算是你對整個科研事業有那麼一丁點的貢獻了,這比水論文有意義多了。

整體來說,發表論文需要你有:批判思維能力,動手能力,知識面,寫作能力,表達能力,英語,韌勁(抗打擊能力)等等一系列能力如果在研究生期間真能發表一篇論文,經歷了以上這麼多磨難和鍛鍊,我想你的能力也是不知不覺提高了很多,成爲了該小小方向的一個小小的專家了。這對你來說,是最最重要的。

這裏我提到了韌勁,就是說,在解決問題過程中,你會受到不斷的打擊,包括來自導師的、來自自己的實驗結果方面的、來自評審意見的,但是你要做的就是,站起來,繼續鑿,直到導師滿意,直到reviewer滿意,直到大家滿意。別把這事想簡單了,當你想象一下週圍好多人都發好多sci了,而你還在爲這麼一篇完全未知結果的論文而這麼努力的時候,我覺得大部分人可能就是缺少這個韌勁才最終以失敗告終的…

最後,我想再強調一下,發論文不是簡單地發論文,而是通過發論文宣傳你的工作,以便對某技術或人有那麼一丁點影響。無論你發哪個檔次的論文,只要目標正確,我覺得你都會有收穫和有貢獻的。相比較於爲了發論文而發論文,你會覺得你是那麼地高尚和高大,他們只是造廢紙,而你已經對社會有貢獻了… 

三、未來職業規劃

幾年來帶研究生總結了一些經驗,思考了一下學生的職業發展,大部分碩士生入學時候都不清楚未來職業規劃,很多人浪費了大量時間精力,或者選錯了導師和方向,覺得有必要分享下我個人的一些小建議。

計算機碩士生畢業去向主要有四個方向:做科研繼續讀博、做技術去大廠、考公或事業單位、去傳統壟斷行業國企。這個未來規劃我覺得最好在本科生時候就想好,而不是在讀研過程中去嘗試某一個方向,這會浪費很多時間精力不說,如果選錯了導師和方向,還會很痛苦。但是基本上大部分學生都沒想好,本科光刷績點去了,不去讀書、不去嘗試各種路線、不知道思考未來,很多重要的事都沒想清楚,即使績點夠高保研了,結果也找不到合適的導師和方向,抓不住研究生階段的發展機遇,典型的短視。

導師和方向沒有最好的,只有最合適的。最好是能先想清楚自己想要什麼,什麼纔是最適合自己的。大學四年應該思考自己的定位和特長,這樣纔不至於在讀研階段太被動。下面我就每一個發展方向談談我的理解。

做科研繼續讀博。畢業後留高校或者去企業研究院、和研究所。這種職業選擇好處是工作比較自由,接觸的是技術前沿,有博士學位後無論是去企業還是高校都會有比較高的地位,更有機會做大事;壞處是讀博期間比較清貧,以後去高校的話相對於計算機行業平均薪資收入較低,讀博階段很苦。選擇讀博的話在研究生階段需要培養編程能力、某一領域的較深的認知積累、獨立思考、批判思維、寫作、表達的能力。適合找論文成果好的年輕導師或者有一定資源的大導師,年輕導師會給你精心指導寫論文甚至替你寫論文,大導師有平臺、團隊、人際資源等,有團隊的reputation,這些都有助於出好的成果。

作技術去大廠。好處是絕大多數人的主流選擇,薪水高,做實際東西;壞處是工作辛苦,有時候可能做自己不認同的項目,因爲畢竟就是打工人。去大廠要挑部門,最好去核心部門和團隊氛圍好的團隊,這樣工作會比較順心。研究生需要培養較強的編程能力、項目調試調優、獨立思考、一定的情商、溝通協作的能力。適合找有企業合作項目的導師,最好是與大廠的校企合作項目,參與項目積累經驗,比較容易提升技術能力。

考公或去事業單位。好處是對於一些不喜歡編程和搞技術的可以脫離技術了,主要處理和人的關係,社會地位較高,可以積累人脈資源,工作相對輕鬆,對於有野心的年輕人其實工作也不輕鬆;壞處是薪水較低,放棄了目前公認的最好的專業。研究生階段需要培養鍛鍊極高的情商和表達能力,寫作能力、溝通表達能力。適合找散養的導師,因爲這些能力導師基本教不了你,都得靠自己磨練。

去傳統壟斷行業國企。對於許多想躺平的人可能更喜歡這個選項,喫壟斷紅利,拿着不錯的薪水,還不累。但是我個人認爲這個並不太推薦,科技在發展,社會在進步,時代在變化,電話顛覆郵政、互聯網娛樂顛覆電視臺、微信顛覆移動,新技術顛覆壟斷的例子比比皆是,無論什麼壟斷行業都可能會被顛覆,現在微信擔心抖音搶流量、汽車擔心新能源車、傳統行業擔心人工智能,優秀的人永遠應該有危機意識,所以強烈不建議選擇躺平。

美好生活是奮鬥出來的,無論什麼職業,都有前途,但是養尊處優絕對沒有前途,努力提升自己,掌握不可或缺的能力,讓自己成爲不可或缺的人,纔是研究生最應該做的。

不可否認有些情況確實是選擇大於努力,但是選擇的難度要遠遠大於努力,不學習不思考怎麼能做出最好的選擇?相信越努力越幸運,把自己能做的做好,其他一切交給時間和命運,我覺得纔是正確的心態。

下面幾個point摘抄自吳軍老師的《大學之路》:

珍惜平臺:“如果讓我必須在那種由老師管着、選夠學分就能畢業的大學,和那種沒有教授、考試,讓年輕人在一起共同生活、互相學習三四年的大學中選擇一種,我將毫不猶豫地選擇後者……爲什麼呢?我是這樣想的:當許多聰明、求知慾強、富有同情心而又目光敏銳的年輕人聚到一起,即使沒有人教,他們也能互相學習。他們互相交流,瞭解到新的思想和看法,看到新鮮事物並且學會獨到的行爲判斷力。”

終身學習:“教育是一輩子的事情,我們不必擔心輸在起跑線上,因爲世界上大部分人跑到一半就不會再跑了,只要你在自我教育的道路上堅持得足夠久,就一定能夠成爲那個笑到最後的人。”“回過頭來看,一些過去比我們讀書更優秀、在起跑線上搶到了更好位置的人,早已放棄了人生的馬拉松;我們能夠跑得更遠,僅僅是因爲我們還在跑,僅此而巳。

事業心和使命感:“我希望我們的下一代能夠更多地考慮如何成爲更好的人、更有用的人,把教育看成是實現自己夢想的過程,而不只是爲了未來的生計而學習。

原文鏈接:http://faculty.neu.edu.cn/zhangyf/zh_CN/article/39663/content/1652.htm

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