Architektura transformera to projekt sieci neuronowej oparty na self-attention. Zamiast polegać głównie na przetwarzaniu krok po kroku, pozwala każdemu tokenowi zbierać informacje z innych istotnych tokenów w sekwencji.
Dlatego transformery dobrze sprawdzają się w języku i innych zadaniach sekwencyjnych. Jeśli jedno słowo zależy od innego, znajdującego się daleko, mechanizm uwagi daje modelowi bezpośrednią ścieżkę między nimi.
Co oznacza architektura transformera
Blok transformera robi więcej niż tylko stosuje jeden wzór, ale self-attention jest jego centralną ideą. W self-attention każdy token tworzy trzy wektory:
- zapytanie, które reprezentuje to, czego ten token szuka
- klucz, który reprezentuje to, co ten token oferuje do dopasowania
- wartość, czyli informację, którą można przekazać dalej
Jeśli reprezentacje tokenów są ułożone w macierzy , to jedna głowica uwagi zwykle tworzy
gdzie , i są wyuczonymi macierzami.
Standardowy wzór na scaled dot-product attention ma postać
Tutaj to wymiar klucza. Skalowanie przez pomaga zapobiec temu, by surowe wyniki iloczynu skalarnego stawały się zbyt duże wraz ze wzrostem wymiaru.
Softmax jest stosowany wiersz po wierszu. Każdy wiersz odpowiada na pytanie jednego tokenu: „Ile uwagi powinienem poświęcić pozostałym tokenom?”
Jak działa self-attention prostym językiem
Self-attention zwykle nie wybiera jednego tokenu i nie ignoruje reszty. Buduje ważoną średnią wektorów wartości.
Jeśli jeden token silnie pasuje do klucza innego tokenu, otrzymuje większą wagę. Jeśli dopasowanie jest słabe, waga jest mniejsza. Wynik dla jednego tokenu jest więc zależną od kontekstu mieszanką informacji z sekwencji.
To pomaga w zgodności podmiotu z orzeczeniem, odwołaniach zaimkowych i innych relacjach dalekiego zasięgu. Model nie potrzebuje, by informacja przechodziła przez wiele pośrednich kroków, zanim stanie się dostępna.
Przykład działania self-attention
Weźmy jedno zapytanie i dwa kandydackie tokeny w jednej głowicy uwagi. Aby uprościć obliczenia, przyjmijmy .
Załóżmy, że bieżący token ma zapytanie
a dwa kandydackie tokeny mają
oraz wartości
Surowe wyniki uwagi to iloczyny skalarne:
Ponieważ , współczynnik skalujący to , więc przeskalowane wyniki nadal wynoszą i .
Teraz zastosujmy softmax do tych dwóch wyników:
Wynik uwagi to ważona kombinacja
Kluczowa idea jest prosta: wynik znajduje się bliżej , ponieważ zapytanie pasowało do silniej niż do .
To podstawowy schemat działania wewnątrz znacznie większego modelu. Prawdziwe transformery robią to w wyższych wymiarach i dla wielu tokenów naraz, ale idea obliczeń pozostaje taka sama.
Co jeszcze znajduje się w bloku transformera
Transformer to coś więcej niż jeden wzór uwagi. Standardowy blok zwykle zawiera:
- multi-head attention, dzięki czemu model może jednocześnie uczyć się kilku rodzajów relacji
- sieć feedforward działającą pozycja po pozycji, która przekształca reprezentację każdego tokenu po etapie uwagi
- połączenia resztkowe, które pomagają zachowywać i udoskonalać informacje między warstwami
- layer normalization, która pomaga ustabilizować trening
W oryginalnej architekturze transformera do zadań sequence-to-sequence model miał stos encodera i stos decodera.
- Encoder używa self-attention na sekwencji wejściowej.
- Decoder używa masked self-attention, aby dana pozycja nie mogła patrzeć w przyszłe tokeny wyjściowe.
- Decoder może też używać cross-attention, gdzie zapytania pochodzą z decodera, a klucze i wartości z wyjścia encodera.
Wiele nowoczesnych modeli językowych używa tylko części decoderowej. Główna idea uwagi nadal pozostaje ta sama, ale cała architektura jest wyspecjalizowana do przewidywania następnego tokenu.
Dlaczego transformery potrzebują informacji o pozycji
Sama uwaga jest niezmiennicza na permutacje względem tokenów wejściowych. Mówiąc prościej, jeśli zastosujesz tylko uwagę do tego samego zbioru wektorów tokenów bez dodawania pozycji, model z natury nie wie, który token był pierwszy.
Dlatego transformery dodają informację o pozycji, na przykład wyuczone osadzenia pozycyjne albo kodowania pozycyjne. Bez tego dodatkowego sygnału poprawne modelowanie zadań wrażliwych na kolejność, takich jak język, byłoby znacznie trudniejsze.
Typowe błędy dotyczące architektury transformera
Myślenie, że uwaga to cały transformer
To centralna idea, ale architektura zależy też od warstw feedforward, ścieżek resztkowych, normalizacji i informacji o pozycji.
Mylenie self-attention z cross-attention
W self-attention , i pochodzą z tej samej sekwencji. W cross-attention nie pochodzą one wszystkie z tego samego źródła.
Zapominanie o roli maskowania
Modele językowe tylko z decoderem potrzebują maskowania przyczynowego podczas treningu i wnioskowania, aby token nie mógł zwracać uwagi na przyszłe tokeny.
Traktowanie wag uwagi jako pełnego wyjaśnienia
Wagi uwagi mogą być pomocne, ale nie są pełnym dowodem rozumowania modelu. Ostateczne zachowanie zależy też od wektorów wartości, późniejszych warstw i transformacji nieliniowych.
Kiedy używa się modeli transformerowych
Transformery są szeroko stosowane w modelowaniu języka, tłumaczeniu, streszczaniu, generowaniu kodu, mowie i wielu zadaniach wizyjnych. Sprawdzają się szczególnie dobrze wtedy, gdy relacje w sekwencji lub zbiorze są ważniejsze niż czysto lokalne wzorce.
Nie są jednak magicznym rozwiązaniem w każdej sytuacji. Przy bardzo małych zbiorach danych, ścisłych ograniczeniach czasu rzeczywistego albo problemach, w których najważniejsza jest lokalna struktura indukcyjna, inna architektura może nadal być lepszym wyborem.
Spróbuj podobnego zadania
Weź trzywyrazowe wyrażenie i skup się na jednym słowie. Zdecyduj, które z pozostałych słów powinny otrzymać wysoką wagę uwagi i dlaczego, a następnie naszkicuj mały przykład query-key-value zgodny z tą intuicją.
Jeśli chcesz pójść o krok dalej, oblicz ręcznie jeden mały wynik uwagi. To zwykle najszybsza droga od „znam wzór” do „rozumiem, co robi ta architektura”.
Potrzebujesz pomocy z zadaniem?
Prześlij pytanie i otrzymaj zweryfikowane rozwiązanie krok po kroku w kilka sekund.
Otwórz GPAI Solver →