score-based generative model
En generativ model der lærer gradienten af log-sandsynlighedstætheden (score-funktionen) og genererer samples via Langevin-dynamik.
Kort fortalt
En type generativ model, der lærer at estimere retningen af den stejleste stigning i sandsynlighedstæthed og bruger denne til at generere nye samples trin for trin.
- Kategori
- model
- Niveau
- ekspert
Betydninger
1- 1
En generativ model der estimerer score-funktionen (gradienten af log-tætheden) af datafordelingen og anvender en Markov-kæde Monte Carlo-metode, typisk Langevin-dynamik, til at generere samples.
- Score-baserede generative modeller har opnået state-of-the-art resultater inden for billedgenerering. — Song & Ermon, 2019
- Ved at tilføje støj på flere skalaler kan score-baserede modeller håndtere komplekse fordelinger. — Song et al., 2020
Hvornår bruges det
Anvendes især til højkvalitets billedgenerering, ofte som alternativ til GANs og VAEs. Diffusionsmodeller er en undertype af score-baserede modeller, hvor støj fjernes gradvist.
Formel
Score-funktion: s_θ(x) ≈ ∇_x log p(x). Træning: L = E_{p(x)}[||s_θ(x) - ∇_x log p(x)||^2]. Sampling (Langevin-dynamik): x_{t+1} = x_t + ε s_θ(x_t) + √(2ε) z, z ~ N(0,I).Kodeeksempel
import torch
import torch.nn as nn
class ScoreNet(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(2, 128),
nn.ReLU(),
nn.Linear(128, 128),
nn.ReLU(),
nn.Linear(128, 2)
)
def forward(self, x):
return self.net(x)
# Denoising score matching loss
def dsm_loss(score_net, x, sigma):
noise = torch.randn_like(x) * sigma
x_noisy = x + noise
score = score_net(x_noisy)
target = -noise / (sigma ** 2)
loss = 0.5 * ((score - target) ** 2).sum(dim=-1).mean()
return lossSimplet eksempel på et score-netværk og denoising score matching-tab for 2D-data.
Oprindelse
Udtrykket 'score' kommer fra statistik, hvor det betegner gradienten af log-likelihood-funktionen.