機器之心編譯
作者:Omar Khattab
編輯:蛋醬、澤南
在研究生期間,很多人經常會迷茫於如何構建自身的研究。我們應該如何開展研究,才能在已經相當擁擠的人工智能領域有所作為?
太多人認為,長期的專案、適當的程式碼釋出和深思熟慮的基準測試無法產生足夠的激勵作用 —— 有時候這可能是你快速而內疚地完成的事情,然後又要回去做「真正的」研究。
最近,史丹福大學 NLP 組在讀博士 Omar Khattab 釋出了一篇博文,討論了頂級 AI 學者們有關做有影響力研究的思考。
讓我們看看他是怎麽說的:
科研的影響力有多種形式,我將只關註透過開源工作(例如模型、系統、框架或基準測試)對人工智能產生的研究影響來衡量。因為我的目標部份是完善自己的想法,記錄具體的建議,並收集反饋,所以我會做出較為簡潔的陳述。如果你有其他的想法,歡迎在評論區討論。
首先,以下是指導原則:
著眼於專案,而不是論文。
選擇合適的、具有較大發揮空間的問題,可以「挖坑」。
提前思考兩步並快速叠代。
將你的工作公之於眾,並推廣你的想法。
找到方法激勵自己:這是關於發展開源研究的提示。
透過新論文繼續投資你的專案。
第五點「關於發展開源研究的提示」值得單獨寫一篇更長的文章。我可能會在下一篇文章中寫到。
著眼專案
而不是論文
這是一個至關重要的思維,其他的一切都基於此。
剛入門的學生會非常重視發表他們的前幾篇論文。這是合理的:這是你學習進行研究、探索初始方向和證明早期進展的方式。但這是一個你最終必須離開的階段:從長遠來看,你的成就和成長不太會取決於單純的論文數量,而更多地取決於你的影響力和你傳達的總體研究脈絡。
不幸的是,太多的博士生認為大多數可能產生影響的行為都是「不激勵的」。這讓我很困惑,直到我意識到他們的意思是這些行為可能會減慢你發表下一篇論文的能力。但你如此迅速地發表下一篇論文的能力並不那麽重要。
我建議你不要把你的工作看作一系列孤立的論文,而是問問自己:你將要領導的更大願景,那麽其中子領域或範式是什麽?你的工作想要帶來什麽不同?因此,你將發表單篇論文來探索並建立基準,而更大的願景應該是你有意叠代的東西。它需要比論文所承載的大得多,而且肯定是尚未完全解決的問題。
要想實作這一點,一種方法是圍繞你在開源領域中維護的連貫工件(如模型、系統、框架或基準)構建一些研究論文。這種策略比「進行一些實驗,並釋出一個轉瞬即逝的快速倉庫」成本更高,但它會迫使你找到一個具有真正影響的問題,並有助於確保你所做的新研究實際上是連貫且有用的:你不會花費力氣引入一個對自己一直在開發和維護的工件無用的小功能或技巧。
選擇合適的、具有較大發揮空間的問題
可以「挖坑」
並不是你撰寫的每篇論文都是值得無限期投資的。許多論文都是免洗的探索性論文。要找到可以轉變為更大專案的方向,所以請使用以下標準。
首先,問題必須是前沿的。你可以用多種方式定義它,但在人工智能領域中行之有效的一種策略是 —— 尋找一個將在 2-3 年內「熱門」但尚未成為主流的問題空間。
其次,問題必須具有較大的挖坑潛力,即對許多下遊問題的潛在影響。基本上,這些問題的結果可能會使足夠多的人受益或感興趣。研究者和人們關心什麽可以幫助他們實作目標,因此你的問題可能是幫助他人構建事物或實作研究或生產目標等東西。你可以套用此過濾器來研究理論基礎、系統基礎設施、新基準、新模型和許多其他事物。
第三,問題必須留有較大的余地。如果你告訴人們他們的系統可以快 1.5 倍或更有效 5%,這可能沒什麽意思。在我看來,你需要找到這樣的問題:至少在經過多年的努力之後,你有非零的希望讓事情變得更快,比如快 20 倍或更有效 30%。當然,你不需要一路走到那一步才算成功,你也不應該等到完全走到那一步後才發表第一篇論文或釋出第一件作品。
我不想說得太抽象,還是用 ColBERT 來說明吧。2019 年底,套用 BERT 進行檢索的研究非常流行,但這些方法非常昂貴。人們自然會問,我們是否能大幅提高這種方法的效率?是什麽讓這成為一個好問題呢?
首先,它很前言。我們可以正確地預計,到 2021 年(1.5 年後),許多研究者將尋求基於 BERT 的高效檢索架構。其次,它有很大的發展空間。新的 ML 範式往往會這樣,因為大多數此類工作一開始都會忽略效率。事實上,最初的方法可能需要 30 秒才能回答一個查詢,而現在 30 毫秒就能完成更高質素的檢索,速度快了 1000 倍。第三,它有很大的 Fanout。可延伸檢索是一個很好的「基礎」問題:每個人都需要在檢索器之上構建一些東西,但卻很少有人願意去構建它們。
提前思考兩步
並快速叠代
既然你已經有了一個好問題,就不要急於選擇眼前的低掛果實作為你的方法!在某些時候,至少最終會有很多人在考慮這種「顯而易見」的方法。
相反,至少提前兩步思考。當這個及時出現的問題最終成為主流時,確定大多數人可能采取的途徑。然後,找出這條道路本身的局限性,並著手了解和解決這些局限性。
在實踐中會是什麽樣子呢?讓我們重溫一下 ColBERT 案例。利用 BERT 構建高效檢索器的明顯方法是將文件編碼成向量。有趣的是,到 2019 年底,只有有限的 IR 工作做到了這一點。例如,該類別中被參照次數最多的工作(DPR)在 2020 年 4 月才釋出了第一份預印本。
有鑒於此,你可能會認為,2019 年要做的正確事情是透過 BERT 建立一個偉大的單向量 IR 模型。與此相反,如果只提前兩步思考,就會提出這樣的問題:每個人遲早都會建立單向量方法,那麽這種單向量方法會從根本上卡在哪裏呢?事實上,這個問題導致了後期互動範式和廣泛使用的模型。
再舉一個例子,我們可以使用 DSPy。2022 年 2 月,隨著提示功能變得越來越強大,人們顯然希望透過提示來進行基於檢索的質素保證,而不是像以前那樣進行微調。為此,我們自然要建立一種方法。再往前走兩步,我們會問:這樣的方法會在哪裏卡住?歸根結底,「先檢索後生成」(或稱 RAG)方法可能是涉及 LM 的最簡單的方法。
出於人們會對它感興趣的同樣原因,他們顯然會對以下方面越來越感興趣:(i) 表達更復雜的模組組合;(ii) 透過對底層 LM 的自動提示或微調,弄清楚應該如何監督或最佳化由此產生的復雜 pipeline。這就是 DSPy。
這條準則的後半部份是「快速叠代」。這也許是我的導師 Matei Zaharia(史隆獎得主、Apache Spark 創始人)在我攻讀博士學位的第一周給我的第一條研究建議:透過確定一個可以快速叠代並獲得反饋(如延遲或驗證分數)的問題版本,可以大大提高你解決難題的機會。如果你要提前兩步思考問題,這一點就尤為重要,因為這已經足夠困難和不確定了。
將你的作品公之於眾
讓你的想法深入人心
此時,你已經發現了一個好問題,然後不斷叠代,直到你發現了一些很酷的東西,並寫出了一篇有見地的文章。不要繼續寫下一篇論文。相反,要專註於將你的工作成果公之於眾,並尋求與人們進行真正的互動,不僅僅是關於你的一次論文釋出,而是關於你正在積極研究的全域。或者更好的做法是,讓人們了解你正在構建和維護的有用的開源工具,它捕捉到了你的關鍵想法。
常見的第一步是在 arXiv 上釋出論文預印本,然後釋出「貼文」宣布你的論文釋出。這樣做時,請確保你的貼文是以具體、充實、易懂的主張開頭。這樣做的目的不是告訴人們你釋出了一篇論文,那並不具有內在價值,目標是以一種直接而又吸引人的方式傳達你的關鍵論點。(是的,我知道這很難,但這是必要的)。
也許更重要的是,整個過程不會在第一次「釋出」後結束,釋出只是開始。鑒於你現在投入的是專案,而不僅僅是論文,你的想法和科學交流將持續一年之久,遠遠超過孤立的論文釋出。
當我幫助研究生在「推特」上介紹他們的工作時,他們最初釋出的文章並沒有像希望的那樣受到關註,這種情況並不少見。學生們通常會認為這驗證了他們對釋出研究成果的恐懼,並認為這是另一個訊號,表明他們應該繼續寫下一篇論文。顯然,這種想法是不正確的。
大量的個人經驗、二手經驗和觀察結果都表明,在這件事上堅持不懈是非常有意義的(順便說一句,能堅持的人不多)。也就是說,除了極少數例外情況,好想法的牽引需要你在不同的環境中多次告訴人們關鍵的東西,並不斷改進你的想法和你對想法的傳達,直到社區能夠隨著時間的推移吸收這些想法,或者直到該領域發展到更容易理解這些想法的正確階段。
匯聚興奮點
釋出開源研究的技巧
讓人們對你的研究成果感到興奮固然是件好事,但透過釋出、貢獻和發展開源工具,將你的想法傳遞給相關的下遊套用,往往能產生更大的影響。
要做到這一點並不容易:僅僅將程式碼檔連同 README 上傳到 GitHub 是不夠的。一個好的資源庫將是你專案的「故鄉」,比你發表的任何一篇論文都更重要。
優秀的開源研究需要具備兩個幾乎獨立的特質。首先,它必須是好的研究,新穎、及時、範圍明確、準確。其次,它需要有明確的下遊效用和低摩擦。
這是最重要的部份:人們會因為各種「錯誤」的原因,總是反復回避(而其他人也會反復使用)你的開放源碼軟件成果。舉例來說,你的研究可能是客觀的「最新技術」,但人們十有八九會優先考慮摩擦更小的替代方案。反過來說,對於研究生來說,往往不能抓住人們使用你工具原因的重點,比如,因為他們沒有充分利用你最有創意的部份。這並不是什麽值得抵制的事情,而是值得理解,必須要為此改進的事情。
基於此,我想列出在研究成果開源方面需要註意的幾個裏程碑。
裏程碑 0:讓釋出的內容可用
釋出一個無人能執行的程式碼是毫無意義的。在你的研究領域,這些人想復制你的執行結果,也許他們會超越過你的工作並參照你的研究結果。這些人比其他類別的使用者更有耐心。盡管如此,你還是會發現,根據程式碼是否容易修補的情況,它在學術影響力方面也存在巨大差異。
裏程碑 1:讓釋出的內容有用
除了在你的細分領域的人,你應該確保你的釋出對想要實際使用該專案來構建其他東西的受眾有用。在人工智能研究中,這個裏程碑很少會自然而然地到來。你應該分配大量時間來思考人們試圖解決的(研究、生產等)問題,而你的人工智能成果可以在這些問題上提供幫助。如果你能正確地做到這一點,那麽從專案設計到公開的應用程式介面以及展示的文件 / 範例,都會體現出它的很多作用。
裏程碑 2:讓釋出通俗易懂
這對人工智能研究者來說很難,但我們應該意識到,一個有用的版本,在技術上所有的東西可用且是某種程度上可解釋,並不等於你的大多數潛在使用者會覺得這個版本通俗易懂,足以讓他們投入學習或嘗試。
知名 AI 學者 Andrej Karpathy 寫過一篇關於這個問題的文章:「你建造東西,然後你需要建造坡道通往它」。Ben Clavie 也撰寫了大量有關這方面的文章,他將我們在 ColBERT 上所做的工作加以改進,使其變得更加平易近人了,這在很大程度上證明了這一點。
來源:https://www.youtube.com/watch?v=c3b-JASoPi0
裏程碑 3:找出顯而易見的替代方案失敗的原因,並保持耐心
我們一開始就討論了提前兩步思考的問題。在我看來,這一點至關重要,但也意味著大多數人都不會理解,為什麽他們需要采用一種解決方案來解決他們還無法明顯觀察到的問題。我認為,隨著時間的推移,你的工作之一就是要建立一個案例。收集證據,並以易於理解的方式說明為什麽顯而易見的替代方案(一次只思考一個步驟)會失敗。
裏程碑 4:了解使用者的類別,並利用這一點實作增長
當我創辦 ColBERT 和 DSPy 時,我最初尋找的受眾是研究者和專業的 ML 工程師。隨著時間的推移,我學會了放棄這一點,並明白你可以接觸到更多的受眾,但他們需要的是不同的東西。在做任何事情之前,都不要間接甚至直接遮蔽不同類別的潛在使用者。這種情況比人們想象的要普遍得多。
其次,在尋找使用者時,要在兩類使用者之間尋求平衡。一方面,擁有高級用例的專家級構建者可能需要你投入大量資金,但往往會在研究意義上推動某些用例的發展,這可能會帶來回報。另一方面,公眾構建者通常不是 ML 專家,但他們經常在公眾場合構建並分享他們的學習成果,在大規模增長中占據更大的比例,並會讓你對自己最初的假設有更多的了解。兩者都是你需要的。
裏程碑 5:將興趣轉化為不斷壯大的社區
OSS 工作的真正成功在於社區的存在,以及不依賴於你的努力而持續增長。一般來說,一個好的社區應該是有機的,但你需要積極努力幫助它形成,例如歡迎貢獻和討論,並尋找機會將興趣轉化為貢獻或某種論壇(例如 Discord 或 GitHub)。
裏程碑 6:將興趣轉化為活躍、協作和模組化的下遊專案
很有可能,你的 OSS 專案在早期階段並沒有解決最初願景中的所有問題。一個設計精良的專案通常會有多個模組化部份,可以讓你發起研究合作(或其他努力),讓新的團隊成員不僅能推進專案,還能擁有專案的重要部份,從而更快或更大程度地影響他們的想法,同時大幅改進專案。例如,DSPy 目前由不同的團隊分別領導及時最佳化、編程抽象和強化學習方面的研發工作。ColBERT 的外部應用程式介面、底層檢索基礎架構和核心建模等元件主要由不同專案中的不同人員負責推進。
來,總結一下。開源研究的采用需要好的研究和好的開源成果。這種平衡很難把握,但一旦把握得當,就會收獲頗豐。就我個人而言,我花了很長時間才掌握並內化了這一點。這要歸功於我的博士生導師 Chris Potts 和 Matei Zaharia 的反復反饋,以及 Heather Miller 和 Jeremy Howard 的寶貴意見。
評估研究的標準是與先前知識相比的「增量」,但在人們能夠有意義地利用「增量」之前,軟件本身必須是有效的。要使軟件有效,其文件也必須有效:除非你向人們展示,否則人們不會看到他們應該使用軟件的所有下遊方法。也就是說,直到這些任務可以由一個獨立的社區來開發。
說了這麽多,本節最重要的技巧就是「釋出」,真正釋出且經常釋出,並從中學習。
發表新論文
繼續投入自己的專案
當你讀到第五條準則時,很自然會產生這樣的疑問:研究生哪裏有這麽多時間花在開放源碼軟件上?什麽時候才能做真正的研究?
實際的答案是,花在開源上的大部份時間都可以用來進行新的、令人興奮的研究。這兩者並不像表面上看起來那麽割裂。為什麽這麽說呢?
首先,處於這種開放源碼軟件工作的前沿,你可以極早地憑直覺辨識新問題。與其他方式相比,你對問題的理解會更加本能。另外,你所建立的社區通常會對自己的方法原型提供直接反饋,並讓你有機會接觸到了解問題重要性的優秀合作者。你還可以獲得有用的「分發渠道」,確保自己在這一領域發表的每一篇新論文都能得到受眾的關註,並鞏固現有的平台。
舉例來說,「ColBERT」不僅僅是 2020 年初的一篇論文。它現在可能有十篇左右的後續相關論文,投資於改進的訓練、更低的記憶體占用、更快的檢索基礎架構、更好的領域適應力以及與下遊 NLP 任務更好的匹配。同樣地,DSPy 也不是一篇論文,而是關於編程摘要、提示最佳化和下遊程式的論文集合。這些論文中有很多都是由不同的優秀作者撰寫的,他們的工作都產生了巨大的影響,其中一部份是透過開放源碼軟件渠道創造了大量的受眾。
所以說,一個好的開放源碼工具可以創造出模組化的作品,供新的研究者和貢獻者探索、擁有和發展。
參考原文:https://github.com/okhat/blog/blob/main/2024.09.impact.md