四杯咖啡:奶油從分層、起卷鬚到完全混勻 左邊寫著 27 + 3 和 2.23 bits/char。右邊是從上往下看的四隻杯子,取自咖啡自動機模擬的四個時刻:奶油浮在上半、邊界開始起伏、出現大片捲曲的混合帶、最後全部變成均勻的淺褐色;複雜度最高的第三隻杯子帶強調色的邊。 27 + 3 篇論文 2.23 bits/char 預測 = 壓縮

30u30 是 GitHub 上一個 1.6k star 的學習倉庫1,README 第一行寫著:

“If you really learn all of these, you’ll know 90% of what matters today” - Ilya Sutskever

下面是 30 天的課表,一天一篇論文,每篇配從零寫起的實現、筆記和練習。第 1 天是 Karpathy 的字元級 RNN,第 13 天是 Attention Is All You Need,最後兩天是 PPO 和 RLHF。看起來就是一份現代 AI 的必讀清單。

可是第一週的七篇裡,後四篇講的都不是網路怎麼搭:兩篇講“最小描述長度”,一篇是 Scott Aaronson 的部落格,講一個封閉系統的“複雜程度”為什麼會先升後降,還有一篇用一杯咖啡加奶油的模擬來量化這件事。一份 AI 清單為什麼要讀咖啡?這真的是 Ilya 開的清單嗎?“90%”又指什麼?

我們先從清單的來歷查起,再看它到底由什麼組成。

一、清單的來歷

原單已經不存在

這份清單的出處是 John Carmack。他在一次訪談裡說,他當年向 Ilya Sutskever 要一份入門深度學習的閱讀清單,Ilya 給了他“大約 40 篇論文”,並說了 README 裡那句話。但是郵件丟了:Meta 有兩年自動刪除郵件的策略,他手裡只剩一個夾子,裡面列印了其中一部分2。Ilya 和 OpenAI 都沒有公開過這份清單。

流傳的是 27 條

2024 年,一份 27 條的清單開始在 X 和 LinkedIn 上流傳,有人說它是一位 OpenAI 研究員給新人的閱讀材料2,在網上轉了好幾周3。儲存這份清單的存檔頁寫得很直白:“It is not confirmed if this is the actual list.”4 有人認為它缺了一節元學習,這一點我沒有找到原始出處。

這 27 條裡有一條很特別。第 26 條不是一篇論文,原文是:

PAGE 434 onwards: Komogrov Complexity

它連結到 Shen、Uspensky、Vereshchagin 的數學專著《Kolmogorov Complexity and Algorithmic Randomness》的掃描版5。這本書 500 多頁,清單隻讓人從第 434 頁讀起。我們下載了這份 PDF 去翻:第 434 頁正好是第 14 章“演算法統計”(Algorithmic statistics)的第一頁,後面跟著兩篇講隨機性的附錄,到參考文獻為止一共不到 60 頁。清單要的不是“Kolmogorov 複雜度是什麼”,而是這本書最後講的那一章。 這一章講什麼,後面會用到。

30u30 又補了三篇

30u30 的 30 篇,是這 27 條再加上三篇:Dropout(第 12 天)、PPO(第 29 天)和 RLHF(第 30 天)。倉庫的清單檔案仍然叫“Ilya Sutskever’s 30 Papers Reading List”,第 26 條則寫成了整本書,“從 434 頁起”這幾個字沒有了。

30 篇清單的三個版本 左邊是 Carmack 收到的約 40 篇原單,已經丟失;中間是 2024 年流傳的 27 條,第 26 條寫著從 434 頁起讀 Kolmogorov 複雜度那本書;右邊是 30u30 的 30 篇,補了 Dropout、PPO、RLHF,第 26 條變成了整本書。 Carmack 收到的原單 2024 年流傳的版本 30u30 倉庫 約 40 篇 “學會這些,就知道今天 重要內容的 90%” 郵件被 Meta 兩年自動 刪除策略刪掉了 虛線:這份原單已經不存在, 只剩 Carmack 口述和一夾子列印件。 來源:Carmack 的訪談 條目 27 條 1 The Annotated Transformer 2 Complexodynamics … … 25 Machine Super Intelligence 26 PAGE 434 onwards: Komogrov Complexity 27 CS231n 存檔頁原話:“It is not confirmed if this is the actual list.” 條目 30 天 7 The Coffee Automaton 12 Dropout + … … 26 Kolmogorov Complexity (整本 500 頁的書) 29 PPO + 30 RLHF + + 是倉庫補的三篇,原單裡沒有; 第 26 條丟了“從 434 頁起”。
圖 1 · “Ilya 的 30 篇”其實是三個版本:丟失的約 40 篇、來源未確認的 27 條、再由 30u30 補成的 30 篇

