JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

走進表徵:殘差流、特徵與疊加

大型語言模型如何把資訊存在隱藏狀態裡、為什麼單一神經元這麼難讀,以及探測如何檢驗一個表徵知道什麼。

把殘差流當成共用工作區

Transformer 裡的每個 token 都帶著一個向量,直直地穿過整個網路,每一層都往上「加」東西。那條高速公路就是 殘差流(residual stream),而讀懂它正是 殘差流分析 的基礎。把它想成一塊共用草稿紙:注意力 head 與前饋區塊從殘差流讀取、算出某個東西、再用加法把結果寫回去。因為各項貢獻是相加的,原則上你可以把任何後面的隱藏狀態拆解成所有寫入它的東西之和——這是機制可解釋性大量依賴的性質。

每个 Transformer 块都从残差流读取并写回,因此残差流累积了注意力和前馈网络写入的所有信息。

Transformer 块示意图:层归一化、注意力、残差相加、前馈网络。

特徵,而非神經元

我們真正在意的意義單位是「特徵」(feature):激活空間裡的一個方向,對應到人類可辨識的概念——「這段文字是法文」、「我們正在引號裡面」、「主詞是一位美國總統」。這個領域的工作假設是:網路的運算最好用 特徵與電路(features and circuits)來描述——特徵是變數,電路是讀取某些特徵、寫出另一些特徵的演算法。關鍵在於:一個特徵不必是一個神經元。

特征是激活空间中的一个方向——就像词向量沿着一致的方向排列相关含义。

词向量示意图:国王减男人加女人约等于女王的方向类比。

這正是 解釋單一神經元(neuron interpretation)令人挫折的原因。你探測一個神經元,發現它對「DNA 序列」、「法律引用」和「HTML 標籤」都會放電——一團糾結,沒有乾淨的故事。這些「多義」(polysemantic)神經元會對好幾個無關概念反應,所以一次只讀一個神經元,會對運算給出誤導的圖像。

疊加:概念比維度還多

為什麼神經元是多義的?目前主流的答案是 疊加假說(superposition hypothesis):模型想表徵的特徵遠多於它擁有的維度,於是把它們塞成「幾乎」正交、共用神經元的方向。只要同時間只有少數特徵被啟動——對語言來說確實如此,因為在任一個 token 上大多數概念都是缺席的——模型就能在可接受的干擾下,再把它們拆回來。疊加是網路學到的一種壓縮技巧,也是原始激活值看起來像雜訊的最大單一原因。

\mathbf{x} \approx \sum_{i} a_i\,\mathbf{d}_i, \qquad \mathbf{d}_i \cdot \mathbf{d}_j \approx 0 \;\; (i \neq j)

叠加把许多特征方向塞进同一个向量,让它们近似正交,从而能在几乎互不干扰的情况下被分别读出。

探測:問一層知道什麼

在拆解特徵之前,我們至少能檢驗某個資訊「是否存在」於殘差流的某處。探測(probing)會訓練一個小分類器——一個 探測分類器(probing classifier)——從凍結的隱藏狀態去預測某個性質(詞性、情感、一步棋是否合法)。如果探測成功,代表該資訊在那一層是線性可讀的。這是一種便宜又強大的方法,能描繪一個概念在模型處理序列時、於「哪裡」與「何時」變得可用。

\hat{y} = \operatorname{softmax}(W\,\mathbf{h} + \mathbf{b})

线性探针把某一层的隐藏状态 h 映射到标签——高准确率意味着该属性已经编码在那一层里。

# Probe layer L for 'is the sentence French?'
H = hidden_states(model, texts, layer=L)   # frozen activations
probe = LogisticRegression().fit(H, labels) # tiny linear classifier
print(probe.score(H_test, labels_test))     # high => info is linearly present at L
線性探測:高準確率代表該性質已經編碼在那一層的表徵裡。