Naar de inhoud
NLEN
Illustratie: In-context learning: leren zonder gewichtsupdates

In-context learning: hoe een model leert zonder gewichtsupdates

Door Ivo Donker — samengesteld met AI-ondersteuning (Claude & Gemini)

Wat je hiervoor moet weten

Dit artikel valt binnen Module 2 — Een model gebruiken (Pijler 2: Gebruiken & sturen). Om de onderliggende logica volledig te begrijpen, is basiskennis van de volgende concepten aan te raden:

Wie nog niet precies weet hoe lagen en representaties zijn opgebouwd, kan eerst lezen over hoe een transformer als architectuur functioneert. Daarnaast helpt inzicht in rekenkernen; raadpleeg daarvoor de uitleg over het attention-mechanisme in moderne taalmodellen om te zien hoe tokens informatie uitwisselen.

Wanneer een groot taalmodel (LLM) een taak uitvoert op basis van enkele voorbeelden in de prompt, lijkt het ter plekke te leren. Geef het model drie voorbeelden van een complexe transformatie — zoals het omzetten van ongestructureerde Nederlandse juridische citaties naar een strak JSON-schema — en bij het vierde voorbeeld volgt het feilloos hetzelfde patroon. Toch verandert er tijdens deze interactie fundamenteel niets aan de parameters van het netwerk. Er vindt geen backpropagation plaats, er worden geen gradiënten berekend en de statische matrixwaarden op de schijf of in het VRAM blijven volkomen identiek.

Dit fenomeen heet in-context learning (ICL). In plaats van fysieke aanpassingen aan het neurale netwerk, manipuleert de invoertekst de tussenliggende activatietoestanden van de transformer. In dit artikel ontleden we de wiskundige en mechanistische theorieën achter dit proces. We bekijken hoe inductiekoppen patronen kopiëren, hoe transformers tijdelijke optimalisatielussen simuleren via impliciete gradiëntdaling, waar de harde capaciteitsgrenzen liggen en hoe ICL zich verhoudt tot methoden zoals parameter-efficiënte fine-tuning.

Het fundamentele verschil tussen trainingsfasen en inferentie

Om te begrijpen waarom in-context learning zo opmerkelijk is, moeten we eerst het onderscheid scherpstellen tussen parametrisch leren en activatie-gedreven sturing. Tijdens de klassieke trainingsfase — oftewel pre-training en supervised fine-tuning — worden honderden miljarden tokens door het netwerk gestuurd. Een verliesfunctie (loss function) meet het verschil tussen het voorspelde token en het daadwerkelijke doeltoken. Via backpropagation worden gradiënten teruggerekend door alle lagen, waarna een optimizer zoals AdamW de gewichten stapsgewijs bijwerkt.

Om te begrijpen waar deze gewichten fysiek uit bestaan, legt het artikel over parameters en gewichten in neurale netwerken uit hoe getallen in matrices de uiteindelijke kennis representeren. Zodra een model in productie staat tijdens inferentie, bevinden deze gewichtsmatrices zich in een strikte alleen-lezen status (frozen weights).

Bij in-context learning worden de statische gewichten niet gewijzigd, maar fungeren ze als een vast neuraal computerprogramma. Dit programma verwerkt een reeks invoertokens en bouwt per laag een dynamische 'toestand' op in de zogeheten residual stream. De aangeleverde voorbeelden (few-shot demonstrations) dienen als invoerdata die deze interne toestand moduleren. Het netwerk berekent een functie $f(x)$ waarbij de functieparameters constant zijn, maar waarin de context $C$ de effectieve transformatie van invoer naar uitvoer dynamisch parametriseert.

Mechanistische verklaring: de rol van inductiekoppen

Een van de meest concrete verklaringen voor in-context learning komt uit het veld van de mechanistische interpreteerbaarheid. Onderzoekers hebben ontdekt dat transformermodellen specifieke subcircuits ontwikkelen die functioneren als zogenaamde inductiekoppen (induction heads). Dit zijn gespecialiseerde aandachtsmechanismen die bestaan uit een samenwerking tussen ten minste twee opeenvolgende attention-lagen.

Wie dieper wil duiken in hoe circuits in neurale netwerken wetenschappelijk worden geïsoleerd, vindt gedetailleerde methodologieën in het overzicht over mechanistische interpreteerbaarheid bij LLMs.

