本科生搞AI在線崩潰:3個月才跑通GitHub模型,太難了吧
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
“機器學習,太難了!”
“3個月才跑通GitHub模型代碼,要崩潰了!”
“還要跟博士生開會,怕了!”
發出如此絕望聲音的,正是一名在讀本科生,起初興致勃勃參與了機器學習興趣小組。
但誰曾想到,卻演變成了一入ML深似海,從此半點不由人的這般境遇。
在Reddit上的一通“吐槽”,引來了網友們的高度關注。

很好奇。
一個本科生,觸及了大主流的機器學習,具體發生了怎樣頭禿的事情?
為什么ML會讓這位本科生如此痛苦?
這段“痛苦”的故事,是這樣的。
一開始,這位本科生同學自告奮勇地參加了一個“機器學習小組”,而后被分配去協助一位博士生的工作。
從去年9月份開始,這位博士生就給他布置了一些與“知識圖譜”相關的任務,并讓他去實現。
問題從這里就開始出現了。
這位本科生,花了整整3個月的時間,才讓GitHub上一些模型的代碼跑通。
不僅如此,自己還苦訴道:
在此之前,我還花了無數個小時去搞懂預處理和評估相關的代碼。
結果如何呢?
我現在還是搞不懂如何讓這些ML代碼跑起來!
本就很是苦惱,沒想到讓他更加崩潰的事情,來得如此猝不及防。
博士生給他提了個“更上一層樓”的要求——讓他從一篇論文中,找到了另一個實現類似功能的GitHub repo。
于是,這位本科生便把現有的代碼插了進去……結果可想而知,一團糟。
原地爆炸!
我把每一個步驟都做了一遍,但就是想不明白問題出在了哪里。
Hold不住了,“再也做不下去了”……
他現在每周與博士見面都會感到恐懼,“因為我知道再也沒有進展可以匯報了”。
但是痛定思痛,作為本科生的他,便在Reddit上發出了一個“靈魂拷問”:
機器學習代碼本來就這么難嗎?
是我腦袋有什么問題嗎?
你們又是怎么做到的呀?
問題出在了哪里?
“用了一周時間,卻連一個問題都沒解決,根本沒有進展可以匯報?”
網友@santiagobmx1993 提出了一種解決方法。根據實驗期限,這位本科生可以迅速定下遇到問題的解決時間,如果完不成,就去尋求同級、上一級的幫助,快速提升效率。
例如,如果自己花了1天時間未能完成,就再花5小時找同級本科生一起解決,如果依舊不行,再試著花上2小時找博士生、導師梳理。
“我一直在重復操作步驟,卻想不明白問題出在哪里?”
網友@help-me-grow 認為,在科研實驗中,一定要尋求幫助。有時候自己看不出來的問題,有經驗的人一看就能發現。
網友@linverlan作為博士生,也認為溝通非常重要。于他而言,幫助本科生助理完成代碼調試、解決困難,或是換份更有興趣的工作,都是可以通過溝通實現的。

“被分配到了完全不在研究范圍內的任務,比其他人落后了一大截?”
網友@starfries 表示,這位本科生或許也需要找準自己擅長的任務,做起來才有成就感。否則如果給本科生分配博士才能完成的任務,那自然會很困難。
“我的代碼能通過編譯,但一運行起來就出錯?”
網友@todeedee則提出了基礎技能:學習做模塊測試(unit test)。
將機器學習模型分解成數據收集代碼、網絡代碼和訓練代碼幾部分,并進一步將代碼拆分成5~25行的小模塊,分別進行調試,有助于盡快找出問題所在。
“給我的一些代碼,我真的沒辦法看懂,這是我的問題嗎?”
網友@milkteaoppa 認為,代碼運行不起來,也可能是因為隨便搞來的代碼質量非常差,理解起來也同樣困難。
如果只是希望運行機器學習代碼的話,學會識別低質量代碼、并與博士生溝通改進代碼質量,都是有必要的。

“身為本科生,調試代碼沒問題,但卻完全沒辦法調試機器學習的代碼?”
網友@TachyonGun 認為,對本科生來說,機器學習代碼確實困難,因為得掌握許多必要知識,例如數學。而在代碼調試時,會出現許多數值問題,例如奇異矩陣、數值穩定性……
因此,想運行機器學習代碼,必須先學會數學知識(數值分析、應用線性代數、數學建模、概率論/高級統計學)、以及熟練掌握方法(數值和可視化方法)。

