transformrTakéTransformer architecture, transformerová architektura, Transformer modelPokročilý

Definice

Transformer je architektura neuronové sítě postavená na mechanismu pozornosti (self-attention), která zpracovává celou sekvenci najednou místo prvku po prvku. Publikovaná byla v roce 2017 v práci Attention Is All You Need a stala se základem dnešních jazykových modelů, překladačů i modelů pro obraz a zvuk.

Kategorie: Strojové učeníAktualizováno

Nezaměňujte: V elektrotechnice znamená transformer transformátor, tedy zařízení pro změnu napětí; toto heslo popisuje architekturu neuronové sítě.

Než se na to spolehnete: Wikidata identifikátor pro architekturu Transformer jsem neověřil s jistotou, prosím o kontrolu nebo odstranění. Rovněž konkrétní detaily jako převaha RoPE v současných modelech jsou rychle se vyvíjející oblast.

Co Transformer nahradil

Před rokem 2017 se sekvence zpracovávaly rekurentně: model četl text slovo po slovu a nesl si skrytý stav. Rekurence má dvě potíže. Trénink se špatně paralelizuje, protože krok t potřebuje výsledek kroku t-1, a informace ze začátku dlouhé věty se cestou rozmělní. Transformer rekurenci zahodil úplně a nahradil ji mechanismem pozornosti, který každý token spojí s každým jiným v jediné operaci.

Self-attention: co model vlastně počítá

Každý token se promítne do tří vektorů: dotazu (query), klíče (key) a hodnoty (value). Skalární součin dotazu se všemi klíči dá skóre podobnosti, softmax z něj udělá váhy a výstupem je vážený průměr hodnot. Slovo „ji“ tak může získat velkou váhu od podstatného jména o deset slov dřív, aniž by informace musela projít deseti mezikroky.

Pozornost běží v několika paralelních hlavách (multi-head attention), z nichž se každá naučí sledovat jiný typ vztahu: jedna syntaktickou závislost, jiná koreferenci. Protože samotná pozornost nerozlišuje pořadí, přidává se poziční kódování, absolutní nebo dnes častěji rotační (RoPE).

Z čeho se blok skládá

  • Multi-head self-attention a za ní feed-forward síť aplikovaná na každou pozici zvlášť.
  • Reziduální spojení a normalizace vrstvy kolem obou podbloků, což umožňuje skládat desítky až stovky vrstev.

Původní návrh měl encoder i decoder. Praxe se rozdělila: encoderové modely typu BERT se hodí na klasifikaci a vyhledávání, decoderové modely (GPT a spol.) generují text a tvoří jádro dnešních velkých jazykových modelů, encoder-decoder zůstal u překladu a sumarizace.

Cena kvadratické pozornosti

Pozornost porovná každý token s každým, takže výpočet i paměť rostou s druhou mocninou délky kontextu. Zdvojnásobení kontextu znamená čtyřnásobek práce. Odtud pramení většina inženýrského úsilí kolem Transformerů: FlashAttention šetří přenosy do paměti GPU, KV cache při generování ukládá už spočítané klíče a hodnoty, grouped-query attention zmenšuje tuto cache a řídké nebo lineární varianty pozornosti mění samotnou složitost. Delší kontext je tedy vždy otázka rozpočtu, ne jen konfigurace.

Proč se rozšířil mimo text

Transformer nepředpokládá nic o povaze vstupu kromě toho, že jde o množinu prvků s pozicemi. Vision Transformer nakrájí obrázek na dlaždice a zachází s nimi jako s tokeny, audio modely tokenizují spektrogram, AlphaFold-like modely pracují s aminokyselinami. Ta samá neuronová síť tak obsluhuje domény, které dřív měly každá vlastní specializovanou architekturu, a to je hlavní důvod, proč se kolem ní soustředilo tolik hardwarové i softwarové optimalizace.

