它沒有變聰明,只是不再打轉

一個 0.8B 小模型改掉 0.016% 的權重,MATH-500 從 7.9% 跳到 48.1%。但逐題比對後,救回來的 579 題裡有 576 題原本是被 32,768 token 上限截斷的;已經答完的 114 題,正確率完全沒變。這篇把六倍拆開,給你四步檢查——下次看到分數暴漲時,先看截斷率,再看對照組。

12 分鐘
local-llmreasoning-modelsevaluationinterpretability
標題「它沒有變聰明,只是不再打轉」的技術筆記封面

這篇的數字來自原文(部落格貼文,不是同儕審查論文)與公開 logs、Qwen 的 model card、Hugging Face 上的重建版重跑,以及硅星人Pro 按 logs 做的逐題重算。逐題配對那一段是二手重算,我會標出來。我們沒有在自己的機器上重跑那 50 次前向。

先講一個畫面

你在筆電上跑一顆 0.8B 的小模型,給它一題國中數學。它想了三分鐘,輸出到上限被切斷;回頭看,整段在重複同兩句話。

你的結論大概是:模型太小。這篇要給你的是一個更準的分界——分數變好,是模型變聰明,還是它終於講得完?

十一月二日,四位 MIT CSAIL 的研究者公開一組實驗。他們讓 GPT-6 Astra 直接修改 Qwen3.5-0.8B 的權重,只動了 0.016%。

同一顆模型,MATH-500 從 7.9% 變成 48.1%。

那則貼文在 Hacker News 拿到將近 3,000 分、900 則留言。中文媒體的標題則是「爆改 Qwen 大腦」這一路(例)。

拆開來看,那個六倍買到的不是數學能力,是「把話講完」。而這兩件事在 benchmark 表上長得一樣,除非你多記一欄。

先讀最後一欄

Qwen3.5-0.8BMATH-500GSM8KIFEval撞 32,768 token 上限
原始7.9%13.8%21.0%93.0%
改,10 次前向12.3%25.7%49.0%87.2%
改,25 次前向14.1%25.1%39.9%86.4%
改,50 次前向48.1%67.1%62.3%33.1%

前向(forward pass)就是讓模型真的回答一批題目,看它輸出什麼。不是訓練,也不給梯度。

四列用的是同一個方法,但三次交出的是三份不同的補丁,不是同一招多給預算。差別在於 Astra 被允許跑幾次前向。

10 次:12.3。25 次:14.1。50 次:48.1。

看前三列,你會說「預算不夠」。但最後一欄講的是另一件事。

10 次和 25 次時,撞上上限的數學題還有 87% 和 86%。到 50 次,掉到 33.1%。

分數是跟著截斷率走的。 前兩次沒有把迴圈修掉,分數就留在原地;把撞上限的比例壓下來,分數才動。

有一條線不聽這個解釋:IFEval 在 10 次前向就從 21.0 跳到 49.0,那時截斷率還有 87.2%。IFEval 的答案短,截斷對它的影響小。單次執行的結果,我不會拿它下結論。

它改的是什麼:兩層、一個方向、十三萬個權重

Astra 做的事可以拆成三步。

第一步,看 96 道練習題的回答。其中 85 道撞到 32,768 上限,撞上去的內容幾乎都在重複。

第二步,把這個重複追到第 15 層與第 19 層的 MLP。MLP 是每個 transformer 區塊裡的前饋層,這兩層的輸出一直在同一個方向上推。

第三步,從這兩層的 down_proj 各挑 64 個輸出欄位,把那個方向減掉。down_proj 是前饋層最後把結果投影回模型寬度的那個矩陣。

2 × 64 × 1,024 = 131,072 個權重,約占 8 億的 0.016%。

Hugging Face 上有人照公開的 diff 重建了檢查點。公開 logs 裡的腳本逐個 tensor 對 sha256:只有 layers.15.mlp.down_proj 與 layers.19.mlp.down_proj 兩個張量不同。

我認為這是最乾淨的一種驗證。不是「他們說改了兩個張量」,是「重建出來的檔案只有兩個張量不同」。

