Oppmerksomhetsmekanismen i transformatorer forbedrer grunnleggende kodegenerering ved å gjøre det mulig for modellen å selektivt fokusere på forskjellige deler av inngangssekvensen mens du produserer hver utgangstoken. Dette resulterer i mer kontekstbevisst og sammenhengende kodegenerering. Oppmerksomhetsmekanismen hjelper til med å fange langdistanseavhengigheter, strukturelle mønstre og semantiske nyanser i kildekoden, som er avgjørende for å generere syntaktisk korrekte og logisk konsistente programmer. Dens flerfasetterte evner gir betydelige fordeler i forhold til tradisjonelle sekvens-til-sekvensmodeller som var avhengig av kontekstrepresentasjoner med fast lengde.
grunnleggende oppmerksomhetsbegrep i transformatorer
I transformatorer er oppmerksomhet en teknikk som beregner et sett med utgangsvektorer som vektede summer av inngangsverdi -vektorer. Vektene beregnes dynamisk basert på kompatibilitetspoeng mellom en spørring (som representerer den nåværende posisjonen som en utgang genereres) og et sett med nøkkelvektorer (som representerer alle posisjoner i inngangssekvensen). Dette gjør at modellen kan "delta" eller fokusere på relevante deler av inngangen når du genererer hvert token, i stedet for å behandle hele sekvensen jevnt eller komprimere den til en vektor i fast størrelse.
Kjerneformelen for skalert prikkproduktoppmerksomhet er:
$$
\ tekst {oppmerksomhet} (q, k, v) = \ tekst {softmax} \ venstre (\ frac {qk^t} {\ sqrt {d_k> \ høyre) v
$$
Hvor $$ q $$, $$ k $$ og $$ v $$ er matriser av henholdsvis spørsmål, nøkler og verdier, og $$ d_k $$ er dimensjonen til tastene som brukes til skalering. SoftMax -funksjonen forvandler prikkproduktpoengene mellom spørsmål og nøkler til en sannsynlighetsfordeling, som deretter brukes til å vekt på verdiene.
Fanger kontekst og avhengigheter i kode
Programmeringskode er iboende strukturert med langdistanseavhengigheter; Variabler erklært i begynnelsen av en funksjon kan brukes mange steder langt senere. Tradisjonelle modeller som RNN eller CNN-er kjempet for å opprettholde slike langsiktige kontekstuelle forhold på grunn av deres sekvensielle eller lokale mottakelige natur. Derimot kan selvoppmerksomhetsmekanismen i transformatorer relatere alle symbol på alle andre token direkte, uavhengig av deres avstand i sekvensen.
Selvoppmerksomhet gjør det mulig for hver tokenposisjon å samle informasjon fra alle andre posisjoner i inngangssekvensen samtidig. For eksempel, mens du genererer en lukkende brakett, kan modellen for eksempel ivareta den tilsvarende åpningsbraketten som kan være flere linjer tidligere. Denne fulle tilkoblingen lar modellen kode syntaktisk og semantisk struktur mer effektivt, noe som er essensielt for å generere feilfri kode.
Multi-head oppmerksomhet for forskjellige sammenhenger
Transformatorer bruker oppmerksomhet med flere hode, der flere parallelle oppmerksomhetsoperasjoner (hoder) utføres på forskjellige lineære fremskrivninger av inngangsinnstillingen. Hvert hode lærer å fokusere på forskjellige aspekter av inngangen, for eksempel variabelnavn, kontrollflytkonstruksjoner eller funksjonsgrenser. Dette flerhodeoppsettet gir flere fordeler:
- Den lar modellen i fellesskap ivareta informasjon fra forskjellige representasjonsunderområder.
- Den kombinerer flere perspektiver på inngangssekvensen, og utvider omfanget av hva modellen kan lære.
- Det forbedrer robustheten ved ikke å stole på en eneste oppmerksomhetsrepresentasjon.
Utgangene til disse flere hodene er sammenkoblet og lineært transformert for å danne den endelige representasjonen som brukes til å generere utgangstokener.
koder-decoder oppmerksomhet for innretting av kilde-mål
I kodegenerering bruker transformatorer typisk en koder-dekoderarkitektur, der koderen behandler inngangsbeskrivelsen (f.eks. Naturlig språkproblemspesifikasjon) til en kontekstuell representasjon, og dekoderen genererer den tilsvarende kodesekvensen. Dekoderen bruker koder-dekoderoppmerksomhet (kryssoppdeling) for å selektivt fokusere på relevante deler av den kodede inngangen ved hvert dekodingstrinn. Denne justeringen mellom inngang og utgang hjelper modellen med å generere relevante og presise kodebiter som nøye samsvarer med intensjonen som er uttrykt i inngangspromptet.