iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
AI Security

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

Day 12|如果一個 Neuron 疊加了多種「概念」,我們要怎麼分析?

  • 分享至 

  • xImage
  •  

前面幾篇中,我們一直在尋找模型內部有意義的 representation。

我們可以用 Linear Probe 檢查某項資訊能不能從 activation 中被讀出,也可以透過 intervention,測試某段 representation 是否真的參與了模型的 computation。但如果我們打開一層模型,開始用肉眼一個一個觀察裡面的 neurons,就會發現一個麻煩的現象:同一個 neuron 經常會在許多看似毫無關係的情境中 activate。

例如某個 neuron 可能同時對:codedogs 相關的輸入產生很高的 activation,那它到底是一個 code-related concept neuron 還是 dogs-related concept neuron?這種一個 neuron 看起來同時對應多種不同 features 的現象,通常被稱為 polysemanticity。

而且問題不只是一個 neuron 表示很多東西。反過來,就像昨天提到的,同一個 concept 也可能分散在許多 neurons 的線性組合中。這代表我們很難直接把一個或多個 neuron 對應到一個我們可以理解的 concept,當成分析模型的基本假設。

像昨天最後面預告的,一種可能的解釋就是模型正在使用 superposition:把比 activation dimensions 更多的 features,疊加在同一個 representation space 中。如果是這樣,就算我們花費一大堆時間逐一查看 neurons ,也可能永遠看不清楚模型真正使用的 features。所以基於這個可能的解釋,我們需要的不是替每個 neuron 勉強取一個名字,而是想辦法把混合在 activation 裡的 features 拆解出來。

Sparse Autoencoder(SAE)就是目前最有影響力的嘗試之一。

當 Features 比 Neurons 還多

假設模型只有兩個 neurons,它的 activation space 就只有兩個 dimensions。如果每個 feature 都必須獨占一條彼此正交的 axis,那麼這個空間最多只能乾淨地表示兩個 features:

Neuron 1 → Feature A
Neuron 2 → Feature B

但神經網路可能需要表示的 features 遠多於 neurons 數量。例如,一個 language model 可能同時需要處理寫程式、工具呼叫、正面情緒、拒答傾向等等。Superposition hypothesis 提出,模型可能不讓每個 feature 各自占據一條 neuron axis,而是讓它們使用 activation space 中不同、但不完全正交的 directions。

https://ithelp.ithome.com.tw/upload/images/20260908/20183469gMibfBAj8Q.png

乍看之下,這些 directions 互相重疊,應該會產生嚴重干擾。但如果每個 feature 只在少數 inputs 中出現,同一時間真正 activate 的 features 可能很少,模型就有機會用有限的 dimensions 容納更多 features,這種性質稱為 feature sparsity。但少數 active features 沿著不同 directions 疊加後,投影到原本的 neuron 座標上,仍然可能形成一個「大部分 coordinates 都不為零的 activation」,也就是我們後面說 dense vector / dense activation 時指的意義。

Anthropic 在 Toy Models of Superposition 中用簡化模型展示了這種可能性:當 features 足夠 sparse,而且表示它們的收益大於彼此干擾造成的成本時,模型可能會選擇以 superposition 表示比 dimensions 數量更多的 features。[1]

這不代表所有大型語言模型都已被證明完全按照這種方式運作。但它提供了一個重要提醒:Polysemantic neuron 是我們觀察到的現象;superposition 則是解釋這個現象的一種假說。而如果 neuron 不是合適的分析單位,我們能不能從 activation 中學出另一組更有用的單位?

這就是 Sparse Autoencoder 想嘗試的事情。

Sparse Autoencoder 改問了什麼問題?

Sparse Autoencoder(SAE)不再探討 「Neuron #1052 代表什麼?」它改問:「這個 dense activation,能不能被表示成少數幾個 learned feature directions 的組合?」假設我們從 language model 的某一層取得 activation:

https://ithelp.ithome.com.tw/upload/images/20260908/20183469ZouLxahgfk.png

SAE 會把 x 送進一個 encoder,轉換成通常維度更高、但只有少數位置具有非零值的 latent representation z,再透過 decoder 把它重建成 hat{x}:

https://ithelp.ithome.com.tw/upload/images/20260908/20183469sA5u2OitSc.png

