Mechanismus pozornosti v transformátorech zásadně zlepšuje generování kódu tím, že umožňuje modelu selektivně zaměřit se na různé části vstupní sekvence a produkovat každý výstupní token. To má za následek více generování kontextu a koherentního kódu. Mechanismus pozornosti pomáhá zachytit závislosti na dlouhém dosahu, strukturální vzorce a sémantické nuance ve zdrojovém kódu, které jsou zásadní pro generování syntakticky korektních a logicky konzistentních programů. Jeho mnohostranné schopnosti poskytují významné výhody oproti tradičním modelům sekvence k sekvenci, které se spoléhaly na kontextové reprezentace s pevnou délkou.
Základní koncept pozornosti v transformátorech
V transformátorech je pozornost technika, která vypočítá sadu výstupních vektorů jako vážených součtů vektorů vstupní hodnoty. Hmotnosti jsou dynamicky vypočteny na základě skóre kompatibility mezi dotazem (představující aktuální polohu, pro kterou je výstup generován) a sadou klíčových vektorů (představujících všechny pozice ve vstupní sekvenci). To umožňuje modelu „účastnit se“ nebo se zaměřit na relevantní části vstupu při generování každého tokenu, spíše než zpracování celé sekvence jednotně nebo jej stlačit do vektoru pevné velikosti.
Hlavním vzorcem pro škálovanou pozornost dot-produktu je:
$$
\ text {Attent} (Q, k, v) = \ text {softmax} \ vlevo (\ frac {qk^t} {\ sqrt {d_k> \ right) V
$$
kde $$ Q $$, $$ K $$ a $$ V $$ jsou matice dotazů, klíčů a hodnot, respektive $$ d_k $$ je dimenze klíčů používaných pro měřítko. Funkce SoftMax transformuje skóre produktu DOT mezi dotazy a klíči na rozdělení pravděpodobnosti, které se pak používá k vážení hodnot.
Zachycení kontextu a závislostí v kódu
Programovací kód je ze své podstaty strukturován s závislosti na dlouhém dosahu; Proměnné deklarované na začátku funkce mohou být použity na mnoha místech mnohem později. Tradiční modely, jako jsou RNN nebo CNN, se snažily udržovat takové kontextové vztahy s dlouhým dosahem kvůli jejich sekvenční nebo místní receptivní povaze. Naproti tomu mechanismus sebepoznání v transformátorech může spojit každý token s každým jiným tokenem přímo, bez ohledu na jejich vzdálenost v sekvenci.
Sebepochopení umožňuje každé poloze tokenu shromažďovat informace ze všech ostatních pozic ve vstupní sekvenci současně. Například při generování uzavírací konzoly se může model účastnit odpovídající úvodní držáku, která může být o několik řádků dříve. Tato úplná konektivita umožňuje modelu efektivněji kódovat syntaktickou a sémantickou strukturu, což je nezbytné pro generování bezchybného kódu.
Multi-Head Pozornost pro různé kontexty
Transformátory využívají více hlavy, kde se při různých lineárních projekcích vložení vstupů provádějí více paralelních pečovatelských operací (hlavy). Každá hlava se učí zaměřit se na různé aspekty vstupu, jako jsou názvy proměnných, konstrukty řídicího toku nebo hranice funkcí. Toto nastavení s více hlavami nabízí několik výhod:
- Umožňuje modelu společně se účastnit informací z různých podprostorů reprezentace.
- Kombinuje více perspektiv vstupní sekvence a rozšiřuje rozsah toho, co se model může naučit.
- Zlepšuje robustnost tím, že se spoléhá na jedinou reprezentaci pozornosti.
Výstupy těchto více hlav jsou zřetězeny a lineárně transformovány za vzniku konečné reprezentace použité pro generování výstupních tokenů.
Encoder-Decoder Pozornost pro zarovnání zdrojového cíle
Při generování kódu transformátory obvykle používají architekturu dekoderu kodéru, kde kodér zpracovává vstupní popis (např. Specifikace problému přirozeného jazyka) do kontextové reprezentace a dekodér generuje odpovídající sekvenci kódu. Dekodér používá pozornost kodéru dekodéru (křížová pozornost) k selektivnímu zaměření na relevantní části kódovaného vstupu v každém kroku dekódování. Toto zarovnání mezi vstupem a výstupem pomáhá modelu generovat relevantní a přesné úryvky kódu, které úzce odpovídají záměru vyjádřenému ve vstupní výzvě.