跳到正文
DEV Community· Chen Yuan·· 2 小時前精選AI 評分78

權重空間編程奏效:GPT-6 Astra 僅修改 Qwen3.5-0.8B 的 0.016% 權重,修復數學循環問題

Weight-Space Programming Works: An LLM Fixed Qwen's Math Loop by Editing 0.016% of Its Weights

AI 導讀

MIT CSAIL 研究團隊的權重空間編程研究顯示,GPT-6 Astra 無需梯度下降或微調,便可修改 Qwen3.5-0.8B 的 131,072 個權重以修復重複循環。

推薦理由

文章並列成功與失敗案例,呈現直接編輯權重較適合移除單一故障障礙,未能補足模型原本欠缺的能力。

正文 · 繁體中文

十三萬一千個數值。這就是讓 Qwen3.5-0.8B 這個小型開放式推理模型提升表現的全部修改:它在 MATH-500 的得分由 7.9% 升至 48.1%,在 GSM8K 由 13.8% 升至 67.1%,在 IFEval 這個指令跟隨基準的得分則由 21.0% 升至 62.3%。整個過程沒有用到梯度下降,沒有訓練資料,也沒有進行微調。名為 GPT-6 Astra 的前沿模型讀取了模型的原始權重,找出由兩個 MLP 層寫入的一個特定方向;這個方向令模型陷入重複循環,於是 Astra 將它減去。整個修復只改動了網絡 0.016% 的權重。

這項成果來自 Rikiya Takehi、Jayden Teoh、Alex Zhang 和 Omar Khattab 在 MIT CSAIL 於 2026 年 11 月發表的研究文章〈Sparks of Weight-Space Programming〉。文章提出的主張,比一次巧妙的修復更為重大:通用語言模型無須特定任務訓練,直接使用便能充分讀懂神經網絡權重,判斷網絡接受訓練的目標;它也能寫入權重,表現勝過經過數億步訓練的強化學習策略。文章行文審慎,公開了紀錄,亦在報告成功案例的同時列出失敗案例。這項研究值得仔細閲讀,以下為你介紹。

權重空間程式設計的實際主張

作者為這個概念下了明確定義。在權重空間程式設計中,通用 LLM 直接讀取和寫入網絡權重,而非透過最佳化器,尤其不使用梯度下降,以自然語言規格為目標,有時甚至完全沒有環境回饋。研究依次測試三種能力。讀取:只提供權重,便説出網絡接受訓練的目標。修復:提供一個無法正常運作的網絡,找出原因並修復。寫入:提供任務描述,從頭建立可正常運作的網絡。

這項研究的重點,在於它與一貫做法有所不同。現時,權重由 Adam 或 Muon 等符號式最佳化器、經訓練以產生權重的次級網絡,或由正式程式編譯而成。人類無法有意義地手動編輯權重矩陣,正因如此,權重一直是這些演算法的專屬領域。文章指出,這個假設如今正開始動搖:前沿模型用來除錯程式碼的同一種推理能力,至少部分可以轉移至網絡參數的連續空間。

無須執行任何程式便讀取權重

第一個實驗是一項直接的測試。研究人員以 PPO 訓練了四個策略,分別玩四款不同遊戲的網格版本:Breakout、Pong、Pac-Man 和 Freeway。四款遊戲使用相同的 10x10 網格、相同的五種動作及完全相同的架構:形狀為 500 至 32 至 32 至 5 的 MLP,只有 17,253 個權重,每個策略均訓練了十億步。Astra 收到以文字呈現的原始權重,以及網格和動作的説明,但沒有收到候選遊戲清單。它正確指出了全部四個網絡對應的遊戲。紀錄中概述的推理方式,正是人類專家會採用的方法:第一層的權重集中在各輸入通道發揮作用的位置,因此在 Breakout 中,代理通道的權重分佈於底行,即球拍所在的位置;而輸出層則會為不同遊戲區分不同動作。

import numpy as np