所以“Ilya 的 30 篇”至少要打兩個折扣:27 條本身來源沒有確認,30 篇裡有 3 篇是倉庫作者補的。“90%”是 Carmack 轉述的一句口頭話,也不是誰量出來的數字。

不過 27 條的內容本身很有意思。它不像是一個人憑印象列出的“經典論文”,因為裡面有幾條怎麼看都不像入門讀物。這份清單到底由什麼組成?

二、清單的構成

把 27 條按內容分一下組:

流傳的 27 條,按內容分組
分組條目條數
迴圈網路與注意力Karpathy 的 RNN 部落格、Olah 的 LSTM 部落格、RNN Regularization、Bahdanau 注意力、Attention Is All You Need、The Annotated Transformer6
卷積網路與視覺AlexNet、ResNet、ResNet v2(Identity Mappings)、空洞卷積、CS231n 課程5
集合、指標、記憶、關係Pointer Networks、Order Matters、Neural Turing Machines、Relational Reasoning、Relational RNN、訊息傳遞網路(量子化學)6
工程與應用GPipe(流水線並行)、Deep Speech 2(語音識別)2
規模Kaplan 的 Scaling Laws(2020,清單裡最新的一篇)1
壓縮、複雜度與智慧的定義
最小描述長度Hinton & van Camp 1993;Grünwald 的 MDL 教程(80 頁)2
複雜度Aaronson 的部落格 The First Law of Complexodynamics;咖啡自動機論文2
演算法資訊理論Kolmogorov 複雜度專著,從第 434 頁(第 14 章“演算法統計”)起,約 57 頁1
生成模型Variational Lossy Autoencoder1
智慧的定義Shane Legg 的博士論文 Machine Super Intelligence(200 來頁)1

沒有的:GPT 系列、BERT、擴散模型、強化學習、對齊、指令微調。

表 1 · 27 條裡有 7 條講壓縮和複雜度,篇幅最重的幾條都在這一組

有兩點和“AI 必讀清單”的印象不一樣。

第一,它停在 2020 年。 最新的一篇是 Kaplan 的 Scaling Laws。GPT-2、GPT-3、BERT 都不在裡面,強化學習、對齊、指令微調也不在。30u30 補上的 PPO 和 RLHF,正是大眾心目中“ChatGPT 是怎麼來的”那一段,原單裡沒有。

第二,理論部分篇數少,篇幅卻最重。 架構類的 19 條大多是十幾頁的會議論文;理論類的 7 條裡有一篇 80 頁的教程、一篇 200 來頁的博士論文、一本專著的最後一章。如果真按“一天一篇”讀,這幾天會遠遠超出一天。

這 7 條理論分別出自神經網路(Hinton)、統計學(Grünwald)、計算理論(Aaronson、Kolmogorov 那本書)和通用人工智慧(Legg)幾個不同的圈子,放在一起讀,它們其實在回答同一個問題。我們從清單裡最“正常”的一篇說起:第 1 天的字元級 RNN。

三、預測與壓縮

現象:語言模型的損失是一個位元數

Karpathy 那篇部落格6訓練的是一個字元級 RNN:讀入前面的字元,輸出下一個字元的機率分佈。訓練時最小化的是交叉熵,也就是模型給真實下一個字元的機率取負對數,再求平均。

這個數有一個很具體的含義。如果對數以 2 為底,它的單位是位元。假設模型給真實字元的機率是 1/4,−log⁡214=2-\log_2 \frac14 = 2,這個字元就“花了 2 個位元”。

為什麼能這樣說?因為有一種編碼方法叫算術編碼:只要傳送方和接收方手裡有同一個預測模型,就能把每個字元編碼成大約 −log⁡2p-\log_2 p 個位元,整段文字的總長度和所有字元的 −log⁡2p-\log_2 p 之和只差幾個位元。接收方用同一個模型逐字解碼,就能還原原文。

