← Nieuwste papers
🤖 machine learning

Gauge dependence and structured-output corruption in sign-branched repetition penalties: measurements across models, inference stacks, and alternative repetition controls

Dit artikel toont aan dat de veelgebruikte sign-branching repetition penalty in LLM-inferentie-engines fundamenteel gebrekkig is omdat deze afhankelijk is van het arbitraire logit-nulpunt, wat leidt tot massale instabiliteit in tokenselectie over verschillende modellen en catastrofale fouten in gestructureerde JSON-output, een probleem dat wordt opgelost door de straf toe te passen op genormaliseerde log-waarschijnlijkheden in plaats van op ruwe logits.

Oorspronkelijke auteurs: Peter Hollows

Gepubliceerd 2026-07-14
📖 6 min leestijd🧠 Diepgaand

Oorspronkelijke auteurs: Peter Hollows

Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer

Stel je voor dat je een superintelligente robot-schrijver hebt die ervan houdt om verhalen te vertellen. Soms loopt de robot vast in een loop, waarbij hij steeds hetzelfde woord herhaalt als een kapotte plaat. Om dit op te lossen, hebben ingenieurs de robot een "repetition penalty"-knop (herhalingsstraf-knop) gegeven. Het idee is simpel: als de robot probeert een woord te gebruiken dat hij net al heeft gebruikt, draai je de knop omhoog om dat woord minder waarschijnlijk te maken, waardoor de robot wordt gedwongen verder te gaan.

Jarenlang heeft bijna elke robot-schrijver ter wereld (van Hugging Face tot vLLM tot llama.cpp) precies hetzelfde type knop gebruikt. Maar dit artikel onthult een schokkend geheim: deze specifieke knop is kapot omdat hij naar het verkeerde getal kijkt.

Het defecte kompas

Om de glitch te begrijpen, stel je voor dat de hersenen van de robot een gigantische kaart zijn waar elk mogelijk woord een score heeft. Positieve scores betekenen "Ik wil dit echt zeggen", en negatieve scores betekenen "Ik wil dit echt niet zeggen". De kaart is flexibel; de robot kan de hele kaart naar links of rechts verschuiven (een constant getal toevoegen aan elke score) zonder te veranderen welk woord hij als volgende kiest. Het is alsof je een hele stad op een kaart verplaatst; de straten staan nog steeds in dezelfde volgorde ten opzichte van elkaar, zelfs als de stad nu in een ander land ligt.

De kapotte knop probeert te beslissen hoeveel een herhaald woord gestraft moet worden door te controleren of de score positief of negatief is.

  • Als de score positief is, deelt het de waarde door een straffactor (waardoor deze kleiner wordt).
  • Als de score negatief is, vermenigvuldigt het de waarde met de straffactor (waardoor deze nog negatiever wordt).

Hier is het probleem: de lijn tussen "positief" en "negatief" is willekeurig. Omdat de robot zijn hele kaart naar links of rechts kan verschuiven zonder zijn gedrag te veranderen, kan een woord dat op de ene robot "positief" is, op een andere robot "negatief" zijn, of zelfs op dezelfde robot als de kaart een klein beetje verschuift.

Het bewijst dat deze "sign-branch" (het controleren of een getal positief of negatief is) kijkt naar een coördinaat die de training van de robot nooit echt heeft vastgelegd. Het is alsof je een auto probeert te besturen door te sturen op basis van of het dashboard momenteel in de "rode" of "blauwe" zone staat, terwijl het hele dashboard uit zichzelf naar voren en naar achteren kan schuiven.

De chaos van "Zelfde knop, andere resultaten"

Vanwege deze verschuivende kaart doet dezelfde instelling op de knop (zoals 1.3) totaal verschillende dingen voor verschillende robots.

  • Bij de ene robot (zoals gpt2) straft een instelling van 1.3 misschien 84% van de herhaalde woorden.
  • Bij een andere robot (zoals Qwen2.5-Coder-7B) straft diezelfde 1.3 instelling bijna geen enkele herhaling, of straft het ze op een totaal andere manier.

