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
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.
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.
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.
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.
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ů?¶
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
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á.