Wejście x jest rzutowane dwiema niezależnymi macierzami: W (bramka) i V (wartość). Wyjście bramki Swish₁(xW) jest mnożone element po elemencie przez xV, a rezultat jest rzutowany macierzą wyjściową W₂: FFN_SwiGLU(x) = (Swish₁(xW) ⊗ xV)·W₂, gdzie Swish₁(z) = z·σ(z) (β=1, czyli SiLU). Aby trzy macierze (W, V, W₂) nie zwiększały liczby parametrów względem klasycznego FFN z dwiema macierzami, wymiar ukryty d_ff jest redukowany o ok. 2/3 (np. w LLaMA do 2/3·4d). Warstwa zwykle nie używa wyrazów wolnych (bias).
Klasyczna warstwa FFN Transformera z aktywacją ReLU lub GELU pozostawia margines na poprawę jakości modelu bez zwiększania liczby parametrów. SwiGLU dostarcza bardziej ekspresyjnego, bramkowanego przekształcenia, które przy zachowaniu budżetu parametrów podnosi jakość reprezentacji i wyniki na benchmarkach.
Liniowa projekcja wejścia, której wyjście przechodzi przez funkcję Swish (β=1, SiLU) i pełni rolę bramki.
Druga liniowa projekcja wejścia, mnożona element po elemencie przez wyjście bramki.
Iloczyn Hadamarda wyjścia bramki Swish₁(xW) i projekcji wartości xV.
Liniowa projekcja rzutująca warstwę ukrytą z powrotem do wymiaru modelu.
Dodanie trzeciej macierzy (bramki) bez zmniejszenia d_ff o ok. 2/3 zwiększa liczbę parametrów FFN o ~50% względem klasycznego wariantu.
SwiGLU używa Swish z β=1 (SiLU); użycie innego β lub uczynienie go parametrem trenowalnym odbiega od definicji z pracy.
Współczynnik 2/3·4d może dać wymiar niewyrównany do wielokrotności wykorzystywanej przez tensor cores.
Dauphin i in. wprowadzają GLU w kontekście modelowania języka sieciami konwolucyjnymi z bramkowaniem sigmoidalnym.
Zaproponowanie funkcji Swish (z(σ(βz))), której wariant β=1 (SiLU) jest używany w bramce SwiGLU.
Noam Shazeer wprowadza SwiGLU jako wariant GLU w warstwie FFN Transformera i wykazuje poprawę jakości na T5/GLUE/SuperGLUE.
PaLM stosuje SwiGLU jako aktywację warstwy FFN w modelu o skali 540B parametrów.
LLaMA zastępuje ReLU funkcją SwiGLU i stosuje wymiar 2/3·4d, popularyzując SwiGLU w otwartych LLM.
Złożoność czasowa: O(n · d_model · d_ff). Złożoność przestrzenna: O(d_model · d_ff).
Wydajność zdominowana przez trzy gęste operacje GEMM (W, V, W₂); brak rzadkości i routingu.
Wymiar warstwy ukrytej FFN. Redukowany o ok. 2/3 względem klasycznego FFN, aby zrównoważyć trzecią macierz.
Parametr funkcji Swish; w SwiGLU ustawiany na 1 (Swish₁ = SiLU).
Czy projekcje używają wyrazów wolnych. W praktyce najczęściej wyłączone (PaLM, LLaMA).
Wszystkie parametry są aktywne dla każdego tokenu (brak warunkowego wykonania).
Warstwa jest w pełni równoległa po tokenach i w obrębie macierzy; brak zależności sekwencyjnych.
Trzy gęste mnożenia macierzowe idealnie mapują się na tensor cores GPU.
Gęste GEMM dobrze wykorzystują macierzowe jednostki TPU; oryginalne eksperymenty na T5 prowadzono na TPU.