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 XX, to jedna głowica uwagi zwykle tworzy

Q=XWQ,K=XWK,V=XWVQ = XW_Q, \qquad K = XW_K, \qquad V = XW_V

gdzie WQW_Q, WKW_K i WVW_V są wyuczonymi macierzami.

Standardowy wzór na scaled dot-product attention ma postać

Attention(Q,K,V)=softmax ⁣(QKTdk)V\operatorname{Attention}(Q, K, V) = \operatorname{softmax}\!\left(\frac{QK^T}{\sqrt{d_k}}\right)V

Tutaj dkd_k to wymiar klucza. Skalowanie przez dk\sqrt{d_k} 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 dk=1d_k = 1.

Załóżmy, że bieżący token ma zapytanie

q=[2]q = [2]

a dwa kandydackie tokeny mają

k1=[2],k2=[1]k_1 = [2], \qquad k_2 = [1]

oraz wartości

v1=[10],v2=[4].v_1 = [10], \qquad v_2 = [4].

Surowe wyniki uwagi to iloczyny skalarne:

qk1T=4,qk2T=2.qk_1^T = 4, \qquad qk_2^T = 2.

Ponieważ dk=1d_k = 1, współczynnik skalujący to 1=1\sqrt{1} = 1, więc przeskalowane wyniki nadal wynoszą 44 i 22.

Teraz zastosujmy softmax do tych dwóch wyników:

α1=e4e4+e20.881,α2=e2e4+e20.119.\alpha_1 = \frac{e^4}{e^4 + e^2} \approx 0.881, \qquad \alpha_2 = \frac{e^2}{e^4 + e^2} \approx 0.119.

Wynik uwagi to ważona kombinacja

α1v1+α2v2=0.881(10)+0.119(4)9.29.\alpha_1 v_1 + \alpha_2 v_2 = 0.881(10) + 0.119(4) \approx 9.29.

Kluczowa idea jest prosta: wynik znajduje się bliżej v1v_1, ponieważ zapytanie pasowało do k1k_1 silniej niż do k2k_2.

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 QQ, KK i VV 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 →