Stora språkmodeller (LLM: er)

Slutförd

Anmärkning

Mer information finns på fliken Text och bilder !

Kärnan i generativ AI, stora språkmodeller (LLM) – och deras mer kompakta relationer, små språkmodeller (SLA) – kapslar in de språkliga och semantiska relationerna mellan ord och fraser i ett ordförråd. Modellen kan använda dessa relationer för att resonera över naturliga språkindata och generera meningsfulla och relevanta svar.

Grundläggande tränas LLM:er för att generera kompletteringar baserat på frågeställningar. Tänk på dem som superstarka exempel på den förutsägande textfunktionen på många mobiltelefoner. En fråga startar en sekvens med textförutsägelser som resulterar i en semantiskt korrekt slutförande. Tricket är att modellen förstår relationerna mellan ord och att den kan identifiera vilka ord i sekvensen som hittills mest sannolikt påverkar nästa ord. och använd det för att förutsäga den mest sannolika fortsättningen av sekvensen.

Tänk till exempel på följande mening:

Jag hörde en hund skäller högt på en katt

Anta att du bara hörde de första orden: "Jag hörde en hund ...". Du vet att vissa av dessa ord är mer användbara ledtrådar om vad nästa ord kan vara än andra. Du vet att "hört" och "hund" är starka indikatorer på vad som kommer härnäst, och det hjälper dig att begränsa sannolikheterna. Du vet att det finns en god chans att meningen fortsätter som "Jag hörde en hundskälla".

Du kan gissa nästa ord eftersom:

  • Du har ett stort ordförråd att hämta från.
  • Du har lärt dig vanliga språkstrukturer, så du vet hur ord relaterar till varandra i meningsfulla meningar.
  • Du har en förståelse för semantiska begrepp som är associerade med ord - du vet att något du hörde måste vara ett ljud av något slag, och du vet att det finns specifika ljud som görs av en hund.

Så hur tränar vi en modell för att ha samma förmågor?

Tokenisering

Det första steget är att ge modellen ett stort ordförråd med ord och fraser. och vi menar stora. Den senaste generationen av LLM:er har vokabulärer som består av hundratusentals token, baserat på stora mängder träningsdata från internet och andra källor.

Vänta en minut. Tokens?

Även om vi tenderar att tänka på språk när det gäller ord, delar LLM upp sitt ordförråd i token. Tokens innehåller ord, men även underord (som "un" i "otroligt" och "osannolikt"), skiljetecken och andra vanliga sekvenser med tecken. Det första steget i att träna en stor språkmodell är därför att dela upp träningstexten i sina distinkta token och tilldela en unik heltalsidentifierare till var och en, så här:

  • I (1)
  • hört (2)
  • a (3)
  • hund (4)
  • bark (5)
  • högt (6)
  • vid (7)
  • a (3) redan tilldelad
  • katt (8)

och så vidare.

När du lägger till fler träningsdata läggs fler token till i vokabulären och tilldelas identifierare. Så du kan sluta med tokens för ord som valp, skateboard, bil och andra.

Anmärkning

I det här enkla exemplet har vi tokeniserat exempeltexten baserat på ord. I verkligheten skulle det också finnas underord, skiljetecken och andra token.

Transformera token med en transformerare

Nu när vi har en uppsättning token med unika ID:t måste vi hitta ett sätt att relatera dem till varandra. För att göra detta tilldelar vi varje token en vektor (en matris med flera numeriska värden, till exempel [1, 23, 45]). Varje vektor har flera numeriska element eller dimensioner, och vi kan använda dessa för att koda språkliga och semantiska attribut för token för att ge en hel del information om vad token betyder och hur den relaterar till andra token, i ett effektivt format.

Vi måste omvandla de inledande vektorrepresentationerna av token till nya vektorer med språkliga och semantiska egenskaper inbäddade i dem, baserat på de kontexter i vilka de visas i träningsdata. Eftersom de nya vektorerna har semantiska värden inbäddade i dem, kallar vi dem inbäddningar.