換句話說,一個預測模型加上算術編碼,就是一個無失真壓縮器。交叉熵越低,壓縮出來的檔案越小。

實驗:字元模型和 gzip 比一比

光說不夠直觀,我們拿 Karpathy 用過的同一份資料做個實驗7:111 萬個字元的莎士比亞文字。

預測模型用最簡單的那種:看前面 kk 個字元,按這個上下文以前出現過的次數來估計下一個字元的機率(kk 叫“階”)。模型邊讀邊更新計數,解碼端也能按同樣的順序重建出同樣的計數,所以把每個字元的 −log⁡2p-\log_2 p 加起來,就是這個壓縮器真實的碼長。和它比的是 gzip、xz、bzip2 三個通用壓縮器的實際檔案大小。

字元模型的碼長與通用壓縮器對比 同一份 111 萬字元的莎士比亞文字。自適應字元模型從 0 階到 6 階,每字元平均碼長依次為 4.78、3.55、2.81、2.36、2.23、2.29、2.41 位元;gzip、xz、bzip2 分別為 3.11、2.61、2.36 位元。 tiny shakespeare 1,115,394 個字元,每字元平均要幾個位元 0 1 2 3 4 5 0 階(只看字元頻率) 4.78 1 階 3.55 2 階 2.81 3 階 2.36 4 階 2.23 5 階 2.29 6 階 2.41 gzip -9 3.11 xz -9 2.61 bzip2 -9 2.36 上面七行:邊讀邊學的字元模型,碼長 = 它給每個字元的機率取 −log₂ 再相加。 下面三行:通用壓縮器的實際檔案大小。4 階模型配上算術編碼,比三者都小。
圖 2 · 預測得越準,碼長越短:4 階字元模型 2.23 位元 / 字元,勝過 gzip、xz、bzip2;但上下文再加長,碼長反而變長

4 階模型每個字元只要 2.23 位元,比 gzip 的 3.11 少了 28%,也勝過 bzip2 和 xz。我們沒有寫任何關於壓縮的程式碼,只是把“預測下一個字元”做得更準,壓縮率自己就上來了。

這也是 Karpathy 這篇值得放進清單的理由之一:“預測下一個 token”和“壓縮資料”是同一件事的兩種說法。 一個模型對資料理解得越好,就越能把資料壓短。

問題:上下文更長,為什麼反而變差

圖 2 裡還有一個反常的地方:5 階、6 階模型比 4 階差。看的上下文更長,預測本應更準才對。

原因在於“邊讀邊學”。6 階模型的上下文有幾十萬種,每一種都要從零開始積累計數,在攢夠計數之前,它的預測都很差,這些差的預測都算進了碼長裡。4 階模型的上下文少,學得快,總賬反而更划算。

這裡出現了一筆我們之前沒有算的賬:模型本身也要花位元。 更復雜的模型能把資料壓得更短,但它自己的“學費”也更貴。總碼長 = 描述模型的代價 + 用模型描述資料的代價。這筆賬怎麼算,就是清單裡那兩篇“最小描述長度”在講的事。

四、兩部分碼:規律和噪聲

最小描述長度

Hinton 和 van Camp 1993 年那篇8的標題就是答案:透過最小化權重的描述長度,讓神經網路保持簡單。他們把一個網路的總代價寫成兩部分:把權重發出去要多少位元,加上用這些權重描述訓練資料的誤差要多少位元。權重記得越精確越費位元,所以他們給權重加噪聲,只保留真正需要的精度。

Grünwald 的教程9把這個想法一般化,叫兩部分碼:

L(D)=L(H)+L(D∣H)L(D) = L(H) + L(D \mid H)

L(H)L(H) 是描述假設(模型、規律)本身的長度,L(D∣H)L(D \mid H) 是知道這條規律之後,再描述資料還需要的長度。最好的假設是讓兩部分之和最短的那個。規律太簡單,第二部分很長;規律太複雜,把噪聲也當成規律記下來,第一部分就會膨脹。上一節 6 階模型輸掉的,正是第一部分。

清單指向的 Kolmogorov 那本書第 14 章“演算法統計”5,講的是同一件事的嚴格版本。那一章開頭第一句就是:數理統計要解決的問題是,給定一些實驗資料,找一個合理的理論來解釋它。它把“理論”定義為一個包含這份資料的集合 AA,描述長度是“寫出這個集合的程式長度”加上“在集合裡指出是哪一個”的 log⁡2∣A∣\log_2|A| 位元。好的理論讓資料在集合裡看起來像一個毫無特點的“典型成員”,也就是說,剩下的那部分是純噪聲,再也壓不下去了。

