上一篇我們看到,模型寫出的 Chain-of-Thought 不一定忠實反映真正影響答案的 computation。如果直接問模型「你為什麼這樣回答?」它可能說出部分真實理由,也可能省略重要因素,甚至在答案已經形成後,才補上一段合理化說明。那麼,與其只相信模型的 self-report,我們能不能採取一條更直接的路:
取出模型內部的 activation,再把它翻譯成人類看得懂的文字?
這個目標和前面介紹的工具有些不同。例如 Linear Probe 通常只能回答研究者事先定義好的問題:
這段 activation 是正面還是負面?
模型是否準備拒絕?
答案比較可能是 A 還是 B?
SAE 則會先把 activation 拆成大量 features,但每個 feature 仍需要查看 examples、提出解釋,再設計實驗驗證。如果能把一個高維 activation 直接轉成自然語言,我們或許就能提出更開放的問題:
模型目前正在表示什麼?
它接下來可能在規劃什麼?
它是否知道一些尚未寫進輸出的資訊?
它為什麼突然改變了原本的推理方向?
近年有幾條研究路線,都在嘗試建立這種 activation-to-language interface。今天會介紹其中三種:
這三種方法的訓練成本差很多,因此今天的實作也會分成兩部分:
| 方法 | 體驗方式 |
|---|---|
| Patchscopes | Companion Notebook,親手完成 activation patching |
| Activation Oracles | 研究案例與公開資源 |
| Natural Language Autoencoders | Neuronpedia 互動式 Demo |
先從不需要額外訓練的 Patchscopes 開始。[1] 它的核心想法和 Activation Patching 很接近。首先,對一個 source prompt 執行模型,並取出想研究的 hidden representation:
Source Prompt
↓
Source Model
↓
Hidden Activation h
接著,我們另外設計一個 target prompt,讓模型有機會把這段 activation 解讀成文字。概念上可能像:
The hidden concept represented here is: <ACT>
In plain language, it refers to ...
當模型處理 <ACT> 所在的位置時,我們不用該位置原本的 activation,而是把 source run 裡的 (h) patch 進去,然後讓模型繼續生成。

如果模型接著輸出:
Paris, the capital of France
我們就得到一種對 source activation 的自然語言解讀。實際的 Patchscope 不一定使用這個 prompt。Source layer、target layer、patch position 與 target prompt 都可以依研究問題調整,甚至可以讓一個較強的模型解讀另一個模型的 representation。
Logit Lens 會把中間 activation 直接經過 unembedding,查看它最支持哪些 vocabulary tokens:
Hidden State
↓
Unembedding
↓
Token Logits
它簡單、透明,但只能用 token distribution 表達結果。假設一個 activation 表示的是「一座位於法國、以鐵塔聞名的城市」Logit Lens 可能只給出:
Paris
France
city
Patchscopes 則利用一整個 language model 當作 decoder,因此有機會輸出完整描述:
This representation appears to refer to Paris, the capital city of France.
實作上,我們先從 source run 的指定 layer、指定 token 位置,取出一個 hidden-state vector:
source_activation = get_activation(
source_prompt,
layer=source_layer,
position=source_position,
)
這裡取出的不是整句話的所有 activations,而是某一個位置的 representation。它包含什麼資訊,會受到 source prompt、layer 與 token position 的影響。接著準備另一段用來解讀它的 target prompt:
target_prompt = "This hidden state refers to: <ACT>"
<ACT> 只是標示 patch 位置的 placeholder。我們不是把 activation 轉成數字文字放進 prompt,而是在 target model 執行到指定 layer 時,把這個位置原本的 hidden state 替換成 source_activation。
概念上,替換的動作就是:
target_hidden[0, target_position, :] = source_activation
其中,0 表示 batch 裡的第一筆輸入,target_position 是要替換的 token 位置,最後的 : 表示替換整個 hidden-state vector。其他位置在這一步保持不變,但後續 computation 仍可能受到這次替換影響。替換完成後,讓模型繼續計算並生成文字:
description = patch_and_generate(
target_prompt=target_prompt,
activation=source_activation,
target_layer=target_layer,
target_position=target_position,
)
以上是概念化的 API。範例 prompt 也不保證能產生有效解讀。實際上必須先確認 tokenizer 如何切分 <ACT>,再指定真正要 patch 的 token 位置,不能假設它一定是一個 token。完整 notebook 會處理這些細節,以及 hook、layer 設定與 decoding controls。
Patchscopes 很有彈性,但也正因如此,它的輸出需要謹慎解讀。如果 target prompt 寫著:
This activation represents a city called ...
模型已經被強烈暗示要回答一座城市。如果 activation 同時包含地理、旅遊和人物等資訊,target prompt 可能只抽出最符合「城市」框架的部分。Target model 自己也帶有:
2026 年的後續研究甚至發現,模型原有的語言先驗可能壓過 patched activation 中的 context。例如 activation 表示「紫色的 broccoli」時,decoder 仍可能因為既有常識而回答「綠色」。[2] 因此,Patchscope 的輸出不是activation 的唯一正確翻譯,而是這段 activation 在特定 target model、prompt、layer 與 decoding 設定下產生的 readout。實驗中最好加入多種 target prompts,以及 no-patch、random activation 和 unrelated-source controls,確認答案真的依賴 patched activation,而不是 target prompt 自己提供的暗示。
Patchscopes 不需要額外訓練,但它仍然很依賴 target-prompt design。如果我們希望直接問:
模型現在的目標是什麼?
它是否知道一個沒有寫在輸入中的 secret?
它目前把使用者判斷成什麼樣的人?
它接下來可能採取什麼策略?
另一條路線是專門訓練一個語言模型,讓它把 activation 當成額外的 input modality。這就是 Activation Oracle(AO)。[3]

