Trefon.
← Wszystkie notatki 8 min

Transformery encoder-decoder: cross-attention, T5, Whisper i kiedy wciąż wygrywają

Część 3 serii o architekturach. Pierwotny układ transformera: enkoder, który czyta wejście w obu kierunkach, dekoder, który pisze, sięgając do niego przez cross-attention, span corruption w T5, dokąd trafiają dodatkowe parametry i dlaczego ta konstrukcja wciąż wygrywa w przetwarzaniu mowy, tłumaczeniu i innych zadaniach, w których wejście jest wielokrotnie dłuższe od wyjścia.

Jacek Trefon
  • deep dive
  • transformer
  • architektura
  • T5
  • Whisper

Transformer z pracy Attention Is All You Need (Vaswani i in., 2017) nie był modelem decoder-only. Składał się z enkodera i dekodera, które łączyła cross-attention (atencja krzyżowa), i powstał z myślą o tłumaczeniu. W wyścigu o LLM ogólnego przeznaczenia układ encoder-decoder (koder–dekoder) przegrał, ale wciąż jest właściwym narzędziem do pewnej klasy zadań, a model mowy, którego pewnie używasz na co dzień, jest zbudowany właśnie tak. To część 3 serii o architekturach, po decoder-only i encoder-only.

Dwa stosy i most

  • Enkoder czyta całe wejście z dwukierunkową atencją, jak BERT, i tworzy jedną reprezentację na każdą pozycję wejścia.
  • Dekoder generuje wyjście od lewej do prawej, z przyczynową self-attention po tym, co do tej pory napisał.
  • Cross-attention łączy oba stosy. W każdym bloku dekodera zapytania pochodzą z dekodera, a klucze i wartości z wyjścia enkodera. Każdy generowany token może spojrzeć na dowolną część wejścia.
blok dekodera:
  x = x + CausalSelfAttention(Norm(x))
  x = x + CrossAttention(Norm(x), encoder_output)     most
  x = x + MLP(Norm(x))

Dokąd trafiają parametry

Cross-attention dodaje do każdego bloku dekodera kolejny zestaw czterech projekcji, więc blok dekodera to około 16·d² wobec 12·d² w bloku enkodera. T5-base (Raffel i in., 2020) ma 12 bloków enkodera i 12 bloków dekodera przy d = 768:

enkoder     12 × 12 × 768²  =  84,9M
dekoder     12 × 16 × 768²  = 113,2M
embeddingi  32 128 × 768    =  24,7M
razem                       ≈ 222,9M    (opublikowane: ~220M)

Trening: span corruption

T5 jest trenowany metodą span corruption (psucie fragmentów). Około 15% tokenów wejścia jest usuwanych w ciągłych fragmentach o średniej długości 3, a każdy fragment zastępuje się tokenem wartowniczym (sentinel). Zadaniem dekodera jest wypisanie brakujących fragmentów, każdego po jego tokenie wartowniczym. To odszumianie: enkoder widzi uszkodzone wejście, a dekoder odtwarza tylko to, czego brakuje, dzięki czemu sekwencje docelowe są krótkie. BART (Lewis i in., 2020) używa pokrewnej rodziny schematów zaszumiania i odtwarza cały oryginalny tekst.

Przewaga przy serwowaniu: jeden odczyt wejścia

Przy inferencji enkoder przechodzi przez wejście dokładnie raz. Jego wyjścia, a więc także klucze i wartości cross-attention, są stałe przez całe generowanie i można je trzymać w cache. Dekoder powiększa potem już tylko własny, dużo krótszy cache self-attention.

To realna oszczędność, gdy wejście jest długie, a wyjście krótkie:

  • Rozpoznawanie mowy. Whisper (Radford i in., 2022) koduje raz 30 sekund dźwięku, a potem dekoduje na tej podstawie kilkadziesiąt tokenów tekstu.
  • Tłumaczenie. NLLB, MarianMT i duża część produkcyjnego tłumaczenia maszynowego to modele encoder-decoder.
  • Streszczanie i ekstrakcja przy długim wejściu i krótkim wyjściu.

Enkoder czyta też wejście dwukierunkowo, czego model decoder-only nigdy nie robi ze swoim promptem.

Dlaczego mimo to wygrał decoder-only

W modelach ogólnego przeznaczenia zalety konstrukcji decoder-only się zsumowały:

  • jeden stos zamiast dwóch i jeden cel treningowy, przewidywanie następnego tokenu, który wykorzystuje każdy token surowego tekstu;
  • brak sztywnego podziału na „wejście” i „wyjście”, więc czat, narzędzia i kontekst wieloturowy to po prostu dalszy ciąg sekwencji;
  • stos serwujący (cache prefiksu, dekodowanie spekulatywne, continuous batching) zbudowany wokół jednego cache.

Przy wystarczającej skali przewaga dwukierunkowego enkodera przestała pokrywać koszt dodatkowej złożoności. W dziedzinach z wyraźną asymetrią między wejściem a wyjściem nigdy nie przestała go pokrywać.

Zasady, których się trzymam

  1. Długie wejście, krótkie wyjście, jasno określone zadanie: rozważ model encoder-decoder. Mowa i tłumaczenie to podręcznikowe przykłady.
  2. Otwarte, wieloturowe zadania z użyciem narzędzi: decoder-only, choćby ze względu na sam stos serwujący.
  3. Wliczaj cross-attention, gdy porównujesz rozmiary. Blok dekodera w modelu encoder-decoder jest o jedną trzecią cięższy niż blok enkodera.

Źródła: Vaswani i in., Attention Is All You Need (2017). Raffel i in., Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer (T5, 2020). Lewis i in., BART (2020). Radford i in., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper, 2022). Liczby parametrów są wyliczone z konfiguracji T5-base.

Masz podobny problem?

Opisz swój problem

30-minutowa rozmowa techniczna z inżynierem, który to buduje. Bez działu sprzedaży, bez slajdów.