一個剛好只有規律和噪聲的例子

這套說法聽起來抽象,但 30u30 的第 25 天恰好提供了一個完美的例子。那一天講 Scaling Laws,訓練指令碼用的合成資料是這樣生成的:64 個從 0 到 127 均勻隨機抽取的數,然後把每第 4 個數改成和前一個一樣。

一條訓練序列的兩部分描述 上面是 30u30 Day 25 合成資料裡的一條序列,每第 4 個數字照抄前一個,其餘是隨機數。下面把它拆成兩部分:規律只需一句 x[4k+3]=x[4k+2],剩下 47 個隨機目標每個 7 位元,共 329 位元,摺合每個目標平均 3.62 nats。 30u30 Day 25 的一條訓練序列(64 個 token,詞表 128) 1 120 80 87 87 74 99 106 106 7 38 36 36 116 0 63 63 17 16 102 15 15 104 38 43 43 92 32 126 126 61 64 74 74 33 65 127 103 103 89 79 43 43 59 27 108 108 109 78 14 14 49 56 4 18 18 124 59 103 103 105 80 56 56 34 63 48 48 強調色的格子:每第 4 個 token 照抄前一個。其餘 48 個是均勻隨機數,沒有任何規律可學。 第一部分:規律 第二部分:按規律之後剩下的 x[4k+3] = x[4k+2] 一句話就寫完,幾個位元,與序列多長無關。 模型學會這一條,16 個位置的損失降到 0。 47 個預測目標 × log₂128 = 329 bit 每個隨機 token 必須原樣記下,壓縮不了。 平均到 63 個目標:47/63 × ln128 = 3.62 nats。
圖 3 · 兩部分碼:一份資料 = 規律(短)+ 按規律編碼後剩下的噪聲(長)。模型能學走的只有第一部分

這份資料的兩部分碼可以直接寫出來。規律只有一條,幾個位元就夠;剩下的 47 個隨機數(第 1 個數不需要預測,16 個照抄位置不用記),每個要 7 位元,一共 329 位元,再怎麼壓也壓不掉。換成訓練時用的自然對數單位,平均每個預測目標至少要 3.62 nats。無論模型多大,損失都不可能低於 3.62。

實驗:這份資料上能看到規模定律嗎

30u30 用這份資料訓練 4 個尺寸的模型,想“驗證 Kaplan 的 L(N) 冪律”。Kaplan 的規模定律10說,模型引數量 NN 增大時,損失按冪律下降:

L(N)=L∞+(NcN)αL(N) = L_\infty + \left(\frac{N_c}{N}\right)^{\alpha}

L∞L_\infty 是不可約的損失,正是兩部分碼裡壓不掉的噪聲部分;(Nc/N)α(N_c/N)^\alpha 是模型還沒學到的規律。冪律意味著資料裡的規律有一條很長的尾巴:模型每大一倍,就能多學到一批更細、更少見的規律。

而第 25 天的資料只有一條規律。我們按同樣的設定寫了一個同構的小 Transformer,4 個尺寸,先按 30u30 的預設訓練 50 步,再訓練 3000 步,並且額外拿新抽的同分布序列測一次:

第 25 天合成資料上,模型大小與損失的關係 橫軸是 4 個模型的引數量。訓練 50 步時,損失依次為 4.53、4.02、3.65、3.63,逼近 3.62 的下限。訓練 3000 步後,訓練集損失降到 3.05、1.27、0.06、0.06,但在新抽的同分布序列上,損失是 4.26、7.16、10.33、9.14,遠高於下限。 四個尺寸的模型,損失(nats)對引數量(橫軸對數) 0 2 4 6 8 10 d=64 · 9.8萬 d=128 · 39萬 d=256 · 157萬 d=384 · 354萬 4.26 7.16 10.33 9.14 0.06 0.06 訓練 3000 步 新抽的同分布序列 訓練 50 步(預設) 訓練集,停在下限 下限 3.62 訓練 3000 步 訓練集(虛線) 50 步:大模型只是更快學會複製規律,四個點擠在 3.62 附近。3000 步:訓練損失一路降到 0.06, 看上去“越大越好”,其實是把 2048 條序列裡的隨機數背了下來;換新序列一測,損失升到 9 以上。
圖 4 · 損失壓不過噪聲下限:訓練集上“越大越好”的曲線,是模型把隨機數背下來了

