Mecanismul de atenție în transformatoare îmbunătățește fundamental generarea de coduri, permițând modelului să se concentreze selectiv pe diferite părți ale secvenței de intrare în timp ce produce fiecare simbol de ieșire. Aceasta duce la generarea mai conștientă de context și mai coerentă. Mecanismul de atenție ajută la captarea dependențelor de lungă durată, a modelelor structurale și a nuanțelor semantice din codul sursă, care sunt cruciale pentru generarea de programe sintactice corecte și logic consistente. Capacitățile sale multi-fațete oferă avantaje semnificative față de modelele tradiționale de secvență la secvență care s-au bazat pe reprezentări de context de lungime fixă.
Conceptul de bază al atenției în transformatoare
În transformatoare, atenția este o tehnică care calculează un set de vectori de ieșire ca sume ponderate de vectori cu valoare de intrare. Greutățile sunt calculate dinamic pe baza scorurilor de compatibilitate între o interogare (reprezentând poziția curentă pentru care este generată o ieșire) și un set de vectori cheie (reprezentând toate pozițiile din secvența de intrare). Acest lucru permite modelului să „participe” sau să se concentreze pe părți relevante ale intrării atunci când generează fiecare jeton, mai degrabă decât să proceseze întreaga secvență uniform sau să-l comprimăm într-un vector cu dimensiuni fixe.
Formula de bază pentru atenția produsului cu scară este:
$$
\ text {atenție} (q, k, v) = \ text {softmax} \ left (\ frac {qk^t} {\ sqrt {d_k> \ dreapta) v
$$
În cazul în care $$ Q $$, $$ K $$ și $$ V $$ sunt matrice de întrebări, taste și valori, respectiv $$ D_K $$ este dimensiunea tastelor utilizate pentru scalare. Funcția SoftMax transformă scorurile produsului punct între întrebări și taste într -o distribuție de probabilitate, care este apoi utilizată pentru a cântări valorile.
Captarea contextului și a dependențelor în cod
Codul de programare este structurat în mod inerent cu dependențe de lungă durată; Variabilele declarate la începutul unei funcții pot fi utilizate în multe locuri mult mai târziu. Modele tradiționale precum RNN-urile sau CNN-urile s-au străduit să mențină relații contextuale atât de lungi, datorită naturii lor receptive secvențiale sau locale. În schimb, mecanismul de auto-atenție în Transformers poate relaționa direct fiecare jeton cu fiecare alt simbol, indiferent de distanța lor în secvență.
Auto-atenția permite fiecărei poziții de jeton să adune simultan informații din toate celelalte poziții din secvența de intrare. De exemplu, în timp ce generează o categorie de închidere, modelul poate participa la suportul de deschidere corespunzător care poate fi mai multe linii mai devreme. Această conectivitate completă permite modelului să codifice mai eficient structura sintactică și semantică, ceea ce este esențial pentru generarea de cod fără erori.
Atenție cu mai multe capete pentru contexte diverse
Transformatoarele folosesc o atenție multiplă, unde mai multe operații de atenție paralelă (capete) sunt efectuate pe diferite proiecții liniare ale încorporărilor de intrare. Fiecare cap învață să se concentreze pe diferite aspecte ale intrării, cum ar fi numele variabile, construcțiile fluxului de control sau limitele funcției. Această configurație cu mai multe capete oferă mai multe avantaje:
- Permite modelului să participe în comun la informații din diferite subspații de reprezentare.
- Combină mai multe perspective asupra secvenței de intrare, lărgind sfera de aplicare a ceea ce poate învăța modelul.
- Îmbunătățește robustetea prin faptul că nu se bazează pe o singură reprezentare a atenției.
Ieșirile acestor capete multiple sunt concatenate și transformate liniar pentru a forma reprezentarea finală folosită pentru generarea de jetoane de ieșire.
Encoder-Decoder Atenție pentru alinierea sursă-țintă
În generarea de coduri, transformatoarele folosesc de obicei o arhitectură de decodificator, în care codificatorul procesează descrierea de intrare (de exemplu, specificarea problemei limbajului natural) într-o reprezentare contextuală, iar decodificatorul generează secvența de cod corespunzătoare. Decodorul folosește atenția codificatorului-decoder (atenție încrucișată) pentru a se concentra selectiv pe părțile relevante ale intrării codificate la fiecare etapă de decodare. Această aliniere între intrare și ieșire ajută modelul să genereze fragmente de cod relevante și precise care se potrivesc îndeaproape cu intenția exprimată în promptul de intrare.