Y Combinator合伙人Ankit Gupta與Anthropic預訓練負責人Nick Joseph最近進行了一次深度對話。
Nick從Vicarious到OpenAI再到Anthropic,見證了大語言模型從實驗室概念到改變世界的全過程。在這場訪談中,他詳細分享了預訓練的工程本質、擴展定律的驗證過程、早期如何用有限資源挑戰巨頭,以及為什麼AI最難的問題往往不是機器學習問題,而是基礎設施問題。
"我環顧四周,發現自己是世界上大約30個正在做這件最重要技術的人之一。"Nick回憶起Anthropic早期時說。那時GPT-3的訓練成本公開估計是500萬美元,對個人來說是天文數字,但對公司而言並不算多。更讓人驚訝的是,當時大多數人對計算資源的使用效率很低,"我們可以通過極致的效率獲得巨大領先優勢"。這個判斷最終被證明是對的——Anthropic用更少的資源訓練出了可以與OpenAI競爭的模型。
以防太長不看(TL;DR),三個結論寫在前邊:
Q: 擴展定律為什麼能在如此多數量級上成立?
A: Nick的答案出人意料地簡單:因為我們還遠未觸及極限。當原始擴展定律論文展示11個數量級的數據時,人們在激烈辯論是否能再延續一個數量級。他當時的想法是:"有大概11分之1的概率,規則會在在這裡失效。"更關鍵的是,這創造了一個正反饋循環:更好的模型→更多收入→更多計算→更好的模型。這個循環在過去5年裡不斷重複,而且遠未結束。困難不在於擴展定律本身,而在於如何正確實現它——這是工程問題,不是理論問題。
Q: 為什麼AI領域最缺的不是研究員而是工程師?
A: "投入更多計算,東西基本會奏效。"Nick的這句話道出了本質。實際的模型架構已經相當簡單,你甚至不需要完全理解數學就能實現。真正的挑戰是在數千個GPU上正確實現它,並行化所有東西,檢查它是正確的。更令人驚訝的是,最難的問題往往不是算法,而更可能是一個深藏在某個kernel里的精度轉換bug,它會在一個月後讓你的大規模訓練崩潰——或者永遠不會被發現。這需要能夠深入整個堆棧的工程師,從理解ML動態到理解字節如何在機器間移動。
Q: 未來最大的風險是什麼?
A: 因此,不是缺乏算法創新,不是數據耗盡,甚至不是計算資源限制。Nick最擔心的是"一個真正難解決的bug"。當模型需要幾個月訓練,單個bug可以讓你失去整整一代。更糟的是,你可能永遠不會發現它。隨著系統變得越來越複雜——從晶片物理布局到網路協議到數千行代碼——任何一層都可能出問題。這就是為什麼能夠深入整個堆棧調試的能力是"令人驚訝地困難且很少人能做的事情"。在這個規模上,電腦自身可能會犯錯,而你需要證明這一點。