按 30u30 的預設設定訓練 50 步,四個模型的損失是 4.53、4.02、3.65、3.63。把損失拆開看,大模型在照抄位置上的損失降到了 0.02,在隨機位置上仍然是 4.86,約等於 ln⁡128=4.85\ln 128 = 4.85。也就是說,大模型只是更快學會了那條複製規律,然後停在 3.62 的下限上。四個點之間的差別是“學得快慢”,不是冪律。

訓練到 3000 步,情況更有意思。訓練集上的損失變成 3.05、1.27、0.06、0.06,模型越大越低,甚至遠遠低於 3.62 的下限,乍看像是規模定律在起作用。但換一批同樣方式生成的新序列去測,損失是 4.26、7.16、10.33、9.14,比瞎猜(4.85)還差。訓練資料只有 2048 條序列,大模型把裡面的隨機數全背了下來。

用兩部分碼的話說:背下來的隨機數被塞進了模型的“規律部分”,第一部分膨脹,換到新資料上毫無用處。這正是 Hinton 要給權重“計費”的原因。

所以這份資料畫不出規模定律,原因不在模型或訓練步數,而在資料本身:規模定律是資料性質的反映。 自然語言裡的規律有長長的尾巴,模型越大,學到的越多;一份只有一條規律的資料,學會那一條就到頭了。

同一條線上的另外兩篇

用這個視角回頭看清單,另外兩篇也落在同一條線上。

VLAE11(變分有損自編碼器)研究的是資訊該放在哪:給影象學一個隱變數編碼時,故意限制解碼器只能看區域性,讓隱變數只存全域性結構,紋理這類區域性細節交給解碼器按機率補上。標題裡的“有損”,就是有意識地決定哪些位元屬於“規律”、哪些屬於可以隨機生成的“細節”。

Legg 的博士論文12給“智慧”下了一個形式化定義:一個智慧體在所有可計算環境裡的平均表現,每個環境按 2−K(μ)2^{-K(\mu)} 加權,K(μ)K(\mu) 是描述這個環境的最短程式長度。越簡單的環境權重越大。也就是說,智慧被定義成“在簡單規律主導的世界裡表現好”,又回到了描述長度。

到這裡,“壓縮”這條線在清單裡已經很清楚了。剩下兩篇 Aaronson 的文章看上去離 AI 最遠,為什麼講咖啡的論文也在裡面?

五、複雜度的先升後降

現象:熵一直在漲,有意思的東西卻在中間

Aaronson 2011 年的部落格13從一個觀察出發:往咖啡裡倒奶油,一開始奶油浮在上面,界線分明;攪一會兒,出現了漂亮的卷鬚和漩渦;最後整杯變成均勻的淺褐色。熵從頭到尾都在增加,這是熱力學第二定律。但我們直覺上覺得“複雜”“有意思”的,是中間那個階段,開頭和結尾都很無聊。

熵描述不了這個“有意思”。Aaronson 要的是另一個量,它在開始和結束時都小,只在中間大。他用的正是上一節的兩部分碼:一個狀態的“複雜度”,是它兩部分描述裡第一部分(規律部分)的長度。開頭的狀態規律很簡單(上面奶油、下面咖啡),結尾的狀態是純噪聲(規律部分也很短,“均勻隨機”),只有中間的卷鬚需要很長的規律去描述。

嘗試:用 gzip 量出來

2014 年他和 Sean Carroll 等人把這個想法做成了實驗14:一個 100×100 的網格,上半是奶油、下半是咖啡,每一步隨機交換相鄰兩個不同的格子。

兩個量都用 gzip 估計:熵是整個細網格壓縮後的大小;表觀複雜度是先把網格“粗粒化”(每個格子取周圍一片的平均值,再分成“咖啡 / 混合 / 奶油”三檔)之後的壓縮大小。粗粒化相當於眯著眼看杯子,看不清單個分子的隨機位置,只看得見宏觀的形狀,壓縮後的大小就近似那個“規律部分”。

我們按論文的設定自己實現了一遍:

咖啡自動機裡熵和表觀複雜度隨時間的變化 上排是互作用模型在 t=0、691、6437、60000 時粗粒化後的樣子:奶油和咖啡先分層,中間出現一條起伏的混合帶,最後整片變成均勻的混合。下排兩條曲線:細網格的 gzip 大小(熵)一路上升到 1723 位元組後持平;粗粒化圖的 gzip 大小(表觀複雜度)從 48 升到 645 再降回 56。 粗粒化後的樣子(100×100 網格,9×9 視窗平均,分 3 檔) t = 0 複雜度 48 B t = 691 複雜度 174 B t = 6437 複雜度 645 B t = 60000 複雜度 56 B 淺 = 奶油,深 = 咖啡,中間色 = 混合 gzip 後的位元組數隨時間(橫軸對數) 0 600 1200 1800 0 10 100 1000 10000 60000 熵:細網格 gzip,一路上升到 1723 表觀複雜度:粗粒化後 gzip,48 → 645 → 56 sweep 次數
圖 5 · 熵一路上升,表觀複雜度先升後降:最“有結構”的時刻在中間

熵從 46 位元組漲到 1723 位元組後持平;表觀複雜度從 48 位元組升到 645 位元組,又降回 56 位元組。先升後降復現出來了。

問題:這個量有多可靠

“複雜度先升後降,所以生命和智慧出現在宇宙的中間階段”是這篇論文最常被轉述的結論,30u30 的清單檔案也是這麼寫的。但論文字身要謹慎得多,而且我們的復現也暴露了它的軟肋。

第一,峰值很尖,而且和分檔的門檻有關。 圖 5 的峰值只出現在 t = 6437 附近一個很窄的區間。從圖上看,那時大片區域的平均濃度正落在兩檔的分界附近,一點點隨機漲落就讓格子在兩檔之間來回跳,gzip 把這些跳動也算成了“結構”(這是我們根據圖的判斷)。論文第 6 節專門討論了這種“閾值偽影”,改用 7 檔加按行取多數的修正。我們用修正後的量再算一遍,互作用模型的複雜度只從 57 升到 87,起伏小了很多。

第二,對照組沒有復現出來。 論文還有一個對照模型:奶油粒子各自獨立隨機遊走、可以重疊。論文的結論是,修正之後這個模型的複雜度一直很小,並且在附錄裡給了證明,由此說明“粒子之間的相互作用才產生宏觀複雜度”。我們的小規模復現裡,修正後的對照模型複雜度反而比互作用模型還高(最高 265 位元組),換成更大的視窗也是如此。可能的原因是重疊計數的漲落比 0/1 網格大,更容易跨檔,論文用的網格也更大。

這兩點說明,表觀複雜度這個量很依賴“怎麼眯眼”:視窗多大、分幾檔、怎麼修正。作者自己也把“為互作用模型證明先升後降”留作了開放問題。這篇論文在清單裡的價值,恐怕不在“解釋了生命為什麼存在”,而在它把“結構”這個模糊的直覺落成了一個可以計算的量,也就是兩部分碼的第一部分,同時誠實地展示了這樣做有多難。

回到清單

現在回頭看第一節那個“PAGE 434 onwards”。演算法統計這一章講的是怎樣給資料找到合理的規律部分;Aaronson 的複雜度用的就是這個規律部分的長度;MDL 用它來選模型;Kaplan 的公式裡,它是那一項會隨模型變大而減少的損失。清單的理論部分像是有意按這條線挑出來的。

2023 年,Ilya 在 Simons Institute 做過一個演講,題目叫《An Observation on Generalization》15。他用壓縮來解釋無監督學習為什麼有效:Kolmogorov 複雜度是理想的壓縮器,用梯度下降訓練的大網路是它的一個近似。這和清單的理論部分是同一個視角。需要說明的是,把清單和這次演講聯絡起來是我們的推斷,Ilya 本人並沒有這樣解釋過這份清單。

六、清單之外的東西

清單停在 2020 年,這一點在“規模”這條線上最明顯。

Kaplan 2020 年的論文除了給出 L(N)L(N),還回答了一個實際問題:算力增加時,錢該花在更大的模型上,還是更多的資料上?他的答案是模型增長得更快,算力每增加 10 倍,模型大約擴大 5 倍,資料只增加約 2 倍。兩年後 DeepMind 的 Chinchilla16重新做了這組實驗,得出的結論是兩者應該同比例增長,大約每個引數配 20 個 token。按這個結論,GPT-3 這一代模型普遍“模型太大、資料太少”。