Een inductiekop voert in essentie een abstracte zoek- en kopieeroperatie uit over de context. Het mechanisme werkt in twee stappen:

Dit inductie-algoritme $[A][B] \dots [A] \to [B]$ vormt de microscopische basis voor patroonherkenning. Wanneer we een model voorzien van gestructureerde input-outputvoorbeelden (zoals Input: Amsterdam -> Output: Noord-Holland), herkennen inductiekoppen razendsnel de syntactische en semantische scheidingstekens. Ze zorgen ervoor dat het netwerk na het zien van de prompt direct de bijbehorende mapping activeert voor een nieuw element (zoals Utrecht ->).

De wiskundige theorie: impliciete gradiëntdaling in het forward pass

Naast de mechanistische interpretatie met inductiekoppen bestaat er een invloedrijke theoretische hypothese: transformers kunnen tijdens de forward pass een vorm van impliciete gradiëntdaling (implicit gradient descent) simuleren. Verschillende wiskundige studies tonen aan dat de lineaire transformaties binnen multi-head attention-lagen structureel equivalent kunnen zijn aan één of meerdere stappen van optimalisatie via lineaire regressie.

In dit model fungeert de transformer-architectuur als een meta-optimizer. De gewichten van het model zijn tijdens de pre-training zodanig getraind dat de activaties in de vroege lagen een abstracte representatie vormen van de dataset (de demonstraties in de context). De diepere lagen voeren vervolgens bewerkingen uit die wiskundig neerkomen op het minimaliseren van een interne doelfunctie op die voorbeelden, nog vóórdat het laatste token wordt gegenereerd.

Eigenschap Expliciet trainen (Fine-tuning) In-context learning (ICL)
Gewichtsaanpassingen Ja, permanente updates in gewichtsmatrices via backpropagation. Nee, gewichten blijven bevroren; pure activatie-modulatie.
Geheugenlocatie Parameters opgeslagen in modelopslag/VRAM. Tijdelijk opgeslagen in het contextvenster en de KV-cache.
Rekenkosten per aanroep Laag (korte prompt volstaat na training). Hoger (voorbeelden verbruiken rekenkracht bij elke aanroep).
Persistentie Blijvend aanwezig voor alle toekomstige sessies. Verdwijnt zodra de sessie of context wordt gewist.
Flexibiliteit Star; hertraining nodig voor taakwijzigingen. Zeer hoog; direct aanpasbaar per prompt.

Task Retrieval versus Task Learning

Een cruciaal debat binnen AI-onderzoek is of een model via ICL daadwerkelijk een nieuwe taak leert, of dat de voorbeelden louter dienen om een reeds bestaande taak uit het latente geheugen op te halen (task retrieval). Als een model tijdens pre-training al miljoenen pagina's met vertalingen heeft gezien, leert een prompt met drie voorbeelden Engels-Nederlands het netwerk niet hoe het moet vertalen; het vertelt het netwerk enkel: activeer nu de vertaalmodus.

Onderzoekers testen dit onderscheid met zogeheten 'flipped-label' experimenten. Hierbij krijgen modellen voorbeelden waarin de waarheid opzettelijk is omgedraaid (bijvoorbeeld een sentimentanalyse waarbij positieve zinnen het label Negatief krijgen en vice versa). Kleine modellen negeren deze omkering vaak en blijven hun vooraf getrainde associaties volgen (zero-shot prior). Zeer grote modellen daarentegen overschrijven hun interne voorkeur en passen zich aan de omgedraaide regels in de context aan. Dit bewijst dat grotere architecturen daadwerkelijk in staat zijn tot algoritmisch leren op basis van runtime-instructies.

De invloed van prompt-engineering en demonstraties

De effectiviteit van in-context learning hangt sterk af van hoe demonstraties worden gestructureerd. Uit empirische analyses blijkt dat ICL gevoelig is voor vier afzonderlijke factoren in de invoer:

Opmerkelijk genoeg presteren veel middelgrote modellen al aanzienlijk beter door alleen het formaat en de toegestane labelruimte te zien, zelfs als een deel van de voorbeelden een incorrect label bevat. Voor geavanceerde logische deductie is correcte input-output mapping echter onmisbaar.

In onderstaand codefragment demonstreren we hoe een gestructureerde Python-aanroep voor in-context learning kan worden opgezet met een deterministische evaluatie op een Nederlandse entiteitherkenningstaak:

