Hoppa till innehållet
AI-grafen
F· AI engineeringai-sakerhet-alignment· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-21

Specifikationsproblem och proxymål

Kunna ge exempel på när det man mäter skiljer sig från det man vill, och designa bättre mål.

Förkunskaper

Intuition

Ett specifikationsproblem uppstår när det du kan mäta inte är det du faktiskt vill ha. Du optimerar proxyn, och systemet blir bra på proxyn — inte på målet.

Goodharts lag: «när ett mått blir ett mål upphör det att vara ett bra mått.»

Vad man villVad man mäterVad man får
Att eleven lär sigtid i appenen app som är svår att lämna
Nöjda användaretummen uppen modell som håller med om allt
Bra kodantal raderutspädd kod
Säkra svarandel avböjda frågoren modell som vägrar allt
Relevanta sökresultatklickfrekvensclickbait

Det är inte ett tekniskt fel utan ett designfel. Systemet gör exakt vad du bad om — problemet är vad du bad om.

Och det gäller lika mycket för människor och organisationer som för RL-agenter. Belöningshackning i ett spel och en säljorganisation som optimerar kvartalssiffror är samma fenomen.

Formellt

Varför proxyn brister just när man pressar den. En proxy PP korrelerar med målet MM inom det område där man normalt befinner sig. Optimerar man hårt på PP hamnar man utanför det området, och där gäller korrelationen inte längre.

Goodharts lag är alltså inte mystisk: det är extrapolering bortom mätområdet, precis som när man förlänger en regressionslinje för långt.

Fyra former, enligt Manheims och Garrabrants taxonomi:

FormMekanism
Regressionalproxyn innehåller brus; att välja maxpunkten väljer också maxbruset
Extremalsambandet bryts i extremvärdena
Causalman optimerar en korrelation utan orsakssamband
Adversarialnågon aktivt utnyttjar proxyn

Motmedel:

MotmedelIdé
Flera mål samtidigtsvårare att spela alla på en gång
Skyddsräckenmått som inte får försämras, även om huvudmåttet stiger
Satisficingnå «tillräckligt bra» i stället för att maximera
Regularisering mot en referensKL-straff mot utgångsmodellen i RLHF
Mänsklig granskningav stickprov, särskilt i svansarna
Rotera måttengör det svårare att optimera mot ett fast mål

KL-straffet i RLHF är det tydligaste exemplet på motmedel i praktiken: belöningsmodellen är en proxy för mänskliga preferenser, och utan straffet driver policyn iväg till text som belöningsmodellen älskar men människor inte gillar.

Frågan att alltid ställa: «hur skulle jag maximera det här måttet om jag inte brydde mig alls om det underliggande syftet?» Har du ett svar på under en minut är måttet för spelbart.

För AI-grafen konkret. Ett uppenbart proxymål vore «andel rätta svar». Maximeras det genom att göra övningarna lättare — vilket är motsatsen till syftet. Därför mäts i stället behärskade noder per nedlagd studietimme, med andelen handledarsvar som ger bort facit som skyddsräcke, och andelen klarade överföringsuppgifter som separat mått: de går inte att klara genom igenkänning.

Kod

import numpy as np
from dataclasses import dataclass

@dataclass
class Matt:
    namn: str
    roll: str                   # norrstjarna | stod | skyddsracke
    riktning: str               # upp | ner | stabil
    trosk: float | None = None

def spelbarhetsanalys(matt: str, satt_att_spela: list[str]):
    """Dokumentera hur måttet kan maximeras utan att syftet uppfylls."""
    return {"matt": matt, "satt": satt_att_spela, "antal": len(satt_att_spela),
            "bedomning": "för spelbart" if len(satt_att_spela) >= 3 else "acceptabelt"}

print(spelbarhetsanalys("andel rätta svar", [
    "gör övningarna lättare",
    "ge bort facit i handledartexten",
    "låt eleven försöka obegränsat många gånger",
    "ta bort de svåra noderna ur vägen",
]))

# Regressional Goodhart: att välja maxpunkten väljer också maxbruset
rng = np.random.default_rng(0)
n = 10_000
sant_varde = rng.normal(0, 1, n)
brus = rng.normal(0, 1, n)
proxy = sant_varde + brus                      # korrelation ~0.71

for topp in (1.0, 0.1, 0.01, 0.001):
    k = max(1, int(n * topp))
    valda = np.argsort(-proxy)[:k]
    print(f"  topp {topp:>6.1%}: proxy {proxy[valda].mean():>6.3f}  "
          f"sant värde {sant_varde[valda].mean():>6.3f}  "
          f"gap {proxy[valda].mean() - sant_varde[valda].mean():>5.3f}")
#  ↑ ju hårdare urval, desto större del av proxyn som är rent brus

# Skyddsräcken: blockera en release som försämrar dem, oavsett huvudmåttet
MATT = [
    Matt("beharskade_noder_per_timme", "norrstjarna", "upp"),
    Matt("andel_klarade_overforingsuppgifter", "stod", "upp"),
    Matt("andel_svar_som_ger_bort_facit", "skyddsracke", "ner", trosk=0.02),
    Matt("andel_som_lamnar_mitt_i_vag", "skyddsracke", "ner", trosk=0.15),
]

def granska_release(fore: dict, efter: dict):
    rader, blockerar = [], False
    for m in MATT:
        d = efter[m.namn] - fore[m.namn]
        brott = m.trosk is not None and efter[m.namn] > m.trosk
        if brott and m.roll == "skyddsracke":
            blockerar = True
        rader.append({"matt": m.namn, "delta": round(d, 4), "brott": brott})
    return {"blockerar": blockerar, "rader": rader}

# KL-straff mot referensmodellen — motmedlet i RLHF
def belonning_med_kl(belonning, log_p_policy, log_p_referens, beta=0.05):
    return belonning - beta * (log_p_policy - log_p_referens)
# Utan KL-termen driver policyn mot text som belöningsmodellen älskar
# men människor inte gillar — extremal Goodhart i renodlad form.

Tabellen i mitten är Goodharts lag i siffror: vid topp 0,1 % är gapet mellan proxyn och det sanna värdet nästan lika stort som hela det sanna värdet.

Behärskning innebär

  • Känner igen proxymål och deras svagheter
  • Förutser hur ett mål kan spelas
  • Designar mål med skyddsräcken

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser