人工智慧領軍人物:學霸陳天奇回憶--機器學習科研的十年

dicksonjyl560101發表於2019-07-19




十年前,MSRA的夏天,剛開始嘗試機器學習研究的我面對科研巨大的不確定性,感到最多的是困惑和迷茫。十年之後,即將跨出下一步的時候,未來依然是如此不確定,但是期待又更多了一些。這其中的變化也帶著這十年經歷的影子。

起始: 科研是什麼

我從大三開始進入交大APEX實驗室,有幸隨著戴文淵學長做機器學習,當時的我覺得“機器學習”這個名字十分高大上然後選擇了這個方向,但是做了一年之後依然摸不著頭腦,心中十分嚮往可以做科研,獨立寫論文的生活,卻總是不知道如何下手。文淵在我進實驗室的一年後去了百度。當時還沒有得到學長真傳的我,開始了我科研的第一階段,從大四到碩士的第二年,期間一直自己摸索,不斷地問自己 “科研是什麼”。

和課程作業不同,學術研究沒有具體的問題,具體的方法,具體的答案。文淵的離開讓我一下子不知道該怎麼做,當時的我的想法很簡單,快點尋找一個具體的方向,完成一篇論文。因為ACM班的機會暑假在MSRA的短暫實習,雖然學會了很多東西,但並沒有給我答案。MSRA回來之後,在實驗室薛老師的建議下,我選擇了一個現在看來正確而又錯誤的方向 -- 深度學習。那是AlexNet出現之前兩年,深度學習的主流熱點是非監督學習和限制玻爾茲曼機。沒有導師的指導,沒有工具,當時我靠著實驗室的兩塊顯示卡和自己寫的CUDA程式碼開始了死磕深度學習的兩年半。實驗室的學長問我,你準備要幹啥,我說:“我要用卷積RBM去提升ImageNet的分類效率。” 這一個回答開啟了圖書館和實驗室的無數個日日夜夜,為了給實驗室的老機器多帶一塊高功率的顯示卡,我們開啟了一臺機器的機箱,在外面多塞了一個外接電源。我的生活就持續在調參的迴圈中:視覺化權重的圖片, 看上去那麼有點像人臉,但是精度卻總是提不上來,再來一遍。從一開始hack顯示卡程式碼的興奮,到一年之後的焦慮,再到時不時在樹下踱步想如何加旋轉不變的模型的嘗試,在這個方向上,我花費了本科四年級到碩士一年半的所有時間,直到最後還是一無所獲。現在看來,當時的我犯了一個非常明顯的錯誤 -- 常見的科學研究要麼是問題驅動,比如“如何解決ImageNet分類問題”;要麼是方法驅動,如 “RBM可以用來幹什麼”。當時的我同時鎖死了要解決的問題和用來解決問題的方案,成功的可能性自然不高。如果我在多看一看當時整個領域的各種思路,比如Lecun在很早的時候就已經做end to end,或許結局會不那麼一樣吧。

當然沒有如果,賭上了兩年半的時間的我留下的只是何時能夠發表論文的緊張心情。焦慮的我開始打算換一個方向,因為RBM當時有一個比較經典的文章應用在了推薦系統上,我開始接觸推薦系統和kddcup。比較幸運的是,這一次我並沒有把RBM作為唯一的一個方法,而是更加廣泛地去看了推薦系統中的矩陣分解類的演算法,並且在實驗室搭建了一個比較泛用的矩陣分解系統。推薦系統方向的耕耘逐漸有了收穫,我們在兩年KDDCup11中獲得了不錯的成績。KDD12在北京,放棄了一個過年的時間,我完成了第一篇關於基於特徵的分散式矩陣分解論文,並且非常興奮地投到了KDD。四月底的時候,我們收到了KDD的提前拒搞通知 -- 論文連第一輪評審都沒有過。收到拒搞通知時候的我的心情無比沮喪,因為這是第一篇自己大部分獨立推動完成的文章。轉折在五月,KDDCup12 封榜,我們拿到了第一個track的冠軍,我依然還記得拿到KDDCup12冠軍的那一個瞬間,我在狀態裡面中二地打了excalibur,彷彿碩士期間的所有陰霾一掃而盡。那時候的我依然還不完全知道科研是什麼,但是隱隱之中覺得似乎可以繼續試試。

第零年: 可以做什麼

