Skip to content

10. Transformery

Definice

  • Podobně jako RNN, transformery zpracovávají vstup ve formě sekvenčních dat. Na rozdíl od RNN však nezpracovávají sekvenční data popořadě, modelu jsou předložena všechna najednou.
  • To znamená, že transformery mohou být paralelizovány a jejich trénování tak může být rychlejší.
  • Na rozdíl od RNN taky není tak problematický vanishing gradient.
  • Používají attention aby zvážili významné části vstupu
  • Attention bloky se muzou stackovat na sebe

Použiti

Na co se dají použít?

  • Machine translation
  • Text summarization
  • Image description generation

Otázky

Jak funguje query, key, value?

  • Celkově to je o tom ze chceme nějakému query (slovu) přidat kontext. To uděláme tak ze vezmeme každé key a to jedno query (kde key je slovo) a pronasobime je spolu softmaxem. Tento výsledek je váha kterou potom můžeme vynásobit value (coz je to same slovo jako query) tím získáme attention.
  • Neboli query je jeden pro daný attention block a pro každý value se query vynásobí odpovídajícím key. Tím získáme hodnotu parametru, kterým value násobíme a tak získáme attention.

Co je poziční kódování a proč se používá?

  • Jelikož je modelu předložena celá sekvence naráz, tak nemá informaci o pořadí slov. K tomu slouží positional encoding, který ke každému vektorovému embeddingu slov přičte časový vektor. To znamená, že stejná slova nakonec budou zakódována trošku jinak jelikož se nacházela v jiném časovém bodě sekvence.

Jaké pozornostní mechanismy transformer používá?

Self-attention

  • Porovnání tokenů všech slov ve větě mezi sebou a převážení těchto embeddingů tak, že reprezentace zachycuje kontext. 
  • keys = queries = values
  • Tento proces je nezávislý na velikosti vstupu a nevyžaduje žádné učení, jen provádíme skalární součin query a key, výsledek normalizujeme a získáme tím tak weights pro daný query. Každá váha odpovídá jednomu z values, takže to pronásobíme, výsledky sečteme a získáme tak kontextový vektor pro slovo použité jako query. To se zopakuje tak, že se jako query vystřídají všechna slova.
  • Např. ve větě „Bank of the river“ by slovo Bank mohlo být zakódované ve smyslu finanční instituce, ale potom co se provede self-attention re-weighing na základě řeky, tak budeme mít větší kontext a ten výsledný embedding bude zachycovat tu skutečnou podstatu, tedy slovo Břeh.
  • Pokud z keys, values a queries uděláme parametrizované matice, můžeme vytvořit trénovatelný attention.

Multi head attention

  • V rámci vstupu může být několik kontextů, např. jedno slovo má jeden kontext s jedním a jiný kontext s druhým, takže je potřeba zachytit víc pozorností.
  • Budeme mít několik vrstev lineárních vstupů k, v, q a každý bude mít vliv na nezávislé trénování jednoho svého attentionu. To znamená, že se natrénuje několik kontextových vektorů, které pak spojíme pomocí concatenation a napojíme do dense vrstev.

Cross attention

  • Keys a values jsou generovány z jiného výstupu než queries.
  • Konkrétně toto bývá u decoderu, kde se keys a values berou z encoderu a queries z předchozího výstupu stackovaného decoderu.

Jak vypadá maskovaná self-attention?

  • Maskovaná self attention funguje stejně jako normální self attention až na to ze nevi a budoucych informacich.
  • Nesmí "Podvadet" abychom nevedeli dalsi slova pri dekoderu
  • Mejme: Bank of the river
    • querry je: 'of'
    • Jedine key ktere dostane jsou: 'Bank', 'of', 'the'

Co to je BERT a jak funguje?

BERT

  • Před trénovaný transformer model
  • Trénoval se pomoci Masked language model (MLM) kde se self-supervizovaně učí doplňovat zamaskovaná (chybějící) slova do textu. Běžně se zakryje 15 % slov a model doplňuje.
  • Kromě MLM je BERT také trénován na Next sentence prediction, takže při trénování se minimalizoval loss obou úkolů. Next sentence prediction je, že predikuje, zda věta B následuje za větou A v daném dokumentu.
  • Velmi velký model, asi 340 M parametrů. Je to seq2seq model využívající transformer architekturu se stackem encoderů.
  • Lze použít jako jazykový základ a fine-tunovat na konkrétní úkoly.

V čem je Performer efektivnější než klasický transformer a jaké jsou další varianty efektivních transformerů?

Performer

  • Problém transformerů jsou vysoké paměťové nároky, rozšiřitelnost na velmi dlouhé query sekvence a poměrně složitá implementace. Složitost attention vrstev je L^2, kde L je délka sekvence.
  • Performer obchází problémy se škálovatelností attention vrstev tím, že místo query a key matic dosazuje matice aproximované.
  • U transformerů se násobí matice (Q * K) * V, tím dostáváme L * L, tak máme kvadratickou složitost vzhledem k délce vstupu
  • U performeru se násobí matice Q * (K * V), tim ostavame velikost d * d, kde d je velikost embeddingu

Synthesizer

  • Query a key jsou nahrazeny a attention matice je vlastně sestavena jen nějakou trénovatelnou sítí a až pak pronásobena values. Může být i random synthesizer, kde je matice náhodná.

Reformer

  • Používá lokální sémantické hashování (LSH), kde sousedé z podobných kontextů skončí s podobným hashem, takže se podobnosti předpočítávají.
  • Rychlejší, ale náročnější na paměť.