Ilustrovaný transformátor

Illustrated Transformer



Predhovor

Preložiť veľmi dobrý článok vysvetľujúci článok Transformera, Originálny odkaz
v predchádzajúcom článok V modeli hlbokého učenia sa pozornosť stala všadeprítomnou metódou. Ide o myšlienku, ktorá pomáha zlepšiť prekladový efekt NMT (Neural Machine Translation). V tomto blogu analyzujeme transformátor, ktorý rozširuje pozornosť na urýchlenie tréningu a G Výkon NMT spoločnosti Oogle je vynikajúci. Jeho najväčšou výhodou však je, že sa dá paralelne vyrovnať. Google Cloud v skutočnosti odporúča Transformer ako derivačný model cloudového TPU. Teraz rozoberieme Transformer, aby sme videli, ako to funguje.
Transformátor je o Všetko, čo potrebujete, je pozornosť „Navrhovaný v žiadosti o TF je Tensor2Tensor Submodul. Harvardov tím NLP vyrobil zodpovedajúci PyTorch Popis sprievodcu . Účelom tohto príspevku je zjednodušiť ťažkosti a vysvetliť jednotlivé pojmy krok za krokom v nádeji, že to začiatočníkom uľahčí pochopenie.



Vzhľad na vysokej úrovni



Celý model najskôr považujeme za čiernu skrinku, napríklad pri strojovom preklade, keď ako vstup prijmeme vetu z jazyka a potom ju preložíme do iného jazykového výstupu.



Pozrime sa bližšie, ktorý sa skladá z kódovacieho komponentu, dekódovacieho komponentu a spojovacej vrstvy medzi nimi.



Kódovací komponent je stoh šiestich vrstiev kódovacích zariadení a dekódovací komponent je tiež šesťvrstvový dekodér.

Kodér má úplne identickú štruktúru, aleNezdieľajte parametreKaždý kódovač je možné rozložiť na nasledujúce dve slová.

Vstup do kódovacieho zariadenia najskôr preteká vrstvou sebapozorovania, ktorá pomáha kódovaču vidieť ďalšie slová vo vstupnej sekvencii, keď kóduje slovo. Neskôr sa bližšie pozrieme na vnútornú štruktúru sebapozorovania.
Výstup sebapozorovania prúdi do doprednej siete a dopredná sieť zodpovedajúca každému vstupnému miestu je na sebe nezávislá.
Dekodér má tiež tieto podvrstvy, ale medzi dve podvrstvy je pridaná vrstva pozornosti, ktorá pomáha dekodéru zamerať sa na príslušné časti vstupnej vety, model seq2seq Efekt Pozor je podobný.

Uvedenie tenzorov do obrazu

Teraz analyzujeme hlavné komponenty modelu, počnúc vektorom / tenzorom a potom ich tokom cez rôzne komponenty a výstup.
Rovnako ako bežný príklad aplikácií NLP, najskôr použite vstupné slovo vkladací algoritmus Premeňte sa na vektor.

Každé slovo je mapované na 512-rozmerný vektor, kde je vektor predstavovaný rámčekom

K vektorizácii slov dochádza iba na vstupe kodéra najnižšej úrovne, takže každý kódovač dostane zoznam (každý prvok je 512-rozmerný vektor slov), až na to, že vstupom druhého kodéra je predchádzajúci. Výstup kódovacieho zariadenia. Veľkosť zoznamu je superparametr, ktorý je možné nastaviť, zvyčajne ide o dĺžku najdlhšej vety v cvičnej sade.
Po vektorizácii vstupných sekvencií prechádzajú nasledujúcimi dvoma podvrstvami kódovacieho zariadenia.

Tu môžete vidieť kľúčovú vlastnosť Transformera, kde každé slovo preteká iba vlastnou cestou kódovača. Vo vrstve sebapozorovania sú tieto cesty navzájom závislé. Predná sieťová vrstva tieto závislosti nemá. , ale tieto cesty môžu byť vykonávané paralelne, zatiaľ čo pretekajú cez doprednú sieť.

Teraz kódujeme!

Ako už bolo spomenuté, kódovač prijíma zoznam vektorov na vstup. Potom sa pošle do spracovania vlastnej pozornosti, potom do prednej siete a nakoniec do ďalšieho kódovacieho zariadenia.

Vektor slova pre každé miesto sa odošle do modulu sebapozorovania a potom do prednej siete (sieťová štruktúra je pre každý vektor rovnaká).

Sebapozorovanie na vysokej úrovni