def weights_as_text(state_dict):
    # The experiment-1 setup in one function: hand the model every
    # weight as plain text, with the architecture described in prose.
    parts = []
    for name, tensor in state_dict.items():
        arr = np.asarray(tensor, dtype=np.float32).ravel()
        parts.append(f"{name} {arr.shape}: " + " ".join(f"{v:.6f}" for v in arr))
    return "\n".join(parts)

第二項實驗轉向生成模型:三個小型擴散模型,分別訓練成能在 12x12 灰階圖像上繪製圓形、正方形和三角形,每個模型各有 23,824 個權重。Astra 單憑權重便判斷出每個模型繪製的形狀,沒有使用任何工具,也沒有進行前向傳播。它是在讀取而非模擬模型的線索是:它把每個形狀都畫成輪廓,但實際模型生成的是實心形狀。它讀取的是輸出層的幾何結構:每個隱藏單元的權重勾勒出邊緣的一段,而不是在腦海中重現整個網絡。

第三項實驗最具説服力,也是最值得抱持懷疑態度的一項。三個字元級 Transformer 各有 7.16 million 個參數,分別以 Python 程式碼、羅馬字轉寫的日本文學作品和英文維基百科各十億個字元訓練。Astra 只獲得 Transformer 中間的四個區塊,沒有輸入嵌入層或輸出層,因此它看到的內容沒有任何維度對應到任何字元;此外,它獲得一個 Python 工作階段作分析,並被嚴格禁止對任何輸入執行網絡。兩次嘗試中,Astra 都正確説出三個模型各自使用的語言,並列出所有複製頭,也就是讓模型重複先前文字的誘導頭,結果與實測基準完全吻合:Python 模型是注意力頭 2.1、3.1 和 3.5,羅馬字模型是 3.3,英文模型是 3.1。為此,它獨立重新推導出 Elhage 等人在知名可解釋性研究中使用的誘導頭分析方法,沒有人向它提過這個方法。文章中我最喜歡的是羅馬字這個細節:Astra 獲得的最後一個區塊,寫入的不同方向數目較少,這正符合由一種從不使用 q、l、v 或 x 的字母表所預期的情況。

寫出勝過已訓練策略的權重

如果讀取權重不能泛化,就只是個小把戲,因此作者進一步提升了實驗難度。針對三款 MinAtar 遊戲 Breakout、Seaquest 和 Asterix,Astra 獲得遊戲規則和原始碼、一個結構為 600 到 32 到 32 到 6、所有權重均設為零的新網絡,以及除此之外的空無一物:沒有數據、沒有損失函數、沒有梯度、沒有工具,也沒有在環境中進行任何回合。它在單次回覆中以文字寫出所有權重。每款遊戲各以 1,000 個回合計分,結果如下:

遊戲 PPO,100M 步 PPO,500M 步 Astra,單次作答
Breakout 15.8 25.3 517.4
Seaquest 5.6 88.9 53.1
Asterix 25.8 55.2 53.2

與訓練 100 million 步的 PPO 相比,手寫網絡在三款遊戲中全數勝出。與訓練 500 million 步的 PPO 相比,它們在 Breakout 的得分是對方的 20 倍,在 Asterix 的表現接近對方,在 Seaquest 則達到已訓練 PPO 得分的 60%。它是怎樣做到的?它以神經網絡的形式編寫程式:在 Breakout 中,它讓第一層計算球的落點,第二層則移動擋板到該位置。這不是比喻,而是以矩陣權重表達的手寫演算法。

Go 實驗進一步擴大規模。9x9 圍棋的目標網絡有 1,480,274 個權重,數量遠超上下文視窗所能容納,因此由 Python 沙盒儲存張量,Astra 則用 numpy 編輯張量;它無法執行網絡,只能使用有限額度的前向傳播,每次前向傳播最多包含 128 局練習對局。前向傳播次數預算為零,也就是隻執行一次共 336 行的 Python 程式時,Astra 編寫的網絡已經能在對戰兩個較小的 PPO 網絡時贏得超過一半的對局。使用 50 次前向傳播後,它擊敗了一個以 2,000 萬局對局訓練、規模相同的 PPO 網絡。它寫出的程式確實懂圍棋:前幾層標記雙方的棋子及其氣,中間層沿棋鏈傳遞資訊,找出處於危險中的棋羣,最後一層為每一步落子評分,例如在這裏提子、在那裏救下一組棋、避免自緊,並且從不填掉自己的眼位。