För att utföra den här uppgiften använder vi en transformeringsmodell . Den här typen av modell består av två "block":

  • Ett kodarblock som skapar inbäddningarna genom att använda en teknik som kallas uppmärksamhet. Uppmärksamhetsskiktet undersöker varje token i sin tur och avgör hur den påverkas av token runt den. För att göra kodningsprocessen mer effektiv används uppmärksamhet med flera huvud för att utvärdera flera element i token parallellt och tilldela vikter som kan användas för att beräkna de nya vektorelementvärdena. Resultatet av uppmärksamhetsskiktet matas in i ett fullständigt anslutet neuralt nätverk för att hitta den bästa vektorrepresentationen av inbäddningen.
  • Ett avkodarlager som använder inbäddningarna som beräknas av kodaren för att fastställa den näst mest sannolika token i en sekvens som startas av en prompt. Avkodaren använder också uppmärksamhet och ett feed-forward neuralt nätverk för att göra sina förutsägelser.

Diagram över transformeringsarkitekturen med kodnings- och avkodningsskikten.

Anmärkning

Vi har förenklat transformeringsarkitekturen och processen avsevärt i beskrivningen och diagrammet. Oroa dig inte för mycket för den specifika informationen om hur uppmärksamhet fungerar – den viktigaste punkten är att den hjälper till att samla in språkliga och semantiska egenskaper för varje token baserat på de kontexter där den används. Om du vill ha en djupare inblick i transformeringsarkitekturen och hur den använder uppmärksamhet kan du läsa den ursprungliga Uppmärksamhet är allt du behöver papper.

Inledande vektorer och positionskodning

Ursprungligen tilldelas tokenvektorvärdena slumpmässigt innan de matas genom transformatorn för att skapa inbäddningsvektorer. Tokenvektorerna matas in i transformatorn tillsammans med en positionskodning som anger var token visas i träningstextens sekvens (vi måste göra detta eftersom den ordning i vilken token visas i sekvensen är relevant för hur de relaterar till varandra). Våra token kan till exempel börja se ut så här:

Bevis Token-ID Position Vector
I 1 1 [3, 7, 10]
hörd 2 2 [2, 15, 1]
f 3 3 [9, 11, 1]
hund 4 4 [2, 7, 11]
bark 5 5 [9, 12, 0]
högljutt 6 6 [3, 8, 13]
at 7 7 [5, 7, 10]
f 3 8 [9, 11, 1]
cat 8 9 [8, -6, 9 ]
... ... ... ...
valp 127 45 [7, 7, -2 ]
bil 128 56 [5, -5, 1 ]
skateboard 129 67 [4, 7, 14]

Anmärkning

Vi har hållit det enkelt genom att använda vektorer med endast tre element (vilket hjälper oss att visualisera dem i tre dimensioner senare). I verkligheten har vektorerna tusentals element.

Uppmärksamhet och inbäddningar

För att fastställa vektorrepresentationer av token som innehåller inbäddad kontextuell information använder transformatorn uppmärksamhetslager . Ett uppmärksamhetslager tar hänsyn till varje enhet i tur och ordning, inom ramen för den sekvens av enheter där den förekommer. De token som omger den aktuella tokenen viktas för att återspegla deras påverkan, och vikterna används för att beräkna elementvärdena för inbäddningsvektorn för den aktuella tokenen. När du till exempel överväger token "skälla" i samband med "Jag hörde en hund skälla" tilldelas token för "hörde" och "hund" mer vikt än "Jag" eller "en", eftersom de är starkare indikatorer för "skälla".

Inledningsvis vet inte modellen vilka token som påverkar andra. Men eftersom den exponeras för större mängder text kan den iterativt lära sig vilka token som ofta visas tillsammans och börja hitta mönster som hjälper till att tilldela värden till de vektorelement som återspeglar tokens språkliga och semantiska egenskaper, baserat på deras närhet och användningsfrekvens tillsammans. Processen blir mer effektiv genom att använda multi-head uppmärksamhet för att överväga olika element i vektorerna parallellt.

