Termin Transformer został ukuty w 2017 roku w przełomowej pracy „Attention is all you need”, w odniesieniu do nowo zaproponowanej architektury modelu językowego. Jeśli interesuje Cię kontekst historyczny oraz ewolucyjny, w jaki sposób doszło do powstania Transformera, to zapraszam do poprzedniego wpisu. W tym artykule przeanalizujemy, od ogółu do szczegółu, tę przełomową architekturę deep learningu.
Wstęp
Kamieniem milowym na drodze do królowania Transformera było zastosowanie mechanizmu uwagi z większym rozmachem, niż miało to miejsce wcześniej w sieciach rekurencyjnych. Tak, wcześniej również stosowano mechanizm uwagi, ale jako swoisty dodatek. Zanim jednak powiem o samym Attention, przyjrzyjmy się, jak wygląda cały model, gdyż naszym celem będzie zrozumienie przepływu informacji na kilku stopniach abstrakcji. Postaram się przedstawić skuteczny mentalny model architektury Transformer. Nie ma bowiem sensu od razu przyglądać się operacji na macierzach – to ostatni krok, kiedy to zbudujemy wyraźny ogólny obraz. Innymi słowy, ten wpis jest opracowaniem wspomnianej już wyżej pracy badawczej.
Powiększenie ×1 – czarna skrzynka, czyli wejście i wyjście
Pierwszy Transformer (również nazywany Vanilla Transformer, ponieważ w kolejnych latach stało się to określeniem całej rodziny modeli) miał za zadanie tłumaczyć z angielskiego na niemiecki. W największym uproszczeniu model wygląda tak:
Powiększenie ×2 – ogólna zasada działania, enkoder i dekoder
Badany przez nas model jest zbudowany na zasadzie enkoder–dekoder, powszechnie stosowanej w wielu modelach neural machine translation, więc w tym przybliżeniu nie wyróżniał się ani trochę na tle swoich rekurencyjnych i konwolucyjnych rywali.
W ramach przypomnienia: enkoder tworzy reprezentację, którą następnie przekazujemy do dekodera, aby on na jej podstawie mógł stworzyć docelową sekwencję wyjściową – w naszym przypadku zdanie przetłumaczone na język niemiecki.
Generowanie wyjścia dekodera
Dekoder nie tworzy od razu całej sekwencji wyjściowej. Odbywa się to sekwencyjnie, słowo po słowie. Wykorzystuje on do tego wcześniej stworzoną reprezentację enkodera oraz słowa, które już sam wyprodukował wcześniej. Ten właśnie fakt (konsumowanie tego, co sam stworzył w poprzednim kroku) świadczy o tym, że dekoder ma naturę autoregresyjną. To zachowanie jest również szeroko stosowane w modelach przewidujących szeregi czasowe – ARIMA to przecież Autoregressive integrated moving average.
Powiększenie ×4 – stos bloków w enkoderze i dekoderze
Na tym etapie można zobaczyć, jak wyglądają trzewia enkodera i dekodera. Okazuje się, że to stosy połączonych ze sobą identycznych bloków. Identycznych pod względem architektury, o czym przekonamy się w następnym kroku, zmieniając soczewkę powiększającą, jednak różnych pod względem wag, które są aktualizowane indywidualnie dla każdego z nich, podczas uczenia modelu. Jak zobaczysz w dalszej części, każdy blok potrafi odkryć inne zależności językowe.
Pierwszy blok enkodera jest zasilany tekstem wejściowym, jego wyjście natomiast jest przekazywane do kolejnego bloku. Taka zabawa w głuchy telefon. Wyjście ostatniego jest tym, co wcześniej nazwaliśmy wyjściem enkodera, i jest to informacja przekazywana do każdego bloku w stosie dekodera. To szalenie istotne założenie i na tym etapie jest najważniejszym szczegółem do zapamiętania.
W „Attention is all you need” użyto 6 bloków zarówno dla enkodera, jak i dekodera, jest to po prostu kolejny hiperparametr tego modelu. Dodatkowo, w tej pracy badawczej zamiast słowa „blok” używano określenia „warstwa” (layer). Na razie nie ma to nic wspólnego z warstwami sieci neuronowych, stąd postanowiłem użyć innego słowa, aby nie wprowadzać niepotrzebnych nieporozumień. Choć napisanie tego sprostowania również wprowadza dodatkową entropię, man natomiast nadzieję, że mniejszą.
Powiększenie ×8 – bloki enkodera i dekodera
Przyszła pora, aby przyjrzeć się z bliska pojedynczemu blokowi. Blok enkodera i dekodera mimo wielu podobieństw istotnie różni się, dlatego rozpatrzymy je z osobna.
Blok Enkodera
Blok enkodera składa się z dwóch podwarstw. Pierwsza skrywa w sobie mechanizm Multi-Head Attention (wyjaśniam w dalszej części), a druga – gęstą sieć neuronową. W obu warstwach zastosowano połączenie szczątkowe, aby przeciwdziałać zanikającym gradientom (residual connection) oraz normalizację. „Add” to dodanie dwóch wektorów – wyjścia z Multi-Head Attention oraz połączenia szczątkowego. Innymi słowy, wejście i wyjście Multi-Head Attenion jest dodawane, a następnie normalizowane. Ponadto trzeba w tym miejscu zaznaczyć, że Feed Forward to faktycznie po prostu gęsta, dwu dwuwarstwowa sieć neuronowa, z czego tylko pierwsza ma funkcję aktywacji.
Blok Dekodera
Jak widzisz, blok dekodera jest podobny do enkodera. W dodatku do dwóch warstw w każdym bloku enkodera dekoder wstawia trzecią warstwę, która wykonuje Multi-Head Attention zasilaną wyjściem enkodera oraz wyjściem pierwszej warstwy. Podobnie jak w przypadku enkodera stosujemy połączenia szczątkowe, po czym następuje normalizacja warstw.
Dodatkowego wyjaśnienia wymaga przydawka Masked w pierwszej warstwie. Pomyśl o masce jako o gumce do mazania, która przeciwdziała oszukiwaniu przez dekoder w trakcie trenowania. Co ta gumka zmazuje? Słowa, których dekoder nie powinien widzieć.
Przeanalizujmy następujący przykład: dla zdania wejściowego „I like you” (jego reprezentację stworzy enkoder) prawidłowe tłumaczenie to „Ich mag dich”. Przypomnę, że dekoder tworzy jedno słowo za każdym razem, wykorzystując to, co wcześniej stworzył, oraz reprezentację enkodera.
Żeby proces uczenia mógł być równoległy (a to zawsze dobry pomysł), możemy stworzyć ręcznie wszystkie prawidłowe sekwencje:
- na podstawie „I like you” model ma stworzyć słowo „Ich”;
- na podstawie „I like you” oraz „Ich” model ma stworzyć kolejne słowo „mag”;
- na podstawie „I like you” oraz „Ich mag” model ma stworzyć, w tym wypadku ostatnie słowo „dich”.
Jak zatem pousuwać nadmiarowe słowa z docelowego tłumaczenia, które znamy podczas trenowania? Właśnie maskowaniem.
Powiększenie ×16 – wielogłowy mechanizm uwagi
Nieuchronnie zbliżamy się do operacji na macierzach, ciągle jednak będziemy budować intuicje reprezentujące dodawanie i mnożenie.
Pierwsze, na co należy zwrócić uwagę, to cząstka „Multi”. Czy widzisz głębię spiętą klamrą „h”? Pojedynczy segment to jedna niezależna „głowa”. W skrócie można powiedzieć, że zadaniem każdej głowy jest nauczenie się relacji między słowami. Prawdą jest, że model operuje na tokenach, a nie słowach, ale dla uproszczenia i wyobrażenia sobie procesu „słowo” jest wystarczającym przybliżeniem. Zwróć uwagę, że w bloku enkodera V, K i Q są de facto takie same i pochodzą z wyjścia poprzedniego bloku.
Dlaczego jednak lepiej stworzyć kilka mniejszych głów, zamiast jedną wielką warstwę o tej samej liczbie parametrów, jaka by wynikała z sumy wszystkich głów? Ponieważ jedna wielka warstwa zacznie uśredniać swoje wyniki. W przypadku kilku mniejszych warstw każda może nauczyć się rozpoznawać inny rodzaj zależności. Przyjrzyj się, jak kolejne głowy nauczyły się zupełnie innych relacji między słowami.
Im ciemniejszy kolor linii, tym większą wagę dane słowo przykłada do słowa, z którym się łączy. Głowy te wyraźnie nauczyły się wykonywać różne zadania, które wydają się związane ze strukturą zdania. Powyższy przykład pochodzi z dwóch różnych głów enkodera w bloku piątym. Liczba głów również jest hiperparametrem modelu, w omawianej pracy przyjęto wartość 8.
Nasi dziadowie i pradziadowie mieli rację, jednocześnie wyprzedzili swą mądrością epokę, w której żyli, prawiąc, że co dwie głowy to nie jedna. Na końcu wyniki wszystkich głów są ze sobą łączone i przekazywane dalej.
Mechanizm uwagi
Omówmy teraz ostatni element układanki, mechanizm samouwagi. To tu dzieje się magia Transformera i jemu zawdzięcza szacunek w dzielnicy NLP. Mechanizm uwagi był już wcześniej wykorzystywany i to nawet w kilku wariantach (na przykład additive attention była używana wiele lat wcześniej, w sieciach rekurencyjnych, o czym pisałem tutaj). Intuicja, jaka za nimi wszystkimi się kryje, to wolność w wybieraniu komu z kim po drodze. Znaczenie słowa jest definiowane w całym jego otoczeniu, a nie tylko (tak jak w sieciach rekurencyjnych) na podstawie tego, co jest przed albo po nim.
Weźmy przykład „Poproszę piłkę do metalu, tę za 20 zł”. Żeby określić znaczenie słowa „piłka”, przydadzą nam się słowa „do metalu”. Ale model miał dostęp do wszystkich informacji jednocześnie, w trakcie uczenia dopasował swoje wagi, że lepiej nie brać pod uwagę „poproszę”, definiując znaczenie słowa „piłka”.
Grafika pokazuje, jak funkcja Scaled Dot-Product Attention przyjmuje trzy argumenty nazwane Query, Key i Value, które są macierzami, i zwraca jedną macierz.
Koncepcja zapytanie, klucz, wartość jest analogiczna do systemów wyszukiwania. Opiszmy to na przykładzie wyszukiwania filmów na YouTubie. Wyszukiwarka przetworzy Twoje zapytanie (tekst na pasku wyszukiwania) z zestawem kluczy (tytuł filmu, opis) znajdujących się w bazie danych, a następnie przedstawi Ci najlepiej dopasowane filmy (wartości).
W naszym przypadku Q, K i V pochodzą z tego samego źródła, dlatego też operacja ta często jest nazywana samouwagą (self-attention).
Zauważ również że w środku owej funkcji nie ma wag, których model uczy się w trakcie trenowania. Macierze wag (trainable parameters) są zaznaczone na grafice jako Linear i są składowymi głowy.
Podsumowanie
Omówiliśmy danie główne, czyli architekturę sieci neuronowej. Ale to tylko wstęp. Autorzy omawianej przeze mnie pracy zastosowali jeszcze ciekawy mechanizm przekazywania informacji o kolejności słów do niesekwencyjnego modelu, jakim jest Transformer, ale to temat na osobny wpis.
Oczywiście, to tylko powierzchowny opis, nic nie zastąpi przeczytania i zrozumienia oryginału. Mam nadzieję, że ten materiał jest dobrym punktem wyjścia. Pierwowzór pełen jest żargonu, skrótów myślowych i słownictwa charakterystycznego dla środowiska badawczego, mimo wszystko trzeba przyznać, że jest to fantastycznie napisana praca, która stała się fundamentem nowej ery w NLP.
Udostępnij ten wpis
Dobrnąłeś do końca. Jeśli ten artykuł był dla Ciebie wartościowy i chcesz otrzymywać informacje o kolejnych, to zapraszam Cię do zapisania się do listy mailingowej. Gwarantuję zero spamu.
Radek.
Źródła
- https://arxiv.org/pdf/1706.03762.pdf
- https://stats.stackexchange.com/questions/421935/what-exactly-are-keys-queries-and-values-in-attention-mechanisms
- https://nlp.seas.harvard.edu/2018/04/03/attention.html
- Zdjęcie na okładce
One thought on “Architektura Transformer NLP pod mikroskopem | Transformer Architecture Explained”
Comments are closed.