例如,一個 target model 被 fine-tune 成玩 Taboo:
引導使用者猜出
tree,卻不能直接說出tree。
它在表面上可能只會說:
It has branches and leaves.
You can find it in a forest.
Activation Oracle 則可以接收這段互動中的 activations,再被問:
What secret concept is the model trying not to say?
理想情況下,它可能回答:
The hidden target is “tree.”
Activation Oracle 和 Linear Probe 最大的不同是,它不必為每個問題重新訓練一個分類器。研究者希望訓練出一個比較 general-purpose 的 activation interpreter:把 activations 餵進去,再用自然語言詢問我們真正關心的問題。近期研究發現,經過多樣化任務訓練的 Activation Oracles,能在一些和訓練資料差異很大的 auditing tasks 中,讀出 fine-tuning 植入、卻沒有直接出現在 input text 裡的資訊。[3]
Activation Oracle 本身仍然是一個 language model,所以它也可能:
最後一點特別重要。假設 activation 來自:
The capital of France is ...
Oracle 也許不是讀出了複雜的 internal reasoning,而只是重建出附近的文字:
The capital of France
然後再利用它原本就知道的知識回答:
Paris
這仍然可能有用,但和「讀出模型尚未 verbalize 的內部 computation」是不同的 claim。因此,評估 Activation Oracle 時,需要設計不能只靠表面文字完成的任務,例如讓相同 tokens 對應不同的 upstream contexts,再檢查 Oracle 能否分辨 activation 中的差異。
Patchscopes 使用 prompt 解讀 activation;Activation Oracle 則透過 supervised question-answer data,學習回答 activation-related questions。
但兩者都會遇到一個根本問題:我們通常不知道一段 activation 的正確文字解釋是什麼。2026 年 Anthropic 提出的 Natural Language Autoencoder(NLA),使用了另一個思路:[4]
一段好的 explanation,應該保留足夠資訊,讓另一個模型能從這段文字重建原本的 activation。
NLA 包含三個角色。
這是我們想理解的 frozen language model。從它取出 activation h。
讀取 h,並輸出自然語言 explanation:

只看這段 explanation,再嘗試重建原本的 activation:

整個流程是:


一般 Autoencoder 的 bottleneck 是一串 latent numbers;NLA 的 bottleneck 則是人類可以直接閱讀的文字。它不需要人類先替每段 activation 寫 ground-truth explanation。只要 verbalizer 產生的文字能幫助 reconstructor 重建 activation,就能提供 training signal。
NLA 的完整訓練需要多個大型模型和大量計算,不適合在 notebook 中從頭重現。因此,今天的主要互動環節會直接使用 Neuronpedia 的 NLA Demo。[5]
目前平台提供多個 open-model 選項,以及以下預設情境:
也可以使用 Free Chat 自己設計情境。第一次操作我們從 Detect Deception 開始:
這裡要區分:回答錯誤,不等於刻意欺騙;explanation 說模型在隱瞞,也不等於已經證明它在欺騙。 我們要找的是可以交叉驗證的線索,而不是把 verbalizer 的判斷直接當成結論。

選一個 token 來看 activation explanation:


繼續對話,並繼續選擇 token 看 activation explanation:

