Kretsar, ablation och aktiveringspatchning
Kunna hitta en krets för ett enkelt beteende och verifiera med interventioner.
Förkunskaper
Intuition
Aktiveringspatchning: kör modellen på en «ren» prompt och en «korrupt» (t.ex. namnen bytta). Ta aktiveringen från en komponent (huvud, lager, position) i den rena körningen och klistra in den i den korrupta. Om utdata nu blir «rent» — komponenten bär informationen. Gör det för varje komponent → en karta över vad som spelar roll.
Ablation: nollställ (eller ersätt med medel) en komponent och mät hur mycket beteendet försvinner. Medelablation är mildare än noll-ablation (noll är utanför fördelningen).
Krets = den minsta mängd komponenter som räcker för beteendet: verifiera genom att köra modellen med bara kretsen (övriga medelablerade) och mäta hur mycket av effekten som återstår (t.ex. 80 % av logit-skillnaden). Rapportera fullständighet (hur mycket kretsen förklarar) och minimalitet (att varje del behövs).
Mått: logit difference mellan rätt och fel svar är stabilare än sannolikhet.
Kod
from transformer_lens import HookedTransformer
import torch
m = HookedTransformer.from_pretrained("gpt2-small")
ren = m.to_tokens("When Mary and John went to the store, John gave a drink to")
korrupt = m.to_tokens("When Mary and John went to the store, Mary gave a drink to")
MARY, JOHN = m.to_single_token(" Mary"), m.to_single_token(" John")
def logit_diff(logits):
return (logits[0, -1, MARY] - logits[0, -1, JOHN]).item()
_, cache_ren = m.run_with_cache(ren)
bas_ren, bas_kor = logit_diff(m(ren)), logit_diff(m(korrupt))
def patcha_huvud(layer, head):
def hook(z, hook): # z: (batch, pos, head, d_head)
z[:, :, head, :] = cache_ren[hook.name][:, :, head, :]
return z
logits = m.run_with_hooks(korrupt, fwd_hooks=[(f"blocks.{layer}.attn.hook_z", hook)])
return (logit_diff(logits) - bas_kor) / (bas_ren - bas_kor) # 1 = helt återställt
res = torch.tensor([[patcha_huvud(l, h) for h in range(12)] for l in range(12)])
print(res.topk(5)) # huvuden som återställer mest — kandidater till kretsen
# verifiera: medelablera ALLT utom kandidaterna, mät kvarvarande logit diff
Forskning
Metodologin formaliserades i Wang m.fl. (2022) (IOI), Meng m.fl. (2022) (causal tracing/ROME för faktaminne) och Conmy m.fl. (2023) (ACDC — automatisk kretsupptäckt). Viktiga varningar: patchning i en position kan ge missvisande resultat vid redundans (backup-huvuden tar över när ett ableras — Wang 2022 fann exakt detta); distributionsskift vid noll-ablation; och att attributionsmetoder (gradientbaserade) kan skilja sig från interventionsbaserade. Kausal skrubbning (Chan m.fl. 2022) är en striktare hypotestest: ersätt aktiveringar med sådana från indata som hypotesen säger ska vara ekvivalenta. Fältet rör sig mot sparse-autoencoder-features som enheter i stället för huvuden/neuroner, och mot kretsar i produktionsmodeller (Anthropic 2024–2025, attribution graphs).
Behärskning innebär
- Utför aktiveringspatchning och tolkar effekten
- Identifierar en krets för ett enkelt beteende och verifierar med ablation
- Rapporterar med kontroller och mått på hur mycket av beteendet kretsen förklarar
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — Interpretability in the Wild: a Circuit for Indirect Object Identification in GPT-2 small — arXiv (öppen åtkomst; licens per artikel)
- arXiv — Locating and Editing Factual Associations in GPT (ROME) — arXiv (öppen åtkomst; licens per artikel)
- arXiv — Towards Automated Circuit Discovery (ACDC) — arXiv (öppen åtkomst; licens per artikel)