iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0
AI Security

打開黑盒子:大型語言模型的機制解釋性入門系列 第 11

Day 11|我們真的找到了模型內部的「演算法」,還是只是過度解釋?

  • 分享至 

  • xImage
  •  

前幾篇我們一路從 Probe、Logit Lens、Activation Patching,到 circuit discovery,開始能回答很多不同層次的問題:

  • 模型裡有沒有某項資訊?它在哪裡?
  • 改變某個 activation 會不會影響輸出?
  • 哪些 components 可能共同組成一段 computation?

到 Day 10,我們開始讓演算法自動剪出 candidate circuits。 但當我們把某個 head 稱為「比較大小的 head」,把幾條 connections 畫成一個 AND operation 時,這些名稱與解釋仍然是研究者加上去的。 模型內部真的按照這套演算法的概念去計算嗎?還是我們只是替一組 intervention results 編出了一個聽起來合理的故事?我們平常用來描述任務的 high level concept,真的對應到模型內部某種可以被因果操作的 representation 嗎?例如我們設計一個很簡單的任務:

如果價格 (Z) 落在 (X) 和 (Y) 之間,就回答 Yes,否則回答 No。

我們可能很自然會把它拆成兩個中間判斷:

Z > X ?
Z < Y ?

最後再把兩個結果透過 AND 組合起來。 但模型內部真的也使用這兩個變數嗎?還是這只是我們自己覺得合理的故事?如果不是我們自己過度解釋,我們應該能提出一些不只適用於原始 inputs,而是針對 internal variables 的 counterfactual predictions,然後直接用 intervention 測試。 這就是 Causal Abstraction 想處理的問題:一個人類可以理解的 high-level causal model,是否真的是神經網路 computation 的 faithful abstraction?

從「模型裡有資訊」到「模型真的在使用這個變數」

假設我們認為模型內部有一個變數紀錄:Z > X

我們可以先用 Linear Probe 測試,看看 activation 中能不能讀出這項資訊。如果 probe accuracy 很高,我們得到:「這項資訊可以被讀出來」但我們真正想知道的是「模型後面的 computation 是否真的把這個 representation 當成 Z > X 這個變數使用?」

這個問題和單純 probing 不一樣。因為如果它真的是一個 causal variable,那我們應該可以直接把它「換掉」,並看到模型後續的行為按照我們的 high level model 改變。

Interchange Intervention

Causal Abstraction 裡一個很核心的想法叫做 interchange intervention。先想像我們有兩個 inputs:

Input A:
X = 2
Y = 5
Z = 4

Z > X = True
Z < Y = True
→ Yes

以及:

Input B:
X = 2
Y = 5
Z = 1

Z > X = False
Z < Y = True
→ No

如果模型內部真的存在一個 representation 對應:Z > X

那我們可以做一件很奇怪的事,把 Input B 裡代表 Z > X = False 的內部狀態,換成 Input A 裡代表 Z > X = True 的狀態。然後繼續讓模型運算。如果其他資訊保持不變,high level causal model 會預測:

False → True

因此答案應該從:

No → Yes

https://ithelp.ithome.com.tw/upload/images/20260907/20183469nVxP6QowS9.png

你可能會覺得這和 Activation Patching 看起來有點像,他們的差別在於,我們現在不是只問「這個 activation 重要嗎?」而是在驗證一個更強的假說:「模型裡的某段 representation,真的扮演了我們所定義的 high level 變數角色。」這就是 causal abstraction 的核心精神。[1]

問題是那個 Representation 到底在哪?

這個概念聽起來很美好,但真正操作起來有一個大問題:假設 Z > X 並不是存在於某一個 neuron。也不是剛好存在於某一段連續的 neuron 裡,而是分散在整個 activation space 裡,那我們怎麼知道該 patch 哪裡?如果要一個 neuron、一組 neuron 慢慢暴力搜尋,很快就不可能 scale,這就是 Distributed Alignment Search(DAS) 想解決的問題。[2]

不要找 Neuron,先換一組座標

DAS 的想法是,如果 high-level variable 以 distributed representation 存在,我們不應該只在原本的 neuron 座標中尋找它,而可以先替 activation space 找一組更合適的座標。

如果我們只搜尋單一 neuron 或一組 neurons,其實等於假設模型 represent Z > X 的方式剛好和模型原本的 neuron 座標軸對齊。但 distributed representation 不一定具有這種形式,Z > X 可能存在於許多 neurons 的某個線性組合中,而每個 neuron 同時也混合了其他資訊。(簡單來說就是假設可能存在 neuron_a + neuron_b + neuron_c 的功能就是紀錄 Z > X 這個概念,而不是有一部分在 neuron_a 中、一部分在 neuron_b 中、一部分在 neuron c 中,這些分散的訊息一起組成 Z > X

而這會讓 intervention 變得困難。只替換其中一個 neuron,可能沒有完整替換 Z > X;直接替換所有相關 neurons,又可能連其他資訊一起改掉。因此,DAS 不把搜尋範圍限制在模型原本的 neuron 軸,而是尋找另一組座標。在這組新座標中,我們希望 Z > X 能被對齊到一個可以單獨替換的方向或 subspace,而其他資訊則保留在其餘方向中。

先看一個只有兩個 neurons 的簡化例子。假設模型內部其實同時保存了兩項資訊:

  • c:Z > X 的結果
  • u:其他與任務有關的資訊

但模型沒有把它們分別放進兩個 neurons,而是混合成:

https://ithelp.ithome.com.tw/upload/images/20260907/201834697LFNiLzxQj.png

這時只看 h_1 或 h_2,都找不到一個 neuron 完整對應 Z > X,因為兩個 neurons 都同時包含 c 和 u。

但如果我們改用另一組座標:

https://ithelp.ithome.com.tw/upload/images/20260907/20183469LhpZUaT89z.png

原本混在兩個 neurons 裡的資訊,就會在新的座標系中分開。第一個方向對應 c,第二個方向則保留其他資訊。
這就是 「rotation」 在這裡的用途。它不是替模型創造新的資訊,也不是把 activation 降維,而是用另一組 basis 描述同一個 activation space,讓原本 distributed 的 variable 有機會被對齊到一個方向或 subspace。更 General 的說,我們可以用一個 rotation matrix R 把原始 activation h 轉換成:

https://ithelp.ithome.com.tw/upload/images/20260907/20183469owUbaAM3FT.png

假設 rotation 後的前 k 個 dimensions 對應 Z > X,interchange intervention 就可以分成四個步驟:

# 1. 把 base 和 source activation 轉到新的座標系
base_rot = R @ h_base
source_rot = R @ h_source

# 2. 其他 dimensions 保持來自 base
patched_rot = base_rot.clone()

# 3. 只交換候選 causal subspace
patched_rot[:k] = source_rot[:k]

# 4. 轉回模型原本使用的座標,再繼續 forward pass
h_patched = R.T @ patched_rot

因此,模型後續收到的仍然是原本 activation space 中的向量;我們只是在新的座標系裡完成交換,再透過 https://ithelp.ithome.com.tw/upload/images/20260907/20183469rMBxhZwn3D.png 轉回去。

https://ithelp.ithome.com.tw/upload/images/20260907/20183469bWX89BpDZj.png

問題是,我們原本並不知道哪個 rotation R 能做到這件事。DAS 的工作,就是利用 gradient descent 把 R 學出來。

對每一組 base / source inputs,DAS 都會:

  1. 在候選 subspace 中執行 interchange intervention;
  2. 讓模型從 patched activation 繼續運算;
  3. 比較模型輸出與 high-level causal model 的預測;
  4. 根據誤差更新 R

概念上可以寫成:

patched_output = model.continue_from(h_patched)

expected_output = high_level_intervention(
    base,
    source,
    variable="Z > X",
)

loss = classification_loss(
    patched_output,
    expected_output,
)

loss.backward()  # 只更新 R,原本模型保持 frozen

所以 DAS 不是在尋找最容易 decode Z > X 的方向。它尋找的是一個 rotation,使得我們交換對應 subspace 之後,模型的行為會按照 Z > X 這個 high-level variable 的 counterfactual prediction 改變。

Probe 和 DAS 到底差在哪?

簡單跟之前已經學過的方法比較,Linear Probe 用 label 訓練一個方向來預測資訊;DAS 則用 intervention outcomes 訓練一個 subspace,測試這項資訊是否真的在後續 computation 中扮演我們指定的 causal role。

這裡要把「使用的操作」和「想驗證的 claim」分開來看。 Causal Abstraction 和一般 Activation Patching 的主要差異,不在於有沒有執行 patching。事實上,interchange intervention 本身就是一種 activation patching。差別在於我們想驗證的 claim 不同。

在 Day 7,我們先指定某個 layer、token position 或 component,再測試把這裡換掉,模型行為會不會改變。(在 Day 7 時我們不討論在修改我們有興趣的 concept 時,是否有改到其他資訊,只要我們在意的 behavior 確實有因此改變,並且沒有過分幅度的破壞模型基本能力,就算是有 causal influence)

但在 Causal Abstraction 中,我們會先提出一個 high-level causal model,接著針對其中的 internal variable 建立 counterfactual prediction,再測試 neural intervention 是否產生相同結果。(也就是希望盡可能找到精準的 represent 那個 concept 的範圍)

它問的不只是「這裡有沒有 causal influence」,而是「這段 neural representation 是否真的扮演 Z > X 這個變數的角色」。 DAS 又在這個基礎上多解決了一個 alignment 問題。一般的 patching experiment 通常由研究者事先決定要替換哪個 activation;DAS 則連「Z > X 對應到 activation space 中的哪個 subspace」也一起搜尋,而且不要求這個 subspace 和模型原本的 neuron 座標軸對齊。 因此,更精確的關係是:

Activation Patching 
└── 執行 neural intervention 

Causal Abstraction 
└── 用 intervention 驗證 high-level causal model 

DAS 
└── 學習 high-level variable 與 neural subspace 的 alignment 

大致上可以理解成:

方法 問題
Linear Probe 這項資訊可以從 activation 中讀出嗎?
Activation Patching 改掉這些 activation,behavior 會變嗎?
DAS 有沒有一個 representation subspace,真的扮演某個指定的 causal variable?

所以 DAS 可以看成是把 representation discovery 和 causal intervention 結合在一起。它不只找資訊的位置,也找哪個 representation 可以讓模型的 causal behavior 對上我們提出的 high level 演算法

Boundless DAS:讓 Subspace 大小也一起學

原始 DAS 需要研究者先決定 causal variable 大概占多少 dimensions?但我們通常根本不知道。因此 Wu 等人後來提出 Boundless DAS,連 intervention subspace 的大小也一起學習,讓方法更容易 scale 到大型語言模型。[3]

他們把 Boundless DAS 用在 7B 的 Alpaca 模型上,研究一個簡單的 numerical reasoning task:判斷價格是否落在上下界之間。

研究者提出模型可能使用兩個 Boolean intermediate variables:

Z > X
Z < Y

Boundless DAS 最後找到能和這兩個變數產生 causal alignment 的 distributed representations,而且這種 alignment 對不同 inputs 和 instructions 仍有一定泛化能力。[3]

這是一個很漂亮的例子,因為研究者不是只說:「我在某一層可以 probe 出比較大小的資訊」而是更進一步問:「如果我真的替換這個內部變數,模型是否會像我們提出的演算法一樣改變答案?」

一個很大的限制

Causal Abstraction、DAS 這類方法很強,但它們有一個很重要的限制,就是你得先提出 high-level model。也就是研究者得先猜模型可能在算什麼?例如:

Z > X
Z < Y
AND

然後再去問模型內部有沒有 causal representation 對應它。如果你的 high-level model 一開始就猜錯,DAS 也不會憑空告訴你真正的演算法是什麼。所以這類方法非常適合驗證 mechanistic hypothesis。

我們需要更好的 Representation

走到這裡,其實出現了一個越來越明顯的問題。

不論是:

  • Linear Probe
  • Steering
  • DAS
  • Circuit analysis

我們都一直在假設模型內部存在某些相對有意義的 representation,可以被我們找到、操作,甚至組成 computation。 但 Day 3 已經提過,一個 neuron 不一定等於一個 feature、一個 feature 也不一定只佔一個獨立 dimension、很多 concept 可能彼此重疊、共享相同的 activation space。這種現象就是接下來要正式面對的 Superposition

DAS 已經開始處理其中一部分問題,它提出的方法讓我們看到一個 feature 不一定和某個/些 neuron 對齊,也可能分散在許多 neurons 的線性組合中。換一組座標之後,我們才可能找到一個比較容易被單獨操作的方向。但 DAS 並沒有完整解決 Superposition 這個問題。它需要研究者先提出 Z > X 之類的 high-level variable,再針對這個假說搜尋 alignment。如果 activation space 裡還混合了大量我們尚未命名的 features,DAS 不會自動把它們全部找出來。更麻煩的是,模型可能需要在有限的 activation dimensions 中表示遠多於 dimensions 數量的 features。這些 features 不一定能透過一次 rotation,被整理成彼此正交、互不重疊的座標軸。

因此接下來我們還要繼續面對 Superposition:假設模型真的把大量 features 疊在同一個 representation space 裡,那如果我們能找到一種方法把它們拆開,是不是就能做到更清晰的解釋?下一篇,我們會介紹非常有影響力、但近年也越來越受到質疑的工具之一:Sparse Autoencoders。

參考資料與延伸閱讀

[1] Geiger, A., Ibeling, D., Zur, A., et al., “Causal Abstraction: A Theoretical Foundation for Mechanistic Interpretability”, Journal of Machine Learning Research, 2025. https://jmlr.org/papers/v26/23-0058.html

[2] Geiger, A., Wu, Z., Potts, C., Icard, T., & Goodman, N., “Finding Alignments Between Interpretable Causal Variables and Distributed Neural Representations”, Conference on Causal Learning and Reasoning (CLeaR), 2024. https://proceedings.mlr.press/v236/geiger24a.html

[3] Wu, Z., Geiger, A., Icard, T., Potts, C., & Goodman, N., “Interpretability at Scale: Identifying Causal Mechanisms in Alpaca”, Advances in Neural Information Processing Systems (NeurIPS), 2023. https://papers.neurips.cc/paper_files/paper/2023/hash/f6a8b109d4d4fd64c75e94aaf85d9697-Abstract-Conference.html


上一篇
Day 10|Circuit 一定要靠人一條一條找嗎?
系列文
打開黑盒子:大型語言模型的機制解釋性入門11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言