Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Ako mechanizmus pozornosti v transformátoroch zlepšuje generovanie kódu


Ako mechanizmus pozornosti v transformátoroch zlepšuje generovanie kódu


Mechanizmus pozornosti v transformátoroch zásadne zlepšuje generovanie kódu tým, že umožňuje modelu selektívne zamerať sa na rôzne časti vstupnej sekvencie a zároveň vytvárať každý výstupný token. To má za následok viac kontextovo a koherentnej generovania kódu. Mechanizmus pozornosti pomáha zachytiť závislosti na veľké vzdialenosti, štrukturálne vzory a sémantické nuansy v zdrojovom kóde, ktoré sú rozhodujúce pre generovanie syntakticky správne a logicky konzistentných programov. Jeho viacstranné schopnosti poskytujú významné výhody oproti tradičným modelom sekvencie-sekvencia, ktoré sa spoliehali na reprezentácie kontextov s pevnou dĺžkou.

Základný koncept pozornosti v transformátoroch

V transformátoroch je pozornosť technikou, ktorá počíta súbor výstupných vektorov ako vážené sumy vektorov vstupnej hodnoty. Hmotnosti sa dynamicky vypočítajú na základe skóre kompatibility medzi dotazom (predstavujúcim aktuálnu polohu, pre ktorú sa vygeneruje výstup) a množiny kľúčových vektorov (predstavujúcich všetky pozície vo vstupnej sekvencii). To umožňuje modelu „zúčastniť sa“ alebo sa zamerať na relevantné časti vstupu pri generovaní každého tokenu, namiesto toho, aby sa celá sekvencia rovnomerne spracovávala alebo ich komprimovala do vektora s pevnou veľkosťou.

Základný vzorec pre miernu pozornosť s bodkovými produktmi je:

$$
\ text {pozornosť} (q, k, v) = \ text {softmax} \ vľavo (\ frac {qk^t} {\ sqrt {d_k> \ right)
$$

kde $$ Q $$, $$ K $$ a $$ V $$ sú matice otázok, kľúčov a hodnôt, respektíve $$ d_k $$ je rozmer klávesov používaných na škálovanie. Funkcia SoftMax transformuje skóre DOT produktu medzi dotazmi a kľúčmi na pravdepodobnostné rozdelenie, ktoré sa potom používa na váženie hodnôt.

Zachytenie kontextu a závislosti v kóde

Programovací kód je vo svojej podstate štruktúrovaný so závislosťami na veľké vzdialenosti; Premenné deklarované na začiatku funkcie sa môžu použiť na mnohých miestach omnoho neskôr. Tradičné modely ako RNNS alebo CNN sa snažili udržať také kontextové vzťahy s dlhým dosahom kvôli ich sekvenčnej alebo miestnej vnímavej povahe. Naopak, mechanizmus sebaposvetlenia v transformátoroch môže priamo súvisieť s každým tokenom s každým ostatným tokenom priamo, bez ohľadu na ich vzdialenosť v sekvencii.

Sebapovanie umožňuje každej pozícii tokenu zhromažďovať informácie zo všetkých ostatných pozícií súčasne vo vstupnej sekvencii. Napríklad pri generovaní záverečnej konzoly sa model môže venovať zodpovedajúcej úvodnej konzole, ktorá môže byť o niekoľko riadkov skôr. Táto úplná konektivita umožňuje modelu efektívnejšie kódovať syntaktickú a sémantickú štruktúru, čo je nevyhnutné na generovanie bezchybného kódu.

Multi-hlava pozornosť pre rôzne kontexty

Transformátory využívajú viac hlavnej pozornosti, kde sa na rôznych lineárnych projekciách vstupných vkladov vykonáva viacnásobné paralelné operácie pozornosti (hlavy). Každá hlava sa učí zamerať na rôzne aspekty vstupu, ako sú názvy premenných, konštrukty riadenia alebo hranice funkcií. Toto nastavenie s viacerými hlavami ponúka niekoľko výhod:

- Umožňuje modelu spoločne sa venovať informáciám z rôznych podriadiek reprezentácie.
- Kombinuje viaceré perspektívy v vstupnej sekvencii a rozširuje rozsah toho, čo sa model môže naučiť.
- Zlepšuje robustnosť tým, že sa nespolieha na jednu reprezentáciu pozornosti.

Výstupy týchto viacerých hláv sú zreťazené a lineárne transformované tak, aby tvorili konečnú reprezentáciu použitú na generovanie výstupných tokenov.

Zariadenie o kodér-decoder pre zarovnanie zdrojových cieľov

Pri generovaní kódu transformátory zvyčajne využívajú architektúru kódovača-decoder, kde kódovač spracováva opis vstupu (napr. Špecifikácia problému prirodzeného jazyka) do kontextovej reprezentácie a dekodér generuje zodpovedajúcu sekvenciu kódu. Dekodér využíva pozornosť k kódovacím decoderom (krížové pozorovanie) na selektívne zameranie na relevantné časti kódovaného vstupu v každom kroku dekódovania. Toto zarovnanie medzi vstupom a výstupom pomáha modelu generovať relevantné a presné útržky kódu, ktoré úzko zodpovedajú zámeru vyjadrenému vo vstupnej výzve.

kauzálna a maskovaná pozornosť pre autoregresívnu generáciu

Pri generovaní kódového token-by-token, dekodér používa kauzálne (maskované) sebaposkytovanie, aby sa zabezpečilo, že predpovede pre pozíciu $$ i $$ závisia iba od predchádzajúcich tokenov $$ $$