import json

# Voorbeelden demonstreren het gewenste abstracte schema aan het model
few_shot_context = """Taak: Extraheer Nederlandse overheidsinstanties en afkortingen.

Invoer: Het Uitvoeringsinstituut Werknemersverzekeringen beoordeelt de aanvraag.
Uitvoer: {"instantie": "Uitvoeringsinstituut Werknemersverzekeringen", "afkorting": "UWV"}

Invoer: Volgens de Belastingdienst moet de aangifte voor mei binnen zijn.
Uitvoer: {"instantie": "Belastingdienst", "afkorting": null}

Invoer: De Sociale Verzekeringsbank keert de AOW maandelijks uit rond de 23e.
Uitvoer: {"instantie": "Sociale Verzekeringsbank", "afkorting": "SVB"}
"""

nieuwe_invoer = "Invoer: Het Centraal Bureau voor de Statistiek publiceert inflatiecijfers.\nUitvoer:"

volledige_prompt = f"{few_shot_context}\n{nieuwe_invoer}"
# Bij inferentie activeert deze structuur direct de juiste inductiepaden

Grenzen en kwetsbaarheden van in-context learning

Hoewel in-context learning uitzonderlijk krachtig is, kent het duidelijke technische beperkingen die in productieomgevingen zorgvuldig moeten worden afgewogen.

1. Volgorde-gevoeligheid (Order Sensitivity): De volgorde waarin voorbeelden worden gepresenteerd kan de accuratesse van een model met tientallen procenten doen fluctueren. Als alle positieve voorbeelden toevallig aan het einde van de prompt staan, vertoont het model een sterke 'recency bias' en zal het onevenredig vaak een positief antwoord genereren.

2. Aandachtsverwatering (Attention Dilution): Naarmate de context langer wordt met tientallen voorbeelden, moeten de attention-gewichten over duizenden tokens worden verdeeld. Dit kan ertoe leiden dat het model subtiele details in vroege voorbeelden over het hoofd ziet, een effect dat bekendstaat als het 'lost in the middle'-syndroom.

Wie praktische systemen ontwerpt en wil begrijpen hoe contextlengtes de verwerking beïnvloeden, kan het overzichtsartikel raadplegen over wat een context window precies inhoudt en hoe limieten werken.

3. Computationele kosten per query: In tegenstelling tot een gefinetuned model — dat na training alleen de kale vraag nodig heeft — vereist ICL dat bij elke afzonderlijke API-aanroep alle demonstratietokens opnieuw worden verzonden en verwerkt. Dit verhoogt het geheugengebruik in de KV-cache en drijft de latency en tokenkosten op.

Wanneer kies je voor ICL versus Fine-Tuning of RAG?

In-context learning is geen universele vervanging voor andere adaptatiemethoden. Het kiezen van de juiste architectuur vraagt om een heldere afweging tussen datavolume, latency-eisen en de aard van de taak.

Wie twijfelt tussen verschillende architecturen voor bedrijfsapplicaties, kan de uitgebreide afweging nalezen in het vergelijkende artikel over de keuze tussen fine-tuning, prompting en RAG.

ICL is de superieure keuze wanneer:

Fine-tuning is daarentegen noodzakelijk wanneer men duizenden voorbeelden heeft om een specifiek vocabulaire of een complexe schrijfstijl aan te leren, of wanneer de latency en kosten van lange prompts in productiesystemen onacceptabel hoog worden.

Optimalisatie in de praktijk: Context Engineering

Omdat ICL volledig draait op de inhoud van het contextvenster, is het zorgvuldig structureren van deze ruimte uitgegroeid tot een eigen discipline. Om te ontdekken hoe men prompts structureert om maximale sturing uit inductiecircuits te halen, biedt de handleiding over context-engineering en geavanceerde promptopbouw concrete best practices.

Het selecteren van de meest representatieve voorbeelden via semantische zoekalgoritmen (Dynamic Few-Shot Selection) zorgt ervoor dat alleen voorbeelden worden ingeladen die direct relevant zijn voor de specifieke vraag van de gebruiker. Hierdoor worden de beschikbare tokens optimaal benut zonder de attention-distributie onnodig te belasten.

Hierna verder met

Nu duidelijk is hoe een model tijdens inferentie patronen herkent en toepast via zijn context, zijn dit logische vervolgstappen binnen de leerlijn: