我在斯坦福做科研的碎碎念
文 | Jazon
編 | 小軼
大家好,我是 Jazon。作為 AI 科研工作者,我們的目光不該只聚焦在開發(fā)新技術(shù)、刷榜打 SoTA 上。學(xué)界如職場(chǎng),還有很多技術(shù)之外的軟實(shí)力需要培養(yǎng)。這篇文章里,我想以我個(gè)人的經(jīng)歷作為切入點(diǎn),聊一聊與此有關(guān)的兩個(gè)話題:
實(shí)驗(yàn)室文化;
團(tuán)隊(duì)合作下的代碼質(zhì)量。
背景介紹
在我之前的文章里提到,筆者現(xiàn)在在 Stanford 攻讀計(jì)算機(jī)碩士項(xiàng)目;和中國(guó)的研究生不同,美國(guó)很多 CS 碩士項(xiàng)目(包括我們項(xiàng)目)中,做科研不是畢業(yè)的必須要求,也不需要有固定的導(dǎo)師。一個(gè)學(xué)期里,可以在 lab 打工,也可以純上課;如果在 lab 待得不喜歡,或者項(xiàng)目做完了,下學(xué)期可以選擇換導(dǎo)師。
作為碩士生,尋找科研機(jī)會(huì)有很多途徑,比如直接聯(lián)系老師或PhD,或者有的lab有專門的申請(qǐng)表格。另外,有些 project 的招人廣告,會(huì)在系里以郵件的形式廣播給所有同學(xué)。
2020年11月,我便通過這樣一則招人廣告,經(jīng)過面試、測(cè)驗(yàn),申進(jìn)了 Stanford 商學(xué)院的 Social Impact Lab,之后直到研一結(jié)束(2021年6月),我在這里作為 RA(research assistant),做一個(gè)推薦系統(tǒng)方面的科研項(xiàng)目。Lab 的導(dǎo)師 Susan Athey 是經(jīng)濟(jì)學(xué)出身,美國(guó)科學(xué)院院士,24歲就博士畢業(yè),維基百科上她的詞條有13種語言,非常厲害。
關(guān)于我這次科研項(xiàng)目的技術(shù)細(xì)節(jié),有興趣的朋友可以訪問我的個(gè)人網(wǎng)站查看(請(qǐng)參見文末“閱讀原文”的鏈接);本文主要是想吐槽一下技術(shù)以外的方面。
周報(bào)制度
剛?cè)?lab,第一件讓我頭疼的事是lab的周報(bào)制度。在這里,我每周必須上報(bào)一個(gè) Progress Report,里面主要分為幾個(gè)模塊:
目標(biāo);
職業(yè)發(fā)展:
本周總結(jié);
下周計(jì)劃。
其中,“目標(biāo)”模塊需要列出所有進(jìn)行的 project,它們對(duì)應(yīng)的 deadline,以及現(xiàn)在完成的進(jìn)度。
“本周總結(jié)”要列出本周在每項(xiàng)工作上花了幾個(gè)小時(shí)。
而“下周計(jì)劃”要列出計(jì)劃的任務(wù),以及各自預(yù)計(jì)需要的小時(shí)數(shù);每項(xiàng) task 不能超過4小時(shí),否則需要將其拆分成更小的 tasks。
剛?cè)?lab 時(shí),我對(duì)手頭的任務(wù)還一頭霧水,要我列出這么詳細(xì)的計(jì)劃,這讓我很頭疼。隨著時(shí)間的流逝,我對(duì)項(xiàng)目漸漸熟悉,但寫周報(bào)仍然是件很心累的事。
在我看來,科研和其他工作不同,探索的方向有很大不確定性,需要自由的思考空間來獲取靈感。拿我的項(xiàng)目來說,我們有個(gè)大體的目標(biāo):提升某個(gè)平臺(tái)上推薦系統(tǒng)的表現(xiàn),細(xì)分下來有“用怎樣的評(píng)分標(biāo)準(zhǔn)”、“冷啟動(dòng)怎么解決”等問題。但是更加細(xì)分的課題,不少都是在實(shí)驗(yàn)、閱讀過程中自然出現(xiàn)的,無法提前預(yù)知。
另外,嘗試量化每項(xiàng)任務(wù)的耗時(shí),我覺得也不合理。寫代碼的工作本來就很難預(yù)測(cè)用時(shí),更何況在科研的情境下,失敗是家常便飯,經(jīng)常會(huì)試了各種方法發(fā)現(xiàn)行不通后放棄,完成任務(wù)需要的時(shí)間就更不可控制。
每次的周報(bào),我都得花大概1小時(shí)完成;如果沒有按照規(guī)定的格式寫,就會(huì)被 lab 的 HR 發(fā)郵件要求改正。半年下來我一共被四五次“建議修改”,都是些我覺得并沒有必要的格式性問題,我也只是象征性地改一改應(yīng)付一下,比如加一些實(shí)際上意義不大的“任務(wù) deadline”。
▲Stanford GSB我們 lab 的領(lǐng)域之一是經(jīng)濟(jì)管理,理應(yīng)深得領(lǐng)導(dǎo)力之道,但 lab 里這種“時(shí)間管理導(dǎo)向”的文化,讓不喜歡刻意管理時(shí)間的我,很難適應(yīng)。有一次我甚至吐槽,寫這種周報(bào)是“血汗工廠”行為……
其實(shí)這個(gè)周報(bào)制度,是有不少好處的,有助于自己梳理工作進(jìn)度、總結(jié)工作效率。另外周報(bào)里第2部分“職業(yè)發(fā)展”,要求列出近期的職業(yè)目標(biāo)(計(jì)劃去哪實(shí)習(xí),或者何時(shí)開始求職),鼓勵(lì)大家思考當(dāng)下的工作對(duì)自己短期、長(zhǎng)期職業(yè)規(guī)劃是否有利,也很有意義。
只是我個(gè)人對(duì)周報(bào)的感受,更多還是負(fù)面的。這也反映了在某種程度上,我和 lab 的文化不太搭吧……
代碼質(zhì)量
在不少互聯(lián)網(wǎng)公司,都有對(duì)代碼質(zhì)量嚴(yán)格把關(guān)的機(jī)制。比如變量命名要遵循一定的標(biāo)準(zhǔn),每個(gè)方法超過幾十行要拆開;再比如有完善的 version control 系統(tǒng),一段代碼需要跑通測(cè)試、經(jīng)過多人審核通過,才能部署使用。
但在很多實(shí)驗(yàn)室,大家寫碼普遍比較隨性(如果你看過或用過 AI 方面論文對(duì)應(yīng)的 GitHub 代碼庫(kù),可能對(duì)此會(huì)有同感)。如果是自己一時(shí)用,那沒有問題;一旦是需要反復(fù)跑的,或者是需要?jiǎng)e人合作的代碼,隨意寫碼的習(xí)慣就會(huì)帶來問題。
4月的時(shí)候,我的 mentor 要求我在他寫好的 pipeline 里加幾個(gè)模塊,跑一系列新實(shí)驗(yàn)。然而,在這個(gè)代碼框架下,我連加一個(gè) baseline 都非常困難。大致來說:
各個(gè)方法之間的關(guān)系錯(cuò)綜復(fù)雜,如果出了問題很難 debug;
一個(gè)方法的輸入,有時(shí)應(yīng)是 pandas DataFrame,有時(shí)應(yīng)是 PyTorch tensor,如果是 DataFrame,可能還需要含有特定名字的 column。這些都沒有任何文檔或者注釋說明,加上由于是 python 寫的,無法直接知道每個(gè)變量是什么樣的數(shù)據(jù)結(jié)構(gòu);
一部分變量名寫得不清楚,甚至可能有誤導(dǎo)性,比如有個(gè)叫 “input_file” 的變量,實(shí)際代表的是 output 文件。
我和mentor反映了這套代碼使用起來比較困難,他卻好像不理解我的處境,覺得改這套代碼是很簡(jiǎn)單的事。
推薦系統(tǒng)小組里只有我們2個(gè)搞技術(shù)的,我自己說不動(dòng)他,也找不到其他人可以幫忙;在產(chǎn)出實(shí)驗(yàn)數(shù)據(jù)的壓力下,我只能違反他的意愿,自己從頭寫了一套跑實(shí)驗(yàn)的 pipeline,從處理數(shù)據(jù),到搭建模型,再到 train 和 test,最后可視化結(jié)果。
這樣的好處是,我對(duì)代碼的邏輯有完全的掌控,一來出了 bug 更容易 debug,二來如果要修改代碼實(shí)現(xiàn)新功能,也能更快上手,靈活了很多。
當(dāng)然,寫自己的風(fēng)險(xiǎn)就是:我的代碼相比原來別人寫過的,可能有我注意不到的問題,或者代碼的行為會(huì)有細(xì)微的、難以預(yù)測(cè)的差異,解決不好的話一樣會(huì)卡進(jìn)度。
果然,我的代碼也出了問題。我犯了個(gè)低級(jí)錯(cuò)誤,把 test set 當(dāng)成 validation set 用;但這還是件小事,要命的是,我的 mentor 說,相比他花了很久搭好的 pipeline,我的跑實(shí)驗(yàn)代碼“正確性尚未驗(yàn)證”,他就無法完全信服我跑出來的數(shù)據(jù)。這一點(diǎn),后來直到我離職都沒完全解決。
歸根結(jié)底,軟件架構(gòu)這東西是需要一個(gè)牛人來搭建的,合作者去使用或加入模塊應(yīng)該是一件輕松的事情,不用管 pipeline 里其他的部分。但我在 lab 里的體驗(yàn),就是處于與此相反的境地,于是引出了一些麻煩。
結(jié)語
這篇文章吐槽了很多,并不是說這次科研 project 的體驗(yàn)不好。實(shí)際上這是一次很充實(shí)的經(jīng)歷——探索未知課題的過程有很多樂趣,我的 mentor 和導(dǎo)師也很關(guān)心我,在技術(shù)上給了我很多指導(dǎo),我非常感謝這次難得的鍛煉機(jī)會(huì)。但我希望能總結(jié)一下感受不那么好的地方,希望自己,以及處在 AI 行業(yè)的讀者你,可以從中學(xué)到一些道理~
萌屋作者:Jazon
來自南京,斯坦福MSCS(計(jì)算機(jī)碩士)在讀最年輕的中國(guó)人,預(yù)計(jì)2022年畢業(yè)。愛安靜地探索宇宙的奧秘,也愛和朋友桌游、運(yùn)動(dòng)。夢(mèng)想養(yǎng)貓,花花與三貓的視頻平均每個(gè)看過20+遍。相信AI雖然有趣,但短期內(nèi)在美國(guó)職場(chǎng)生存,還是要靠豐富的開發(fā)技能。
作品推薦
人在斯坦福,剛上CS224n
謝撩,人在斯坦福打SoTA
后臺(tái)回復(fù)關(guān)鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺(tái)回復(fù)關(guān)鍵詞【頂會(huì)】
獲取ACL、CIKM等各大頂會(huì)論文集!
總結(jié)
以上是生活随笔為你收集整理的我在斯坦福做科研的碎碎念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全栈深度学习第6期: 模型测试和部署
- 下一篇: Meta AI 发布 data2vec!