我對於科研看法的第一個轉折,在於我碩士臨近畢業的時候。李航老師來到我們實驗室給了關於機器學習和資訊檢索的報告,並且和我們座談。在報告的過程中,我異常興奮,甚至時不時地想要跳起來,因為發現我似乎已經知道如何可以解決這麼多有趣問題的方法,但是之前卻從來沒有想過自己可以做這些問題。聯絡了李航老師之後,在同一年的夏天,我有幸到香港跟隨李航和楊強老師實習。實驗室的不少學長們曾經去香港和楊強老師工作,他們回來之後都彷彿開了光似地在科研上面突飛猛進。去香港之後,我開始明白其中的原因 -- 研究視野。經過幾年的磨練,那時候的我或許已經知道如何去解決一個已有的問題,但是卻缺乏其他一些必要的技能 -- 如何選擇一個新穎的研究問題,如何在結果不盡人意的時候轉變方向尋找新的突破點,如何知道整個領域的問題之間的關係等等。“你香港回來以後升級了嘛。” -- 來自某大俠的評論。這也許是對於我三個月香港實習的最好概括的吧。香港實習結束的時候我收穫了第一篇正式的一作會議論文(在當年的ICML)。因為KDDCup的緣故,我認識了我現在博士導師Carlos的postdoc Danny,Danny把我推薦給了Carlos(UW)和Alex(CMU)。我在申請的時候幸運地拿到了UW和CMU的offer。在CMU visit的時候我見到了傳說中的大神學長李沐,他和我感嘆,現在正是大資料大火的時候,但是等到我們畢業的時候,不知道時代會是如何,不過又反過來說總可以去做更重要的東西。現在想起這段對話依然依然唏噓不已。我最後選擇了UW開始了我六年的博士生活。

感謝博士之前在APEX實驗室和香港的經歷,在博士開始的時候我似乎已經不再擔心自己可以做什麼了。

第一年: 意外可以收穫什麼

如果給我在UW的第一年一個主題的話,或許是“意外”。在交大時候因為興趣的關係一直去蹭系統生物研究員敖平老師的組會探討隨機過程和馬爾可夫鏈。到UW的第一個學期,我無意看到一篇探討如何用Lagevin過程做取樣的文章,我想這不就是之前組會上探討過的東西麼,原來這些方法也可以用到機器學習上。我直接借用了原來的交大學會的知識完成了第一篇高效取樣HMC的文章。我後來並沒有繼續在這個方向上面耕耘下去,不過另外一位同在組會的學弟繼續基於這個方向完成了他的博士論文。

同樣的在這一年,我和導師開始“質疑深度學習” -- 如果別的的機器學習模型,有足夠大的模型容量和資料,是否可以獲得和深度學習一樣的效果呢?當時Carlos看好kernel methods,而我因為過去的一些經歷決定嘗試Tree Boosting。雖然最後在vision領域依然被卷積網路打敗而嘗試挑戰失敗,但是為了挑戰這一假說而實現高效Tree boosting的系統經過小夥伴建議開源成為了後來的XGBoost。

在第一年暑假結束的時候,因為偶然的原因,我開始對quantile sketch演算法感興趣。這裡主要的問題是如何設計一個近似的可以合併的資料結構用來查詢quantile。這個方向有一個經典的方案GK-sketch的論文,但是隻能夠解決資料點沒有權重的情況。經過一兩天的推導,我在一次去爬山的路上終於把結論推廣到了有權重的情況。有趣的是新的證明比起原來的證明看起來簡單很多。這個結論沒有單獨發表,但是後來意想不到地被用到了分散式XGBoost演算法中,證明也收錄在了XGboost文章的附錄中。

研究並不是一朝一夕,做想做的事情把它做好,開始的時候興趣使然,而在幾年之後意想不到的地方獲得的收穫,這樣的感覺走非常不錯。

第二年和第三年: 選擇做什麼

在新生聚會上,Carlos對我說,你已經有論文的發表經歷了,接下來要靜下心來做發大的,“只做best paper水平的研究”。和很多nice的導師不同,Carlos對於學生的要求非常嚴格,說話也是非常直白甚至於“尖刻“。很多的老師不論我們提出什麼樣的想法,總會先肯定一番,而Carlos則會非常直接地提出質疑。一開始的時候會非常不習慣,感覺到信心受到了打擊,但是慢慢習慣之後開始習慣這樣風格。到現在看來,誠實的反饋的確是我收益最大的東西。我進入博士的一年之後,主要在想的問題是做什麼樣的問題,可以值得自己深入付出,做紮實有影響力的工作。