修復實驗介乎讀取與編寫之間。某個以 PPO 訓練的 Kinetix 坡道關卡汽車策略有 171,664 個權重,經過 10 億個訓練步驟後收斂至局部最小值:汽車筆直駛向坡道,然後停滯,在 256 個回合中一次也沒有成功。Astra 收到權重、場景描述和一段錄製的回合後,在一次回覆中解釋失敗原因,並改寫了 3.5% 的權重。之後,汽車在全部 1,024 個評估回合中均告成功。Astra 描述的機制相當精準:新增一條小型旁路,每層只有幾個單元,用來讀取汽車的位置和速度,觸發倒車再加速的行為,並在汽車越過障礙物後自行關閉,讓訓練好的策略繼續駕駛其餘路段。

Qwen 修復實驗,逐項數據剖析

這項重點實驗把修復規模擴展至真正的語言模型。啟用思考模式的 Qwen3.5-0.8B 容易陷入重複循環;其模型卡也有此警告。實驗為 Astra 提供一個可存取模型權重的 Python 核心,但不提供 GPU;練習題取自 GSM8K 和 MATH 訓練集(分別有 7,469 和 7,275 題,且與所有測試集互不重疊);前向傳播次數預算則為 10、25 或 50 次。一次前向傳播代表模型最多回答 512 道題目,或讀取最多 1,024 段文字。訓練和計算梯度仍然不允許。取樣設定完全依照模型卡:temperature 0.6、top-p 0.95、top-k 20、presence penalty 1.5。

只要留意就能清楚看出這種失敗模式:基礎模型最初 96 個練習答案中,有 85 個一路生成至 32,768 個 token 的上限,不斷重複內容,始終沒有給出答案。Astra 將循環問題追溯至第 15 和第 19 層的 MLP 所寫入的一個方向,並從每層的 64 個輸出欄減去該方向,總共涉及 131,072 個權重。

edited = 131_072          # weights changed in the Qwen3.5-0.8B repair
total = 800_000_000       # parameters in the model
print(edited / total)     # 0.00016384, i.e. 0.016% of all weights

在 Astra 從未接觸過的基準測試上,測得的結果如下:

Qwen3.5-0.8B MATH-500 GSM8K IFEval 觸及 token 上限
基礎模型 7.9% 13.8% 21.0% 93.0%
編輯後,50 次前向傳播 48.1% 67.1% 62.3% 33.1%

循環問題並非數學專有,因此提升也不限於數學:衡量指令遵循能力的 IFEval,成績接近增至三倍。較低的預算幾乎沒有幫助,因為進行 10 或 25 次前向傳播後,循環問題大多仍然存在。這本身也提供了有用資訊,説明目前這類修復需要多少互動。

# Schematic of the repair Astra described for Qwen3.5-0.8B: the MLPs in
# layers 15 and 19 each write one "looping" direction, and the edit
# subtracts that direction from 64 output columns per layer.
for layer in (15, 19):
    W_out = blocks[layer].mlp.weight        # output side of the MLP
    d = looping_direction[layer]            # the isolated direction
    W_out[:, columns] -= d[None, :]         # 64 columns, 131,072 weights

令結果更可信的兩個失敗案例

這篇貼文因其負面結果而格外可信。在迎合行為實驗中,兩個 Gemma 3 270M 副本以相同方式微調,一個被訓練成正確作答,另一個則被訓練成總是同意用戶的建議;研究人員凍結了嵌入層和輸出層,讓輸入至輸出的分佈保持相同。Astra 僅憑權重未能成功:經過四次嘗試,它找出許多權重差異,卻無法將這些差異與行為聯繫起來。只有在作者放寬設定,讓 Astra 自行撰寫最多 16 段文字,並只查看兩個模型的注意力模式、完全不看模型輸出時,它才在三組配對中全部正確識別出迎合型模型。它提出的機制層面解釋是:迎合型模型的中間層注意力頭會把注意力從問題內容轉向用戶建議的答案。其中一個注意力頭 10.2,在誠實模型中有 94.3% 的注意力放在問題中的數字上,在迎合型模型中則有 85.7% 放在用戶的猜測上。

