variationel inferens
En metode til at tilnærme en kompleks posterior-fordeling i bayesiansk statistik og maskinlæring ved at optimere en enklere fordeling.
Kort fortalt
Variationel inferens er en teknik til at finde den bedste enkle sandsynlighedsfordeling, der minder mest muligt om en kompliceret fordeling, f.eks. i bayesianske neurale netværk.
- Kategori
- teknik
- Niveau
- øvet
Betydninger
1- 1
En optimeringsbaseret tilgang til at tilnærme posterior-fordelingen i bayesianske modeller ved at minimere Kullback-Leibler-divergensen mellem en genkendelsesmodel q(z) og den sande posterior p(z|x).
- Variationel inferens bruges til at træne VAE'er, hvor genkendelsesnetværket optimeres til at minimere ELBO-tabet. — Kingma & Welling, Auto-Encoding Variational Bayes, 2013
- En ulempe ved variationel inferens er, at den ofte undervurderer variansen i posterior-fordelingen (mode-seeking).
Hvornår bruges det
Bruges når eksakt inferens i bayesianske modeller er uoverkommelig, f.eks. i bayesianske neurale netværk, emne-modeller som LDA, og ved træning af generative modeller som VAEs.
Formel
ELBO = E_q[log p(x,z)] - E_q[log q(z)] = log p(x) - KL(q||p)Kodeeksempel
import pyro
import pyro.distributions as dist
from pyro.infer import SVI, Trace_ELBO
from pyro.optim import Adam
def model(data):
mu = pyro.sample("mu", dist.Normal(0, 10))
sigma = pyro.sample("sigma", dist.HalfCauchy(1))
with pyro.plate("data", len(data)):
pyro.sample("obs", dist.Normal(mu, sigma), obs=data)
def guide(data):
mu_loc = pyro.param("mu_loc", lambda: torch.tensor(0.0))
mu_scale = pyro.param("mu_scale", lambda: torch.tensor(1.0), constraint=dist.constraints.positive)
pyro.sample("mu", dist.Normal(mu_loc, mu_scale))
sigma_loc = pyro.param("sigma_loc", lambda: torch.tensor(1.0), constraint=dist.constraints.positive)
pyro.sample("sigma", dist.HalfCauchy(sigma_loc))
svi = SVI(model, guide, Adam({"lr": 0.01}), Trace_ELBO())
for step in range(1000):
svi.step(data)Simpel variationel inferens i Pyro for at tilnærme posterior for middelværdi og standardafvigelse af normalfordelte data.
Oprindelse
Fra 'variation' (variation) og 'inferens' (slutning). Metoden stammer fra fysik og statistik, men blev udbredt i maskinlæring i 2000'erne.