核心想法:把壓縮還原
如果 疊加 把很多特徵塞進少數維度,最自然的修法就是把它們「解壓縮」到很多維度,讓每條軸只代表一件事。這正是 稀疏自編碼器(sparse autoencoder,SAE)在做的事。它拿一個殘差流激活值,編碼進一個寬得多的隱藏層,再解碼回原本的向量——但加上一個稀疏懲罰,逼迫那個寬層的幾乎所有單元在任一 token 上都是零。少數仍然活躍的,就是真正存在的特徵。
結果是一本學出來的「字典」:數千到數百萬個 SAE 特徵,每個理想上都是「單義」(monosemantic)的——只對一個有人類意義的概念放電。原本一個神經元把 DNA、法律文字與 HTML 混在一起,SAE 把它們拆成三個乾淨的特徵。這是我們對「多義性」最直接的攻擊,而多義性正是讓 特徵與電路 難以閱讀的元兇。
SAE 怎麼建
SAE 是在語言模型凍結「之後」才訓練的。你在某個位置(比如第 12 層的殘差流)蒐集激活值,再讓自編碼器在稀疏條件下重建它們。編碼器的各個欄成為候選特徵方向;解碼器的各個欄則是每個特徵如何寫回模型的空間。
编码器把输入激活向量映射到隐藏编码,解码器再把编码映射回重建结果。
- 選定一個位置,讓模型跑過大型語料庫,並在那裡快取激活值。
- 訓練:編碼到一個寬隱藏層、再解碼回去,最小化(重建誤差 + 稀疏懲罰)。
- 解讀每個特徵:蒐集讓它放電最強的輸入——也就是它的「最高激活範例」。
- 為特徵命名並稽核;丟掉「死掉的」(從不放電)與無法解讀的特徵。
稀疏自编码器的目标:在重建激活的同时,用 L1 惩罚项(λ‖f‖₁)迫使特征编码 f 保持稀疏——正是上文重建与稀疏之间的取舍。
操控:把特徵調大或調小
一本字典最有說服力的時候,是你能「用」它。SAE 特徵操控(SAE feature steering)做的正是這件事:在推論時,你把某個特徵的解碼器方向「加」進殘差流——或「減」掉——以放大或壓抑那個概念。把「正式語氣」特徵鉗到很高,模型就寫得很僵硬;把「這段文字提到金門大橋」特徵鉗到很高,模型就開始把那座橋塞進每一句回覆裡。這個編輯產生了「預測中的效果」,正是該特徵確實如我們所標記的有力證據。
特征操控:把特征 i 的解码方向 dᵢ 乘以 α 加到残差流上,就能把该概念调强;α<0 时则调弱。
# Steer with one SAE feature at a chosen layer act = residual[layer] # activation we intercept act = act + alpha * sae.decoder[:, j] # push feature j by strength alpha # alpha > 0 amplifies the concept; alpha < 0 suppresses it
從特徵到表徵工程
用 SAE 操控,只是一套更大工具箱的其中一例:激活操控(activation steering)以及它周圍的 表徵工程(representation engineering)領域——透過編輯模型內部的向量,而不是它的提示詞或權重,來控制它。SAE 讓這件事變得有原則可循——你操控的是有命名、有稽核的特徵,而不是不透明的方向——這在有人提議把操控用於安全用途(例如把「欺騙」特徵調低)時格外重要。我們會在第 5 篇重新接起因果這條線;目前的教訓是:一本好的特徵字典,能把可解釋性從一台顯微鏡,變成一組旋鈕。