Diffusion model

En generativ model, der lærer at reversere en gradvis støjproces for at generere data fra tilfældig støj.

Kort fortalt

En type AI, der skaber billeder (eller anden data) ved at starte med ren støj og gradvist fjerne den.

Kategori
model
Niveau
øvet
Udtale
dɪˈfjuːʒən ˈmɒdəl

Betydninger

2
  1. 1

    Den overordnede klasse af generative modeller, der fungerer ved at lære at omdanne en simpel fordeling (typisk normalfordelt støj) til en kompleks datafordeling gennem en iterativ denoising-proces.

    • Diffusion modeller har opnået state-of-the-art resultater inden for billedegenerering.Forskningsartikel, 2023
    • Stable Diffusion er en populær open-source diffusion model.
  2. 2

    En specifik implementering kaldet Denoising Diffusion Probabilistic Model (DDPM), der definerer en Markov-kæde af noising- og denoising-trin.

    • DDPM er en af de første diffusion modeller, der viste imponerende genereringsevner.Ho et al., 2020

Hvornår bruges det

Diffusion modeller bruges primært til billedegenerering, lydgenerering og 3D-generering. De er grundlaget for populære værktøjer som DALL-E og Stable Diffusion. Træningen foregår ved at tilføje støj til data og lære modellen at forudsige støjen.

Formel

L = E_{t, x_0, ε} [ ||ε - ε_θ(x_t, t)||^2 ] where x_t = √(α_t) x_0 + √(1-α_t) ε

Kodeeksempel

import torch
import torch.nn as nn

class SimpleDiffusion(nn.Module):
    def __init__(self, T=1000):
        super().__init__()
        self.T = T
        self.beta = torch.linspace(1e-4, 0.02, T)
        self.alpha = 1 - self.beta
        self.alpha_bar = torch.cumprod(self.alpha, dim=0)

    def forward_diffusion(self, x0, t):
        noise = torch.randn_like(x0)
        sqrt_alpha_bar = torch.sqrt(self.alpha_bar[t])
        sqrt_one_minus_alpha_bar = torch.sqrt(1 - self.alpha_bar[t])
        return sqrt_alpha_bar * x0 + sqrt_one_minus_alpha_bar * noise, noise

    def loss(self, model, x0, t):
        xt, noise = self.forward_diffusion(x0, t)
        predicted_noise = model(xt, t)
        return nn.functional.mse_loss(predicted_noise, noise)

En forenklet PyTorch-implementering af diffusionsprocessen og træningstabet.

Oprindelse

Termen 'diffusion' refererer til processen med at tilføje støj, inspireret af fysisk diffusion, hvor partikler spredes over tid.

Afledte ord

2

Kilder

2