Garden of KnowledgeApplied Sciences › Computer Science › Software › Data Science › Machine Learning › DeepLearning
February 22, 2026

Modèles de Diffusion

Les modèles de diffusion sont une famille de modèles génératifs qui apprennent à générer des données en inversant un processus de bruitage graduel. Ils sont derrière Stable Diffusion, DALL-E, Midjourney et Sora. Depuis 2022, ils dominent la génération d’images, dépassant les GAN en qualité et diversité.

L’idée intuitive§

graph LR
    subgraph "Processus de diffusion (forward)"
        direction LR
        X0["Image nette<br/>x₀"] --> X1["Légèrement<br/>bruitée"] --> X2["Plus<br/>bruitée"] --> XT["Bruit pur<br/>xₜ ~ N(0,1)"]
    end

    subgraph "Processus de débruitage (reverse)"
        direction LR
        NT["Bruit pur<br/>xₜ ~ N(0,1)"] --> N2["Un peu<br/>débruitée"] --> N1["Presque<br/>nette"] --> N0["Image générée<br/>x₀"]
    end

    style X0 fill:#4CAF50,color:#fff
    style XT fill:#F44336,color:#fff
    style NT fill:#F44336,color:#fff
    style N0 fill:#4CAF50,color:#fff

Analogie : imaginez une goutte d’encre dans un verre d’eau.

Le modèle apprend à inverser ce processus de diffusion, étape par étape.

Les deux processus§

1. Processus forward (ajout de bruit)§

On ajoute du bruit gaussien progressivement sur $T$ étapes :

$$q(x_t | x_{t-1}) = \mathcal{N}(x_t ; \sqrt{1-\beta_t}, x_{t-1},; \beta_t I)$$

On peut aussi sauter directement à n’importe quelle étape $t$ :

$$q(x_t | x_0) = \mathcal{N}(x_t ; \sqrt{\bar{\alpha}_t}, x_0,; (1-\bar{\alpha}_t) I)$$

où $\bar{\alpha}t = \prod{i=1}^{t}(1-\beta_i)$

2. Processus reverse (débruitage)§

Le modèle apprend à prédire le bruit ajouté à chaque étape pour l’enlever :

$$p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1} ; \mu_\theta(x_t, t),; \sigma_t^2 I)$$

Un réseau de neurones $\epsilon_\theta$ prédit le bruit $\epsilon$ qui a été ajouté.

graph TB
    subgraph "Entraînement"
        IMG["Image x₀"] --> ADD["Ajouter bruit ε<br/>à l'étape t"]
        ADD --> XT2["Image bruitée xₜ"]
        XT2 --> UNET["U-Net<br/>ε_θ(xₜ, t)"]
        UNET --> PRED["Bruit prédit ε̂"]
        ADD --> |"Bruit réel ε"| LOSS2["Loss = ||ε - ε̂||²"]
        PRED --> LOSS2
    end

    style IMG fill:#4CAF50,color:#fff
    style UNET fill:#2196F3,color:#fff
    style LOSS2 fill:#FF9800,color:#fff

Fonction de perte§

Étonnamment simple — c’est une erreur quadratique sur le bruit :

$$\mathcal{L} = \mathbb{E}{t, x_0, \epsilon}\left[ ||\epsilon - \epsilon\theta(x_t, t)||^2 \right]$$

Le modèle apprend à prédire le bruit ajouté, pas directement l’image.

Le réseau U-Net§

Le coeur des modèles de diffusion est un U-Net modifié, qui prend en entrée l’image bruitée et le timestep $t$ :

graph TB
    subgraph "U-Net pour la diffusion"
        IN2["Image bruitée xₜ<br/>+ timestep t"] --> D1["Encoder<br/>(downsampling)"]
        D1 --> D2["..."]
        D2 --> BOTTOM["Bottleneck<br/>(+ self-attention)"]
        BOTTOM --> U1["Decoder<br/>(upsampling)"]
        U1 --> U2["..."]
        U2 --> OUT2["Bruit prédit ε̂"]

        D1 --> |"Skip connections"| U2
        D2 --> |"Skip connections"| U1
    end

    style IN2 fill:#F44336,color:#fff
    style OUT2 fill:#4CAF50,color:#fff
    style BOTTOM fill:#673AB7,color:#fff

Ajouts par rapport au U-Net classique :

Génération conditionnelle (Text-to-Image)§

Pour générer des images à partir de texte (comme Stable Diffusion), on ajoute du conditionnement :

graph LR
    PROMPT["Texte :<br/>'un chat sur la lune'"] --> CLIP["Text Encoder<br/>(CLIP)"]
    CLIP --> EMBED["Embeddings texte"]
    NOISE2["Bruit z ~ N(0,1)"] --> UNET2["U-Net<br/>(débruitage guidé)"]
    EMBED --> |"Cross-attention"| UNET2
    UNET2 --> LATENT["Image latente"]
    LATENT --> VDEC["VAE Decoder"]
    VDEC --> IMAGE["Image finale"]

    style PROMPT fill:#2196F3,color:#fff
    style IMAGE fill:#4CAF50,color:#fff

Classifier-Free Guidance (CFG)§

Technique clé pour améliorer la qualité et la fidélité au prompt :

$$\hat{\epsilon} = \epsilon_\theta(x_t, \varnothing) + s \cdot (\epsilon_\theta(x_t, c) - \epsilon_\theta(x_t, \varnothing))$$

Latent Diffusion (Stable Diffusion)§

Innovation majeure : faire la diffusion dans un espace latent compressé plutôt que dans l’espace des pixels.

graph LR
    IMG2["Image<br/>512×512×3"] --> VENC["VAE<br/>Encodeur"]
    VENC --> LAT["Espace latent<br/>64×64×4"]
    LAT --> DIFF["Diffusion<br/>(dans l'espace latent)"]
    DIFF --> LAT2["Latent débruité"]
    LAT2 --> VDEC2["VAE<br/>Décodeur"]
    VDEC2 --> IMG3["Image générée<br/>512×512×3"]

    style IMG2 fill:#2196F3,color:#fff
    style LAT fill:#FF9800,color:#fff
    style IMG3 fill:#4CAF50,color:#fff

Avantage : la diffusion opère sur un espace 64x plus petit (64x64 au lieu de 512x512), réduisant massivement le coût de calcul.

Modèles marquants§

ModèleAnnéeParticularité
DDPM2020Premier modèle de diffusion performant
DALL-E 22022Text-to-image par OpenAI (diffusion dans l’espace CLIP)
Stable Diffusion2022Open-source, latent diffusion, très populaire
Midjourney2022Qualité artistique exceptionnelle
SDXL2023Stable Diffusion amélioré, plus haute résolution
Sora2024Text-to-video par OpenAI
Flux2024Modèle open-source à base de flow matching

Samplers (méthodes d’échantillonnage)§

Le processus de débruitage peut être accéléré avec différents samplers :

SamplerÉtapesQualitéVitesse
DDPM~1000HauteTrès lent
DDIM~50HauteRapide
Euler~20-30BonneRapide
DPM++ 2M Karras~20Très hauteRapide

Moins d’étapes = génération plus rapide, mais potentiellement moins de qualité.

Diffusion vs GAN vs VAE§

CritèreDiffusionGANVAE
QualitéExcellenteExcellenteFloue
DiversitéExcellenteMode collapse possibleBonne
EntraînementStableInstableStable
Vitesse de générationLent (itératif)Très rapide (1 passe)Rapide (1 passe)
ContrôlabilitéExcellente (prompts)LimitéeMoyenne
Espace latentStructuré (via les étapes)Non structuréStructuré
—The Gardener