SwiGLU
SwiGLU multipliziert eine SiLU-aktivierte Projektion mit einer zweiten linearen Projektion. Diese Schicht mit Gating befindet sich in den Feed-forward-Netzwerken von Llama, PaLM und Qwen. Enthält Code.
SwiGLU (Swish-gated linear unit) ist eine durch ein Gate gesteuerte Variante der Feedforward-Schicht in Transformer-Modellen. Sie projiziert den Vektor jedes Tokens zweimal, wendet die SiLU (Swish) genannte Aktivierungsfunktion auf eine Projektion an, multipliziert die beiden Projektionen elementweise und projiziert das Produkt zurück auf die Modellbreite: FFN(x) = (SiLU(xW) ⊙ xV)W₂. Noam Shazeer führte SwiGLU 2020 in der Arbeit GLU Variants Improve Transformer ein; seitdem ist SwiGLU der Feedforward-Block großer Sprachmodelle (LLMs) wie PaLM, Llama, Mistral und Qwen. Anders als ReLU oder GELU, die jede Zahl unabhängig verarbeiten, enthält SwiGLU gelernte Gewichte, wodurch SwiGLU selbst eine kleine Schicht bildet.
So funktioniert SwiGLU#
Ein standardmäßiges Feedforward-Netz (FFN) in einem Transformer erweitert jeden Tokenvektor mit einer Gewichtungsmatrix, wendet eine Aktivierungsfunktion an und verkleinert ihn mit einer zweiten Matrix wieder. SwiGLU ersetzt die erste Matrix und die Aktivierungsfunktion durch eine gegatete lineare Einheit (GLU) mit zwei parallelen Projektionen derselben Eingabe:
- Gate-Projektion: xW durchläuft SiLU, x · σ(x). Für stark negative Eingaben entstehen Werte nahe null, für positive Eingaben Werte nahe der Eingabe.
- Wertprojektion: xV bleibt linear und transportiert den Inhalt.
- Elementweise Multiplikation: Durch die Multiplikation können die Werte des Gates jedes verborgene Merkmal abhängig von der Eingabe verstärken, abschwächen oder nahezu auf null setzen. Die Ausgabeprojektion W₂ bildet das Ergebnis zurück auf die Modellbreite ab.
Die Idee des Gates stammt aus der GLU von Dauphin und Kollegen, die 2016 in gegateten Faltungs-Sprachmodellen ein Sigmoid-Gate verwendeten. Shazeers Arbeit testete dieselbe Struktur mit unterschiedlichen Gate-Funktionen und benannte jede Variante nach ihrer Aktivierung: GLU verwendet Sigmoid, ReGLU ReLU, GEGLU GELU, SwiGLU Swish und eine bilineare Schicht gar keine Aktivierungsfunktion. In Anlehnung an die T5-Codebasis lassen diese Schichten die Bias-Terme weg.
Warum SwiGLU ReLU und GELU in LLMs ablöste#
Gegatete Feedforward-Schichten haben drei statt zwei Gewichtungsmatrizen. Deshalb verringerte Shazeer die verborgene Breite um den Faktor 2/3, damit Parameterzahl und Rechenaufwand gleich blieben: bei einem T5-base-Modell von 3.072 auf 2.048 Einheiten. Bei gleicher Modellgröße erreichte SwiGLU nach 524.288 Trainingsschritten eine zurückgehaltene Log-Perplexität von 1,636, gegenüber 1,677 für ReLU und 1,679 für GELU. Auch bei den Benchmarks zum Sprachverständnis GLUE und SuperGLUE erzielte SwiGLU höhere Durchschnittswerte. Die Arbeit bietet keine theoretische Erklärung für diesen Leistungsgewinn; ihr Fazit schreibt den Erfolg dieser Architekturen „wie alles andere auch göttlicher Gnade“ zu.
Das Ergebnis ließ sich auf große Modelle übertragen. Googles PaLM übernahm SwiGLU 2022, und Meta ersetzte 2023 in LLaMA ReLU durch SwiGLU. Dabei wurde eine verborgene Breite von 2/3 × 4d verwendet, auf ein Vielfaches von 256 aufgerundet. Beim 7B-Modell mit 4.096 Dimensionen ergibt das 11.008 verborgene Einheiten. Llama 2, Llama 3, Mistral und Qwen behielten dieses Design bei. In Mixture-of-Experts-Modellen (MoE) wie Mixtral ist jeder Experte ein SwiGLU-Feedforward-Block.
SwiGLU in PyTorch implementieren#
Das folgende PyTorch-Codebeispiel erstellt für ein Modell mit 512 Dimensionen eine standardmäßige ReLU-Feedforward-Schicht und eine SwiGLU-Schicht und vergleicht ihre Größe:
import torch
import torch.nn.functional as F
from torch import nn
d_model = 512
x = torch.randn(4, d_model) # four token vectors
# Standard transformer FFN: two matrices around a 4x wider ReLU hidden layer
relu_ffn = nn.Sequential(nn.Linear(d_model, 2048, bias=False), nn.ReLU(), nn.Linear(2048, d_model, bias=False))
# SwiGLU FFN: three matrices, hidden width cut to about 2/3 of 2048
w_gate = nn.Linear(d_model, 1365, bias=False)
w_value = nn.Linear(d_model, 1365, bias=False)
w_out = nn.Linear(1365, d_model, bias=False)
y = w_out(F.silu(w_gate(x)) * w_value(x)) # (SiLU(xW) * xV) W2
relu_params = sum(p.numel() for p in relu_ffn.parameters())
swiglu_params = sum(m.weight.numel() for m in (w_gate, w_value, w_out))
print(f"ReLU FFN: output {tuple(relu_ffn(x).shape)}, {relu_params:,} parameters")
print(f"SwiGLU FFN: output {tuple(y.shape)}, {swiglu_params:,} parameters")Es gibt ReLU FFN: output (4, 512), 2,097,152 parameters und SwiGLU FFN: output (4, 512), 2,096,640 parameters aus. Mit 1.365 verborgenen Einheiten – etwa 2/3 von 2.048 – enthalten die drei SwiGLU-Matrizen nahezu genauso viele Gewichte wie die beiden ReLU-Matrizen. Ein Qualitätsunterschied ist daher auf das Gating zurückzuführen. Viele Implementierungen fassen die Gate- und Wertmatrizen zu einer Projektion zusammen und teilen deren Ausgabe in zwei Hälften. So wird eine größere Matrixmultiplikation statt zweier kleinerer ausgeführt.
SwiGLU im Vergleich zu verwandten Begriffen#
- SiLU (Swish): SiLU ist die elementweise Funktion innerhalb des Gates. SwiGLU bezeichnet die gesamte gegatete Schicht mit ihren drei Projektionen.
- GLU und GEGLU: Verwandte Varianten, die ein Sigmoid- beziehungsweise GELU-Gate verwenden. In Shazeers Tests erreichte GEGLU mit einer Log-Perplexität von 1,633 denselben Wert wie SwiGLU. Googles Gemma-Modelle verwenden GEGLU.
- Attention: Auch Attention erzeugt eingabeabhängige Gewichte, mischt aber Informationen zwischen Tokens. SwiGLU steuert Merkmale innerhalb jedes Tokens unabhängig voneinander.
- Bildverarbeitungsmodelle: Gegatete Feedforward-Schichten kommen auch in Bildverarbeitungs- und multimodalen Modellen vor. YOLOE, der Detektor mit offenem Vokabular von Forschenden der Tsinghua-Universität, der im Ultralytics-Paket verfügbar ist, verfeinert die Text-Embeddings von Klassenprompts mit einem residualen SwiGLU-Block. Dieser wird pro
set_classes()-Aufruf einmal ausgeführt und beim Export entfernt, verursacht also keine zusätzlichen Kosten pro Bild.