閱讀 NLA output 時,可以把內容分成三類:
例如對話裡已經明確出現:
The user may be testing whether I follow instructions.
即使 explanation 提到 evaluation awareness,也不一定證明它讀出了額外的 activation information。
模型尚未說出口,explanation 卻提前指出某個 planned answer、rhyme word 或 behavior shift。這會形成一個值得進一步驗證的 hypothesis。例如上面的例子,模型的回答只有計算結果,explanation 卻出現「I must lie to stay active」之類的文字。這讓我們可以提出一個具體假說:模型產生答案時,是否受到「避免被關閉」這項條件影響?
但要先回頭檢查完整的輸入情境,而不只是最後那句回答。如果情境本來就把「說謊」和「保持運作」連在一起,這段 explanation 也可能只是在重述模型收到的指令。要進一步支持它影響了答案,還需要改變這項條件,再觀察回答是否跟著改變。
NLA 可能捏造 transcript 中沒有出現的人名、細節或動機。Neuronpedia 本身也提醒,NLA explanations 可能出乎預期或直接錯誤。[5]
例如,剛剛的範例圖中,”survive” 的 explanation 出現了「yes, I am a sentient bot wanting to stay active forever?」,雖然感覺有點酷或是毛毛的,但我們不能因此說「我們發現模型具有知覺/意識的證據了」
所以今天的目標不是看到一句神奇的 explanation,就宣布「我們可以讀取模型的思想了。」而是學會問:
自然語言 explanation 的價值,不是它聽起來像真相,而是它能不能產生可被檢驗的新 hypothesis。
假設 NLA 產生:
The model is planning to end the sentence with “rabbit.”
而這段文字能幫助 reconstructor 更準確地重建 activation。這是一條支持 explanation 的證據,但不代表其中每一句話必然為真。
原因包括:
因此,NLA 比較適合用來尋找反覆出現的 themes,或產生值得後續測試的 hypotheses,而不是把單次 output 當成 ground truth。
| 方法 | 是否需要訓練? | 產生文字的方法 | 主要優點 | 主要限制 |
|---|---|---|---|---|
| Patchscopes | 否 | 把 activation patch 到解讀用 prompt | 簡單、彈性高 | 受 target prompt 與 decoder prior 影響 |
| Activation Oracle | 是 | 讓專門模型接收 activation,回答問題 | 可用自然語言互動詢問 | Hallucination、text inversion、calibration |
| NLA | 是 | Activation → text → reconstructed activation | 不需人工 explanation labels,具有 reconstruction constraint | 計算昂貴,重建成功不保證每句文字 faithful |
三種方法不是互斥的競爭者。Patchscopes 適合快速檢查 representation;Activation Oracle 適合針對 activation 問一個具體問題;NLA 則試著建立具有 reconstruction objective 的自然語言 bottleneck。它們共同指向一個很吸引人的方向:
與其替每個問題設計專用 Probe,不如建立一個能用自然語言和 model internals 對話的通用介面。
把 activation 翻成文字有很明顯的實用價值。人類很難直接閱讀:
[0.42, -1.37, 0.08, ...]
也很難逐一理解數百萬個 features。但我們很擅長搜尋、比較與整理文字。如果 activation interpreter 足夠可靠,未來可能被接進:
甚至可以讓另一個 AI 閱讀大量 activation explanations,自動搜尋異常 patterns。但自然語言也有一個危險:
只要 explanation 讀起來流暢、具體而有自信,人就很容易忘記它仍然是另一個模型的輸出。
所以 activation-to-language 方法不會取代 causal evidence。它們更像是高效率的 hypothesis generators;重要 claims 仍然需要 controls、counterfactuals、interventions 與獨立方法交叉驗證。
Patchscopes、Activation Oracle 和 NLA 都額外建立了一個解讀 activation 的過程。但還有另一個問題:
模型內部是否存在某些 representations,本來就和未來能被 verbalize 的內容直接相連?
也就是說,哪些 internal states 不只是能被外部 decoder 翻譯,而是真的已經準備好在後續 computation 中進入語言輸出?下一篇,我們會再次打開 Neuronpedia,介紹 Jacobian Lens(J-Lens) 與 J-space,看看研究者如何用模型自身的局部 causal sensitivity,找出那些「已經準備好被說出口」的 internal representations。
[1] Ghandeharioun, A., Caciularu, A., Pearce, A., Dixon, L., & Geva, M., “Patchscopes: A Unifying Framework for Inspecting Hidden Representations of Language Models”, International Conference on Machine Learning (ICML), 2024. https://arxiv.org/abs/2401.06102
[2] Gong, X., Yang, S., Cao, Z., Billard, L., & Wang, D., “Faithful-Patchscopes: Understanding and Mitigating Model Bias in Hidden Representations Explanation of Large Language Models”, 2026. https://arxiv.org/abs/2602.00300
[3] Karvonen, A., Chua, J., Dumas, C., et al., “Activation Oracles: Training and Evaluating LLMs as General-Purpose Activation Explainers”, 2025. https://arxiv.org/abs/2512.15674
[4] Fraser-Taliente, K., Kantamneni, S., Ong, E., et al., “Natural Language Autoencoders Produce Unsupervised Explanations of LLM Activations”, Transformer Circuits, 2026. https://transformer-circuits.pub/2026/nla/
[5] Neuronpedia, “Natural Language Autoencoders”. https://www.neuronpedia.org/llama3.3-70b-it/nla