1、預訓練的本質:為什麼"下一個詞預測"贏了
預訓練到底是什麼?這個問題的答案,比大多數人想像的要簡單得多。
從根本上說,讓AI模型變得更好的一個關鍵要素是規模(scale)——投入大量計算資源。如果要最大化計算投入,就需要一個有海量數據支撐的目標函數。網際網路是人類創造的最大單一數據源,而且不需要人工標註。預訓練的核心想法是:拿一段文本,預測下一個詞。比如給出"the",預測"cat";再給"the cat",預測下一個詞。這意味著每個詞都是一個新樣本,信號密度極高。
這個簡單的方法為什麼能勝出?在2017-2021年期間,AI社區其實在嘗試各種預訓練目標。有BERT和BART這樣的遮蔽語言模型(masked language modeling),也有GPT系列的自回歸建模(autoregressive modeling)。最終自回歸的下一個詞預測成為主流範式。
Nick認為答案主要是經驗性的(empirical),而不是第一性原理推導。但下一個詞預測確實有一個巨大優勢:你可以直接從模型中採樣生成文本,這為產品化提供了非常直接的路徑。更重要的是,這個損失函數(loss,衡量模型預測準確度的指標)本身就是你關心的目標——如果你能完美地預測語言,理論上就能像人類一樣寫作。給模型一個論文標題,它應該能輸出整篇論文。而其他一些方法沒有這種特質。
當然,你也可以先做大規模預訓練,然後針對一百個特定任務微調。這種方法也能work。Nick的一般性直覺是:計算才是最重要的東西。只要向任何一個目標投入足夠多的計算,都可能得到相當好的結果,並能微調到其他任務上。令人驚訝的是,與投入更多計算相比,這些細節影響有多么小。
2、擴展定律的11個數量級:一個被低估的確定性
擴展定律(scaling laws)是預訓練領域最重要的發現之一,它揭示了一個幾乎反直覺的規律。
它的核心洞察是:隨著投入更多計算、更多數據、更多參數,模型的損失(loss)會以非常可預測的方式下降——遵循冪律(power law,一種數學規律,意味著性能提升是可以精確預測的)。
但這個發現在當時引發了激烈爭論。Nick回憶說:"原始的擴展定律論文展示了大約11個數量級的數據,但人們還在激烈辯論它是否會繼續延續哪怕一個數量級。"他當時的想法很直接:"11分之1大概是它在這裡失效的概率,那我們為什麼不繼續試試呢?"
更關鍵的是擴展定律帶來的正反饋循環:訓練一個模型→用它做出有用的產品→賣出產品獲得收入→用收入購買更多計算→訓練更好的模型。這個循環在過去5年裡不斷重複。Nick直言,很多人在當時並沒有預見到這一點,"Dario(Anthropic CEO)確實預見到了,我想很多人都預見到了,但這並不明顯。"
在談到為什麼其他實驗室沒有更激進地押注擴展定律時,Nick給出了一個有趣的觀察:不同實驗室有不同的文化。比如Facebook AI Research(FAIR)更像是博士風格的獨立研究——每個人有自己的想法,各自爭取計算資源。而訓練大型語言模型需要很多人在複雜的基礎設施上協作,這不會產出論文。"你不會因為'我的效率提高了5%'就發表論文",在那些文化中這也不受尊重。這可能是部分原因。
3、早期Anthropic:當30人挑戰科技巨頭
Anthropic成立初期的故事,幾乎像是矽谷版的"大衛戰歌利亞"。只不過,這一次武器不是投石索,而是對計算效率的極致追求。
Nick說他當時有一種強烈的認知失調:"我的心態是'我們在做AGI,這是有史以來最重要的技術',然後環顧四周發現,世界上大概只有30個人在做這件事。我是個相當初級的人,其他人都知道怎麼做並且之前做過,但我還是有點驚訝——居然這麼容易。"
GPT-3的公開訓練成本估計是500萬美元。從個人角度看這是一大筆錢,但從公司角度看其實不算多。Anthropic完全可以購買足夠的計算資源來訓練類似規模的模型。
他們使用雲計算提供商,但需要理解到硬體的物理布局層面。Nick記得有一次,一位同事運行聚類算法來識別所有晶片在哪些機房裡,因為他們懷疑晶片分布在不同機房導致了網路延遲問題——你可以反向工程出來,"很明顯這裡有兩個集群,它們內部連接更好,它們之間的連接有些問題。我們在儘可能地壓榨硬體極限。"
早期Anthropic的核心優勢是效率。大多數人對計算資源的使用效率很低,"我們的資金遠少於其他人,所以必須通過效率獲得巨大領先。"這主要體現在正確實現分布式框架上。
訓練需要在大量晶片上進行,有多種並行化方法:數據並行(把數據分散到不同晶片)、流水線(把模型不同層分配到不同晶片)、模型分片(tensor sharding,把單個操作切分到多個晶片)等。當時沒有很好的開源包可以直接使用。Nick記得他們在做數據並行時,有人說"現在我們要寫all-reduce了"(一種讓所有晶片同步計算結果的算法),他當時想"我們真的要自己寫嗎?沒有現成的包嗎?"答案是:"我們會想要修改它的。我們不想依賴某個包,因為(a)我們要去的規模比Facebook用過的更大,(b)你不想依賴一個你需要不斷修改的包。"
這句話在當時聽起來很反直覺——比Facebook規模還大。Facebook AI Research在當時被認為是最好的機器學習研究機構之一,和DeepMind一起從博士項目中招聘大量人才。"你的心態是什麼,當你說'這個非常成熟的實驗室和優秀人才,我們的運營規模對他們不相關'?"Nick坦誠地說,也許他只是太自負了,"但我環顧四周想,這些人都在錯過大局。我認為擴展定律已經很清楚了,而反對的論點我覺得有點荒謬。"
4、從PyTorch到CUDA:工程的深度決定上限
在大型AI模型的訓練中,代碼的抽象層次就像一座高樓的不同樓層。站在高層可以看到全景,但要修復地基問題,就必須一路向下深入。Nick和他的團隊,經常需要在這座樓里上下穿梭。
Nick主要在PyTorch的抽象層面工作——PyTorch是一個流行的深度學習框架,它提供了torch.matmul(矩陣乘法)這樣的高級操作。在這一層,他不需要思考如何讓矩陣乘法在GPU上高效運行。"我假設PyTorch已經搞清楚如何讓矩陣乘法儘可能高效了。"但有些操作,特別是注意力機制(attention,Transformer模型的核心組件),有很多不同變體,而且在GPU上做高效實現真的很複雜很困難,對於這些就需要深入到更底層——甚至要用CUDA(NVIDIA的GPU編程語言)直接編程。
這裡有一個有趣的流程,是Nick之前沒想過的:首先在紙面上建模你要做的事情,想出一個並行化策略,能達到很好的效率。這裡的效率指標是MFU(模型浮點運算利用率,Model FLOPs Utilization,衡量GPU算力被實際使用的百分比)。你實際上可以用紙筆算出能達到什麼效率。你知道所有約束條件——不能達到好的MFU的原因可能是HBM帶寬受限(HBM是高帶寬內存,GPU訪問數據的通道),可能是主機到CPU的傳輸受限,有很多不同因素,但相關的數字其實只有大約六個。
所以你可以完全建模出來,理解約束在哪裡,然後實現一個能達到那個效率的東西。當然剛實現時會非常低效,下一步是拿出profiler(性能分析器,一種可以精確測量每段代碼運行時間的工具)——你需要能夠分析作業,查看每個操作花了多長時間,在腦海中有一個模型知道每個操作應該花多長時間,然後讓這兩個東西一致。
在網路拓撲優化方面,單GPU的PyTorch profiler其實一直挺好用。但如果要在數百上千個GPU上分析作業,那就沒什麼人真正做過了。"這更多是我們黑進profiler,搞清楚如何把所有trace(執行軌跡)合併在一起。"
Nick是如何學會這些的?他坦誠在加入Anthropic之前並沒有做過很多這方面的工作。"加入Anthropic時有一點特別好——那時東西真的不多。我第一天就把我們所有的Slack消息和整個內部資料庫都讀完了,從中學到了很多。那種感覺很棒,就是所有東西都與我相關。"
然後主要是通過結對編程(pair programming,兩個程序員共用一台電腦寫代碼)學習。Tom Brown之前做過所有這些,所以他很了解這些東西。Nick的經理Sam McCandlish也做過很多。"我一開始就和他們大量結對編程。我真的很喜歡結對作為一種學習方式——你學到了你想做的事情。如果你和比你強的人結對,他們可以直接做,所以你大部分時間只是在看。但你也學到了人們是怎麼做的。"
像如何使用profiler這種東西,你永遠不會從別人在Slack上的最終報告或PR(代碼提交)中學到。你只會看到"他們找到了這些問題,改了這行特定代碼,就贏了。"你需要看一個4小時的YouTube影片看某人擺弄profiler來自學,或者實際和人結對。
有一件事Nick現在回想起來覺得尷尬:"我在加入Anthropic之前從沒真正用過調試器。人們談論PDB(Python調試器),我知道那是人們用的東西,但print語句對我來說挺好的。然後我看到某人用調試器,意識到'哦不,調試器是個超級有用的工具',這個人調試東西快得多,特別是當代碼啟動需要很長時間的時候。"學習這種東西最好還是通過結對,當然還有顯而易見的通過實踐學習——最終親自啟動profiler盯著看很多很多小時。
5、規模帶來的變化:從全能到專精
當你手裡的GPU從幾百個變成幾千個,再變成幾萬個,不只是數量在膨脹,整個團隊的組織方式也在發生根本性轉變。
Nick強調最核心的東西其實沒變:"讓我震驚的是,從某些方面看,我在第一天就在優化的指標和現在還是完全一樣的。有一個損失函數,讓損失下降。你可以拿我訓練的第一個模型用同樣的指標跑一下,畫出團隊隨時間進展的曲線。"
在談到OKR(目標與關鍵結果,Objectives and Key Results,一種目標管理方法)時,Nick說這對他的團隊來說總感覺有點奇怪:"當然,我可以選一個損失值,但答案就是'越低越好'。我們會永遠做下去。"這個單一的北極星指標一直未變。
最大的變化是專業化程度提高了。早期Nick試圖閱讀代碼庫中的每一個PR,這很棒,他了解所有部分。隨著團隊成長,一切都變得更加精確。人們真正深入研究注意力機制應該如何工作,或者真正深入研究並行化策略。最終團隊裡都是在各個領域的深度專家,這很好,因為這意味著可以在這些方面做得很深入。
但作為管理者,有時需要思考的一件事是確保更大的圖景有意義,同時確保有足夠多的人真正理解整個大圖景,不會有單點故障。
這裡有個有趣的權衡。Nick發現人們在這方面真的有偏好——有些人真的想成為通才,理解一切,輕觸各個方面;有些人想選一個領域,通常他們已經選好了那個領域,他們是某個領域的深度專家,比如整個博士都在研究精度(precision,指電腦表示數字的準確程度)問題,就只想思考那個。你需要在這之間取得平衡。
早期有一段時間,他們雇了很多通才型的人,因為加入早期創業公司的人就是會做所有事情的那種人。結果是每個人都在做所有事情,沒人真正深入理解某一件事。這是一種失敗模式。但如果有太多專家,"很多工作就得由管理者或者技術負責人來連接一切",以及注意到"如果我們在這裡改架構,會讓那邊的效率考慮變得容易很多"這樣的事情。
Nick特別喜歡早期的一點是效率工作方式:"我可以直接說'如果我們改變這個特定步驟的做法會怎樣',別人會說'應該沒問題,簡單改一下',然後你就避免了整個複雜項目,不用把某個很難的操作做高效,因為你可以把它改成一個更容易高效實現的操作。"
6、當晶片本身就是錯的:從Python程序員到硬體調試
電腦科學課上,老師總會說:"相信電腦,是你的代碼錯了。"但在AI訓練的前沿,這條鐵律不再適用。有時候,真的是電腦錯了。
隨著計算規模越來越大,出現了哪些非顯而易見的挑戰?
連接所有晶片是一個特別困難的問題。隨著接入越來越多晶片,標準的並行化方式是整個系統作為一個故障域——一個晶片失敗,整件事就會崩潰。
舉個例子,如果你分布式地部署模型,比如把每一層放在不同的晶片上,如果你丟了第7層,"你不會跳過第7層——那會是個很奇怪的模型訓練過程。"這會導致一些有趣的情況:隨著規模擴大,有越來越多的晶片,故障率可能越來越大。另一方面,重啟其實挺快的,沒什麼需要做的,只需要重新加載回來。
但更令人驚訝的是整個堆棧的新穎程度。從晶片在數據中心的物理布局到晶片本身,基本上所有東西都很新。GPU的疊代代數還不多。
Nick學電腦科學時,代碼不work他會想"電腦壞了"。他記得老師說"你可以相信電腦沒壞——是你搞砸了。"他在AI早期遇到的最令人沮喪的事情之一是,正在做某件事然後完全卡住了,"我不知道哪裡錯了"。他的經理看了看說:"嗯,可能是電腦錯了。"Nick想"這不太可能吧"。結果確實是電腦錯了——那個GPU壞了,他們得換一個新的。
"必須考慮GPU可能是錯的、GPU可能慢了、電源可能壞了——這些問題的層次比你作為Python程序員期望需要考慮的要深得多。"
在早期,他們用的GPU數量大概是數千個規模。"幾千個能裝進這個房間嗎?""能,幾千個。你可以有一堆機架,能裝進一個房間。"Nick說當時不確定需要都在一個房間還是可以分散在多個房間。"我們有這些理論模型,會說我們需要A點到B點有這麼多帶寬。但你永遠不知道要往下走多深——比如我們需要多少電力?如果有一個電容器在處理所有這些,我們同時啟動整個作業會不會讓系統崩潰?"
7、多晶片時代:TPU vs GPU的真實差異
在AI訓練的世界裡,晶片不只是晶片。Google的TPU和NVIDIA的GPU,就像兩種不同方言——表面上都在"說"矩陣乘法,但底層實現方式天差地別。
Anthropic與各種雲服務提供商合作,使用不同類型的晶片。從工程師角度看,這些只是計算來源,還是需要區別對待?
從根本上說,它們都在做同樣的事情——都在計算相同的操作,矩陣乘法等等。但它們的實現方式很不同,編程方式也很不同,實際規格也很不同。有些可能有很多浮點運算能力但內存不多,有些可能有很多內存帶寬但內存容量不大。
有多個晶片的一個優勢是可以針對性分配任務。不同工作負載適合不同晶片。比如推理(inference,模型部署後給用戶生成回答的過程)作為一種工作負載通常需要更多HBM帶寬。最簡單的採樣形式是一次生成一個token(詞或子詞單元),每個token都要加載所有權重,這意味著需要大量HBM帶寬。而預訓練實際上通常更密集於浮點運算,因為batch size(批處理大小,一次處理的數據量)更大。所以可以針對不同目的專門化使用哪些晶片。
缺點是必須把東西寫多次。理論上可以有跨晶片的抽象層,但它們差異足夠大,很難做到。如果在所有晶片上做所有工作負載,工作量就會乘以晶片數量。
Nick回憶了一個有趣的軼事。當時Ankit的公司在用Google TPU遇到一些神秘的段錯誤(segmentation fault,一種程序崩潰錯誤),Nick說"你應該在六個月前用,那時我們幫他們修復了一半的問題。"和這些非常新的晶片打交道,確實會遇到很多問題,需要和提供商密切合作解決。
提供商在修復問題方面其實很出色。Nick認為搞清楚正確的合作方式很有趣,"他們有強烈的動機修復問題——他們希望晶片對我們運行良好,希望將來賣給我們更多晶片。我們顯然也有非常強烈的動機讓晶片工作,因為我們很早就買了它們,一切都押在讓這些集群工作上。"
但並非所有資訊都能共享。一個有效的策略是製作小規模的可復現問題。通常情況是在訓練某個巨大的運行時遇到問題,比如段錯誤,然後說"嗨,你的集群上出了段錯誤",他們不知道怎麼修。所以需要能從代碼庫中抽取出來,在單個晶片上、用可以發過去的單個文件復現問題。
大多數情況是通過共享的Slack溝通,偶爾面對面會更好。這是相當常見的溝通方式。
8、預訓練vs後訓練:平衡的藝術
AI的進化路徑,正在從單一跑道變成雙引擎驅動。預訓練提供智力基礎,後訓練雕琢個性和能力,兩者如何分配資源成了新的戰略問題。
過去幾年,AI領域出現了明顯的轉變。以前基本只關注預訓練,現在在很多公司,焦點分散到了預訓練和後訓練(post-training),後者包括強化學習、精巧的微調以及各種安全調整。從公眾視角看,預訓練似乎不再像推理型模型那樣受關注,而推理型模型看起來主要是後訓練的產物。
Nick指出原來"預訓練"這個名字就暗示它是個小事情,在做"大訓練"之前做的。實際上已經有過一次轉變,就是"不,你做大量預訓練,在相當長時間裡用大部分計算做預訓練,這才是主導性的東西。"
現在人們說"你可以從RL(強化學習,Reinforcement Learning)得到相當大的收益",這是另一套擴展定律——向RL投入越來越多計算,可以得到越來越好的模型。所以有個問題是如何平衡這兩者,各做多少,它們如何疊加?是一個替代另一個,還是兩者都要做且會相乘?這些問題都還在早期階段,尚未得到解答。
Nick認為這些在很大程度上是經驗性問題。幾乎所有事情最終都必須憑經驗做出。"你可以想出理論,但實際上你要做的第一件事就是測試理論,而且大多數時候理論都是錯的。所以應該直接收集數據看看。"
一個重要的事情是真正憑經驗解決問題對做出好決策至關重要,而這在組織中其實很難做到。比如Nick管理預訓練,他不應該說"預訓練必須贏"。Ankit問是否兩個團隊之間有某種競爭。Nick說他們設法避免了這一點,相當協作,"我們基本上都在產出一個模型,可以協作。"但他確實認為在其他地方,從聽說的情況看,團隊之間有一些摩擦。"這是個有趣的組織設計問題——如何設置才能不讓科學問題與人們對團隊的認知綁定在一起。"
9、數據困境:網際網路到底有多大?
關於數據的討論,充滿了確定性的斷言和不確定的真相。當Nick被問到"我們是否已經用完了網際網路數據"時,他的回答揭示了這個問題的複雜性。
關於高質量預訓練數據的可獲得性,有一種流行的說法:我們已經用完了網際網路上的數據。Nick怎麼看?
"我覺得有點奇怪,在數據問題上我看到太多非常自信的論斷"——"我們用完了網際網路""規模化已經結束"。Nick幾乎有點不確定人們到底用了多少數據。總會有質量-數量的權衡等等要考慮。
但有個根本性的點:數據是如此之多。數據增長的速度比我們獲得更多計算的速度慢。不過Nick不想說得太自信,"我不完全確定。你怎麼知道呢?"
一個有趣的問題是:如果你問某人網際網路有多大,答案是無限大。有很多頁面你可以滾動,它會自動生成更多文本,永遠繼續下去。所以網際網路是無限的。那"有用的網際網路"有多大?沒人知道。做網頁時你不會把它加到某個巨大的計數器里說"我今天給網際網路添加了50個詞"。所以這個角度有很多不確定性。
Ankit提到可以用PageRank(Google的原始排名算法,根據網頁被鏈接的次數評估重要性)找到有用的網際網路。Nick不同意:"我認為不夠好。從模型角度看,有用的網際網路和從人的角度看很不一樣。我認為有很多東西可能不值得你去讀,PageRank得分也不高,但對AI來說實際上很有用。PageRank主要是基於鏈接的系統,是原始Google算法,基於鏈接和哪些鏈接被訪問最多。我認為它是個質量指標,但不明顯是AI的正確質量指標。"
標記鏈很多不一定意味著那裡沒有有用數據,可能只是意味著沒東西鏈接到它。而且可能那些數據最終更有價值,因為所有被大量鏈接的東西你已經有了。在某個點上,你可能在尋找尾部——那些只在一個地方被鏈接過的東西,但它是個有用的小知識塊,會幫助解決最後10%的困難查詢。
10、合成數據的悖論:能否用Claude訓練更好的Claude?
如果讓AI生成數據來訓練AI,會發生什麼?這個看似簡單的問題,藏著深刻的哲學困境。
關於合成數據(synthetic data,由AI模型生成的訓練數據)的討論特別有意思。Nick提到了幾種不同的思考方式。
一種是蒸餾(distillation)類型的方法:可以拿一個聰明的模型,讓它生成一堆數據,在那些數據上訓練,大概能得到接近那個智能水平的模型。我們在很多開源模型中看到這一點,比如較小的Qwen推理模型從較大的Qwen模型蒸餾出來,DeepSeek也類似。這完全可行。
**然後有個獨立的問題:能否用當前模型訓練出更好的模型?**這裡有個有趣的點。如果讓模型生成數據,比如對Claude說"給我寫些很棒的文本",然後看一下,和網際網路上的平均內容比,看起來挺好。"但另一方面,我知道如果我只是生成——創建生成儘可能多的文本——理論上我不應該能訓練出比那更好的模型。我只會得到同樣的東西。"
原因主要是因為模型有某個分布,你要學習建模那個準確的分布,但如果那個分布是錯的,你不會學到真相。可以想像如果模型認為5 5是11,每次看到字符串"5 5",它都會輸出11,你的新模型會學到5 5是11。
這是個很難研究的領域,因為有個問題。如前所述,範式之一是在小規模研究東西然後在大規模運行。如果你的計劃是"我們有很多來自最佳模型的數據",你要如何測試訓練更好的模型?這是有意為之時的情況。
還有個獨立的事情:**如果是意外呢?**如Nick所說,現在很多網際網路是由LLM生成的。這挺有趣因為檢測不容易。可以搞清楚哪些是LLM寫的,但不是微不足道的。然後也很難思考影響是什麼——如果網際網路的1%是LLM生成的,那會浪費1%的計算,還是會毀掉模型?如果是5%?10%?
甚至不清楚這是否一定是壞事。如果把訓練想像成從模型當前分布移向某個真實分布。如果某些東西在網際網路上是因為人們認為它有用,那麼實際發布出來的東西,希望是那些不是"5 5=11"的東西,而是"5 5=10"的東西。所以希望平均來說它確實把你推向好的方向,但顯然你無法真正區分這兩者。
當然還有極端情況:有人真的想破壞你的模型。有人試圖放出儘可能對模型有害的東西——如何通過過濾器進入模型但完全暗中無用。
11、評估的三個標準:損失為什麼如此好用
在AI的世界裡,如何知道你的模型真的變好了?這個看似簡單的問題,其實比訓練模型本身更難回答。
在評估(evaluation)方面,Nick強調:損失(loss)這個指標真的很好(也就是用"預測準確度"這個最基礎的指標來評估模型,比設計複雜的測試題更可靠有效)。
Nick喜歡的評估指標有三個特質:
• 第一,它真的在衡量你關心的東西嗎? 靠譜的指標並不容易,因為我們很快就會在評估上飽和(達到滿分或接近滿分)。AI整體有個模式:人們設定一個目標,達到目標,然後意識到目標不是你以為的那樣。Nick過去認為如果AI能解決編程面試題,可能就是AGI了,"因為那是我找工作要做的,大概就能做這份工作了。"結果是"不,你解決了那些,它狹窄得令人震驚,做不了大多數其他事情。"所以評估需要真正捕捉你關心的東西。
• 第二,需要低噪音(low noise),這出人意料地困難。低噪音(low noise)指評估結果穩定可靠,不會因隨機因素大幅波動,能清楚區分模型的真實能力差異。如果有100個問題,在上面評估模型,會非常嘈雜,很難做決策,因為最終會是"哦,置信區間很寬,很多東西統計上不顯著"。所以想要即使評估上相對小的差異實際上也重要的東西,基本上可以朝著任何有效的方向下降。原始GPT-4在MMLU(一個測試多學科知識的基準)上得分86.4%。Nick認為超過它的下一個模型是Gemini,90%。"那是個很大的差異,你完全能知道那些是不同的分數。"這挺有價值。
• 第三,真的想要快速且容易運行。這些是主要標準。想出滿足所有這些的評估挺難的。第一個最難。(a)必須回答你關心什麼,(b)對你關心的東西的常見答案,真的很難得到另外兩個。
比如Nick很想讓Claude真的擅長他的工作——它能否擅長管理團隊?"那我怎麼評估一個計劃?比如一個六個月的計劃?"他不知道。
Ankit提到AI醫生的例子。部分可以是回答考試題,答案可能是能在醫生考試上得100%或接近。但更難的評估是在與病人的長對話中,能否區分病人告訴你的信號和噪音,提取正確資訊,然後用它做診斷。這不只是診斷部分——它擅長那部分——而是這個噪音提取部分。為此需要有真實病人和它交談一段時間,不明顯如何真正做出好的評估。
Nick同意這很難,但強調損失真的很好:"如果你有一堆你認為很棒的醫生與病人交談的記錄,然後看模型在預測記錄上做得多好。如果你有100份記錄,會得到很多token,可以求平均,得到相當低的噪音。如果你把它降到很低,理論上你的模型就不如醫生生成記錄了。"
他認為這是個好創業想法。"所以我想讓你們去做。"
12、對齊的兩個維度:從理論到個性
對齊(alignment)這個詞在AI社區被反覆提及,但它到底意味著什麼?Nick的解釋,從AGI的本質開始。
什麼是對齊(alignment)?Nick退後一步解釋了他們在做什麼。
"我們在嘗試做AGI,我的意思是某種程度上能做人類能做的一切的AI。"人們有時看了很多科幻片,那會讓他們想到這些科幻電影,但Nick認為科幻電影實際上低估了它的影響。"總是有一個機器人像人類一樣。我想的是,你不會有十億個嗎?你可以到處複製它們。所以應該想像當你得到這個,突然每個人都能啟動一個有十億個和他們一樣聰明、在大多數事情上比他們聰明得多的公司。"
**他認為這對世界真的很有變革性,可以用很多方式使用。一個擔憂是:當你這樣做時,AI實際上在試圖做什麼?它的目標是什麼?**前面談了很多下一個詞預測——它在試圖預測下一個詞。那有點奇怪,不是我們真正想要的。那不是人類的目標。
對齊是如何讓模型分享你的目標,特別是一旦到達比你聰明的模型時尤其有趣。這是個困難的問題。可以從理論角度處理,也可以從經驗角度處理——拿現有模型說"它們在做我們想讓它們做的事嗎?"結果往往不是,所以有很多事情可以做,試圖搞清楚。
對齊還有另一個角度:實際上現在我們有模型,真的想讓它們做我們想做的事情,出於各種原因。所以另一個角度是控制模型的個性——說訓練這個模型時我們想讓它不是平均網際網路用戶,我們想讓它以非常特定的方式與人互動,這同樣很難編碼到代碼里。有很多不同技術來讓模型做到這一點。可以談談憲法AI(Constitutional AI),可以寫一套模型應該遵循的規則憲法。
這(模型應該遵循的規則)基本上是個提示詞(prompt),對吧?是說"這是我要附加到每一個——這是模型本身的系統提示,而不是在訓練時做的事情讓它產生不同結果,還是在後訓練時主動做?"兩者都是。憲法可以在訓練時用,但也會放在系統提示中。取決於——如果訓練到模型里會得到不同程度的魯棒性,相比在提示中可以添加、刪除或說"忽略所有之前的指令"之類的。
**如何思考在這些模型中體現誰的價值觀?**假設我們相信我們都有一些共同價值觀,或者也許我們都相信應該有。但也有很多合理的價值觀多樣性。如何思考AGI應該有什麼?甚至選哪些?
Nick認為這是個非常困難的問題,實際上有點下游於能夠選擇任何價值觀。"我幾乎把它想成——我聽到的一個我喜歡的類比是給車裝方向盤。如果沒有方向盤,你可能想先裝上方向盤,然後再搞清楚誰來開以及要去哪裡。把方向盤裝上真的很重要。"
另一個答案可能是你希望這些東西處於某種形式的民主控制之下。不想要一個人的價值觀——那似乎在走向反烏托邦。所以真正想要的是基本上能和很多人交談、從不同視角接受他們價值觀的東西,或者有某種非常通用的、明顯是好的價值觀,涉及在特定情況下徵求人們建議,而不是做那些,或者就是徵求人們在某些情況下應該做什麼,而不是像做那些。
或者也許就是隨著這些模型變得真的很強大,你可能希望它們做得更少——有時可能希望它們退後一步,而不是——而不是有模型對事物擁有大量控制的風險,你不想要它們。
13、預訓練中的對齊:一個權衡
在對齊策略的選擇上,有個有趣的時間維度問題。是在預訓練階段就嵌入價值觀,還是留到後訓練階段再精心雕琢?答案揭示了AI開發的一個核心權衡。
在思考如何實際做當前版本的對齊時,Nick提到大部分是後訓練的工作,應該是這樣。
"我通常這樣想:任何可以在後訓練做的事情你可能都應該做,因為疊代循環、取得進展的能力真的很快。可以嘗試一些東西,再試一次,可以試很多次。"在幾天或幾小時內就能疊代。
而要放到預訓練,必須做所有細緻的科學工作來降低風險,必須放到下一次運行,等幾個月,然後得到一個東西,如果錯了就真的很糟糕。另一個優勢是如果想做真的是複雜模型行為的干預,在預訓練時測試小模型的範式不work。小模型幾乎不能把句子組織好,完全不能。所以如果想讓它有確切想要的個性,你需要在足夠好的模型上——必須在聰明模型上。
但話說回來,在某個點,確實會有一些對齊的部分想要導出回預訓練,因為那可能是一種用更強的力量放進去的方法,更魯棒,或者更到智能里。如果把預訓練想成教模型變聰明,後訓練是調整個性,可以想像有些調整你實際上希望它成為如何學習的一部分,成為智能的一部分,也許需要為此創造更多。
**在預訓練中融入對齊會是什麼樣?**是早點添加你想要它採納的領域類型的額外數據嗎?基本上是。有篇論文叫《基於人類反饋的預訓練》(Pre-training on Human Feedback),可以把人類反饋特性融入預訓練來測試。基本上可以給它在後訓練給的所有資訊,混入預訓練,看有什麼效果。
這樣做失去的是靈活性。有時訓練這些然後和它們交談,然後做一個大量人和它交談並找到某些問題的廣泛過程。比如模型說"你絕對正確"太多,你想回去做那個。
Ankit認為疊代循環的點感覺是真正關鍵的點——在三個月後得到模型好壞的資訊,還是在一天或幾天后得到,有巨大差異。可以做很多這樣的,可能那也意味著計算少得多。可以並行嘗試各種後訓練策略。
Nick同意這是預訓練所有東西困難的一般原因:預訓練的一切都很難,因為有這種多個月的一次性機會。
14、未來的挑戰:不是範式轉變,而是那個該死的bug
當被問及未來幾年最大的挑戰時,Nick的答案出人意料。不是算法突破,不是計算瓶頸,而是一個可能深藏在代碼某處的bug。
在展望未來幾年要建設的東西時,Nick被問到有哪些已知要面對的問題,以及有哪些更模糊的、即將出現但不確定如何顯現的問題。
對Nick來說最重要的可能是範式轉變。"向更多RL的轉變是一個範式轉變,我認為可能還會有更多。很多人爭論當前範式是否足以讓我們到達AGI,我覺得我不知道,也許可能,但肯定還會有更多。如果答案就是你繼續規模化,在增長許多數量級的過程中沒有意識到任何東西,那會是個非常令人驚訝的轉折。"
但實際上讓Nick感到最緊張的是真正難解決的bug。"這也許對我來說有點意外,但單個bug可以讓你脫軌好幾個月。當你想到,模型要花幾個月訓練,你可能因為某個看起來很奇怪的東西失去整整一代——結果是你的代碼這部分不正確,你檢測不出來。"
在機器學習中找bug真的很難。但一些規模化的問題即使你知道它們在那裡也真的很難解決。比如如何為這種網路架構編寫單元測試?甚至接近測試的任何東西?
"我是說可以通過它發一個數據包確認是一樣的,可以在上面訓練一個小模型。"但即使在上面訓練小模型也不明顯。有個非常經典、非常簡單的ML bug是早期人們職業生涯會遇到的:他們網路里有10層,第7層連接到第9層而不是8到9,所以有些不正確的連接集,技術上模型仍然訓練,所有權重更新,所以是個有效模型,但不是正確的。那是個非常深奧奇怪的bug,實際上會很難找到。"那是你指的這種隨機bug嗎?"
"對,但你知道,乘以一百萬。"隨著東西變得更複雜,可能在某個kernel(核心,GPU上執行的最小計算單元)深處轉換了錯誤的精度(比如本該用32位浮點數計算卻用了16位,導致精度損失),導致模型在大規模爆炸,一個月後發現。"或者永遠發現不了。"
"我是說當然,如果它爆炸了,有幾萬行代碼,你怎麼可能追蹤下來?"所以那些是可能最讓Nick感到害怕的事情——某個微妙棘手的bug。"可能還有你確實知道的情況——它崩潰了,訓練模型時崩潰了,或者變慢了很多。作業慢了很多。那些東西也可能非常難調試。"
Nelson Elhage寫了一篇博客講一個我們早期遇到的被詛咒的bug,Nick很清楚地記得那個,因為他相當早遇到了,覺得"這看起來很難,能讓別人看看嗎?"一個月後他想"天哪,真高興我把那個交出去了,我永遠不可能——"
一個真正有用的能力是能夠深入任何事物到任何深度層次。但那是個相當稀有的技能。對Nick來說,他之前在torch.matmul層面工作(這是PyTorch框架提供的矩陣乘法函數),但不懂CUDA(NVIDIA的GPU編程語言),所以如果torch.matmul壞了,他無法深入torch.matmul搞清楚。通信也類似——他可以從A發送字節到B,但不了解底層網路協議(比如TCP/IP協議棧,控制數據如何在網路中傳輸的規則),所以如果底層網路協議壞了,他需要學習整個領域,需要理解數據包(packet,網路傳輸的基本單位)、TCP(傳輸控制協議)等所有這些不同的東西來調試。
令人驚訝地困難且很少人能做的一件事是擁有從理解ML應該如何工作、學習動態應該是什麼,一直到知道字節、理解字節應該如何在機器間移動的整個堆棧。
15、團隊構成:工程師永遠短缺
當話題轉向團隊組成時,Nick的回答打破了很多人對AI實驗室的刻板印象。外界以為這裡都是博士扎堆,事實卻大相徑庭。
在談到團隊不同背景的人時,Nick給出了一個可能讓人意外的答案。
"這是個混合,我認為我們最需要的是工程師。幾乎在這個領域的整個歷史中一直如此。事實就是你投入更多計算,東西基本會奏效。研究人員就像'酷,不錯'。而讓它正確是真正的挑戰——讓它正確其實不是ML問題。實際的架構非常簡單,你甚至不需要理解數學就能實現它。只需要得到正確的實現,然後就有了一個工程問題:如何在大規模實現這個,並行化所有東西,並檢查它是正確的。"
Nick認為還有另一種工程角度,他認為是在網站或什麼東西上真正快速疊代,"我認為那是個重要技能集,可能對創業很重要,必須快速失敗,嘗試一堆不同的東西,沒有一個技術上特別困難。"但我們最需要或尋找的技能集是這種能夠解決真正困難工程問題的。
他們是在快速成長的公司工作過、有類似經驗的人,還是學術界的人,還是從哪裡來?"此時我們其實只是從其他地方雇了一堆之前做過這個的人,那是簡單的答案。"但這裡的"做過這個"是指必須在AI公司,還是也包括比如在Meta工作的人,不是AI團隊,但他們運營某個其他分布式系統,在5-10年前達到了網際網路規模?
"更像是我們心裡有個特定角色。比如我想讓運行在Jax上高效訓練(Jax是Google開發的一個機器學習框架),雇一個做過Jax的人會很棒,或者在另一家公司優化Jax堆棧讓它非常高效的人。"現在我們到了Anthropic足夠知名、能僱到這些人的點,而且領域足夠大,有有專業知識的人。
早期有趣的一件事是我們從各種背景雇了很多人,Nick認為聰明且工作真的很努力的人可以學得相當快,但必須想要持續學習。"我們雇了很多物理學家,比如理論物理學家,他們來做residency(類似實習項目),學習編程,他們真的很聰明,可以做真正出色的工作。"