De auteurs testten dit door een enkele robot te nemen en de kaart heen en weer te schuiven. Ze ontdekten dat met een standaardinstelling van 1.3, de robot zijn mening over 58% tot 96% van zijn keuzes veranderde, enkel omdat de kaart een klein beetje verschoof!

  • Als je een "subtractieve" straf gebruikt (gewoon een getal aftrekken), blijft de robot hetzelfde.
  • Als je de standaard "multiplicatieve" sign-branch gebruikt, gaat de robot krankzinnig doen en verandert hij zijn mening bij bijna elk woord dat hij kiest.

Dit betekent dat als je jouw robot afstelt om goed te werken met een instelling van 1.3, je hem eigenlijk afstelt voor een specifieke, accidentele "nulpuntswaarde" van die specifieke robot. Als je die robot naar een andere computer verplaatst of de software bijwerkt, kan diezelfde instelling hem volledig breken.

De JSON-ramp

Het gevaarlijkste deel van deze bug is dat het "gestructureerde output" vernietigt. Dit is wanneer je de robot vraat om code of JSON (een specifiek dataformaat) te schrijven dat strikte regels moet volgen, zoals het sluiten van elke accolade { of het toevoegen van een komma ,.

Deze regels vereisen dat de robot bepaalde symbolen herhaalt. Maar omdat de straf naar de ruwe getallen kijkt, ziet hij een "noodzakelijke regel" vaak aan voor een "slechte herhaling".

  • De auteurs testten dit op 200 echte JSON-schema's.
  • Met de standaardinstelling van 1.3 stortte het percentage geldige, werkende JSON-output in van 97% naar slechts 23%.
  • De robot begon de grammatica te breken, vergat accolades te sluiten of miste komma's, omdat de straf te agressief was op de verkeerde getallen.

Dit was geen simulatie-gok; de auteurs maten dit direct op vijf verschillende modellen, inclusen code-gespecialiseerde modellen, en zagen dezelfde crash gebeuren in elke grote softwarestack (Hugging Face, vLLM en llama.cpp).

De oplossing: Eerst normaliseren

Het papier biedt een eenvoudige, bewezen oplossing. In plaats van naar de ruwe, verschuivende getallen te kijken, moet de straf kijken naar de genormaliseerde waarschijnlijkheden (het werkelijke percentage kans dat een woord wordt gekozen).

  • Waarschijnlijkheden liggen altijd tussen 0 en 1, dus ze verschuiven niet.
  • Toen de auteurs de straf op deze genormaliseerde getallen toepasten in plaats van op de ruwe scores, verdween de chaos.
  • De "flip rate" (hoe vaak de robot van gedachten veranderde door een verschuiving) daalde naar 0.00.
  • Het JSON-succespercentage bij 1.3 schoot weer omhoog naar 97%.

Hugging Face heeft al een tool genaamd LogitNormalization die dit doet, maar deze staat standaard uit en draait na de straf. Het artikel suggereert dat als je deze aanzet en het vóór de straf uitvoert, je een stabiel, betrouwbaar resultaat krijgt dat op dezelfde manier werkt voor elke robot.

De kern van het verhaal

De "multiplicatieve herhalingsstraf" die momenteel in bijna elke AI-engine wordt meegeleverd, is fundamenteel gebrekkig omdat het vertrouwt op een getallenlijn die kan verschuiven. Het is geen universele knop; het is een kapotte draaiknop die op elke machine andere resultaten geeft.

  • Wat het doet: Het veroorzaakt enorme, onvoorspelbare veranderingen in wat de AI schrijft (het flipt 58–96% van de keuzes) en breekt gestructureerde formaten zoals JSON (waardoor de geldigheid daalt van 97% naar 23%).
  • Wat het niet is: Het is geen functie; het is een bug die al jaren door de industrie wordt gekopieerd.
  • De oplossing: Normaliseer eerst de getallen. Dit verwijdert het probleem van de verschuivende kaart en zorgt ervoor dat de straf consistent werkt, ongeacht welke robot je gebruikt.

De auteurs hebben dit gemeten over meerdere modellen en softwarestacks, en de resultaten zijn duidelijk: de huidige standaard is kapot, en de oplossing is klaar voor gebruik.

Verdrinkt u in papers in uw vakgebied?

Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.

Probeer Digest →