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.
- 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
- 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.
- Otwarte, wieloturowe zadania z użyciem narzędzi: decoder-only, choćby ze względu na sam stos serwujący.
- 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.