在博士的第三年,Carlos在建議我把XGBoost寫成論文,用他的話說:“寫一篇讓讀者可以學到東西的文章”。和傳統的寫法不同,我們在文章的每一個章節插入了實驗結果驗證當章節提出的觀點。而他對於做圖的處理也成為了我現在的習慣,直接在圖裡面插入箭頭註釋,減少讀者的閱讀負擔。經過幾次打磨論文終於成為了我們想要的模樣。

博士前對於深度學習遺憾讓我又逐漸把目光轉回到深度學習。這個時候,我選擇了不再一個人作戰,在博士的第二年和第三年,我和興趣使然的小夥伴們合作,一起開始了MXNet的專案。專案從零開始,在短短的一年時間裡面做出完整的架構。我第一次看到集合了大家的力量齊心協力可以創造出什麼樣的東西。研究的樂趣不光是發表論文,更多還是可以給別人帶來什麼,或者更加大膽地說 -- 如何一起改變世界。

博士第二年暑假,我在小夥伴的介紹下進入Google Brain跟隨Ian Goodfellow實習。當時GAN的論文剛剛發表,我也有幸在成為Ian的第一個實習生。實習的開始,我們討論需要做的問題,Ian和我把可能要做的專案畫在一個風險和回報的曲線上,讓我選擇。到最後我選擇了自己提出的一個課題,在這個曲線裡面風險最高,回報也最高。我一直有一個理想,希望可以構建一個終身學習的機器學習系統,並且解決其中可能出現的問題。這個理想過於模糊,但是我們想辦法拿出其中的一個可能小的目標 -- 知識遷移。如果一個機器學習系統要終生學習,那麼在不斷收集資料之後必然需要擴充模型的規模來學習更廣或者更深,按照現在的做法我們在模型改變之後只能拋棄原來的模型重新訓練,這顯然是不夠高效的。是否有一個方法可以從已經訓練好的網路上面進行知識遷移也就成為了一個重要的問題。我先花了一個半月的時間嘗試了比較顯然的Knowledge distillation的方法一直沒有得到正面的結果。在最後的一個月,我改變了思路。實習結束的前一個星期,我開啟Tensorborard上最近一組實驗的結果:實驗表明新的思路正面的效果。這最後幾步的幸運也讓我的這一個冒險之旅有了一個相對圓滿的結果。這篇論文最後被發表在了ICLR上,也是我最喜歡的結果之一。

博士的第三年,我和小夥伴們開發了一種可以用低於線性複雜度就可以訓練更深模型的記憶體最佳化演算法。當時我非常興奮地把這一結果寫下來然後把稿子後給導師看。他和我說:Hmm,這個結果如果投到NeurIPS的話或許可以中一篇poster,但是這並不是特別有意思。在我沉默之後他又補充了一句:論文並非越多越好,相反你可能要嘗試最佳化你的論文裡面最低質量的那一篇。最後我們只是把這篇論文掛在了Arxiv上。Carlos的說法或許比較極端(這篇論文依然影響了不少後面的工作),但也的確是對的,用李沐之前說過的一句話概括,保證每一篇論文的質量接近單調提升,已經是一件難以做到但是又值得最求的事情。

選擇做什麼眼光和做出好結果的能力一樣重要,眼界決定了工作影響力的上界,能力決定了到底是否到達那個上界。交大時敖平老師曾經和我說過,一個人做一件簡單的事情和困難的事情其實是要花費一樣多的時間。因為即使再簡單的問題也有很多瑣碎的地方。要想拿到一些東西,就必然意味著要放棄一些其他東西,既然如此,為什麼不一直選擇跳出舒適區,選一個最讓自己興奮的問題呢。

第四年之後: 堅持做什麼

博士第三年,我和小夥伴們參加GTC,結束後老黃party的角落裡,我一個人在發呆。深度學習的框架發展已經鋪開,可接下來應該做什麼,我一下子感到迷茫。第三年的暑假我沒有去實習,而是決定一個人在學校嘗試開發腦海中顯現的抽象概念 -- 深度學習中間表示。暑假結束之後,我完成了第一個版本,可以比較靈活地支援深度學習系統裡面的計算圖記憶體最佳化。但是總是覺得還缺少著什麼 -- 系統的瓶頸依然在更接近底層的運算元實現上。暑假之後在去加州的飛機上,我嘗試在紙上畫出為了最佳化矩陣乘法可能的迴圈變換,回來之後,我們決定推動一個更加大膽的專案 -- 嘗試用自動編譯生成的方式最佳化機器學習的底層程式碼。

