SwiGLU Activation
iaDéfinition
SwiGLU (Swish-Gated Linear Unit) est une fonction d'activation pour les couches Feed-Forward Network des Transformers, proposée par Noam Shazeer (Google, 2020) dans le paper "GLU Variants Improve Transformer". C'est aujourd'hui l'activation de référence pour la grande majorité des LLMs open-source haute performance : LLaMA 2/3, Mistral, Mixtral, Qwen, Gemma, Phi et de nombreux autres l'utilisent. SwiGLU est une variante de l'architecture GLU (Gated Linear Unit) qui utilise la fonction Swish (aussi appelée SiLU) comme gate. La formule est : SwiGLU(x, W₁, W₂, W₃) = (Swish(xW₁) ⊗ xW₂) × W₃, où ⊗ représente la multiplication élément-par-élément. Concrètement, le FFN utilise deux projections parallèles (une "gate" et une "value"), les multiplie après activation, puis projette le résultat. L'avantage empirique de SwiGLU sur ReLU et GELU est bien documenté : à paramètres équivalents, SwiGLU améliore la perplexité et les benchmarks de ~1-2 points. L'intuition est que le gating permet au réseau de modérer dynamiquement le flux d'information selon le contenu, offrant une expressivité supérieure à une simple activation scalaire. Note technique : pour conserver le même nombre de paramètres qu'un FFN standard avec dimension 4×d_model, le FFN SwiGLU utilise une dimension intermédiaire de (8/3)×d_model ≈ 2.67×d_model, compensant les deux projections parallèles supplémentaires. Ce point est important lors du calcul des paramètres d'un modèle pour le provisioning GPU. Pour les équipes fine-tuning PEFT (LoRA, QLoRA), les couches FFN SwiGLU sont souvent des cibles d'adaptation efficaces, notamment les projections gate_proj et up_proj qui constituent la "gate" et la "value" respectivement.
Formule et implémentation
import torch
import torch.nn as nn
import torch.nn.functional as F
class SwiGLU(nn.Module):
def __init__(self, d_model, d_ff):
super().__init__()
# Note: d_ff = int(8/3 * d_model) pour iso-paramètres
self.gate_proj = nn.Linear(d_model, d_ff, bias=False)
self.up_proj = nn.Linear(d_model, d_ff, bias=False)
self.down_proj = nn.Linear(d_ff, d_model, bias=False)
def forward(self, x):
# SwiGLU: SiLU(gate) * value
return self.down_proj(F.silu(self.gate_proj(x)) * self.up_proj(x))
Comparaison empirique des activations
Benchmark sur GPT-3 style modèle (6.7B params, pile dataset) :
- ReLU : perplexité 6.42
- GELU : perplexité 6.38
- SwiGLU : perplexité 6.21 (meilleur)
- GeGLU : perplexité 6.25
Impact sur le fine-tuning LoRA
Dans les modèles LLaMA/Mistral, LoRA peut être appliqué sur gate_proj, up_proj et down_proj. Les papiers récents (QLoRA, DoRA) montrent que cibler aussi les couches FFN (pas seulement attention) améliore les performances du fine-tuning sur des tâches nécessitant de la connaissance factuelle.
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h