https://ithelp.ithome.com.tw/upload/images/20260908/20183469GPjbNUDqWG.png

以最簡單的 ReLU SAE 為例,encoder 可以寫成:

https://ithelp.ithome.com.tw/upload/images/20260908/20183469BiUNtYHHAC.png

Decoder 再把 sparse latents 轉回原本的 activation space:

https://ithelp.ithome.com.tw/upload/images/20260908/20183469jhrhKlnJZq.png

概念上就是:

z = relu(
    W_enc @ (x - b_dec) + b_enc
)

x_hat = W_dec @ z + b_dec

訓練 SAE 時,原本的 language model 保持 frozen。被更新的只有 SAE 自己的 encoder 和 decoder。

SAE 到底在學什麼?

如果只要求 hat{x} 接近 x,SAE 可以讓大量 latent units 同時 activate,輕鬆地重建輸入。但這樣不會比較容易解釋。因此,最基本的 SAE objective 會同時考慮 reconstruction 與 sparsity:

https://ithelp.ithome.com.tw/upload/images/20260908/20183469Kfrp2RsYu1.png

第一項要求 SAE 保留原本 activation 中的資訊;第二項則鼓勵每次只使用少數 latent features。兩者之間存在直接的 trade-off:

  • 太重視 sparsity,SAE 可能漏掉重要資訊,造成較大的 reconstruction error;
  • 太重視 reconstruction,大量 latents 可能一起 activate,失去 sparse decomposition 的意義。

上面的 ReLU 加 L_1 是最容易理解的基本版本。現代 SAE 也可能使用 TopK、Gated SAE 或 JumpReLU 等不同設計,但共同目標仍然是:用少量 active latents,盡可能重建原本的 model activation。

為什麼要把 4096 維變得更高維?

這裡可能有點反直覺。如果原本 activation 只有 4096 維,為什麼 SAE 的 latent space 可能包含數萬、數十萬,甚至數百萬個 dimensions?這是因為 SAE 的目標不是壓縮 activation,而是學習一個 overcomplete dictionary。假設 W_dec 的每一個 column 都是一條 decoder direction d_i,重建結果可以寫成:

https://ithelp.ithome.com.tw/upload/images/20260908/20183469WH9mzEBMR2.png

其中:

  • d_i 是第 i 個 SAE feature 的 decoder direction;
  • z_i 是這個 feature 在目前 activation 中的強度;
  • m 可以遠大於原始 activation dimension d;
  • 但每次只有少數 z_i 不是零。

假設一個 SAE 有十萬個 latent features,並不代表每個 token 都同時使用十萬個 features。處理某個 token 時,可能只有其中數十或數百個 features activate。例如句子:「The Python function returned an error.」它的 activation 可能被 SAE 近似分解成:

2.3 × Python-related direction
+
1.5 × function-related direction
+
3.1 × error-message direction

這些名稱不是 SAE 自己產生的,而是研究者根據 feature 的 activation patterns 提出的 interpretation。但從數學上來看,SAE 確實嘗試把一個 dense vector,重寫成少數 dictionary directions 的加權組合。這也是為什麼 SAE 經常被視為一種 sparse dictionary learning 方法。

SAE Feature 就是模型真正的概念嗎?

2023 年,Anthropic 在 Towards Monosemanticity 中,使用 SAE 從一個 one-layer Transformer 的 activations 中抽取出大量相對容易解釋的 features。[2] 2024 年,他們把方法擴展到 Claude 3 Sonnet,分別訓練約 1M、4M 與 34M features 的 SAEs。雖然 dictionary 非常巨大,但每個 token 平均只有不到 300 個 features activate。[3] 研究者找到了一些會對下列內容產生相對清楚 activation patterns 的 features,例如:城市與知名地點、人物、程式碼結構等等。他們也對部分 features 進行 intervention,觀察到與 feature interpretation 相符的行為變化。這讓一個很吸引人的研究方向開始變得具體:

難以理解的 dense activations
            ↓ SAE
大量 sparsely active、可以逐一研究的 latent features

如果這套 decomposition 足夠 faithful,我們就可能不必直接理解數千個 polysemantic neurons,而可以改為研究更 sparse 的 feature units。不過這個「如果」非常重要。

