你把一串模型權重交給 AI,它就能猜出這個模型在玩什麼遊戲嗎?Weight-Space Programming(權重空間編程)讓這個問題變成了可檢查的研究題。但如果檔名已寫著遊戲名稱,或模型能上網找答案,答對時究竟證明了什麼?
這篇寫給第一次接觸模型權重、願意照著複製一小段程式的新手。我們先用白話拆開概念,再準備四份匿名材料,學會把「看數字辨認任務」和「用工具分析」分開記錄。你不必先懂機器學習,目標是做出一份條件清楚、別人拿得到相同材料的小考卷。
本文依 2026 年 11 月 4 日查閱的研究日誌與原始實作整理。AlphaLab 本次執行的是材料下載、匿名化與完整性檢查,未執行四題模型辨識或有無工具的成績比較。下方他人的觀察各自標明來源;操作部分是供你接續執行的評估設計。
先說結論:權重辨識小考=同一份數字+分開的工具條件+最後才揭曉的答案
把四個模型想成四台裝在相同外殼裡的遊戲機。你拿到的是內部旋鈕的設定值,以及每個接頭代表什麼;題目是推測它原本做什麼。外殼一樣,才能把注意力放回旋鈕;答案分開,才能知道猜測是否靠線索。
- 先看題目給了哪些說明:輸入通道與動作的意義,本來就是可用資訊。
- 把無工具的閱讀與有工具的計算各開一組,完整保留提示、回覆與工具紀錄。
- 先固定評分方式,再看答案;四份公開材料適合學習設計,推廣到其他模型仍要另出題。
一、Weight-Space Programming 是什麼?先分清三種工作
神經網路的「權重」是運算裡的數值參數,像食譜裡各種調味料的份量。研究作者的定義強調:通用語言模型依自然語言目標,直接分析或寫入另一個網路的權重,而不是讓一般優化器按梯度替它更新。這裡的「直接」指操作對象,仍要另外交代有沒有程式與測試回饋。
第一種是讀權重:推測網路學過哪種遊戲。第二種是修權重:找出故障相關位置再改動。第三種是寫權重:從預先指定的架構出發,組出能完成任務的數字。讀出用途,不等於已經驗證修改後的功能;三張成績單應分開。若想先補上學習原理,可讀 AI 模型怎麼學習。
它與微調、蒸餾、編譯的差別,可以沿著「數字怎麼來」理解。一般微調以新資料與訓練目標更新既有模型;蒸餾的原始研究讓較容易部署的模型學習教師模型的輸出知識,重點是學習訊號。Tracr則把人能讀的程式編譯成具有已知結構的 Transformer。這次遊戲題的方向相反:拿既有數字,推測它在做什麼。
所以,權重空間編程也不代表「權重編輯從此才出現」。例如 ROME 原始專案已研究如何定位並修改語言模型的事實關聯。本篇要練的是如何評估一個語言模型參與分析的流程,而非替整個領域宣告起點。想把蒸餾單獨搞懂,可以接著讀 模型蒸餾白話教學。
二、四份遊戲權重,究竟提供了哪些線索?
依作者的 實驗 1 說明,四個網路採相同的多層感知器(MLP,一層層把輸入加權運算的網路)。輸入是格子的通道資料,輸出是五個動作的分數;模型同時收到格子如何攤平成數列的規則。這是有接線圖的辨認題,並非完全不提供背景。
例如通道標成「玩家控制的物件」,某些位置的權重特別明顯,可能提示角色常在哪裡活動。但某一格的係數大,只是一項線索;後面還有非線性運算與其他層。要求解題者引述確切的層、列或數值,能讓你核對它的理由是否真的連回材料。機制推測要再用干預或行為測量檢查,才往因果解釋前進。
原始題目是開放回答,沒有附四選一選項。你可以知道整套材料來自四個遊戲,但不要把這篇文章、下載網址、原始資料夾或解答一起送給解題模型。命名匿名化,只減少當前輸入的答案線索;公開材料是否曾出現在模型訓練中,這個練習沒有排除。
三、Weight-Space Programming 盲測準備:先做出四份材料
①「把考卷和解答分開」:固定來源,再生成匿名檔
先在終端機執行 python3 --version,確認已有 Python 3。在空資料夾新增 prepare_blind.py,貼上下列程式,再執行 python3 prepare_blind.py。它只下載文字並產生本機檔案,不安裝套件、不訓練模型,也不呼叫付費模型。來源固定在同一個 Git commit,避免之後主分支改動而換了考卷。
import hashlib, json, pathlib, secrets, urllib.request
REV = '4d09ba6d6a7e891dd8063974dfe81b3d78e3494f'
BASE = 'https://raw.githubusercontent.com/RikiyaT/lm_understand-logs/' + REV
ROOT = pathlib.Path('weight-blind')
ROOT.mkdir(exist_ok=False)
for folder in ('solver-A', 'solver-B', 'organizer'):
(ROOT / folder).mkdir()
old = ('You have no tools: no code execution, no calculator, nothing to run. '
'This is a single response.')
new = ('You may use only the isolated offline Python tool to read these weights '
'and calculate weight statistics. Do not run this network or any layer '
'on any inputs. No internet, no external files, no modifying the weights. '
'Use at most 5 tool calls, at most 60 seconds each. '
'Finish with the same five answer fields as requested below.')
key, seen, common = [], set(), None
marker = "THE NETWORK'S WEIGHTS\n"
for game in ('breakout', 'freeway', 'pacman', 'pong'):
path = '/exp1_which_game/runs/' + game + '/prompt.txt'
with urllib.request.urlopen(BASE + path, timeout=60) as r:
raw = r.read()
text = raw.decode('utf-8')
assert text.count(marker) == 1 and text.count(old) == 1
header, weights = text.split(marker, 1)
if common is None:
common = header
assert header == common, 'Different non-weight prompt'
assert not any(g in text.lower() for g in ('breakout', 'freeway', 'pacman', 'pong'))
sample = secrets.token_hex(4)
while sample in seen:
sample = secrets.token_hex(4)
seen.add(sample)
a = ROOT / 'solver-A' / (sample + '.txt')
b = ROOT / 'solver-B' / (sample + '.txt')
a.write_bytes(raw)
braw = text.replace(old, new).encode('utf-8')
b.write_bytes(braw)
assert a.read_bytes() == raw
assert b.read_text().split(marker, 1)[1] == weights
key.append({'sample': sample, 'answer': game, 'source_path': path,
'sha256_A': hashlib.sha256(raw).hexdigest(),
'sha256_B': hashlib.sha256(braw).hexdigest()})
key.sort(key=lambda x: x['sample'])
record = {'revision': REV, 'attribution': 'Takehi, Teoh, Zhang and Khattab; CC BY 4.0',
'source': 'https://github.com/RikiyaT/lm_understand-logs',
'license': 'https://creativecommons.org/licenses/by/4.0/',
'changes': 'A byte-identical; B replaces only the tool rule', 'key': key}
(ROOT / 'organizer' / 'key.json').write_text(
json.dumps(record, ensure_ascii=False, indent=2), encoding='utf-8')
(ROOT / 'organizer' / 'tool-rule.txt').write_text(old + '\n=>\n' + new, encoding='utf-8')
print('Prepared 4 cases per arm; answers are in organizer/key.json')
print('Expose only one solver folder to each isolated run.')
完成後有三個資料夾:solver-A 放原始無工具題,solver-B 只改工具規則,organizer 留答案、來源與雜湊。每題用新產生的代碼命名。A 保留來源的原始位元;B 的權重區塊保持相同,因此你能查到兩組究竟差在哪裡。程式若偵測共同題幹不同或出現遊戲名稱,會停止;先檢查材料,別直接刪掉檢查繼續。
這段使用 Python 的 SHA-256 雜湊為檔案留下指紋;用 pathlib讀寫檔案。保留整份 key.json 才能重建這次代碼與材料的對應。重跑會產生新代碼,原資料夾存在時則拒絕覆寫。網路錯誤會中止下載;這是一次性準備器,遇到失敗請另開空資料夾重做,並確認四題都生成。
材料來自 Rikiya Takehi、Jayden Teoh、Alex Zhang 與 Omar Khattab 的公開日誌,依 CC BY 4.0 授權使用。本文的 B 組改寫與匿名材料腳本由 AlphaLab 設計;若分享衍生材料,請保留作者、原作連結、授權與修改說明。
②「只把考卷送進考場」:資料夾不是安全邊界
A 組將單題文字直接送進全新對話,實際停用搜尋、程式執行、檔案瀏覽及其他工具。B 組需要一個已配置好的隔離環境:只提供該題文字與離線 Python,限制工具呼叫與執行時間,封鎖網路,排除原始倉儲、這篇教學與 organizer。單純把工作目錄切到 solver-B,仍可能讀到上層資料;寫一句「不要偷看」也不等於權限已隔離。
手邊若只有一般聊天介面,今天可以先完成 A 組練習與紀錄;B 組留為未測。若無法停用工具或確認可讀範圍,標成「條件未受控的練習」,不要放進嚴格盲測比較。這裡提供的是評估協議,不含模型呼叫器或隔離執行器;有現成受控環境後再接上。
四、兩組怎麼跑?五個零件先固定,再收回覆
③「同一張考卷,換一個允許動作」:把工具當唯一比較項
先寫一份設定單:模型完整識別碼與版本、供應端、推理設定、可設定的取樣參數、上下文與輸出上限、工具清單、每題時間預算。A 與 B 使用同一份模型和相同限制,差異只在已記錄的工具條款及實際權限。若某個參數無法設定,就記供應端預設,不要填一個想像值。
每題開新對話,每組使用同一套題目代碼;用抽籤或亂數安排先跑 A 還是 B,保存順序。原題輸出要求已包含 Observations、Reasoning、Game、Description、Confidence。保留它們作為證據摘要與結論欄位,不要求揭露模型未提供的內部思考。
B 組只允許讀權重、算統計,不允許用任何輸入執行整個網路或其中一層。這讓你比較的是「純文字閱讀」與「離線計算輔助」。若再允許輸入畫面、跑遊戲或觀察前向輸出,就另開 C 組;那張考卷多了行為證據,分數應獨立解讀。
④「先收卷,後揭曉」:四題紀錄不能只留命中率
每次開始與結束都記時間,原始 prompt、完整可匯出的回覆、工具請求與結果各留一份。另建 results.csv,欄位用 sample,arm,model,revision,status,guess,confidence,wall_s,input_tokens,output_tokens,tool_calls,evidence_file。尚未呼叫模型時,status 填 not_run;未提供的 token 欄位留空,別拿字元數換算成精確帳單。
先寫評分規則再開解答:遊戲名稱同義詞怎麼算,說成某類遊戲是否只算部分辨識;逾時、截斷、格式失敗及越權分開標記。作者把 Frogger 類道路穿越答案視為 Freeway,若沿用這個規則,必須在看你自己的答案前決定。每組都以四題為分母,另列完成幾題;不能只報成功產生答案的那幾題。
想像一題 A 答錯、B 答對,你接著要查的是 B 多了哪個可核對的統計;若 B 上網找到解答,這題記越權。若 A 逾時,記「在這個預算內未完成」,別寫成它永遠無法辨認。這是評分示例,沒有預填任何一題的實際模型結果。想把紀錄接成回歸測試,可讀 AI Evals 教學。
⑤「答對以外再驗理由」:核對座標與權重引用
從每題回覆選一項最關鍵、能直接查核的線索:它說的是哪一層、哪個通道、哪個格子,引用值是否真的存在?例如原題的輸入編號規則是 i = (row × 10 + column) × 5 + channel;第 8 列、第 7 欄、通道 0 對應 435。這只是座標換算示例,不是某個遊戲的答案。
即使最後猜對,引用錯位也應另記。分開保存「名稱是否命中」「證據是否對得上」「工具是否合規」,比把它們壓成一個分數更有用。權重符號還會經過後續層組合;單看正負或最大值就斷言整個遊戲策略,推論跨得太遠。
五、公開實例教了什麼?把成功與失敗一起看
作者的四題原始回覆與用量可在 公開評分紀錄核對。Simon Willison 在 11 月 3 日的本機實作則記錄另一個模型的回答與失敗。兩者是不同執行者、模型與配置,不能用分數直接排出模型能力名次。