這個專案早在之前我也有一些想法,但是一直沒有敢去吃這個螃蟹。原因是它的兩個特點:從零開始,橫跨多領域。因為要做底層程式碼生成和想要支援新的硬體,我們需要重新重新搞清楚很多在之前被現有的作業系統和驅動隱藏掉的問題,這就好象是在一個荒島上一無所有重新搭建起一個城堡一樣。而這裡面也涉及了系統,程式語言,體系結構和機器學習等領域。這讓我想起之前在ACM班時候重頭搭建編譯器和MIPS處理器並且連線起來的經歷。也是那段經歷讓我覺得為了解決問題去吃多個領域的螃蟹是個讓人興奮的事情。那段經歷給我留下的第二個印記是理解了合作和傳承的重要性。這門課程設計有一個傳統,每一門課程的老師都由上一屆學長擔任。每一屆的同學都會在之前的基礎上有所改進。我也曾經為這門課做過一些微小的貢獻。演化到現在,這門課程已經從只做簡單的答辯,到現在已經有線上評測的OJ。大家一起的合作塑造了這個課程。推動新的機器學習系統和塑造這門課程一行,需要各個團隊的同學合作,足夠時間的耐心關注和不斷地改進。

我的合作者們也被“捲入”到了這個專案中。我的體系結構合作者一直想要設計新的AI硬體,我在雛形完成之後花了大量的時間討論如何協同設計新的硬體的問題。我們開始討論怎麼管理片上記憶體,怎麼可以比較容易地生成指令集,甚至怎麼排程記憶體讀寫和計算並行的問題都暴露出來。有一天,我和合作者說我們需要引入虛擬執行緒的概念來隱藏記憶體讀寫開銷,然後他很快和我說,這是體系結構裡面經典的超執行緒技術,發明人正是我們的系主任Hank。我們也在不斷地重新發現經典的問題的解決方法在新場景的應用,讓我覺得上了一堂最好的體系結構課程。

兩年間的不少關鍵技術問題的突破都是在有趣的時候發生的。我在排隊參觀西雅圖藝術博物館的infinity mirror展覽的途中把加速器記憶體複製支援的第一個方案寫在了一張星巴克的餐巾紙上。到後來是程式語言方向的同學們也繼續參與進來。我們爭論最多的是如何如何平衡函式式語言和經典計算圖做讓大家都可以搞懂的中間表達,這一討論還在不斷繼續。經過大家的努力,TVM的第一篇論文在專案開始的兩年之後終於發表。兩年間參與專案的同學也從兩個人,到一個團隊,再到一個新的lab和一個社群,這兩年也是我博士期間最充實的兩年。

因為做了不少“跨界”的工作,我常被問起你到底屬於哪個領域。過去半年一直在各地給報告,報告這樣開頭:演算法突破,資料的爆發,計算硬體的提升三者支撐了機器學習的變革,而整合這三者的,則是機器學習系統。這也是為什麼我要做機器學習系統的原因。曾經一個教授問我這樣的問題,如果明天有一樣新的化學反應過程可能帶來機器學習的變革,你會怎麼做。我答道:“我投入會去學習研究這個化學過程”。雖然我不知道遙遠的未來會需要什麼,到底是系統,演算法,還是化學,從問題出發,用盡所有可能的方法去最好地解決機器學習問題,應該這就是我想要堅持的研究風格吧。

總結

在寫這篇總結的時候,心中有不少感嘆。我常想,如果我在焦慮死磕深度學習的時候我多開竅一些會發生什麼,如果我並沒有在實習結束的時候完成當時的實驗,又會是什麼。但現在看來,很多困難和無助都是隨機的漲落的一部分,付出足夠多的時間和耐心,隨機過程總會收斂到和付出相對的穩態。

每個人的研究道路都各不相同,我的經歷應該也是千萬條道路中其中一條罷了。博士的經歷就好像是用五年多時間作為籌碼投資給自己,去突破自己做自己原來想不到的事情。中不管坎坷曲折都是無可替代的一部分。

科研從來不是一個人的事情,對於我來說特別是如此。我在交大的時候和一群年輕的同學一起摸索推薦系統的演算法,而在博士期間搭建的每一個系統都包含了很多合作者一起的努力。也正是大家一起的努力才帶來了現在的成果。我個人在這十年間受到了不少老師,同學,家人的鼓勵和幫助,感謝他們他們給予了我這無比珍貴的十年時光。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2651103/,如需轉載,請註明出處,否則將追究法律責任。

相關文章