TL;DR:GSM1k 研究指出 benchmark 飽和有一大塊是污染,不是真實能力提升。但比污染更值得想的是:我們從來沒有方法驗證模型「學會了一件事」,只有方法量它「在這個分布上會不會答」。每出一份更難的 benchmark,治理面其實沒前進。
每次新模型發表的 blog 我都會點開看一下,幾乎都長同一張表。GSM8k 99%、MMLU 92%、HumanEval 衝到接近 100。看久了會覺得這是某種 ritual,每代都會再比上一代好看一點。
可是把同一個模型放回真實工作裡,丟一份沒進 GitHub 的內部 codebase、丟一份它沒看過格式的會議筆記,它還是會犯那種會讓你嘆氣的錯。這件落差其實已經不是新聞了,奇怪的是每一輪 release blog 還是把分數寫成 state of the art,我每次看到都會有點 ???。我自己在這幾輪 release 之間,慢慢把這個怪怪的感覺磨成一個比較確定的想法:飽和大概不是測量問題,是我們一直沒解過的驗證問題。下面就是這個想法是怎麼長出來的,講起來有點繞,請容忍我一邊想一邊寫。
飽和到底是什麼意思
「分數沒地方爬了」就叫飽和。MMLU 在前沿模型上落在 88% 到 94% 這個窄帶,這個區間裡誰高誰低很大機率只是 noise。GSM8k 上前沿模型已經拿到 99% 上下,再進 0.5 個百分點也沒什麼故事可講。能力提升是真的,問題只是 benchmark 已經不在追蹤它本來要追蹤的那把尺了。
一把尺到頂的時候,你不會看到尺壞掉,你只會看到分數還在漲。刻度跟它後面那個能力之間在這個高度悄悄脫了鉤。直覺上下一步當然會想到「再做一把更長的尺」,這個直覺沒問題,只是這條路後面會撞到結構問題,我們等一下會繞回來。
用得上的證據:GSM1k
Scale AI 在 2024 年做了一份 GSM1k 研究,重出 1,250 題、難度跟 GSM8k 對齊的小學數學題,然後重跑一輪。abstract 的數字很乾淨:表現最差的家族在 GSM1k 上掉了 13 個百分點。這個是會出現在所有摘要裡的那個 13。
我自己比較喜歡的是後面那個比較少人引用的數字,老實說第一次讀我也跳過了,第二次回去翻才看到:模型「生成 GSM8k 樣本的機率」跟「GSM1k 與 GSM8k 之間的分數落差」有 Spearman 相關,r² = 0.32。
換成人話就是:越記得 GSM8k 原題的模型,在 GSM8k 上越好看,在重出的同難度題上就越糟。Mistral 跟 Phi 兩家被點名,幾乎每個版本都有過擬合的痕跡;Llama2 跟當時的前沿模型則沒事。13 是表頭那個數字,0.32 才是說明「分數實際上在量什麼」的那個數字。
前沿沒崩,不太代表 benchmark 沒問題
很多人讀完前段那句「前沿沒崩」會鬆一口氣。我自己讀的時候也是先鬆了一下,過幾分鐘才覺得不對,原因有一點點繞,我儘量講清楚。
前沿模型在 GSM1k 上沒崩,不一定代表它們沒看過 GSM8k。比較準的解讀是:它們的能力上限已經高過這份題的天花板,所以單題記不記得對最終分數的邊際貢獻歸零了。在這個高度,污染跟能力會收斂到同一個分數。
所以「沒崩」其實在說的是「這份 benchmark 對前沿來說已經沒鑑別力了」。這跟飽和那個結論本身比較接近,跟「benchmark 沒被污染」不是同一回事。順手對齊一個我之前寫過的角度:《大語言模型 LLM:其實做的事情比你想像中更單純》 裡講過,模型在做的就是 next-token prediction,沒有獨立的「我學會了」這個內部狀態。從外面我們只看得到輸出對不對,沒辦法跨進去看它是怎麼對的。所以分數沒崩,不等於我們知道它怎麼答出來的。
再出一份更難的就會解決嗎
業界當下的反射動作就是這個。Humanity’s Last Exam(HLE)2,500 題、跨 100 多個學科,Artificial Analysis 的 leaderboard 截至 2026 年 5 月底前沿模型已經進到 40 分檔;專家人類大約落在 90%。看起來空間還很大,可是這個空間正在以肉眼可見的速度被吃掉。對,那速度是真的有點快。
LiveCodeBench 走另一條路,從 LeetCode、Codeforces、AtCoder 收每週新題,按發布時間切片(paper)。這比靜態 benchmark 更接近驗證的形狀,但它做的其實是把時鐘往後推。對任何一個 frozen 的模型,今天的 LiveCodeBench 在它眼裡終究也會變成一份靜態題。
更難跟更新都是「延後」這個 framing 的同一種操作。後面那層結構問題沒被它解開,這也是我接下來想拉開來看的事。我寫到這邊會有點怕變抽象,所以講慢一點。
那層結構問題
我們從來就沒有方法去驗證模型「學會了一件事」,只有方法量它「在這個分布上會不會答」。這兩件事在 benchmark 沒污染、題目沒被看過、ranking 差距大於 noise 的時候會收斂在一起,所以平常我們不太需要分清楚。可是只要任何一個條件壞掉,相關性就靜悄悄退化,數字卻照樣漲。然後我們會繼續引用那個數字。
這個形狀我之前在 MCP 那篇 用「設計如此不是卸責」討論過。Benchmark 是同一個形狀的另一面:把「分數高」當「能力強」,跟把「協定允許」當「行為安全」一樣,都是把一個方便的約定當證據在用。約定在你眼前的時候很方便,等到污染、prompt injection、agent 自主行為這類事情冒出來,你才會回頭發現整個堆疊裡其實沒有一層真的在驗證。「No evidence, no completion」 那篇對 agent 的版本是:confident 報告不等於 confirmed 工作。Benchmark 的版本一樣:高分不直接等於能力被驗證過。
寫到這裡其實我也覺得有點繞,但這就是我目前能想到最誠實的講法。
那 2026 年的 leaderboard 還要不要看
要看,只是花在絕對數字上的時間可以少一點。
我自己變得比較在意這幾件事,大概照這個順序在心裡跑。題目的發布時間有沒有晚於模型 cut-off?有沒有 private split,public 跟 private 差距多大?同一個模型在「已飽和的 benchmark」跟「contamination-resistant benchmark」之間落差怎麼樣?前者撞天花板、後者跟不上的那個 pattern,比 leaderboard 最上面那一行有用得多。
另一個半養成的習慣(還在養,老實說)是:不要再用單一分數去描述一個模型「會什麼」。一個 99 跟一個 92 的模型在你今天要做的事情上,可能差很大、也可能完全沒差,這件事 benchmark 不會告訴你。你還是得把它對到你手邊那個任務上實際試一輪,沒什麼捷徑,這點稍微有點煩,但目前是這樣。
寫到這裡
Benchmark 不是壞東西。它給研究一個共同尺度、給溝通一個最低成本,這個我沒有要否定。比較是它被當成「能力代理」用得太順手、太久,我們忘了它原本只是分布上的一個切面而已。
GSM1k 那篇 paper 已經兩年了,業界對飽和的標準動作仍然是「再出一份更難的」。方向沒錯,可是這條路怎麼走都會繞回同一個地方。我自己看完一圈之後留在頭上的問題是:怎麼說服自己一個模型是「會」而不只是「答對」?我沒有完整答案,這篇也不打算假裝有,但這個問題會被我帶著去看下一份 release blog,至少不會再被表頭那個 99% 直接收編。