事實上,對于這位本科生遇到的困難,對于搞科研的網友們來說,同樣感同身受:
辛辛苦苦做實驗一個月卻匯報不出任何進展,被導師無情吐槽;
想要復現一篇論文的代碼,結果光是解決“代碼出錯、編譯出錯、環境代碼不兼容”等問題,就耗費了大量時間……

但也正是如此,他們積攢了對應的經驗,幫助這位本科生找到合適的解決辦法。
“感謝大家的幫助”
在網友們的幫助下,這位本科生也冷靜了下來,并仔細歸納了網友們給出的建議。
他找出了自己崩潰的原因:缺乏與那位博士生和其他研究者的溝通,不了解項目應該如何進行;此外,也的確缺乏對機器學習模型和參數設置的理論基礎知識。

當然,他也意識到,交到自己手里的那些代碼,的確質量不高:不僅難以閱讀,而且各個模塊非常破碎,很難整合到一起。
他現在決定,去找那位博士生溝通一下,坦白自己遇到的問題。
……
不過話說回來,作為一名本科生,無論是做畢設還是進實驗室,或多或少的都會有這位“發帖者”遇到的困惑。
是否存在快速上手、入道的方法呢?
清華特獎本科生的秘訣
其實,同是本科生,也有同學已經手握四篇論文。
這是清華特獎得主高天宇的真實經歷,而發表的4篇論文,均在AI頂會上:兩篇AAAI,兩篇EMNLP。
對于這些科研成果,他同樣有話說,不過都是實打實的干貨分享。
例如,讓這位本科生崩潰的、很多人同樣難以啟齒的“拖延壓力”,高天宇就給出了緩解辦法:
經常高負荷做實驗的同學,在忙碌的時候可以切換一下任務,平時也可以記錄日常工作,緩解自己拖延工作造成的心理壓力。
另外,還有一條看似違反常理的建議,那就是把事情推到明天,這不是鼓勵拖延,而是讓你從一天的忙碌中跳出思維定式,也許明天會有更好的解決方案。
以及,高天宇也同樣建議,要多與導師、學長學姐進行溝通:
他們對過往研究更了解,也在實驗中擁有更豐富的經驗,能防止你走很多彎路。
當然,如果想要加強自己機器學習的基礎理論,高天宇也給出了快速讀論文的方法:

大部分論文只需要看摘要,然后快速分類。如果確實覺得有幫助,再按下面的結構進行分析。
- 摘要:研究意義(包括前人研究、研究的缺陷),研究方法,研究結果
- 簡介:很多大道理(解決了什么問題)
- 相關工作:文獻綜述
- 方法:細節
- 實驗:打臉專用(論文試金石)
- 結論:基本沒用(重復摘要)
文獻管理工具也是有必要的:

Nature:成為“本科研究員”的三個步驟
除了高天宇的個人“秘訣”之外,Nature也曾發表過與“本科生做科研”相關的文章。

Nature在文中指出,本科生參與科研項目,在頂尖大學是一個普遍的現象。
更具體一些,例如在MIT,這一比例就超過了90%。
從在課堂上課,到實驗室的生活,確實是一個巨大的轉變。
對此,Nature認為在這種轉變過程中個,通常會經歷三個階段 (并不適用于每個人)。
第一個階段是“在不理解的情況下做科研”。
對于初來乍到的本科生而言,要做什么事情肯定是頭等的問題。
以及正在做著某項實驗,對于其背后的原因、本質,或許還不是特別清楚。

第二個階段是“在理解的基礎上做科研”。
Nature表示,以此狀態搞科研的學生,是實驗室往往想要留住的人才。
他們在實驗室之外,會投入更多時間和經歷,去觀察實驗所存在的局限性。這將有助于培養參與團隊的意識。
第三個階段是“學生研究員(student research)”。
這個階段的學生,就會像研究員一樣進行思考:制定新的問題和假設、計劃新的實驗來測試等等。
Nature認為,這一階段的學生對于實驗室的貢獻是最大的。

除此之外,Nature進一步還提出了一些細節的建議,例如時間管理方面,做研究和休息時間要得當、要做到批判性閱讀、要有保存記錄的習慣等等。
……
最后,作為正在經歷或者過來者,你是否也遇到過什么類似的問題?