Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon In che modo il meccanismo di attenzione nei trasformatori migliora la generazione del codice


In che modo il meccanismo di attenzione nei trasformatori migliora la generazione del codice


Il meccanismo di attenzione in Transformers migliora fondamentalmente la generazione del codice consentendo al modello di concentrarsi selettivamente su diverse parti della sequenza di input producendo al contempo ogni token di output. Ciò si traduce in una generazione di codice più attesa dal contesto e coerente. Il meccanismo di attenzione aiuta a catturare dipendenze a lungo raggio, schemi strutturali e sfumature semantiche nel codice sorgente, che sono cruciali per generare programmi sintatticamente corretti e logicamente coerenti. Le sue capacità multifondite offrono vantaggi significativi rispetto ai tradizionali modelli di sequenza a sequenza che si basavano su rappresentazioni di contesto a lunghezza fissa.

concetto di base di attenzione nei trasformatori

In Transformers, l'attenzione è una tecnica che calcola un insieme di vettori di output come somme ponderate di vettori di valore di input. I pesi sono calcolati dinamicamente in base ai punteggi di compatibilità tra una query (che rappresentano la posizione corrente per la quale viene generata un'uscita) e un insieme di vettori chiave (che rappresentano tutte le posizioni nella sequenza di input). Ciò consente al modello di "partecipare" o di concentrarsi su parti rilevanti dell'input quando si generano ciascun token, piuttosto che elaborare l'intera sequenza in modo uniforme o comprimerlo in un vettore di dimensioni fisse.

La formula centrale per l'attenzione in scala in scala è:

$$
\ text {attenzione} (q, k, v) = \ text {softmax} \ left (\ frac {qk^t} {\ sqrt {d_k> \ a destra) v
$$

Dove $$ Q $$, $$ K $$ e $$ V $$ sono matrici di query, chiavi e valori, rispettivamente, e $$ d_k $$ è la dimensione delle chiavi utilizzate per il ridimensionamento. La funzione SoftMax trasforma i punteggi del prodotto DOT tra query e chiavi in ​​una distribuzione di probabilità, che viene quindi utilizzata per pesare i valori.

cattura il contesto e le dipendenze nel codice

Il codice di programmazione è intrinsecamente strutturato con dipendenze a lungo raggio; Le variabili dichiarate all'inizio di una funzione possono essere utilizzate in molti luoghi molto più tardi. Modelli tradizionali come RNN o CNN hanno lottato per mantenere relazioni contestuali così a lungo raggio a causa della loro natura recettiva sequenziale o locale. Al contrario, il meccanismo di auto-assistenza nei trasformatori può mettere in relazione ogni token con ogni altro token direttamente, indipendentemente dalla loro distanza nella sequenza.

L'autoatterraggio consente a ciascuna posizione token di raccogliere informazioni da tutte le altre posizioni nella sequenza di input contemporaneamente. Ad esempio, pur generando una fascia di chiusura, il modello può occuparsi della corrispondente fascia di apertura che può essere di più righe prima. Questa connettività completa consente al modello di codificare la struttura sintattica e semantica in modo più efficace, che è essenziale per generare codice privo di errori.

Attenzione a più testa per diversi contesti

I trasformatori impiegano un'attenzione a più testa, in cui vengono eseguite operazioni di attenzione parallela multipla (teste) su diverse proiezioni lineari degli incorporati input. Ogni testa impara a concentrarsi su diversi aspetti dell'input, come nomi variabili, costrutti di flusso di controllo o limiti di funzione. Questa configurazione a più testa offre diversi vantaggi:

- consente al modello di occuparsi congiuntamente alle informazioni da diversi sottospazi di rappresentazione.
- Combina più prospettive sulla sequenza di input, ampliando l'ambito di ciò che il modello può imparare.
- Migliora la robustezza non facendo affidamento su un'unica rappresentazione di attenzione.

Le uscite di queste teste multiple sono concatenate e trasformate linearmente per formare la rappresentazione finale utilizzata per la generazione di token di output.

ATTENZIONE ECCEDER-DECODER PER ALLINGMENTO DI SOURICA.

Nella generazione di codice, i trasformatori utilizzano in genere un'architettura coder-decoder, in cui l'encoder elabora la descrizione dell'input (ad esempio, le specifiche del problema del linguaggio naturale) in una rappresentazione contestuale e il decodificatore genera la sequenza di codice corrispondente. Il decodificatore utilizza l'attenzione del codificatore-decoder (attrezzatura incrociata) per concentrarsi selettivamente sulle parti pertinenti dell'input codificato in ciascuna fase di decodifica. Questo allineamento tra input e output aiuta il modello a generare frammenti di codice pertinenti e precisi che corrispondono da vicino all'intento espresso nel prompt di input.

Attenzione causale e mascherata per la generazione autoregressiva

Quando si genera in codice token per te-te, il decodificatore utilizza l'auto-atterraggio causale (mascherato) per garantire che le previsioni per la posizione $$ i $$ dipendano solo da token precedenti $$