Resultatet av kodningsprocessen är en uppsättning inbäddningar. vektorer som innehåller sammanhangsberoende information om hur token i vokabulären relaterar till varandra. En riktig transformerare skapar inbäddningar som innehåller tusentals element, men för att hålla det enkelt ska vi hålla oss till vektorer med endast tre vektorer i vårt exempel. Resultatet av kodningsprocessen för vårt ordförråd kan se ut ungefär så här:

Bevis Token-ID Inbäddning
I 1 [2, 0, -1 ]
hörd 2 [-2, 2, 4 ]
f 3 [-3, 5, 5 ]
hund 4 [10, 3, 2 ]
bark 5 [9, 2, 10 ]
högljutt 6 [-3, 8, 3 ]
at 7 [-5, -1, 1]
cat 8 [10, 3, 1]
valp 127 [5, 3, 2 ]
bil 128 [-2, -2, 1 ]
skateboard 129 [-3, -2, 2 ]
bark 203 [2, -2, 3 ]

Om du är observant kan du ha upptäckt att våra resultat innehåller två inbäddningar för token "bark". Det är viktigt att förstå att inbäddningarna representerar en token i en viss kontext. och vissa token kan användas för att betyda flera saker. Till exempel är barken från en hund annorlunda än barken på ett träd! Token som ofta används i flera kontexter kan skapa flera inbäddningar.

Vi kan se elementen i inbäddningarna som dimensioner i ett flerdimensionellt vektorutrymme. I vårt enkla exempel har våra inbäddningar bara tre element, så vi kan visualisera dem som vektorer i tredimensionellt utrymme, så här:

Diagram över inbäddningsvektorer för token i tre dimensioner.

Eftersom dimensionerna beräknas baserat på hur token relaterar språkligt till varandra resulterar token som används i liknande kontexter (och därför har liknande betydelser) i vektorer med liknande riktningar. Till exempel pekar inbäddningarna för "hund" och "valp" i mer eller mindre samma riktning, vilket inte skiljer sig alltför mycket från inbäddningen för "katt"; men mycket annorlunda än inbäddning för "skateboard" eller "bil". Vi kan mäta hur nära token är varandra semantiskt genom att beräkna cosinuslikheten hos deras vektorer.

Förutsäga kompletteringar från uppmaningar

Nu när vi har en uppsättning inbäddningar som kapslar in kontextuell relation mellan token kan vi använda avkodarblocket för en transformerare för att iterativt förutsäga nästa ord i en sekvens baserat på en startprompt.

Återigen används uppmärksamhet för att beakta varje token i kontexten. men den här gången kan kontexten som ska beaktas bara innehålla de token som föregår den token som vi försöker förutsäga. Avkodarmodellen tränas med data som vi redan har full sekvens för genom att tillämpa en teknik som kallas maskerad uppmärksamhet. där tokens efter den aktuella token ignoreras. Eftersom vi redan känner till nästa token under träningen kan transformatorn jämföra den med den förutsagda token och justera de inlärda vikterna i senare tränings iterationer för att minska felet i modellen.

När man förutspår en ny komplettering, där nästkommande tokens är okända, beräknar uppmärksamhetsskikten möjliga vektorer för nästkommande token och feed-forward-nätverket används för att bedöma den mest sannolika kandidaten. Det förutsagda värdet läggs sedan till i sekvensen och hela processen upprepas för att förutsäga nästa token. och så vidare tills avkodaren förutsäger att sekvensen har avslutats.

Till exempel, med tanke på sekvensen "När min hund var en ...", utvärderar modellen tokens i sekvensen hittills, använder uppmärksamhet för att tilldela vikter och förutsäger att nästa mest sannolika token är "valp" snarare än, säg, "katt" eller "skateboard".