Nenechajte sa zmiasť slovom sebapozorovanie, zdá sa, že ho každý pozná, ale skôr ako som si prečítal článok Pozor je všetko, čo potrebujete, osobne som pojmu nerozumel. Ďalej postupne rozkladáme, ako to funguje.
Vezmite si nasledujúcu vetu ako príklad, pretože vstupnú vetu „Zviera neprešlo cez ulicu, pretože bolo príliš unavené“, ktorú chceme preložiť. Čo znamená „to“ vo vete? Hovorí „to“ o „ulici“ alebo „zvierati“? Jednoduchá otázka pre ľudí, ale nie jednoduchá pre algoritmus.
Keď model spracuje slovo „to“, sebaobsluha umožňuje spojiť „to“ a „zviera“. Keď model spracováva slová na každom mieste, sebapozornosť umožňuje modelu vidieť ďalšie informácie o polohe pre vetu ako sekundárnu stopu pre lepšie kódovanie aktuálneho slova. Ak poznáte RNN, môžete myslieť na to, ako skrytý stav RNN umožňuje vektoru predchádzajúceho slova interpretovať vektor interpretácie aktuálneho slova. Transformátor využíva vlastnú pozornosť na zakódovanie porozumenia súvisiacich slov do súčasného slova.

Pri kódovaní „it“ (konečný výstup kódovacieho zariadenia) sa časť pozornosti zameriava na „zviera“ a jeho reprezentácia sa zlúči do kódovania „it“.

Obrázok vyššie je Notebook Tensor2Tensor Príklad vizualizácie

Detailná pozornosť