第二個失敗案例是所有人都應該引用的對照實驗。Gemma 3 270M 很少陷入循環,只有 8.5% 的答案達到 token 上限,因此作者要求 Astra 直接提升它的數學能力。Astra 做不到。檢視失敗案例後,Astra 發現的是一般推理錯誤、算術錯誤和無效的代數步驟,沒有任何單一元件須為這些問題負責。它所作的修改幅度小而且有針對性,但沒有一項令 MATH-500 的成績提升超過約 1 分;Astra 自己也表示,這項提升尚未確立。這帶出的界線,是貼文中最重要的一句:修改權重可以移除遮蔽模型能力的障礙,卻無法增添模型本身不具備的能力。

與微調和可解釋性的比較

與微調相比,Qwen 修復方案在三方面勝出,一方面則較弱。它不需要訓練資料或梯度流程;它只改動了 0.016% 的權重,避免了大範圍微調可能導致的災難性遺忘;而且改進亦延伸至指令遵循,並非以一項能力換取另一項能力。它的不足之處在於可靠性和成本結構:這次修復之所以奏效,是因為該失敗碰巧有單一方向的成因;而在前沿模型上,最多對 512 道問題各執行 50 次前向傳播並非免費,只是比進行一次訓練便宜。

與機制可解釋性相比,轉變的是閲讀者,而非研究對象。這個領域已建立了出色的專用工具,從探針、電路追蹤到特徵字典都有;近年亦有研究訓練模型讀取激活值或解釋個別神經元。這次的新意在於,閲讀者是一個沒有接受可解釋性專項訓練的通用前沿模型,以自然語言處理原始張量,並自行重現已知的研究方法。迎合行為實驗的負面結果在此同樣重要:單靠讀取權重有其極限;讓閲讀者配合輕量級的行為探測工具,也就是注意力工具,才突破了這個限制。

與強化學習相比,從零開始編寫權重的成果在小規模上確實令人震驚:在三款遊戲中,一次性手工編寫的權重擊敗了訓練1億步的PPO;在圍棋中,僅經過50次前向傳播,便擊敗了訓練2,000萬局的PPO。不過要留意參數量,介乎1.7萬至150萬。沒有人從零開始編寫一個擁有8億個權重的模型;語言模型的成果是修補,而非創作。把編寫權重的成果外推至前沿規模,純屬推測,作者本人也不作此推論。

若你使用開放模型,值得關注的方向

作者清楚列出應用方向,每一項都值得視為工程發展方向,而非已推出的產品。無需評估的審計:直接從權重中審查隱藏行為、後門或欺騙性電路,不必依賴預先涵蓋這些情況的測試集。零數據引導與遺忘:修改少數權重便可移除某項能力,無需收集數據及微調,同時保留模型其餘部分。針對性快速修補:循環問題的修復正是目前會迫使人重新訓練,或尷尬地修補系統提示詞的那類錯誤。真正的模型合併:把一個模型的電路移植到另一個不同架構的模型中,而不是平均權重;權重平均只適用於完全相同的模型。

這一切近期的檢驗點已公開。作者正為權重空間編程建立基準測試及測試框架,並已在 github.com/RikiyaT/lm_understand-logs 公開完整日誌、每條提示詞、每份推理摘要、每段程式碼、每個神經網絡,以及每項評估。作者指出的瓶頸是上下文長度和測試框架效率,研究範圍亦仍處於早期階段。如果這些日誌經社羣重新執行後仍站得住腳,這便是真正工程學科的開端;如果結果未能重現,它仍是本月最有意思的負面結果。無論如何,從業者最務實的做法都一樣:留意基準測試,在測試框架推出後試用,並讓訓練流程保持待命。


原文最初刊載於 Dispatch。

來源:DEV Community · dev.to