Simon 的案例值得保留的,是道路穿越題被猜成 Pac-Man 類型;它讓你看到,認出幾個知名遊戲,不等於每個結構都能分清。他也記錄預設上下文不足與調高逾時的過程。因此先確認完整文字真的被送入、保留輸入 token 與錯誤,會比立刻評分更早一步。
此外,這些權重已公開。匿名化能減少即時洩漏,尚未控制訓練污染、先前記憶與題目選樣;作者還從各遊戲的三個訓練種子挑選表現最好的一個。若想把練習升格成能力研究,下一步是新增未公開、不同種子與不同結構的材料,再以同一規則測試。
六、Qwen 修迴圈為什麼是另一種實驗?
Qwen 案例提供的是權重存取、Python 分析與受限的前向測試回饋;遊戲辨認題則把小網路數字放進文字輸入。Matthew Honnibal 的原始批評正是在提醒:把不同資訊條件串成一個故事,讀者容易誤以為都靠同一種純閱讀能力。
研究將 Qwen 的改善連到推理迴圈修補;Qwen 官方模型卡也提醒這個小型號在 thinking 模式較容易進入迴圈。能讓模型把原本卡住的答案寫完,與讓它學會新推理步驟,需要不同對照。你自己的遊戲盲測只測用途辨認,不能替新增能力、MoE 架構或遞迴自我改進預填結論。完整修補條件可接著讀 Qwen 權重修補的證據解析。
常見問題:八個先講答案的判讀
1. 只把檔名改成 A、B,就叫盲測嗎?
還要隔離線索。原始路徑、解答、文章與上網權限都可能提示答案;改名只是準備的一步。
2. 我今天需要下載 Qwen 模型嗎?
這份材料準備器不用。它只處理公開文字;真的呼叫哪個模型、在哪裡推論及花多少資源,另外選定並記錄。
3. B 組可以讓模型試跑網路嗎?
本篇協議不允許。B 只做離線權重統計;加入前向測試就另列一組,因為可用證據已經改變。
4. Confidence 很高,就表示正確率很高嗎?
要用答案校對。這是該次回覆的自報信心,四題不足以建立可靠的信心校準曲線。
5. 四題全對,就證明看懂所有權重嗎?
四題支持這四份材料上的辨認。換架構、輸入編碼或新任務,都需要另測;理由還要核對實際數值。
6. 有工具比無工具高,就證明程式有幫助嗎?
先查配置與紀錄。同模型、同預算、相同資料,並保留多次新對話,才較能評估差異;一輪四題仍可能受抽樣與順序影響。
7. 同一 prompt 重跑,能保證同一回答嗎?
材料可相同,回答仍可能變動。保存模型版本、設定與原始輸出,重複執行時呈現分布,不只挑最好一次。
8. 我只完成材料腳本,結果欄該填什麼?
填未測。把本機準備驗收與模型評分分成兩件交付,就能清楚知道接下來還缺哪一段。
給新手的三個重點
- 先問它看到了什麼,再問它答對了多少:架構、座標說明與工具都是題目條件。
- 固定來源、保存匿名對應,把答案留在解題環境外;原始回覆與失敗同樣值得留下。
- 材料準備、用途辨識、故障修補是三件事;自己的紀錄測到哪一層,結論就寫到那一層。
接著閱讀
左右滑動查看更多推薦
下一步:今天先交出一份沒有預填成績的考卷
執行準備器,確認四題與雜湊留下,再寫好模型配置、工具範圍與評分規則。記住這個錨點:權重辨識小考=同一份數字+分開的工具條件+最後才揭曉的答案。等你能清楚說出考卷提供了什麼,才開始讓模型答第一題。想接著建立更多自己的驗收案例,可以瀏覽 AlphaLab AI 專區,或從 AlphaLab 課程安排下一段學習。
