Robocikowo>ROBOCIKOWO
Architektura

SWA

2020AktywnyOpublikowano: 9 czerwca 2026Aktualizacja: 9 czerwca 2026Opublikowany
Sliding Window Attention (SWA) to mechanizm uwagi, w którym każdy token attentuje wyłącznie na lokalne okno W sąsiadów. Wprowadzony w Longformer (Beltagy et al., 2020), spopularyzowany przez Mistral 7B (2023). Redukuje koszt attention z O(T²·d) do O(T·W·d), umożliwiając efektywne long-context bez kompromitowania jakości — dzięki temu, że receptive field modelu rośnie liniowo z głębokością.
Kluczowa innowacja
Zastępuje pełne self-attention O(T²) lokalnym oknem o stałej szerokości W: każdy token „widzi" tylko W poprzednich (lub W/2 z każdej strony) zamiast całej sekwencji. Receptive field rośnie liniowo z głębokością modelu (L warstw × W), co pozwala obsługiwać sekwencje znacznie dłuższe niż W przy koszcie O(T·W·d).
Kategoria
Architektura
Poziom abstrakcji
Building block
Poziom operacji
ModelElement architekturyTreningInferencja
Zastosowania
Mistral 7B / Mixtral 8×7B — SWA z W=4096 jako element kanoniczny architekturyLongformer — pierwszy duży encoder long-context (2020), SWA + global attention na wybrane tokenyGemma 2 / Gemma 3 — naprzemienne warstwy SWA i pełnego attention („sliding + full" hybrid)Mamba-like hybrydy gdzie SWA pełni rolę „okna lokalnego" obok globalnego mechanizmu SSMModele kodu i dialogu z bardzo długimi sesjami, gdzie wystarcza lokalna spójność

Jak działa

W standardowym self-attention macierz attention ma kształt [T, T] — każdy query i może wziąć dowolny key j w przedziale [0, T-1] (lub [0, i] w wariancie kauzalnym). W SWA każdy query i może wziąć keys tylko z okna [i-W+1, i] (kauzalnie) lub [i-W/2, i+W/2] (symetrycznie). Pozostałe pozycje są maskowane (logit = -∞ przed softmaxem), co zeruje ich udział. Efektywny receptive field rośnie liniowo z głębokością: po L warstwach każdy token „widzi" w przybliżeniu L · W tokenów wstecz — dla Mistral 7B (L=32, W=4096) to 131 072 tokenów efektywnego kontekstu mimo że pojedyncza warstwa patrzy na 4096. Implementacyjnie SWA jest fuzowane z FlashAttention — nigdy nie materializuje pełnej macierzy [T,T], tylko macierze [T, W]. W KV cache trzymane są jedynie ostatnie W tokenów dla każdej warstwy (Mistral) lub ostatnie min(T, W) (Longformer dla bidirectional). To redukuje pamięć KV cache liniowo z T do liniowo z min(T, W).

Rozwiązany problem

Standardowe self-attention skaluje się kwadratowo z długością sekwencji T: koszt obliczeniowy O(T²·d), pamięć aktywacji O(T²). Dla T = 32k–128k wymagań pamięciowych i obliczeniowych nie da się zrealizować na pojedynczym GPU. Jednocześnie większość tokenów w typowych długich tekstach silnie zależy od kilkuset sąsiadów, a nie od wszystkich pozostałych. SWA wykorzystuje tę obserwację: zamiast modelować attention między wszystkimi parami, ogranicza je do lokalnego okna i pozwala informacjom propagować się dalej przez głębokość modelu.

Komponenty

Sliding window maskBramka geometryczna ograniczająca attention do lokalnego okna

Deterministyczna maska binarna definiująca, które pary (query, key) są dozwolone. Stosowana przed softmaxem (logit poza oknem = -∞).

INMacierz dozwolonych par tokenów. W kauzalnej wersji LLM: trójkątna dolna ograniczona do W kolumn wstecz.
OUTKażdy query otrzymuje tylko W keys z lewej (lub W/2 z każdej strony w symetrycznym).
Causal SWA (LLM)Okno [i-W+1, i] — autoregresywne modele typu Mistral, Mixtral, Gemma.
Symmetric SWA (encoder)Okno [i-W/2, i+W/2] — encodery long-document typu Longformer, BigBird.
Dilated SWAOkno z odstępami — większy receptive field przy tym samym W. Stosowane sporadycznie.

Oficjalna

Rolling KV cacheWymuszenie efektywnej oszczędności pamięci SWA w produkcyjnej inferencji

Bufor KV utrzymujący tylko ostatnie W tokenów per warstwa. Nowe tokeny nadpisują najstarsze zgodnie z polityką rotacji (FIFO). Kluczowy dla utrzymania pamięci O(W) zamiast O(T).

Oficjalna

Optional: global tokens (Longformer-style)Globalna „bramka" dla zadań wymagających szerszego kontekstu

Wybrane tokeny ([CLS], tokeny pytania w QA, tokeny tematu) mogą mieć attention na całą sekwencję i być widoczne dla wszystkich innych. Wzbogaca globalną spójność kosztem O(g·T) na te tokeny.

Oficjalna

Implementacja

Pułapki implementacyjne
Materializowanie pełnej macierzy attention przed maskowaniemWysoka

Naiwna implementacja SWA buduje pełną macierz [T, T] i zeruje pozycje poza oknem. Niweluje całą oszczędność pamięciową — wciąż O(T²). To częsty błąd w prostych implementacjach.

Rozwiązanie:Używać fuzowanych kerneli (FlashAttention z `window_size=(W,0)`), które natywnie operują na blokach [T, W].
Niewłaściwy rozmiar KV cache w long-contextWysoka

W SWA wystarczy trzymać KV tylko dla ostatnich W tokenów na warstwę — nie dla całej historii. Trzymanie pełnego KV niweluje główną korzyść pamięciową SWA (np. dla Mistral 7B przy T=32k vs W=4096 to różnica ~8×).

Rozwiązanie:W KV cache trzymać tylko ostatnie W tokenów per warstwa (Mistral „rolling KV cache" pattern, vLLM PagedAttention z rotacją).
Założenie L·W jako twardego efektywnego kontekstuŚrednia

Receptive field L·W jest GÓRNYM ograniczeniem teoretycznym, nie gwarancją. Praktyczna zdolność do precyzyjnego pobierania faktu z odległej pozycji (NIAH) jest zwykle istotnie gorsza niż w modelu z full attention o porównywalnej długości kontekstu.

Rozwiązanie:Dla zadań long-context retrieval (precise lookup, NIAH) preferować hybrydę SWA + full (Gemma 2/3) lub modele z pełnym attention + ekstensją RoPE (YaRN/LongRoPE).
Brak global tokens w klasyfikacji long-documentŚrednia

W encoderach long-document (Longformer dla QA, klasyfikacji) bez global attention na kluczowe tokeny ([CLS], tokeny pytania) jakość spada — lokalne okno nie wystarczy, by zebrać globalną reprezentację.

Rozwiązanie:Włączyć global attention na kanonicznych tokenach zadania (Longformer attention_mask z global=True).

Ewolucja

Oryginalny paper · 2020 · arXiv:2004.05150 (Allen Institute for AI) · Iz Beltagy
Longformer: The Long-Document Transformer
Iz Beltagy, Matthew E. Peters, Arman Cohan
2019
Sparse Transformer (Child et al., OpenAI)

OpenAI publikuje Sparse Transformer — pierwszą szeroko cytowaną pracę o sparsyfikacji attention przez deterministyczne maski (lokalne + strided). Bezpośredni prekursor SWA.

2020
Longformer — formalizacja SWA + global tokens
Punkt przełomowy

Beltagy, Peters, Cohan (AI2) publikują Longformer. Wprowadzają pełną formalizację SWA dla encoderów long-document oraz wariant „SWA + global attention" na wybrane tokeny. Pierwszy long-context encoder o jakości porównywalnej z BERT-em na krótkich zadaniach.

2020
BigBird (Zaheer et al., Google)

Google publikuje BigBird — sparse attention łączące okno lokalne (SWA), random attention i global tokens. Pokazuje teoretycznie, że taka kombinacja zachowuje pełną ekspresywność standardowego Transformera.

2023
Mistral 7B — SWA w autoregresywnym LLM
Punkt przełomowy

Mistral AI wypuszcza Mistral 7B z kauzalnym SWA o W=4096 we wszystkich warstwach. Pierwszy szeroko adoptowany open-source LLM oparty wyłącznie o SWA. Pokazuje, że receptive field L·W (32 × 4096 = 131k) wystarcza dla wysokiej jakości long-context.

2023
FlashAttention with sliding window

FlashAttention v2 / v3 natywnie wspierają sliding window — fuzowane kernele SWA, które nigdy nie materializują pełnej macierzy [T, T]. Praktyczny standard implementacji.

2024
Gemma 2 / Gemma 3 — hybryda SWA + full

Google DeepMind wprowadza w Gemma 2/3 architekturę naprzemienną: część warstw to SWA, część pełne attention. Argumentacja: SWA zapewnia tanio lokalną spójność, full attention raz na kilka warstw odzyskuje globalne zależności.

Hiperparametry (konfigurowalne osie)

Window size (W)Krytyczna

Liczba tokenów widocznych dla każdego query. Najważniejszy parametr SWA — kompromis między efektywnym kontekstem (L·W) a kosztem (O(T·W·d)).

512Longformer base — encoder long-document
4096Mistral 7B / Mixtral — kanon
2048Gemma 2 (warstwy sliding obok full)
8192Bardzo duże okna w modelach kodu
Causal vs symmetric windowWysoka

W modelach autoregresywnych (LLM) okno jest kauzalne ([i-W+1, i]). W encoderach (Longformer, BERT-like) okno jest symetryczne ([i-W/2, i+W/2]).

Interleaving with full attentionWysoka

Czy wszystkie warstwy są SWA (Mistral), czy SWA jest przeplatane z warstwami pełnego attention (Gemma 2/3). Wariant przeplatany odzyskuje część globalnej spójności kosztem dodatkowej pamięci/computa.

all SWAMistral 7B
1:1 alternatingGemma 2 — co druga warstwa pełna
5:1 (SWA:full)Gemma 3 — większa proporcja sliding
Global attention tokens (Longformer)Średnia

Wybrane tokeny (np. [CLS], pytanie w QA) mogą mieć attention na całą sekwencję i być widoczne dla wszystkich pozostałych — wariant Longformer „SWA + global". Wzbogaca globalną spójność.

Dilated windowNiska

Wariant „dilated SWA" — okno z odstępami (jak dilated convolution). Pozwala zwiększyć receptive field bez powiększania W. Stosowany sporadycznie, głównie w encoderach.

Złożoność obliczeniowa

Złożoność czasowa: O(T · W · d) per warstwa (zamiast O(T² · d) w full attention). Złożoność przestrzenna: O(W · d) per warstwa (KV cache) + O(T · W · d) aktywacji w fuzowanej impl..

Wąskie gardło obliczeniowe

Receptive field per warstwa (L·W)

Główne ograniczenie SWA to liniowy wzrost receptive field z głębokością. Aby model „widział" T tokenów, potrzebuje co najmniej ceil(T/W) warstw. Dla bardzo długich kontekstów (T = 1M+) sama głębokość modelu zaczyna być limitem — stąd wariant hybrydowy z full attention.

Zależy od
depth Lwindow size W

Paradygmat wykonania

Tryb główny
Rzadki

SWA to sparse attention z deterministyczną, geometryczną sparsity (nie strukturalną uczoną jak Mixture-of-Experts). Wewnątrz okna attention jest gęste, poza oknem zero. Tryb „dense" jako secondary, bo wiele modeli (Gemma 2/3, Mistral) miesza warstwy SWA z warstwami pełnego attention.

Wzorzec aktywacji
Podzbiór aktywny
Tryby dodatkowe
Gęsty
Mechanizm routingu

Brak routingu uczonego — sparsyfikacja jest statyczna (geometryczna maska okna).

Równoległość

Poziom równoległości
W pełni równoległy

SWA modyfikuje wyłącznie maskę attention — pozostaje w pełni równoległa w obrębie warstwy. Implementacje fuzowane (FlashAttention with sliding window) korzystają z bloków [T, W] zamiast [T, T], co dodatkowo poprawia wykorzystanie pamięci podręcznej GPU.

Zakres
TreningInferencjaPomiędzy tokenamiPomiędzy warstwami

Wymagania sprzętowe

Podstawowe

SWA jest projektowane pod fuzowane kernele GPU (FlashAttention z `window_size`). Lokalne bloki [T, W] doskonale mieszczą się w SRAM tensor cores, dając znaczne przyspieszenie względem dense attention.

Dobry fit

Sama idea (deterministyczna maska okna) działa na każdym hardware obsługującym standardowe attention. Realna korzyść pamięciowa zależy jednak od fuzowanego kernela.

Możliwe

llama.cpp implementuje SWA na CPU AVX — działa, choć skala wykorzystania w produkcji jest dużo mniejsza niż na GPU.