Do czasu pojawienia się architektury Transformer w 2017 roku, dominującym rozwiązaniem w świecie NLP były sieci rekurencyjne. Można było również spotkać mniej rozpowszechnione modele oparte na sieciach konwolucyjnych, które nawet przebijały osiągnięcia RNN. Natomiast w 2021 roku, niepodważalnie state-of-the-art to Transformery, a RNN i CNN odeszły do lamusa. [1] Na dodatek Transformer rozpoczął rozkwit ery pre-trenowanych modeli, tak jak to miało miejsce o wiele wcześniej w obszarze rozpoznawania obrazów.
Ten wpis ma na celu przedstawić jak doszło ewolucji z RNN do Transformer oraz pokazać zasadę działania nowego modelu. Jest to jednocześnie skondensowana piguła wiedzy dla osób zaznajomionych z RNN i chcących nadrobić wydarzenia w dziedzinie NLP.
- Wady sekwencyjnego charakteru RNN
- Alternatywa w postaci modeli konwolucyjnych (CNN)
- Narodziny mechanizmu uwagi podczas udoskonalania RNN, czyli silnika Transformera
- „Wszystko czego potrzebujesz to uwaga”
- Transformer – uogólniona zasada działania
- Transformer to tylko architektura
- Era pretrenowanych modeli
- Coda
- Źródła
Wady sekwencyjnego charakteru RNN
Wydaje się być naturalne, aby do sekwencyjnych danych takich jak tekst wykorzystać sekwencyjne rozwiązanie np. rekurencyjne sieci neuronowe. Rodzi to w tym wypadku istotne problemy.
Po pierwsze, znaczenie słowa wynika z jego kontekstu, tego, co jest przed i/lub po nim. Weźmy na przykład: Poproszę piłkę do metalu. Znaczenie słowa piłka w tym zdaniu zostaje odkryte dopiero po dotarciu do słowa metalu. Sieci rekurencyjne natomiast tworzą wektor reprezentujący zdanie od lewej do prawej, krok po kroku, za każdym razem dodając jedno słowo. Oczywiście, istnieją sieci dwukierunkowe, które wspomagają tworzenie wektora reprezentacji zdania czy całego słowa. Lecz to nie znaczy, że znaczenie danego słowa wynika z jego otoczenia, czyli słów przed i po nim. Tworzone są dwie odrębne reprezentacje. Osobno powstaje reprezentacja, czytając od lewej do prawej i osobno czytając od prawej do lewej. Co więcej, sieci dwukierunkowe istotnie zwiększają złożoność obliczeniową modelu.
Próby adresowania tej trudności spłodziły takie rozwiązania jak GRU (gated recurrent units), LSTM (long short term memory) czy sieci dwukierunkowe (bi-directional), o których właśnie była mowa. Za każdym razem kiedy na arenie NLP pojawiało się któreś z wymienionych usprawnień, okazywało się kamieniem milowym w dziedzinie.
W teorii nie ma różnicy między teorią a praktyką, jednak w praktyce, jest. Nie inaczej było w tym przypadku. W teorii sieć LSTM tworzy nowy kontekst dla każdego kolejnego słowa i ostatni blok otrzymuje informację z początku sekwencji, w praktyce jednak w związku z zanikającymi gradientami, zdolność ta jest tym słabsza, im dłuższy jest tekst. Innymi słowy, im głębsza sieć, tym trudniej ją nauczyć [2]. Dla RNN głębokość sieci to liczba słów, które może maksymalnie na raz skonsumować. Przekłada się to na długość sekwencji, którą naraz można przetłumaczyć czy ocenić sentyment jako całości.
Naturalne okazało się również łączenie tych rozwiązań np.: LSTM z dwukierunkowością. Ciągle jednak było to leczenie skutków, a nie przyczyny, model dalej był sekwencyjny.
Aby tego było mało, sekwencyjność modelu sprawia, że jest on wykluczony z obliczeń równoległych. Chcąc wyliczyć ukryty stan dla 4 słowa w kolejności, trzeba wyliczyć wszystkie poprzednie.
Alternatywa w postaci modeli konwolucyjnych (CNN)
Problem reprezentacji słów względem ich kontekstu został zaadresowany przez użycie sieci konwolucyjnych i to całkiem skutecznie, ponieważ w kryterium ewaluacyjnym jakość tłumaczeń BLEU, CNN odnosiły lepsze rezultaty.
Ten sukces został poniesiony kosztem większej złożoności obliczeniowej. To główna wada sieci konwolucyjnych, fatalne skalowanie względem długości sekwencji, co jak już zostało powiedziane, jest istotnym czynnikiem użyteczności modelu. Złożoność rośnie przynajmniej liniowo wraz z długością danych wejściowych [3]
layerComplexity = O(k * n * d^2)
- k – rozmair filtru (kernel size)
- n – długość sekwencji (w przybliżeniu to ilość słów)
- d – rozmiar wektora reprezentującego słowo (embedding size)
Na korzyść modeli NLP opartych o CNN oczywiście wpływa możliwość zrównoleglenia obliczeń żeby wyliczyć reprezentacje na całej warstwie.
Narodziny mechanizmu uwagi podczas udoskonalania RNN, czyli silnika Transformera
Jak się okaże w dalszej części artykułu, mechanizm uwagi jest głównym komponentem architektury Transformer, powstał on natomiast przy okazji udoskonalania RNN które miały za zadanie tłumaczyć tekst. Przyjrzyjmy się, jak do tego doszło.
Tłumaczenie języka przy użyciu RNN
Modele, których zadaniem jest tłumaczenie, powszechnie wykorzystują architekturę enkoder-dekoder.
Dla naszego przykładu enkoder jak i dekoder to RNN. Enkoder posiada jedno wyjście, które zasila pierwszy blok dekodera.
Zadaniem enkodera jest stworzenie reprezentacji na podstawie danych wejściowych np. zdania po polsku. Robi to krok po kroku, za każdym razem uwzględniając kolejne słowo. Dekoder natomiast ma na celu stworzyć zdanie w innym języku na podstawie reprezentacji, którą otrzymał od enkodera. Generowanie słów również odbywa krok po kroku, za każdym razem dodając kolejne słowo.
To klasyczny obraz, wyjście enkodera jest wejściem dekodera.
Podejście to boryka się oczywiście z wyżej opisanym problemem tworzenia reprezentacji, które zawierają informacje o całym zdaniu. To na barkach enkodera leży stworzenie wektora o ustalonej z góry długości, oddającego znaczenie całego zdania uwzględniając wszystkie niuanse językowe, to trudne zadanie.
Zasilanie każdego bloku dekodera, enkoderem
Kolejną formą ulepszenia RNN było oryginalne podejście z 2015, które zakłada, aby przekazywać wszystkie ukryte stany enkodera do każdego bloku dekodera.
Twórca D. Bahdanau nazwał swój wynalazek mechanizmem uwagi. Mechanizm uwagi w kontekście sieci neuronowych to technika imitująca uwagę poznawczą. Model sam może wybrać które informacje są potrzebne w danej sytuacji. Fragment pracy badawczej w wolnym tłumaczeniu: “Intuicyjnie, implementuje to mechanizm uwagi w dekoderze. Dekoder decyduje o częściach zdania źródłowego (wyjście enkodera), na które należy zwrócić uwagę” [4].
Teraz to może wydawać się oczywiste, żeby przekazać nawet za dużo informacji, a model sam nauczy się rozpoznawać jej istotne fragmenty. Czy maksyma spekulantów i inwestorów “analiza wsteczna zawsze skuteczna” dobrze tutaj pasuje?
W krótkim czasie powstało również kilka wariantów mechanizmu uwagi. [5]. Środowisko zaadoptowało nowe rozwiązanie co można było zaobserwować w implementacjach popularnych bibliotek do deep learningu. Przykłady w Keras i PyTorch.
„Wszystko czego potrzebujesz to uwaga”
Mechanizm uwagi z 2015 roku stał się podwaliną pod przełomową pracę w dziedzinie procesowania języka naturalnego, o wymownej nazwie w “Attention is all you need” z 2017 roku. Jak zatem można zauważyć, mechanizm uwagi ewoluował z roli suplementu RNN do pełnoprawnej architektury jednocześnie detronizując RNN z tytułu „state-of-the-art„.
Autorzy jako pierwsi zaproponowali model NLP, który nie wykorzystuje ani sieci rekurencyjnych, ani sieci konwolucyjnych, a w pełni bazuje na mechanizmie. Swoje dziecko nazwali Transformer.
Sam fakt pojawienia się nowej architektury nie jest spektakularny, jednak w połączeniu z wynikami już tak. W momencie pojawienia się na scenie NLP, Transformer od razu lepiej radził sobie z tłumaczeniami (według rankingu BLEU) niż przez lata doskonalone rozwiązania RNN, jednocześnie wymagając 50 razy mniejszych zasobów obliczeniowych na trenowanie. [3]
Transformer – uogólniona zasada działania
Porównajmy proces tłumaczenia tekstu przy użyciu Transformer. Najpierw zobacz animację (kilkukrotnie jeśli potrzebujesz, ponieważ dużo się dzieje), a następnie zapoznaj się z komentarzem zamieszczonym niżej.
Enkodowanie. Zdanie po angielsku → Reprezentacja
1 Proces rozpoczyna się od stworzenia początkowych reprezentacji, tak zwanych “embeddings” dla każdego słowa, reprezentowane przez niewypełnione okręgi. Ten etap jest identyczny w RNN więc mało istotny z perspektywy porównania.
2 Następnie zaczyna się enkodowanie, które polega na stworzeniu nowych reprezentacji dla każdego słowa na podstawie wszystkich pozostałych słów, reprezentowane przez wypełnione okręgi. Proces ten jest powtarzany wiele razy, przedstawiony przez kolejne wiersze. Reprezentacje wszystkich słów dla danej warstwy są wyliczane równolegle. Ta cecha sprawia, że model nie posiada wąskiego gardła obliczeniowego jak to ma miejsce w RNN
Dekodowanie. Reprezentacja → zdanie po francusku
3 Kiedy enkoder już wykonał swoją pracę, dekoder generuje słowo po słowie, od lewej do prawej wykorzystując za każdym razem całą reprezentację enkodera. Ten etap jest sekwencyjny i zasadniczo na tym stopniu abstrakcji nie różni się od RNN.
Chciałbym podkreślić, że powyższy przykład to wielkie uogólnienie. W środku Transformera zostało zastosowanych kilka nowatorskich rozwiązań jak przekazywanie informacji o pozycji słów przez funkcje trygonometryczne czy modułowość i granulacja mechanizmu uwagi.
Transformer to tylko architektura
Dziś Transformer stanowi nazwę dla całej grupę modeli, głównie w obszarze NLP, które adoptują mechanizm samo-uwagi. Tak, Transformer znajduje swoje zastosowanie również w innych obszarach, ponieważ to tylko architektura.
Przykładami tej architektury są implementacje, które odbiły się głośnym echem nawet w okołotechnicznych serwisach. To na przykład OpenAI-GPT w swoich trzech odsłonach oraz przedstawiciele ulicy sezamkowej: BERT i ELMO, a naszym polskim podwórku Grupa Allegro wytrenowała model herBERT, oczywiście na polskim korpusie.
Różnice polegają na sposobie trenowania i zmianach w architekturze, a częścią wspólną jest mechanizm uwagi.
Dziesiątki, jak nie setki wytrenowanych modeli jest dostępnych w open source. Występują w wielu językach i trenowane są na różnorodnych korpusach. Jakie zadanie jednak realizują? Tłumaczenia? Analiza sentymentu? Odpowiedź to: zwykle żadne.
Era pretrenowanych modeli
Procesowanie języka naturalnego jest zróżnicowaną dziedziną z wieloma odrębnymi zadaniami. W praktyce większość zestawów danych specyficznych dla danego zadania zawiera tylko kilka tysięcy lub kilkaset tysięcy przykładów oznaczonych przez człowieka, nie raz to za mało, aby nauczyć model złożonych form językowych.
Okazuje się jednak, że osiągniemy lepsze rezultaty kiedy użyjemy pre-trenowanego modelu, trenowanego najpierw na zadaniu ogólnym, a następnie dotrenujemy go do naszych potrzeb, zamiast trenować od zera nowy model tylko na danych, które posiadamy dla tego konkretnego zadania.
Wspomniane ogólne zadanie nie wymaga danych etykietowanych. Polega ono zwykle na uzupełnianiu tekstu. W uproszczeniu:
- Oryginalne zdanie: „Przeszedłem na drugą stronę ulicy”.
- Dane wejściowe: „Przeszedłem na drugą [mask] ulicy”.
- Zadaniem modelu jest przewidywanie jakie słowo kryje się pod tokenem [mask]
Sposób maskowania słów decyduje o przyszłych zdolnościach modelu, jednak ten temat zasługuje na osobny artykuł.
W tym podejściu nie narzekamy na brak danych. Modele mogą być trenowano na ogólno dostępnych wielkich zbiorach, takich jak cała Wikipedia czy common crawl. Tak wytrenowany model ma ogólne zdolności rozumienia tekstu i to właśnie tę wiedzę wykorzystuje się w celu dotrenowania do konkretnych zadań, jak na przykład ocena syntymentu.
Coda
Historia powstania Transformer pokazuje kolejny raz, że do przełomowych odkryć dochodzi się na drodze ewolucji i rozwiązywania bieżących problemów. Mechanizm uwagi powstał przy okazji rozwoju sieci RNN a finalnie stał się silnikiem całkiem nowego rozwiązania, które posiada obecnie swój cały ekosystem i jest osobną klasą modeli.
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
- HuggingFace’s Transformers: State-of-the-art Natural Language Processing https://arxiv.org/abs/1910.03771
- On the difficulty of training Recurrent Neural Networks, 2013 – https://arxiv.org/abs/1211.5063
- Attention Is All You Need, 2017 – https://arxiv.org/abs/1706.03762
- Neural Machine Translation by Jointly Learning to Align and Translate https://arxiv.org/abs/1409.0473
- Effective Approaches to Attention-based Neural Machine Translation https://arxiv.org/pdf/1508.04025.pdf
- https://github.com/spro/practical-pytorch/blob/master/seq2seq-translation/seq2seq-translation.ipynb
- Google AI blog: Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing. https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html
- Google AI blog: Transformer: A Novel Neural Network Architecture for Language Understanding.https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html
- Lilian Weng: Attention? Attention! https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html