Hoppa till innehållet
AI-grafen
G· Frontier Labinterpretability· ca 120 min· volatil — kontrolleras ofta· verifierad 2026-09-20

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

Alla källor och licenser