30u30 第 25 天的筆記裡提到了這個修正,README 末尾還寫著下一天是“Day 26: Chinchilla”,但倉庫裡的第 26 天實際是 Kolmogorov 複雜度,Chinchilla 被放進了“即將推出”的附加篇。這個連結大概是調整課表時留下的。

同樣不在清單裡的,還有 30u30 補上的強化學習和 RLHF。倉庫在第 29 天特意註明:“與 InstructGPT、ChatGPT 的聯絡是我們事後加的,不是 2017 年論文裡的內容。”這個說明很有必要。如果把補上的三篇去掉,原清單講的幾乎全是“怎樣從資料裡學到規律”,也就是預訓練這一半;至於怎樣讓模型聽話、對齊,原清單沒有涉及。

七、30u30 作為學習材料

最後簡單看一下倉庫本身。每一天的目錄結構相同:一份講解 README、一份論文筆記、一個從零寫起的實現(大多是 NumPy,後面幾天用 PyTorch)、5 道帶答案的練習和一個 Jupyter notebook,全倉庫的實現程式碼約 1.5 萬行。許可證是 CC BY-NC-ND 4.0,可以閱讀和轉發,不能商用,也不能釋出改編版本。

我們讀了和本文主線相關的幾天,講解部分寫得認真,比如第 7 天把論文第 6 節的閾值偽影講得很清楚。實現裡也有幾處值得注意:

和本文主線相關的幾天,實現裡值得注意的地方
位置現象影響
第 7 天
咖啡自動機
為了提速,一次抽 n²/4 個格子各配一個鄰居,挑出值不同的對後一次性交換,沒有排除同一格同時出現在兩對裡。按同樣邏輯重寫測試(50×50):奶油格數第 0、10、100、1000 步依次為 1250、1254、1230、1241奶油會憑空增減,粒子數不守恆;註釋裡寫的是 non-conflicting swaps
第 25 天
規模定律
合成資料只有一條複製規律,其餘是均勻隨機數;預設訓練 50 步原理上畫不出 L(N) 冪律,見第四節
第 26 天
Kolmogorov
清單條目去掉了“從 434 頁起”,內容是 Huffman 編碼、算術編碼和壓縮距離聚類沒有覆蓋清單真正指向的第 14 章演算法統計
清單檔案AlexNet 條目下多了一個無關連結 arXiv 1211.5063(《On the difficulty of training recurrent neural networks》);第 25 天 README 連結的“Day 26: Chinchilla”不存在編輯殘留,不影響內容

30u30 的程式碼我們沒有直接執行,表中第一行是照它的邏輯重寫後測的。

表 2 · 講解寫得認真,但實現裡有一處會讓咖啡自動機的粒子數不守恆

如果想順著本文的主線讀原文,可以按這個順序:Karpathy 的部落格,Hinton 1993,Grünwald 教程的第 1 章,Kolmogorov 那本書的第 14 章,Aaronson 的部落格,咖啡自動機論文,最後是 Legg 論文裡定義通用智慧的那一章。

小結

  1. “Ilya 的 30 篇”是哪來的? Carmack 收到過約 40 篇,原單已丟;流傳的 27 條來源沒有確認;30u30 又補了 Dropout、PPO、RLHF 三篇。
  2. 清單由什麼組成? 19 條架構和技巧,1 條規模定律,7 條壓縮和複雜度理論。它停在 2020 年,沒有 GPT、強化學習和對齊;理論部分篇數少,篇幅最重。
  3. 為什麼從字元級 RNN 開始? 預測下一個字元就是壓縮:4 階字元模型配上算術編碼,每字元 2.23 位元,勝過 gzip、xz、bzip2。
  4. 模型越複雜越好嗎? 不一定,模型本身也要花位元。兩部分碼把資料拆成規律和噪聲,最好的模型讓兩部分之和最短。
  5. 規模定律來自哪裡? 來自資料裡規律的長尾。30u30 第 25 天的合成資料只有一條規律,所有模型都停在 3.62 nats 的噪聲下限,畫不出冪律;訓練久了,大模型只會把噪聲背下來。
  6. 為什麼讀咖啡? 熵一路上升,但“結構”先升後降;Aaronson 用粗粒化後的壓縮大小去量它。這個量很依賴粗粒化的選擇,我們的復現只復現了一半。
  7. 這份清單的主線是什麼? 除了架構史,它還有一條壓縮的主線:學習就是找到資料的規律部分。這和 Ilya 2023 年的演講一致,但這是我們的讀法。