Příklady z praxe

  1. Pozornost na dvou řádcích kódu

    Jádro self-attention se vejde do jednoho výrazu: skóre, škálování, softmax, vážený součet hodnot. V praxi se místo ruční implementace volá optimalizovaná funkce, která totéž spočítá bez materializace celé matice skóre v paměti.

    import torch
    import torch.nn.functional as F
    
    q = k = v = torch.randn(1, 8, 128, 64)  # batch, hlavy, tokeny, dim
    
    # naivní varianta
    scores = q @ k.transpose(-2, -1) / (q.size(-1) ** 0.5)
    out = F.softmax(scores, dim=-1) @ v
    
    # optimalizovaná varianta s kauzální maskou
    out2 = F.scaled_dot_product_attention(q, k, v, is_causal=True)
  2. Proč chatbot zdražuje s délkou konverzace

    Asistent, který má v kontextu celou dosavadní konverzaci, platí za pozornost kvadraticky. Přechod z 4 000 na 32 000 tokenů historie neznamená osminásobek, ale zhruba šedesátičtyřnásobek práce v attention vrstvách. Proto se v produkci starší část konverzace shrnuje nebo se relevantní úryvky dohledávají vyhledáváním místo toho, aby se posílalo všechno.

Časté omyly

MýtusTransformer je totéž co ChatGPT nebo LLM.
Ve skutečnostiTransformer je architektura, tedy způsob zapojení vrstev. Velký jazykový model je konkrétní model postavený na této architektuře a natrénovaný na obrovském korpusu. Na Transformeru běží i modely pro obraz, zvuk nebo predikci struktury proteinů.
MýtusAttention znamená, že model rozumí tomu, na co se dívá.
Ve skutečnostiAttention váhy jsou výsledkem skalárních součinů naučených projekcí, nikoli vysvětlení rozhodnutí. Výzkum opakovaně ukázal, že vysoká váha pozornosti nemusí odpovídat tomu, co skutečně ovlivnilo výstup, takže se attention mapy nedají brát jako spolehlivá interpretace.
MýtusDelší kontextové okno je jen otázka nastavení parametru.
Ve skutečnostiDelší kontext mění výpočetní i paměťové nároky kvadraticky a model se navíc musí na dané délky trénovat nebo dotrénovat, včetně vhodného pozičního kódování. Bez toho kvalita na dlouhých vstupech klesá, i když model formálně vstup přijme.

Časté dotazy

Kdo Transformer vymyslel a kdy?
Transformer představil tým výzkumníků z Googlu v článku Attention Is All You Need publikovaném v roce 2017 na konferenci NeurIPS. Původním cílem byl strojový překlad, kde architektura porazila do té doby standardní rekurentní a konvoluční modely a zároveň se trénovala výrazně rychleji díky paralelizaci. Během několika let se rozšířila daleko za překlad: na ní stojí modely řady BERT a GPT, Vision Transformer pro obraz i modely pro zvuk a biologické sekvence.
Jaký je rozdíl mezi encoderovým a decoderovým Transformerem?
Encoderový Transformer vidí celou sekvenci naráz v obou směrech a produkuje reprezentace vhodné pro klasifikaci, vyhledávání nebo embeddingy; typickým zástupcem je BERT. Decoderový Transformer používá kauzální masku, takže každý token vidí jen předchozí, a hodí se k autoregresnímu generování textu; sem patří modely řady GPT. Kombinace encoder-decoder se drží tam, kde se jedna sekvence převádí na jinou, tedy u překladu a sumarizace.
Proč Transformer potřebuje poziční kódování?
Self-attention počítá vážený průměr přes všechny tokeny a tato operace je vůči pořadí invariantní: kdyby se slova ve větě zamíchala, výstup by se nezměnil. Poziční kódování proto do reprezentace každého tokenu přidá informaci o jeho místě v sekvenci. Původní práce použila sinusové funkce, později se rozšířily naučené absolutní pozice a dnes převažují rotační varianty typu RoPE, které lépe zobecňují na delší vstupy, než jaké model viděl při tréninku.
Kdy se Transformer nevyplatí?
Transformer se nevyplatí u malých datových sad a jednoduchých úloh, kde stačí gradientní boosting nebo lineární model, protože architektura má málo vestavěných předpokladů a potřebuje hodně dat, aby je nahradila. Nevýhodný bývá i u velmi dlouhých sekvencí s omezeným rozpočtem kvůli kvadratické složitosti pozornosti a u aplikací s tvrdými limity latence na CPU. V takových případech se sahá po konvolučních sítích, stavových modelech nebo destilovaných menších modelech.

Zdroje

  1. Attention Is All You Need(otevře se v novém okně)arXiv, 2017
  2. Transformer(otevře se v novém okně)PyTorch
  3. Transformers(otevře se v novém okně)Hugging Face
  4. Transformer (deep learning architecture)(otevře se v novém okně)Wikipedia

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.