Embeddings och vikter – så räknar och lär sig språkmodellen

Följ ett token-ID till inlärda tal, räkna med en viktmatris och se varför nytt sammanhang inte är samma sak som att modellens vikter tränas om.

Publicerad
Uppdaterad
Lästid
6 min

Se filmen: embeddings och vikter

Berättarrösten är AI-genererad. Fler filmer i Lisemarks videogalleri.

Kort sagt

Ett token-ID är ett nummer som pekar ut en textbit. Numret används för att hämta en rad i en embeddingtabell: en lista med inlärda tal som modellen kan räkna med.

Sedan omvandlar modellens vikter dessa tal genom många beräkningssteg. Resultaten längs vägen kallas aktiveringar. När du ändrar din fråga ändras normalt aktiveringarna – inte de lagrade vikterna.

Se filmen i Lisemarks videogalleri. Berättarrösten är AI-genererad. Börja gärna med föregående del: Tokens – så blir text modellens byggbitar.

När är detta användbart?

När du vill förstå skillnaden mellan att ge en modell mer sammanhang och att faktiskt träna den. Det hjälper också när någon säger att modellen ”lärde sig” något under en chatt: ett nytt svar bevisar inte att parametrarna har ändrats.

Från nummer till en rad med tal

Tänk på token-ID:t som ett radnummer, inte som en betydelse eller ett betyg. I filmens lilla låtsastabell hämtar kaffetokenen raden [1, 2]. Två dimensioner räcker för att visa principen; verkliga språkmodeller använder många fler.

Embeddingtabellens tal är själva inlärda parametrar, alltså en del av modellens vikter. En dimension behöver inte motsvara en enkel etikett som ”värme” eller ”dryck”.

Samma kaffetoken kan få samma startvektor i ”Jag gillar kaffe” och ”Jag undviker kaffe”. Men position och tillgängligt sammanhang påverkar de fortsatta beräkningarna. De interna representationerna kan därför bli olika utan att embeddingtabellen skrivs om.

Räkna själv: en vektor genom en viktmatris

Pedagogisk illustration med påhittade tal. Indatan är radvektorn [1, 2]. Viktmatrisen har två rader:

W = [ 2  -1 ]
    [ 1   3 ]

Varje utvärde använder en kolumn i matrisen:

  1. Första kolumnen: 1 × 2 + 2 × 1 = 4.
  2. Andra kolumnen: 1 × (−1) + 2 × 3 = 5.
  3. Resultatet blir [1, 2] × W = [4, 5].

Det här är en linjär omvandling utan bias, inte en hel språkmodell och inte en sannolikhetsfördelning. En transformer innehåller också bland annat attention, normalisering, icke-linjära funktioner och kopplingar som för information vidare.

Attention beräknar hur information från olika positioner blandas. Dessa indataberoende blandningskoefficienter är inte samma sak som de lagrade, inlärda viktmatriserna.

Hur ändras vikterna under träning?

Under träning jämförs en förutsägelse med ett mål. En förlustfunktion ger ett tal som beskriver felet. Gradienter visar hur parametrarna påverkar förlusten, och en optimerare använder dem för att ta ett litet uppdateringssteg.

Här är filmens separata miniexempel med en enda vikt:

Indata x = 1, vikt w = 2, mål = 3
Förutsägelse = x × w = 2
Förlust L = 0,5 × (förutsägelse − mål)² = 0,5
Gradient dL/dw = (x × w − mål) × x = −1
Steglängd = 0,1
Ny vikt = 2 − 0,1 × (−1) = 2,1
Ny förlust = 0,5 × (2,1 − 3)² = 0,405

Felet blev mindre i just detta steg. Det är ett litet räkneexempel, inte ett löfte om att varje träningssteg i en stor modell förbättrar alla svar. Även embeddingtabellen kan tränas när dess parametrar ingår i optimeringen.

Vad förändras när du chattar?

Del Vad det är Ändras normalt av en ny fråga?
Lagrade vikter Inlärda parametrar, inklusive embeddingtabellen. Nej, inte vid vanlig inferens.
Aktiveringar Mellanresultat från beräkningen på aktuell indata. Ja.
KV-cache Sparade beräknade nycklar och värden som kan återanvändas under generering. Den kan byggas ut eller ersättas med sammanhanget.

Inferens betyder här att använda den färdiga modellen. En KV-cache sparar beräkningar, men är inte en ny uppsättning inlärda modellvikter. En tjänst kan dessutom spara historik eller minnesanteckningar utanför modellen; inte heller det är i sig en viktuppdatering. Eventuell senare träning på användardata är en separat fråga om tjänstens villkor och inställningar.

Viktigaste fallgropen

Att kalla allt för ”minne” eller ”vikter”. Håll isär parametrarna som styr beräkningen, resultaten av beräkningen och sparad information runt modellen. Då blir det lättare att förstå vad ett system faktiskt ändrar.

Vidare läsning

Vad du kan göra nu

Täck över resultatet [4, 5] och räkna fram de två utvärdena kolumn för kolumn. Byt sedan indatan till [2, 1] men behåll samma matris: du får [5, 1]. Indatan och aktiveringen ändras, medan vikterna är exakt desamma.

Källor