iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
AI Security

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

Day 7|把手伸進黑盒子,真的可以控制模型行為嗎?

  • 分享至 

  • xImage
  •  

上一篇我們用 Logit Lens 觀察模型在不同 layer 中對答案的傾向,這仍然主要停留在 observation / localization,今天我們將第一次真正把手伸進模型內部,嘗試透過替換對應位置的 activation 看看模型是否真的能被影響對應的行為,探索模型後面的 computation 是否真的有依賴這些資訊。這就是 Activation Patching 的核心想法。

Clean、Corrupted、Patched

Activation Patching 通常從兩次 forward pass 開始。假設我們有:

Clean:
The capital of Japan is → Tokyo

Corrupted:
The capital of Taiwan is → Taipei

這裡的 corrupted 不一定代表模型「答錯」,而是我們刻意改變輸入,讓模型產生和 clean run 不同的行為。接著我們把兩次 forward pass 的 activation 都記錄下來。現在假設我們懷疑第 8 層、Japan 這個 token 位置的 Residual Stream,包含了讓模型最後回答 Tokyo 的重要資訊。那我們就做第三次 forward pass。輸入仍然是 corrupted prompt:

The capital of Taiwan is

但當模型跑到第 8 層時,我們偷偷把那個位置的 activation,換成 clean run 裡對應位置的 activation。然後繼續讓模型往下算。

https://ithelp.ithome.com.tw/upload/images/20260903/20183469zEy7KJVdAb.png

如果 patch 之後,模型在 patched run (輸入是問台灣的首都時)變得更支持 Tokyo,那就得到了一條比單純 correlation 更進一步的證據:我們對這個內部狀態做 intervention,確實改變了模型的行為。Activation Patching 因此成為 Mechanistic Interpretability 裡非常常見的 causal localization 方法。[1]

為什麼不只是「看 activation」很重要?

想像我們發現某個 neuron 在所有關於 Taipei 的句子中都特別活躍。但它可能只是:

  • computation 的副產品;
  • 上游其他 computation 造成的結果;
  • 和真正機制一起變動,但自己沒有作用。

如果我們真的把它換掉,模型的行為也跟著發生預測中的變化,證據的性質就不一樣了。

我們不再只是說:「這個 activation 和 Taipei 有相關性」而開始可以說:「在這個 intervention 下,改變這個 activation 會改變模型對 Taipei 的輸出,和 Taipei 這個輸出有因果性。」(仍然很謹慎)。Activation Patching 提供的是因果證據,但它還不等於我們已經知道完整的 mechanism。

動手做一次 Patching

首先跑 clean input,把 activation 存下來:

clean_logits, clean_cache = model.run_with_cache(clean_tokens)

接著重新跑 corrupted input,但在指定的位置插入一個 hook:

patched_logits = model.run_with_hooks(
    corrupted_tokens,
    fwd_hooks=[
        (
            hook_name,
            lambda act, hook:
                patch_activation(act, clean_cache[hook_name], position)
        )
    ]
)

patch_activation() 做的事情非常單純:把 corrupted run 某個位置的 activation,換成 clean run 對應位置的 activation。

接著比較:Clean output、Corrupted output、Patched output,看看 patch 之後,模型有沒有往 clean behavior 恢復。

一格一格 Patch,就能得到一張因果地圖

真正有趣的地方,是我們不需要只猜一個位置。假設模型有 12 layers,prompt 有 10 個 tokens,我們可以:

  1. patch Layer 0 / Token 0
  2. patch Layer 0 / Token 1
  3. ...
  4. patch Layer 11 / Token 9

每次都測量 patch 之後,clean behavior 被恢復多少?最後就能畫出:

https://ithelp.ithome.com.tw/upload/images/20260903/20183469OVu9iFdXzY.png

如果某些區域特別亮,就代表把這些位置的 clean activation 放回去,對恢復 clean behavior 特別有效。我們就從一個巨大的 Transformer 中,逐漸縮小到少數值得繼續調查的位置。這就是 Activation Patching 作為 causal localization 工具最直覺的用途。

怎麼衡量「救回來多少」?

假設:

Clean run      → Tokyo score = 10
Corrupted run  → Tokyo score = 2
Patched run    → Tokyo score = 8

我們可以定義一個簡單的 normalized restoration:

https://ithelp.ithome.com.tw/upload/images/20260903/20183469DBCPfjcS0e.png

其中 (M) 可以是 target token logit、logit difference,或其他和任務相關的 metric。

在這個例子裡:

  • 0:完全沒有救回 clean behavior
  • 1:恢復到 clean run 的程度

不過,metric 怎麼選其實會明顯影響 patching 的結論。Zhang 與 Nanda 系統性比較不同 patching 設定後發現,corruption method、metric 和其他實驗細節都可能導致非常不同的 localization results。[1] 所以一張漂亮的 heatmap,本身也不是終點。

反過來 Patch 也可以

剛才我們做的是把 clean activation 放進 corrupted run。也就是:「如果我把這項資訊救回來,行為能不能恢復?」但也可以反過來把 corrupted activation 放進 clean run,然後問:「如果我破壞這裡,原本的行為會不會消失?」

前者有時被稱為 denoising,後者則可以理解成 noising。直覺上:

  • clean → corrupted:比較像測試某項 activation 是否足以幫助恢復行為;
  • corrupted → clean:比較像測試破壞它是否足以傷害原本行為。

但實際 interpretability 中,「necessary」和「sufficient」都要非常小心使用,因為模型可能存在 redundancy、backup mechanisms 或 self-repair。[2]

Causal Tracing

如果你去讀早期相關論文,還會看到另一個名字:Causal Tracing。Meng 等人在研究 GPT 如何儲存 factual associations 時,先對模型輸入加入 noise 破壞 factual recall,再逐步把不同位置的 clean activation 恢復回去,看哪些位置能把正確答案救回來。[3] 這和我們剛剛做的事情非常接近。

現在的文獻裡,Activation Patching 常被當成更廣義的名稱,單純指從一次 model run 取出 activation,再 patch 到另一次 model run 中;Causal Tracing 則可以視為其中一種具體的 corruption / restoration 設計。[1]

找到「重要位置」+「因果證據」,還沒有找到 Mechanism

假設最後我們得到一張非常漂亮的 heatmap,告訴我們 layer 7–9、某幾個 token positions 特別重要、具有一定程度的 causal influence。但資訊到底透過哪條 computation path 流到輸出?

例如 Layer 8 的 Residual Stream 很重要,可能是因為:

  • 某個 Attention Head 寫入了關鍵資訊;
  • 某個 MLP 對資訊做了轉換;
  • 更前面的元件先建立 representation;
  • 後面的元件只是把結果讀出。

所以你去調整他確實會影響到對應的輸出,但我們卻不知道具體是為什麼,我們下一步會把問題再縮小一點:我們能不能不只找「哪個位置重要」,而是追蹤資訊究竟沿著哪些元件流動?

下一篇,我們會從單點 intervention 往前一步,開始看 Path Patching、Attribution Patching,以及它們如何幫助我們逐漸找到一條真正的 computation path。

參考資料與延伸閱讀

[1] Zhang, F., & Nanda, N., “Towards Best Practices of Activation Patching in Language Models: Metrics and Methods”, International Conference on Learning Representations (ICLR), 2024. https://proceedings.iclr.cc/paper_files/paper/2024/hash/06a52a54c8ee03cd86771136bc91eb1f-Abstract-Conference.html

[2] Heimersheim, S., & Nanda, N., “How to use and interpret activation patching”, 2024. https://arxiv.org/abs/2404.15255

[3] Meng, K., Bau, D., Andonian, A., & Belinkov, Y., “Locating and Editing Factual Associations in GPT”, Advances in Neural Information Processing Systems (NeurIPS), 2022. https://proceedings.neurips.cc/paper_files/paper/2022/hash/6f1d43d5a82a37e89b0665b33bf3a182-Abstract-Conference.html


上一篇
Day 6|模型從什麼時候開始決定它的答案?
下一篇
Day 8|模型到底是怎麼一步一步得出答案的?
系列文
打開黑盒子:大型語言模型的機制解釋性入門10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言