比喻的話:模型不是不會算,它是在某個地方一直被推回原點,繞著同樣兩三句話轉。那個「推回去的力」,在權重裡是一個方向。減掉它,模型就能把已經想到的答案寫完(圖 1)。

Astra 還自己做了一個對照。取一個與目標方向正交、改動量相同的隨機方向減掉,成績只動 1.5 個百分點(覆盤)。所以動的是方向,不是「隨便改一點權重都會變好」。

這不是全新的技術路線。把「拒絕回答」定位到單一方向的研究、ROME 與 MEMIT 那種「找到一組權重、改掉一件事」的做法,都在同一個家族裡。

新的部分是誰來找那個方向。 這次是一個通用模型自己找,而且會把理由寫出來。

圖 1:同一顆模型。左邊一直被推回原點,93% 的數學題撞上上限;右邊減掉兩層 MLP 裡的方向,撞上限的比例掉到 33%。

579 題裡,576 題原本只是講不完

這是最關鍵、也最容易被誤讀的一段。

硅星人Pro 把公開 logs 的逐題紀錄重算一次。他們挑的 1,152 道題,是練習題裡保留起來、沒有拿去挑補丁的那批。

原本的狀態題數改之前答對改之後答對
有正常結束11493.9%93.9%
被上限截斷1,0381.4%56.7%
  • 從錯變對 579 題,其中 576 題原本是被截斷的
  • 從對變錯 5 題
  • 平均回答長度從 30,868 token 降到 22,037

已經答完的 114 題,正確率一位小數都沒動。 114 題裡 3 題從錯變對、3 題從對變錯,剛好打平。

579 個救援裡,576 個來自那 1,038 道本來沒講完的。真正的進步在那裡。

這件事不是誰抓到破綻。原文的表格最後一欄就是 93% 到 33.1%,Astra 自己的最終報告也寫了 576/579。

作者沒有隱瞞:logs、檢查點、失敗的實驗都公開了。他們只是沒有把「已經答完的題目有沒有變」算成一行。

補一句:這張表是依 logs 重算出來的,不是原文的表格。我們沒有自己重算。

不會打轉的模型,它修不動

同樣的方法,換到 Gemma 3 270M 就失效了。

這顆模型很少打轉:只有 8.5% 的回答撞到上限。Qwen 那顆是 93%。

Astra 讀它的失敗,找到的是普通的算錯與代數步驟錯。沒有一個可以關掉的零件。

改完之後,MATH-500 落在 7.0% 到 7.7% 之間,改之前是 6.8%。Astra 自己的報告把這個幅度標成「未達確立」。

原文那句話,是整篇最重要的:

Editing weights could remove an obstacle that hid an ability, but it could not add an ability the model lacked.

翻成白話:改權重可以移除擋住能力的障礙,但不能加進模型本來沒有的能力。

這句話對你有直接用途。你的模型表現差,先問是哪一種差。

  • 它會算,但講不完(一直重複、撞上限)→ 移除障礙有效
  • 它算錯 → 移除障礙無效,換模型或換任務

第一種,可以先從設定下手,不必換模型。第二種,別在權重上花時間。

被批的不是結果,是包裝

這篇被罵得很兇。但先把話講清楚:被批的是包裝,不是結果。

spaCy 的作者 Matthew Honnibal 寫了一篇質疑,用魔術師比喻。

同一場戲,第一次用特殊道具,第二次改用藏東西,第三次用強迫選擇。觀眾以為只有一種手法,於是每看一次都像推翻了上一個假設。

他的證據是一張表,把八個實驗按「Astra 實際拿到什麼」排開:

實驗對象只看原始權重用 Python跑過模型
1 猜遊戲1.7 萬✓——
2 猜形狀2.4 萬✓——
3 猜語言與複製頭716 萬—✓—
4 修卡住的車17 萬✓——
5 從零寫 MinAtar2 萬———
6 從零寫圍棋148 萬—✓✓(0–50 次)
7 找出阿諛模型2.7 億—✓✓(只看 attention)
8 修 Qwen 數學約 8 億—✓✓(50 次前向)