參考資料

參考資料

  1. Ojhaharsh/30u30GitHubgithub.com ↗本文依據 2026-02-19 的最新提交 0edf4bf。清單在 ilya_30_papers.md,每天的內容在 papers/<NN>_*/。https://github.com/Ojhaharsh/30u30 ↩

  2. Deep Learning Legends: Ilya's List, or 90% of Everything That Matters in AISubstackgonzoml.substack.com ↗轉引 Carmack 2023 年訪談裡的原話:約 40 篇、90%、郵件被 Meta 的兩年自動刪除策略刪掉。https://gonzoml.substack.com/p/deep-learning-legends-ilyas-list ↩ ↩2

  3. The 27 papersLessWrong · 2024-05-30lesswrong.com ↗https://www.lesswrong.com/posts/t4ZBjAjXk2NqqAqJ7/the-27-papers ↩

  4. Ilya Sutskever's reading list(27 條存檔)punkx.orgpunkx.org ↗2024 年流傳版本的存檔,第 26 條原文是 “PAGE 434 onwards: Komogrov Complexity”;頁面寫明 “It is not confirmed if this is the actual list.”https://punkx.org/jackdoe/30.html ↩

  5. Kolmogorov Complexity and Algorithmic RandomnessA. Shen, V. A. Uspensky, N. Vereshchagin · AMS Mathematical Surveys and Monographs 220 · 2017lirmm.fr ↗清單連結的掃描版,共 519 頁。PDF 第 434 頁是第 14 章 Algorithmic statistics 的開頭(書頁碼 425)。https://www.lirmm.fr/~ashen/kolmbook-eng-scan.pdf ↩ ↩2

  6. The Unreasonable Effectiveness of Recurrent Neural NetworksAndrej Karpathy · 2015-05-21karpathy.github.io ↗https://karpathy.github.io/2015/05/21/rnn-effectiveness/ ↩

  7. char-rnn 的 tiny shakespeare 資料GitHubraw.githubusercontent.com ↗圖 2 的實驗文字,1,115,394 個字元。https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt ↩

  8. Keeping Neural Networks Simple by Minimizing the Description Length of the WeightsGeoffrey Hinton, Drew van Camp · COLT 1993cs.toronto.edu ↗https://www.cs.toronto.edu/~hinton/absps/colt93.pdf ↩

  9. A Tutorial Introduction to the Minimum Description Length PrinciplePeter Grünwald · 2004-06-04arxiv.org ↗80 頁。兩部分碼在第 1 章,邊學邊編碼(prequential)的形式也在這裡講。https://arxiv.org/abs/math/0406077 ↩

  10. Scaling Laws for Neural Language ModelsJared Kaplan 等 · OpenAI · 2020-01-23arxiv.org ↗https://arxiv.org/abs/2001.08361 ↩

  11. Variational Lossy AutoencoderXi Chen 等 · 2016-11-08arxiv.org ↗https://arxiv.org/abs/1611.02731 ↩

  12. Machine Super IntelligenceShane Legg · 博士論文 · 2008vetta.org ↗https://www.vetta.org/documents/Machine_Super_Intelligence.pdf ↩

  13. The First Law of ComplexodynamicsScott Aaronson · 2011-09-23scottaaronson.blog ↗https://scottaaronson.blog/?p=762 ↩

  14. Quantifying the Rise and Fall of Complexity in Closed Systems: The Coffee AutomatonScott Aaronson, Sean Carroll, Lauren Ouellette · 2014-05-27arxiv.org ↗https://arxiv.org/abs/1405.6903 ↩

  15. An Observation on GeneralizationIlya Sutskever · Simons Institute · 2023-08simons.berkeley.edu ↗演講用壓縮來解釋無監督學習:Kolmogorov 複雜度是理想的壓縮器,大網路是它的近似。https://simons.berkeley.edu/news/observation-generalization ↩

  16. Training Compute-Optimal Large Language ModelsJordan Hoffmann 等 · DeepMind · 2022-03-29arxiv.org ↗https://arxiv.org/abs/2203.15556 ↩