另外,SAE Feature 仍不是所謂的「概念」,它本身也是另一個 learned model。它根據 training data、architecture、dictionary size 和 sparsity objective,學出一種能夠近似重建 activations 的 decomposition。它不會直接證明模型裡原本就存在十萬個彼此獨立、界線清楚的原子概念。不同設定可能學出不同的 dictionaries。同一個人類認為一致的 concept,也可能被拆成多個 latents。這種現象稱為 feature splitting。

例如,一個較小的 SAE 可能學到一個廣泛的「程式碼」feature;更大的 SAE 卻可能把它拆成:Python code、JavaScript code、函式定義、Error traces。這不一定完全是壞事。更細的 features 有時可能更符合模型真正使用的 distinctions。但它告訴我們 SAE feature 的粒度不是唯一或固定的。

更麻煩的現象是 feature absorption。研究者曾找到一個看起來代表「token 以字母 S 開頭」的 SAE latent。它對許多 S 開頭的 tokens 都會 activate,卻沒有在 _short 上出現。進一步分析後發現,相關資訊在這個例子裡被另一個與 _short 本身相關的 latent 吸收了。[4] 也就是「一個 feature interpretation 可能在大部分 examples 上看起來正確,卻在某些重要情況中悄悄失效」此外,SAE 還可能出現:

  • 無法完整重建原始 activation;
  • 從不 activate 的 dead latents;
  • 一項資訊分散在多個 latents;
  • 一個 latent 仍然對多種不同情境 activate;
  • 不同 random seeds 學出不同 decomposition。

因此,說 SAE 找到了模型真正的概念並不妥當,而是應該說 SAE 學出了一套 sparse、可能更容易分析的 activation decomposition。這套 decomposition 是否 faithful、是否穩定,以及是否真的對模型行為具有因果意義,都還需要額外實驗。

Feature #32741 到底是什麼?

假設我們取得一個包含十萬個 latent features 的 SAE。你可能會想看著其中一個 feature 想說 「Feature #32741 到底代表什麼?」「訓練出來的這些到底是啥?」

SAE 不會替 feature 自動取名。研究者通常會先檢查:

  • 哪些文本最容易讓它 activate?
  • 它在句子中的哪些 token positions activate?
  • 哪些相似文本不會讓它 activate?
  • 它和哪些 output logits 或 model behaviors 有關?
  • Ablate 或 amplify 它時,模型行為是否按預期改變?

如果它最高的 activating examples 包含:

def calculate_loss(...)
import numpy as np
Traceback (most recent call last):

我們可能先提出「Feature #32741 和 Python code 有關」

但這只是一個 hypothesis,它也可能只偵測某種標點、token pattern、程式碼格式,而不是廣泛的「Python」概念。因此,看幾個漂亮的 top activating examples 並不等於理解一個 feature。真正可靠的 interpretation 還需要:

  1. 找出共同 pattern;
  2. 提出具體 explanation;
  3. 設計 positive 與 negative examples;
  4. 主動尋找反例;
  5. 必要時加入 causal intervention。

下一篇,我們會實際使用 Neuronpedia(一個開源的可解釋性平台) 檢查 SAE features。學習如何把 feature interpretation 當成一個可以被反駁的 hypothesis,又需要多少證據,才有資格說自己理解了一個 SAE feature。

參考資料與延伸閱讀

[1] Elhage, N., Hume, T., Olsson, C., et al., “Toy Models of Superposition”, Transformer Circuits Thread, 2022. https://transformer-circuits.pub/2022/toy_model/

[2] Bricken, T., Templeton, A., Batson, J., et al., “Towards Monosemanticity: Decomposing Language Models With Dictionary Learning”, Transformer Circuits Thread, 2023. https://transformer-circuits.pub/2023/monosemantic-features/

[3] Templeton, A., Conerly, T., Marcus, J., et al., “Scaling Monosemanticity: Extracting Interpretable Features from Claude 3 Sonnet”, Transformer Circuits Thread, 2024. https://transformer-circuits.pub/2024/scaling-monosemanticity/

[4] Chanin, D., Wilken-Smith, J., Dulka, T., et al., “A is for Absorption: Studying Feature Splitting and Absorption in Sparse Autoencoders”, 2024. https://arxiv.org/abs/2409.14507


上一篇
Day 11|我們真的找到了模型內部的「演算法」,還是只是過度解釋?
系列文
打開黑盒子:大型語言模型的機制解釋性入門12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言