Het aandachtsmechanisme in transformatoren verbetert fundamenteel code -generatie door het model in staat te stellen zich selectief te concentreren op verschillende delen van de invoersequentie terwijl elk uitvoertoken wordt geproduceerd. Dit resulteert in meer contextbewuste en coherente code-generatie. Het aandachtsmechanisme helpt bij het vastleggen van afhankelijkheden van lange afstand, structurele patronen en semantische nuances in broncode, die cruciaal zijn voor het genereren van syntactisch correcte en logisch consistente programma's. De veelzijdige capaciteiten zijn aanzienlijke voordelen ten opzichte van traditionele sequentie-naar-sequentie modellen die afhankelijk waren van contextrepresentaties met een vaste lengte.
Basisconcept van aandacht in transformatoren
In transformatoren is de aandacht een techniek die een set uitvoervectoren berekent als gewogen inputwaardevectoren. De gewichten worden dynamisch berekend op basis van compatibiliteitsscores tussen een query (die de huidige positie vertegenwoordigen waarvoor een uitgang wordt gegenereerd) en een set belangrijke vectoren (die alle posities in de invoersequentie vertegenwoordigen). Dit stelt het model in staat om te "bijwonen" of zich te concentreren op relevante delen van de invoer bij het genereren van elk token, in plaats van de hele reeks uniform te verwerken of te comprimeren in een vector met een vaste grootte.
De kernformule voor geschaalde puntproduct aandacht is:
$$
\ text {aandacht} (q, k, v) = \ text {softmax} \ left (\ frac {qk^t} {\ sqrt {d_k> \ rechts) v
$$
Waar $$ Q $$, $$ K $$ en $$ V $$ MATRICES VAN Query's, sleutels en waarden zijn, respectievelijk, en $$ D_K $$ is de dimensie van de sleutels die worden gebruikt voor het schalen. De SoftMax -functie transformeert de DOT -productscores tussen query's en toetsen in een waarschijnlijkheidsverdeling, die vervolgens wordt gebruikt om de waarden te wegen.
Context en afhankelijkheden vastleggen in code
Programmeercode is inherent gestructureerd met afhankelijkheden op lange afstand; Variabelen die aan het begin van een functie worden aangegeven, kunnen veel later op veel plaatsen worden gebruikt. Traditionele modellen zoals RNN's of CNN's worstelden om dergelijke contextuele relaties op lange afstand te onderhouden vanwege hun opeenvolgende of lokale receptieve aard. Het zelfaantalmechanisme in transformatoren daarentegen kan elk token direct aan elk ander token relateren, ongeacht hun afstand in de reeks.
Zelfhoogtes stelt elke tokenpositie in staat om informatie van alle andere posities in de invoerreeks tegelijkertijd te verzamelen. Tijdens het genereren van een slotbeugel kan het model bijvoorbeeld de bijbehorende openingsbeugel op zoek zijn, die mogelijk verschillende regels eerder zijn. Met deze volledige connectiviteit kan het model syntactische en semantische structuur effectiever coderen, wat essentieel is voor het genereren van foutloze code.
Multi-head aandacht voor verschillende contexten
Transformers gebruiken multi-head aandacht, waarbij meerdere parallelle aandachtsoperaties (koppen) worden uitgevoerd op verschillende lineaire projecties van de invoerinbedding. Elke kop leert zich te concentreren op verschillende aspecten van de invoer, zoals variabele namen, controlestroomconstructies of functiegrenzen. Deze multi-head setup biedt verschillende voordelen:
- Het stelt het model in staat om gezamenlijk informatie van verschillende representatiesubruimten bij te wonen.
- Het combineert meerdere perspectieven op de invoerreeks, waardoor de reikwijdte wordt verbreed van wat het model kan leren.
- Het verbetert de robuustheid door niet te vertrouwen op een enkele aandachtsrepresentatie.
De uitgangen van deze meerdere koppen worden aaneengeschakeld en lineair getransformeerd om de uiteindelijke weergave te vormen die wordt gebruikt voor het genereren van uitgangs tokens.
Encoder-decoder aandacht voor bron-doeluitlijning
Bij het genereren van codes maken Transformers meestal gebruik van een architectuur van de encoder-decoderer, waarbij de encoder de invoerbeschrijving (bijvoorbeeld natuurlijke taalprobleemspecificatie) verwerkt in een contextuele weergave, en de decoder de overeenkomstige codevolgorde genereert. De decoder gebruikt de aandacht van de encoder-decoder (cross-etsing) om zich selectief te concentreren op relevante delen van de gecodeerde invoer bij elke decoderingstap. Deze afstemming tussen invoer en uitvoer helpt het model relevante en precieze codefragmenten te genereren die nauw overeenkomen met de intentie die wordt uitgedrukt in de invoerprompt.