上一篇我們把 Transformer 簡化成了一條不斷被讀取、修改的 Residual Stream。在繼續討論 representation 以前,我們可以先真的從模型裡把一個 activation 拿出來。(這類操作通常需要使用 open-weight、可以本機執行的模型。如果只透過一般商業 API 呼叫閉源模型,我們通常只能看到輸入與輸出,無法直接取得每一層的 hidden states、attention 或其他中間 activation。這裡我們用 Hugging Face 上的 GPT-2 Small 做一個最簡單的示範)
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
inputs = tokenizer(
"The capital of Taiwan is",
return_tensors="pt",
)
with torch.no_grad():
outputs = model(
**inputs,
output_hidden_states=True,
)
h = outputs.hidden_states[6][0, -1]
# 註:Hugging Face 回傳的 `hidden_states[0]` 是 embedding output,後面的元素才依序對應 Transformer blocks;這裡只是為了快速取一個中間 representation。
這裡我們取出模型中間某一層、最後一個 token position 的 hidden state。GPT-2 Small 的 hidden dimension 是 768,因此最後會得到一個 768 維的向量,形式大概像:tensor([0.42, -1.37, 0.08, ..., 2.11])
我們確實已經「看到」模型內部了。但這些數字到底代表什麼?當模型看到 The capital of Taiwan is,最後回答 Taipei,在這段計算的某個階段,模型內部必須形成足以讓後續 computation 產生這個答案的資訊。但這些資訊究竟長什麼樣子?「Taiwan」、「capital of」和最後的 Taipei,是由某幾個 neuron 分別記住,還是以某種更分散的方式存在於這幾千個數字裡?如果模型知道「台北是台灣首都」、理解一段文字帶有悲傷的語氣,或知道現在應該拒絕回答某個問題,這些資訊究竟以什麼形式存在於這幾千個數字裡?這就牽涉到 Mechanistic Interpretability 裡一個非常核心的概念:representation(表徵)。
我們平常會用許多抽象的概念描述世界,例如「狗」、「城市」、「快樂」、「危險」,甚至更複雜的「欺騙」、「專業程度」或「某個句子是不是一個問題」。但神經網路裡並沒有一格記憶體直接寫著:is_dog = True,模型必須用自己的內部狀態表示這些資訊。我們可以把想研究的某種性質稱為 concept,而模型內部承載這項資訊的方式,則可以廣義地稱作它的 representation。
然而,問題是,representation 長什麼樣子?或者說,representation 的基本組成是什麼?什麼是正確的分析尺度?最直覺的想法可能是一個 neuron 對應一個 concept。例如:
Neuron #1274 = 狗
Neuron #2910 = 台灣
Neuron #331 = 安全
早期的神經網路研究確實找到過一些看起來非常直觀的 neuron。但在大型模型裡,事情通常沒有這麼簡單。一個 neuron 可能同時在許多看似沒有關係的情境中被 activate;而同一個 concept 的資訊,也可能分散在許多 neuron 之間。
我們可以先想像一個只有兩個維度的簡化模型。每一段文字經過模型後,都會變成平面上的一個點。

這時你或許會發現描述正面情緒的句子,會沿著空間中的某個方向取得比較大的值;負面情緒的句子則落在相反方向。於是,「情緒」不需要存在某一個特定 neuron 裡。它可能比較像 activation space 中的一個 direction(方向)。如果某個 activation 在這個方向上的 projection 較大,可以理解為在這個線性近似下,該 representation 更強烈地表現出這項性質。如果 projection 接近零,則表示在這個線性方向上較難觀察到這項性質。真實的語言模型當然不是二維,而是數千甚至上萬維,但研究者發現,很多有意義的資訊確實可以用相對簡單的線性結構讀取。[1] 這帶出一個在 interpretability 研究中很重要的想法:Linear Representation Hypothesis(線性表徵假說,LRH)。
LRH 的直覺版本其實很簡單:某些高階概念,可能以 representation space 中的線性方向來表示。例如,「正式與隨意」、「真與假」或某種語意屬性,可能對應到 activation space 裡的一個方向。2024 年 Park、Choe 與 Veitch 對這個想法做了更正式的整理,並指出 linear representation 和兩類我們之後會碰到的方法有很直接的關係:linear probing 與 model steering。[1]
如果一個 concept 可以沿著某個方向被讀出,我們就可以試著訓練一個很簡單的線性分類器,把這個方向找出來。反過來,如果我們沿著這個方向直接修改 activation,也可能改變模型相應的行為。這也是為什麼「direction」會在後面的很多章節不斷出現。
不過,這裡有一件事情非常重要:Linear Representation Hypothesis 是一個研究假說,不是一條已經被證明適用於所有 representation 的定律。有些 concept 可能很好地被一條線性方向描述;有些則可能分散在多個 neuron 之間、需要一整個 subspace,甚至具有更複雜、彎曲的幾何結構。這些問題也正是後面談到 superposition、Sparse Autoencoder 與 neural geometry 時會再回來討論的。
到目前為止,我們做的都還只是提出一個可能的世界觀:模型在 Residual Stream 中形成 representation,而某些 concept 可能可以透過簡單的 direction 被描述。但如果我現在真的拿到幾千維的 activation,要怎麼知道「專業程度」、「情緒」或「真假」的資訊到底在不在裡面?在模型真正回答 Taipei 以前,我們能不能只從某一層的 activation,看出和答案有關的資訊已經出現了?我們需要一個可以實際測量的方法。最簡單的方法之一,就是問:「能不能只看這些 activation,就預測出我們關心的 concept?」
下一篇,我們就會用 Mechanistic Interpretability 裡最簡單、也最常見的工具之一——Linear Probe——真的試著把一個 concept 從模型裡讀出來。
[1] Park, K., Choe, Y. J., & Veitch, V., “The Linear Representation Hypothesis and the Geometry of Large Language Models”, Proceedings of the 41st International Conference on Machine Learning (ICML), 2024. https://proceedings.mlr.press/v235/park24c.html