Najprv sa pozrime na to, ako vypočítať vektor sebapozorovania, a potom uvidíme, ako ho vypočítať v matici.
Prvý krok Podľa vstupného vektora kódovacieho zariadenia sú generované tri vektory. Napríklad pre každý slovný vektor sa vygenerujú dotaz-vec, kľúč-vec, hodnota-vec a metóda generovania sa vynásobí tromi maticami, a tieto matice sa nachádzajú v tréningovom procese. Treba sa učiť. [Poznámka: Nie každý slovný vektor má 3 matice, ale všetky vstupy zdieľajú 3 transformačné matice Váhová matica je transformačná matica založená na vstupnej polohe Je treba vyskúšať. Ak má každé slovo konverznú maticu, bude efektívnejšie? 】
Upozorňujeme, že rozmery týchto nových vektorov sú menšie ako rozmery vektora vstupného slova (512–> 64), nie nevyhnutne malé, aby bol výpočet viachlavej pozornosti stabilnejší.

Vynásobením W ^ q získate dopyt

Čo je takzvaný dopyt / kľúč / hodnota-vec?
Tento druh extrakcie je vhodný na výpočet a premýšľanie o pozornosti. Po prečítaní nasledujúcej pozornosti budete lepšie chápať úlohy týchto vektorov.
Druhý krok Výpočet pozornosti spočíva v vypočítaní skóre. Pre frázu „Thinking Matchines“ vypočítajte skóre pozornosti pre „Thinking“ (poz. 1). Musíme vypočítať skóre hodnotenia pre každé slovo a slovo „Myslenie“. Toto skóre určuje, na koľko pozornosti sa musí každé vstupné slovo zamerať pri kódovaní slova „Myslenie“ (pevná pozícia).
Toto skóre sa získa bodovým súčinom zodpovedajúcim vektoru dopytu a kľúčovej veci všetkých slov. Takže keď spracujeme pozíciu # 1, prvé skóre je bodový súčin q1 a k1 a druhé skóre je bodový súčin q1 a k2.

Kroky 3 a 4 , vydelené 8 (= ), takže gradient bude stabilnejší. Potom pridajte operáciu softmax a normalizujte skóre tak, aby boli všetky kladné a súčet bol 1.

Skóre softmax určuje stupeň prejavu (pozornosti) každého slova na tomto mieste. Je zrejmé, že slová v tejto pozícii by mali mať najvyššie normalizované skóre, ale väčšinou vždy pomôžu venovať pozornosť príslušným slovám slova.
piaty krok , vynásobte skóre softmax hodnotou-vec. Ponechajte hodnotu zaujímavého slova a oslabte hodnotu nesúvisiaceho slova.
Krok 6 , sčítaním všetkých vektorov váh, aby sa vytvoril výstup sebapozorovania v tejto polohe.

Vyššie uvedené je proces výpočtu vlastnej pozornosti a vygenerovaný vektor prúdi do forwardovej siete. V praktických aplikáciách sa vyššie uvedené výpočty vykonávajú v rýchlejšej matici. Ďalej sa pozrieme na maticový výpočet na úrovni slov.

Maticový výpočet sebapozorovania

Prvý krok , vypočítajte maticu dotazu / kľúča / hodnoty, zlúčte všetky vektory vstupných slov do vstupnej matice A vynásobte ich váhovou maticou

Každý riadok vstupnej matice X predstavuje slovný vektor vstupnej vety

Nakoniec Pretože používame maticové spracovanie, skombinujte kroky 2 až 6 do vzorca, ktorý počíta výstup vrstvy vlastnej pozornosti.

Výpočet sebaobrany v maticovej podobe

Šelma s mnohými hlavami

Príspevok ďalej zvyšuje mechanizmus zameraný na viac pozornosti k sebapozornosti a zlepšuje efekt vrstvy pozornosti dvoma spôsobmi:

  1. Býčí mechanizmus rozširuje schopnosť modelu zamerať sa na rôzne miesta. Vo vyššie uvedenom príklade z1 obsahuje iba malé množstvo informácií o iných slovách, ktoré sú určené iba skutočnými slovami. V iných prípadoch, ako napríklad preklad „Zviera neprešlo cez ulicu, pretože bolo príliš unavené“, chceme vedieť, na čo odkazuje slovo „to“.
  2. Viachlavý mechanizmus poskytuje viacnásobné vyjadrenie pozornosti. Ako je uvedené v príklade nižšie, pod dlhou hlavou je viac sád matice dotazov, kľúčov a hodnôt, nielen jedna sada (v dokumente 8 hláv). Každá skupina je náhodne inicializovaná a po tréningu môžu byť vstupné vektory mapované do rôznych subexpresných priestorov.

Každá hlava má sadu Q / K / V matice

Ak vypočítame viachlavú sebapozornosť, existuje osem rôznych množín Q / K / V matíc a dostaneme osem rôznych matíc.

To spôsobuje určité problémy. Sieť typu forward nemôže prijímať osem matíc. Namiesto toho sa očakáva, že vstupom bude matica, takže existuje spôsob, ako spracovať ďalších osem matíc do jednej matice.

Vyššie uvedené je obsahom viachlavového mechanizmu vlastnej pozornosti. Myslím si, že je to iba časť matice. Skúsme ich dať do grafu a vizualizovať ho nasledovne.

Po pridaní hláv pozornosti sa teraz poobzerajte späť nad tým, na ktoré hlavy pozornosti sa pri kódovaní „sústredia“.

Pri kódovaní slova „it“ sa jedna pozornosť sústreďuje na „zviera“ a druhá hlava sa zameriava na výraz „unavený“. V istom zmysle model syntetizuje výraz „zviera“ a „unavený“ pre vyjadrenie výrazu „to“.

Ak vložíme do obrazu všetky hlavy pozornosti, je ťažké to vysvetliť intuitívne.

Zastupovanie poradia sekvencie pomocou pozičného kódovania

Doteraz sme nerozoberali, ako chápať poradie slov vo vstupnom príkaze.
Na vyriešenie problému s používaním slovosledu pridal Transformer pre každé slovo vektorový pár. Tieto vektory sledujú zadaný vzor učenia modelu na určenie polohy slova alebo príkladov rôznych slov v poradí. . Aby ste to pochopili, pridajte tieto hodnoty, aby ste poskytli vzdialenosť medzi vektormi slov, keď sú mapované na vektor Q / K / V, a bodovo znásobenou pozornosťou.

Aby sme modelu poskytli informácie o poradí slov, pridá sa nový vektor emb umiestnenia a každá hodnota vektora sleduje zadaný vzor.

Ak predpokladáte, že vektor polohy má 4 rozmery, bude vektor skutočnej polohy vyzerať takto:

Príklad vektorovej reprezentácie iba so 4 dimenziami

Čo je takzvaný určený režim?
Na obrázku nižšie predstavuje každý riadok pozičné pos-emb, takže prvý riadok je vektor, ktorý pridáme do prvého slovného vektora vety. Každý riadok má 512 hodnôt, každá hodnota je v [-1, 1] a my maľujeme, aby sme mohli vzor vizualizovať.

Skutočným príkladom je 20 slov, každé slovo má 512 dimenzií. V strede môžete pozorovať výrazné oddelenie, pretože ľavá strana je generovaná sínusovou funkciou a pravá strana kosínusom.

Metóda kódovania pozičných vektorov je uvedená v oddiele 3.5 príspevku a tiež je uvedený kód. get_timing_signal_ld () Existuje nielen jeden spôsob pozičného kódu. Je potrebné poznamenať, že metóda kódovania musí byť schopná spracovať sekvencie neznámej dĺžky.

Zvyšky

Jeden detail, ktorý si zaslúži pozornosť v štruktúre kódovacieho zariadenia, je ten, že v každej podvrstve (slef-attention, ffnn) existuje zvyškové spojenie, po ktorom nasleduje normalizácia vrstiev

Ak by sme vizualizovali operácie vektora a normy vrstvy, vyzeralo by to takto:

To isté platí aj v dekodéri. Predpokladá sa, že dvojvrstvový kódovač + dvojvrstvový dekodér predstavuje transformátor a jeho štruktúra je nasledovná:

Strana dekodéra

Teraz, keď sme videli väčšinu konceptov na strane kódovača, máme základné znalosti o tom, ako fungujú dekodéry. Pozrime sa, ako spolupracujú.
Kodér začína spracovaním vstupnej sekvencie a výstup konečného kodéra sa prevedie na K a V, ktoré sa používajú vo vrstve „kodér-dekodér“ každého dekodéra. Pomôžte dekodéru zamerať sa na príslušné miesto vstupnej sekvencie.

Po kódovaní je to dekódovací proces v každom kroku dekódovania výstupu prvku ako výstupnej sekvencie.

Nasledujúce kroky sa opakujú, kým sa nezobrazí špeciálny symbol označujúci, že dekodér dokončil prekladový výstup. Výstup z každého kroku sa privádza do nasledujúceho dekodéra. Rovnako ako pri spracovaní vstupu kódovacieho zariadenia, je k vstupu dekodéra pridaný pozičný vektor.

Vrstva vlastnej pozornosti v dekodéri sa mierne líši od vrstvy v kodéri. V dekodéri umožňuje vrstva vlastnej pozornosti pozornosť iba miestam skôr, ako je aktuálny výstup. Pred programom softmax sa to dosiahne oklúziou budúcich umiestnení (nastavte ich na -inf).
Vrstva „Encoder-Decoder Attention“ funguje rovnako ako viachlavá sebapozornosť. Okrem jedného bodu berie výstup z predchádzajúcej vrstvy a prevádza ho na maticu dotazu, pričom dostane kľúč od kódovača poslednej vrstvy. A hodnotová matica urobiť kľúč a hodnotovú maticu.

Konečná lineárna a mäkká vrstva

Dekodér nakoniec vydá vektor s pohyblivou rádovou čiarkou. Ako to premeníte na slovo? Toto je hlavná práca konečnej lineárnej vrstvy a vrstvy softmax.
Lineárna vrstva je jednoduchá úplne spojená vrstva, ktorá mapuje konečný výstup dekodéra na veľmi veľký logitový vektor. Predpokladajme, že o modeli je známe, že sa z tréningovej množiny naučilo 10 000 slov (slovná zásoba výstupu). Potom má logitový vektor 10 000 rozmerov a každá hodnota predstavuje možnú hodnotu sklonu pre slovo.
Vrstva softmax prevádza tieto skóre na hodnoty pravdepodobnosti (pozitívne aj sčítané do 1) a slovo v dimenzii zodpovedajúce najvyššej hodnote je výstupným slovom pre tento krok.

Rekapitulácia školenia

Teraz, keď sme videli pokrokový proces vyškoleného Transformera, je tiež veľmi užitočné pozrieť sa na koncept školenia.
Počas tréningu model prejde vyššie popísaným procesom a keď trénujeme na tréningovej sade markerov, môžeme porovnávať predpovedaný výstup so skutočným výstupom.
Pre vizualizáciu predpokladajme, že výstup má iba 6 slov ('a', 'am', 'i', 'vďaka', 'študent', '')

Slovník modelu sa generuje počas predbežného spracovania pred tréningom.

Po definovaní slovnej zásoby môžeme vytvoriť vektor rovnakej dimenzie, ktorý bude reprezentovať každé slovo, ako je napríklad kódovanie za horúca. Nasledujúci príklad kóduje „am“.

Napríklad použitie výstupnej slovnej zásoby s jedným horúcim kódovaním

Poďme diskutovať o strate modelu, ukazovateľoch používaných na optimalizáciu počas tréningového procesu a pomôžeme učeniu získať veľmi presný model.

Stratová funkcia

Na demonštrácii školenia, napríklad prekladu, používame jednoduchý príklad. Ďakujem „To“. To znamená, že rozdelenie pravdepodobnosti výstupu ukazuje na slovo „vďaka“, ale keďže model nie je trénovaný na náhodnú inicializáciu, je nepravdepodobné, že by išlo o očakávaný výstup.

Pretože parametre modelu sú náhodne inicializované, netrénovaný model vydáva náhodné hodnoty. Môžeme porovnať skutočný výstup a potom pomocou chyby po prenose upraviť váhy modelu tak, aby bol výstup bližšie k skutočnému výstupu.

Ako porovnať dve rozdelenia pravdepodobnosti? Jednoduchá adopcia krížová entropia alebo Kullback-Leiblerova divergencia Jeden z nich.
Vzhľadom na to, že ide o mimoriadne jednoduchý príklad, je skutočnejším prípadom použitie vety ako vstupu. Napríklad vstup je „je suis étudiant“ a očakávaný výstup je „som študent“. V tomto príklade očakávame, že model bude vydávať nepretržité rozdelenie pravdepodobnosti, ktoré spĺňa nasledujúce podmienky:
1 Každé rozdelenie pravdepodobnosti má rovnakú dimenziu ako slovník.
2 Prvé rozdelenie pravdepodobnosti má najvyššiu predpokladanú hodnotu pravdepodobnosti pre „i“.
3 Druhé rozdelenie pravdepodobnosti má najvyššiu predpovedanú hodnotu pravdepodobnosti pre „am“.
4 Až piaty výstup ukazuje na značku „“.

Pre vetu cieľové rozdelenie pravdepodobnosti výcvikového modelu

Po natrénovaní dostatočného času na dostatočne veľkej cvičnej zostave je rozdelenie pravdepodobnosti, ktoré očakávame, nasledujúce:

Po tréningu je výstupom modelu preklad, ktorý očakávame. To samozrejme neznamená, že proces je z tréningovej sady. Upozorňujeme, že každé miesto má svoju hodnotu, aj keď nemá veľa spoločného s výstupom, kde môže softmax pomôcť s tréningom.

Pretože model produkuje iba jednu sadu výstupov na krok, za predpokladu, že model zvolí najvyššiu pravdepodobnosť a odhodí ostatné časti, je to spôsob, ako vytvoriť predpoveď, ktorá sa nazýva chamtivé dekódovanie. Druhou metódou je vyhľadávanie lúčom. Každý krok udržiava iba dva výstupy s najvyššou pravdepodobnosťou výskytu hlavy. Podľa týchto dvoch výstupov sa predpovedá ďalší krok a potom sa dva výstupy s vysokou pravdepodobnosťou hlavy rezervujú a opakujú sa až do konca predikcie. Top_beams je superparametrom testovateľná úprava.

Choďte ďalej a premieňajte sa

Dúfam, že tento článok pomôže čitateľom mať ľadový efekt na pochopenie hlavného konceptu Transformera. Ak sa chcete dozvedieť viac, odporúčajú sa nasledujúce kroky:
1 Prečítajte si Všetko, čo potrebujete, je pozornosť Paper, Transformers blogový príspevok Transformátor: nová architektúra neurónových sietí pre porozumenie jazykaTensor2Tensor Inštrukcie na používanie.
2 Pozrieť ' Príhovor Łukasza Kaisera ', prečešte celý model a jeho detaily.
3 Zahrajte si projekt Notebook Jupyter poskytovaný ako súčasť repozitára Tensor2Tensor
4 Vyskúšajte ďalší projekt Tensor2Tensor

Súvisiaca práca

  1. Hĺbkovo oddeliteľné závity pre strojový preklad neurónov
  2. Jeden model, ktorý sa má naučiť všetkých
  3. Diskrétne automatické kódovače pre sekvenčné modely
  4. Generovanie Wikipédie zhrnutím dlhých sekvencií
  5. Transformátor obrazu
  6. Tipy na školenie pre model transformátora
  7. Sebapozorovanie s vyjadreniami relatívnych pozícií
  8. Rýchle dekódovanie v sekvenčných modeloch pomocou diskrétnych latentných premenných
  9. Adafactor: Adaptívne výučbové kurzy so sublearskými nákladmi na pamäť

Poďakovanie:
Ďakujem Illii Polosukhinovej, Jakobovi Uszkoreitovi, Llionovi Jonesovi, Lukaszovi Kaiserovi, Nikimu Parmarovi a Noamovi Shazeerovi za poskytnutie spätnej väzby k starším verziám tohto príspevku.
Prosím, udrite ma Twitter za prípadné opravy alebo spätnú väzbu.