5. LLM Architecture
LLM Argitektuur
Die doel van hierdie vyfde fase is baie eenvoudig: Ontwikkel die argitektuur van die volle LLM. Sit alles saam, pas al die lae toe en skep al die funksies om teks te genereer of teks na ID's en terug te transformeer.
Hierdie argitektuur sal gebruik word vir beide, opleiding en voorspellings van teks nadat dit opgelei is.
LLM argitektuur voorbeeld van https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb:
'n Hoë vlak voorstelling kan waargeneem word in:
Invoer (Getokeniseerde Teks): Die proses begin met getokeniseerde teks, wat in numeriese voorstellings omgeskakel word.
Token Inbed en Posisionele Inbed Laag: Die getokeniseerde teks word deur 'n token inbed laag en 'n posisionele inbed laag gestuur, wat die posisie van tokens in 'n volgorde vasvang, krities vir die begrip van woordorde.
Transformer Blokke: Die model bevat 12 transformer blokke, elk met verskeie lae. Hierdie blokke herhaal die volgende volgorde:
Gemaskerde Multi-Kop Aandag: Laat die model toe om op verskillende dele van die invoerteks gelyktydig te fokus.
Laag Normalisering: 'n Normalisering stap om opleiding te stabiliseer en te verbeter.
Voed Voor Laag: Verantwoordelik vir die verwerking van die inligting van die aandaglaag en om voorspellings oor die volgende token te maak.
Dropout Lae: Hierdie lae voorkom oorpassing deur eenhede tydens opleiding lukraak te laat val.
Finale Uitvoer Laag: Die model gee 'n 4x50,257-dimensionele tensor uit, waar 50,257 die grootte van die woordeskat verteenwoordig. Elke ry in hierdie tensor kom ooreen met 'n vektor wat die model gebruik om die volgende woord in die volgorde te voorspel.
Doel: Die doel is om hierdie inbedings te neem en dit terug in teks om te skakel. Spesifiek, die laaste ry van die uitvoer word gebruik om die volgende woord te genereer, wat as "vorentoe" in hierdie diagram verteenwoordig word.
Kode voorstelling
GELU Aktivering Funksie
Doel en Funksionaliteit
GELU (Gaussian Error Linear Unit): 'n Aktiveringsfunksie wat nie-lineariteit in die model inbring.
Glad Aktivering: Anders as ReLU, wat negatiewe insette op nul stel, kaart GELU insette glad aan uitsette toe, wat klein, nie-nul waardes vir negatiewe insette toelaat.
Wiskundige Definisie:
Die doel van die gebruik van hierdie funksie na lineêre lae binne die FeedForward-laag is om die lineêre data te verander na nie-lineêr om die model in staat te stel om komplekse, nie-lineêre verhoudings te leer.
FeedForward Neurale Netwerk
Vorms is as kommentaar bygevoeg om die vorms van matrikse beter te verstaan:
Doel en Funksionaliteit
Posisiegewys FeedForward Netwerk: Pas 'n twee-laag ten volle verbind netwerk op elke posisie apart en identies toe.
Laag Besonderhede:
Eerste Lineêre Laag: Brei die dimensie uit van
emb_dim
na4 * emb_dim
.GELU Aktivering: Pas nie-lineariteit toe.
Tweede Lineêre Laag: Verminder die dimensie terug na
emb_dim
.
Soos jy kan sien, gebruik die Feed Forward netwerk 3 lae. Die eerste een is 'n lineêre laag wat die dimensies met 4 sal vermenigvuldig met behulp van lineêre gewigte (parameters om binne die model te train). Dan word die GELU-funksie in al daardie dimensies gebruik om nie-lineêre variasies toe te pas om ryker verteenwoordigings te vang en uiteindelik word 'n ander lineêre laag gebruik om terug te keer na die oorspronklike grootte van dimensies.
Multi-Head Aandag Meganisme
Dit is reeds in 'n vroeëre afdeling verduidelik.
Doel en Funksionaliteit
Multi-Head Self-Attention: Laat die model toe om op verskillende posisies binne die invoer volgorde te fokus wanneer 'n token gekodeer word.
Sleutel Komponente:
Vrae, Sleutels, Waardes: Lineêre projeksies van die invoer, gebruik om aandag punte te bereken.
Koppe: Meervoudige aandag meganismes wat parallel loop (
num_heads
), elk met 'n verminderde dimensie (head_dim
).Aandag Punte: Bereken as die skaalproduk van vrae en sleutels, geskaal en gemaskeer.
Maskering: 'n Oorsaaklike masker word toegepas om te voorkom dat die model na toekomstige tokens aandag gee (belangrik vir outoregressiewe modelle soos GPT).
Aandag Gewigte: Softmax van die gemaskeerde en geskaalde aandag punte.
Konteks Vektor: Gewigte som van die waardes, volgens aandag gewigte.
Uitset Projekie: Lineêre laag om die uitsette van al die koppe te kombineer.
Die doel van hierdie netwerk is om die verhoudings tussen tokens in dieselfde konteks te vind. Boonop word die tokens in verskillende koppe verdeel om oorfitting te voorkom, alhoewel die finale verhoudings wat per kop gevind word, aan die einde van hierdie netwerk gekombineer word.
Boonop, tydens opleiding, word 'n oorsaaklike masker toegepas sodat latere tokens nie in ag geneem word wanneer die spesifieke verhoudings met 'n token gekyk word nie en 'n dropout word ook toegepas om oorfitting te voorkom.
Laag Normalisering
Doel en Funksionaliteit
Laag Normalisering: 'n Tegniek wat gebruik word om die insette oor die kenmerke (embedding dimensies) vir elke individuele voorbeeld in 'n bondel te normaliseer.
Komponente:
eps
: 'n Klein konstante (1e-5
) wat by die variansie gevoeg word om deling deur nul tydens normalisering te voorkom.scale
enshift
: Leerbare parameters (nn.Parameter
) wat die model toelaat om die genormaliseerde uitset te skaal en te verskuif. Hulle word onderskeidelik geinitialiseer na een en nul.Normalisering Proses:
Bereken Gemiddelde (
mean
): Bereken die gemiddelde van die insetx
oor die embedding dimensie (dim=-1
), terwyl die dimensie vir broadcasting behou word (keepdim=True
).Bereken Variansie (
var
): Bereken die variansie vanx
oor die embedding dimensie, terwyl die dimensie ook behou word. Dieunbiased=False
parameter verseker dat die variansie bereken word met die bevooroordeelde skatter (deling deurN
in plaas vanN-1
), wat toepaslik is wanneer daar oor kenmerke eerder as monsters genormaliseer word.Normaliseer (
norm_x
): Trek die gemiddelde vanx
af en deel deur die vierkantswortel van die variansie pluseps
.Skaal en Verskuif: Pas die leerbare
scale
enshift
parameters toe op die genormaliseerde uitset.
Die doel is om 'n gemiddelde van 0 met 'n variansie van 1 oor alle dimensies van dieselfde token te verseker. Die doel hiervan is om die opleiding van diep neurale netwerke te stabiliseer deur die interne kovariate verskuiwing te verminder, wat verwys na die verandering in die verspreiding van netwerk aktiverings as gevolg van die opdatering van parameters tydens opleiding.
Transformer Blok
Vorms is as kommentaar bygevoeg om beter te verstaan hoe die vorms van matrikse lyk:
Doel en Funksionaliteit
Samestelling van Lae: Kombineer multi-head attention, feedforward netwerk, laanormalisering, en residuele verbindings.
Laanormalisering: Toegepas voor die aandag en feedforward lae vir stabiele opleiding.
Residuele Verbindings (Kortpaaie): Voeg die invoer van 'n laag by sy uitvoer om die gradiëntvloei te verbeter en die opleiding van diep netwerke moontlik te maak.
Dropout: Toegepas na aandag en feedforward lae vir regulering.
Stap-vir-Stap Funksionaliteit
Eerste Residuele Pad (Self-Aandagtigheid):
Invoer (
shortcut
): Stoor die oorspronklike invoer vir die residuele verbinding.Laag Norm (
norm1
): Normaliseer die invoer.Multi-Head Attention (
att
): Pas self-aandagtigheid toe.Dropout (
drop_shortcut
): Pas dropout toe vir regulering.Voeg Residueel By (
x + shortcut
): Kombineer met die oorspronklike invoer.
Tweedee Residuele Pad (FeedForward):
Invoer (
shortcut
): Stoor die opgedateerde invoer vir die volgende residuele verbinding.Laag Norm (
norm2
): Normaliseer die invoer.FeedForward Netwerk (
ff
): Pas die feedforward transformasie toe.Dropout (
drop_shortcut
): Pas dropout toe.Voeg Residueel By (
x + shortcut
): Kombineer met die invoer van die eerste residuele pad.
Die transformer blok groepeer al die netwerke saam en pas 'n paar normalisering en dropouts toe om die opleidingsstabiliteit en resultate te verbeter. Let op hoe dropouts gedoen word na die gebruik van elke netwerk terwyl normalisering voor toegepas word.
Boonop gebruik dit ook kortpaaie wat bestaan uit die uitvoer van 'n netwerk by sy invoer te voeg. Dit help om die verdwynende gradiënt probleem te voorkom deur te verseker dat aanvanklike lae "net soveel" bydra as die laaste.
GPTModel
Vorms is as kommentaar bygevoeg om die vorms van matrikse beter te verstaan:
Doel en Funksionaliteit
Inbedingslae:
Token Inbedings (
tok_emb
): Converteer token-indekse na inbedings. Ter herinnering, dit is die gewigte wat aan elke dimensie van elke token in die woordeskat gegee word.Posisionele Inbedings (
pos_emb
): Voeg posisionele inligting by die inbedings om die volgorde van tokens vas te vang. Ter herinnering, dit is die gewigte wat aan tokens gegee word volgens hul posisie in die teks.Dropout (
drop_emb
): Toegepas op inbedings vir regularisering.Transformer Blokke (
trf_blocks
): Stapel vann_layers
transformer blokke om inbedings te verwerk.Finale Normalisering (
final_norm
): Laag normalisering voor die uitvoerlaag.Uitvoerlaag (
out_head
): Projek die finale verborge toestande na die woordeskatgrootte om logits vir voorspelling te produseer.
Die doel van hierdie klas is om al die ander genoemde netwerke te voorspel die volgende token in 'n reeks, wat fundamenteel is vir take soos teksgenerasie.
Let op hoe dit soveel transformer blokke as aangedui sal gebruik en dat elke transformer blok een multi-head attestasienet, een feed forward-net en verskeie normaliserings gebruik. So as 12 transformer blokke gebruik word, vermenigvuldig dit met 12.
Boonop word 'n normalisering laag voor die uitvoer bygevoeg en 'n finale lineêre laag word aan die einde toegepas om die resultate met die regte dimensies te verkry. Let op hoe elke finale vektor die grootte van die gebruikte woordeskat het. Dit is omdat dit probeer om 'n waarskynlikheid per moontlike token binne die woordeskat te kry.
Aantal Parameters om te oefen
Met die GPT-struktuur gedefinieer, is dit moontlik om die aantal parameters om te oefen te vind:
Stap-vir-Stap Berekening
1. Inbedingslae: Token Inbeding & Posisie Inbeding
Laag:
nn.Embedding(vocab_size, emb_dim)
Parameters:
vocab_size * emb_dim
Laag:
nn.Embedding(context_length, emb_dim)
Parameters:
context_length * emb_dim
Totale Inbedingsparameters
2. Transformer Blokke
Daar is 12 transformer blokke, so ons sal die parameters vir een blok bereken en dan met 12 vermenigvuldig.
Parameters per Transformer Blok
a. Multi-Head Aandag
Komponente:
Vraag Lineêre Laag (
W_query
):nn.Linear(emb_dim, emb_dim, bias=False)
Sleutel Lineêre Laag (
W_key
):nn.Linear(emb_dim, emb_dim, bias=False)
Waarde Lineêre Laag (
W_value
):nn.Linear(emb_dim, emb_dim, bias=False)
Uitset Projektering (
out_proj
):nn.Linear(emb_dim, emb_dim)
Berekenings:
Elk van
W_query
,W_key
,W_value
:
Aangesien daar drie sulke lae is:
Uitset Projektering (
out_proj
):
Totale Multi-Head Aandag Parameters:
b. Voedingsnetwerk
Komponente:
Eerste Lineêre Laag:
nn.Linear(emb_dim, 4 * emb_dim)
Tweedel Lineêre Laag:
nn.Linear(4 * emb_dim, emb_dim)
Berekenings:
Eerste Lineêre Laag:
Tweedel Lineêre Laag:
Totale Voedingsparameters:
c. Laag Normalisasies
Komponente:
Twee
LayerNorm
instansies per blok.Elke
LayerNorm
het2 * emb_dim
parameters (skaal en skuif).Berekenings:
d. Totale Parameters per Transformer Blok
Totale Parameters vir Alle Transformator Blokke
3. Finale Lae
a. Finale Lae Normalisering
Parameters:
2 * emb_dim
(skaal en verskui)
b. Uitsetprojeklaag (out_head
)
Laag:
nn.Linear(emb_dim, vocab_size, bias=False)
Parameters:
emb_dim * vocab_size
4. Samevatting van Alle Parameters
Genereer Tegnies
Met 'n model wat die volgende token voorspel soos die vorige, is dit net nodig om die laaste tokenwaardes van die uitvoer te neem (aangesien dit die waardes van die voorspelde token sal wees), wat 'n waarde per inskrywing in die woordeskat sal wees en dan die softmax
funksie te gebruik om die dimensies te normaliseer in waarskynlikhede wat 1 optel en dan die indeks van die grootste inskrywing te kry, wat die indeks van die woord binne die woordeskat sal wees.
Code van https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb:
Verwysings
Last updated