Uppmärksamhetsmekanismen i Transformers förbättrar grundläggande kodgenerering genom att göra det möjligt för modellen att selektivt fokusera på olika delar av ingångssekvensen samtidigt som varje utgångstoken. Detta resulterar i mer kontextmedveten och sammanhängande kodgenerering. Uppmärksamhetsmekanismen hjälper till att fånga långväga beroenden, strukturella mönster och semantiska nyanser i källkoden, som är avgörande för att generera syntaktiskt korrekta och logiskt konsekventa program. Dess mångfacetterade kapacitet ger betydande fördelar jämfört med traditionella sekvens-till-sekvensmodeller som förlitade sig på sammanhangsrepresentationer med fast längd.
Grundläggande uppmärksamhetsbegrepp i transformatorer
I transformatorer är uppmärksamhet en teknik som beräknar en uppsättning utgångsvektorer som viktade summor av ingångsvärdevektorer. Vikterna beräknas dynamiskt baserat på kompatibilitetsresultat mellan en fråga (som representerar den aktuella positionen för vilken en utgång genereras) och en uppsättning nyckelvektorer (representerar alla positioner i ingångssekvensen). This enables the model to "attend" or focus on relevant parts of the input when generating each token, rather than processing the entire sequence uniformly or compressing it into a fixed-size vector.
Kärnformeln för skalad dot-produktuppmärksamhet är:
$$
\ text {uppmärksamhet} (Q, k, v) = \ text {softmax} \ vänster (\ frac {qk^t} {\ sqrt {d_k> \ höger) v
$$
Där $$ Q $$, $$ K $$ och $$ V $$ är matriser av frågor, nycklar och värden respektive $$ D_K $$ är dimensionen för nycklarna som används för skalning. Softmax -funktionen omvandlar POT -produktresultaten mellan frågor och nycklar till en sannolikhetsfördelning, som sedan används för att väga värdena.
Fånga sammanhang och beroenden i kod
Programmeringskoden är i sig strukturerad med långväga beroenden; Variabler som deklarerats i början av en funktion kan användas på många ställen långt senare. Traditionella modeller som RNN: er eller CNN kämpade för att upprätthålla sådana långsiktiga kontextuella relationer på grund av deras sekventiella eller lokala mottagliga natur. Däremot kan självupptagningsmekanismen i transformatorer relatera varje token till alla andra token direkt, oavsett avstånd i sekvensen.
Självupptagning gör det möjligt för varje tokenposition att samla in information från alla andra positioner i ingångssekvensen samtidigt. Till exempel, medan man genererar en stängningsfäste, kan modellen ta hand om dess motsvarande öppningsfäste som kan vara flera rader tidigare. Denna fullständiga anslutning gör det möjligt för modellen att koda syntaktisk och semantisk struktur mer effektivt, vilket är viktigt för att generera felfri kod.
Multi-head uppmärksamhet för olika sammanhang
Transformers använder flerhuvud uppmärksamhet, där flera parallella uppmärksamhetsoperationer (huvuden) utförs på olika linjära projektioner av ingångs inbäddningar. Varje huvud lär sig att fokusera på olika aspekter av ingången, såsom variabla namn, kontrollflödeskonstruktioner eller funktionsgränser. Denna flerhuvuduppsättning erbjuder flera fördelar:
- Det gör att modellen gemensamt kan ta hand om information från olika representationsunderutrymmen.
- Det kombinerar flera perspektiv på ingångssekvensen och breddar omfattningen av vad modellen kan lära sig.
- Det förbättrar robustheten genom att inte lita på en enda uppmärksamhetsrepresentation.
Utgångarna från dessa flera huvuden sammanlänkas och transformeras linjärt för att bilda den slutliga representationen som används för att generera utgångstokens.
Encoder-Dekoder Uppmärksamhet för källinriktning
I kodgenerering använder transformatorer vanligtvis en kodare-dekoderarkitektur, där kodaren bearbetar ingångsbeskrivningen (t.ex. naturligt språkproblemspecifikation) till en kontextuell representation, och avkodaren genererar motsvarande kodsekvens. Avkodaren använder kodare-dekoderuppmärksamhet (tväruppsättning) för att selektivt fokusera på relevanta delar av den kodade ingången vid varje avkodningssteg. Denna anpassning mellan ingång och utgång hjälper modellen att generera relevanta och exakta kodavsnitt som nära matchar avsikten som uttrycks i ingångsprompten.