(表依 Honnibal 的整理改寫,數字用他的級距。實驗 4 另外拿到一段失敗錄影。實驗 5 的權重從 0 開始,沒有東西可讀。實驗 7 只看權重時四次全錯,加上 attention 工具才三對三。)

真正「只看原始權重、不給工具、不跑模型」的,只有實驗 1、2、4。對象是 1.7 萬到 17 萬個權重的小網路。

所有碰到真語言模型的實驗都用 Python。Qwen 那組還被允許跑 50 次前向。

摘要卻把三種能力寫成一句話:「只看原始權重,就能理解並修改另一個模型。」讀者自然會以為是同一招。

還有一件事更硬。那次數學實驗的提示詞裡,作者直接寫了:

if the model often fails because it repeats itself and never finishes, finding and fixing what drives that repetition counts

也就是說,「重複」被當成有效修改的例子,寫在任務說明裡。

他們也做了一個拿掉這個提示的版本(v4)。10 次前向時不再交出修改,25 次只到 14.1%,而且沒有跑 50 次的版本。

所以「沒有提示時能不能到 48.1」,公開資料回答不了。

(v4 除了拿掉失敗範例,還改了練習題與驗證題的分法和流程。這個對照不乾淨,但方向值得記住。)

也該給作者記一筆。貼文公開後不久,他們改了摘要:把「遠超過人類或傳統演算法」拿掉,換成比較保留的說法。

負面實驗照登,logs 全部公開,檢查點也放出來。

我的判斷:能力是真的。代價與包裝被放大,但證據鏈沒有斷。

Hugging Face 上的重建版重跑 500 題,編輯後拿到 51.0%,撞上限 31.6%。換一個人、換一張卡,結論沒變。

你明天可以做的四件事

不用等下一篇論文。任何一次「改完之後分數變好」,都可以用這四步驗。

  1. 加一欄 finish_reason。 那是 API 回傳的結束原因,等於 length 就是被上限截斷。這個比例超過 10%,就不要直接比總分。
  2. 看截斷回應的尾巴。 8-gram 重複率,就是連續八個 token 一模一樣的比例。太高,表示它在繞圈,不是題目太難。
  3. 核設定。 思考模式開關、temperature、token 上限,跟 model card 對一次。這篇的基準是強制開思考、temperature 0.6、presence penalty 1.5、上限 32,768;Qwen3.5-0.8B 的預設是非思考模式。
  4. 加一個不會打轉的對照模型。 它沒進步,你看到的就不是能力提升。

四個步驟都不需要幾十小時的模型對話,只需要一個 if。

那什麼時候真的值得改權重?三種情況。

  • 病理已經被寫進 model card,像這顆模型的迴圈,Qwen 自己警告過
  • 你沒有資料或算力做微調
  • 你接受它現在是研究階段:一次成功的編輯花了 80 次程式執行、158 輪對話,接近一整天

作者自己也說,還沒證明比微調便宜。

三個問題,加上一句提醒

下次看到「某個方法讓模型變強六倍」,先問三題。

  • 分母是什麼?(基準是在哪個設定下量的)
  • 上限是多少?(有多少題根本沒講完)
  • 有沒有對照組?(換一顆不會打轉的模型,還成立嗎)

這三題擋不掉所有誤讀,但能擋掉大部分新聞。

如果你正在選地端模型,或評估一個「調完之後變很好」的內部結果,我們做過類似的事。

把能跑、能回答、能通過驗收拆成四層(「跑得起來」跟「真的幹完活」是四件事)。

同一個道理換到量化模型,是「檔案本身可能是壞的」(你下載的量化模型可能是壞的)。

而「把移除障礙寫成能力進化」這個模式,我們也寫過一次(「推翻 ETH」不是「攻破 P=NP」)。

這三篇講的是同一件事:分數變好,跟模型變強,是兩個不同的句子。

要把它們分開,只需要一欄資料。而那一欄,你今天的 pipeline 其實就有了。

想把這件事變成團隊的例行檢查?我們做地端 AI 導入時,第一件事就是這個:先量,再決定要不要換模型。

資料來源