Diffuusiomallit: opi poistamaan kohinaa
Diffuusiomalli (diffusion model) oppii muuttamaan kohinaista dataa rakenteellisiksi näytteiksi. Tavallisessa kohinaa poistavassa diffuusiokoulutuksessa oikeisiin esimerkkeihin lisätään tunnettu määrä kohinaa. Neuroverkko oppii ennusteen, joka auttaa kumoamaan muutoksen, esimerkiksi lisätyn kohinan.
Generointi alkaa satunnaiskohinasta ja soveltaa opittua mallia toistuvasti valitun näytteenottoaikataulun mukaan. Kuva syntyy peräkkäisistä päivityksistä. Tämä eroaa autoregressiivisestä tekstin generoinnista, jossa valitaan seuraavia tokeneita.

Malli ennustaa, ajoittaja päivittää
Diffusers erottaa neuroverkon ja ajoittajan (scheduler). Tämä funktio näyttää niiden toistuvan yhteistoiminnan valmiiksi koulutetussa DDPMPipeline-putkessa, esimerkiksi mallilla google/ddpm-cifar10-32. Se palauttaa kuvatensorin välillä nollasta yhteen. Tarvitaan torch ja diffusers; putken lataaminen lataa mallin painot.
import torch
def denoise(pipe):
device = pipe.unet.device
size = pipe.unet.config.sample_size
channels = pipe.unet.config.in_channels
sample = torch.randn(1, channels, size, size, device=device,
dtype=pipe.unet.dtype)
pipe.scheduler.set_timesteps(pipe.scheduler.config.num_train_timesteps)
with torch.inference_mode():
for timestep in pipe.scheduler.timesteps:
prediction = pipe.unet(sample, timestep).sample
sample = pipe.scheduler.step(prediction, timestep, sample).prev_sample
return (sample.clamp(-1, 1) + 1) / 2
Samoja verkon painoja käytetään joka askeleella. Aika-askel kertoo verkolle käsiteltävän kohinatason. Tässä ajoittaja säilyttää määritellyn DDPM-näytteenoton. Useampi askel tarkoittaa useampaa verkon laskentakertaa; muut yhteensopivat näytteenottomenetelmät voivat tasapainottaa laskentamäärää ja laatua eri tavoin.
Pikseleissä tai pienemmässä esityksessä
Pikseliavaruuden diffuusio käsittelee suoraan kuvataulukoita. Latentti diffuusio (latent diffusion) tekee raskaan toistuvan laskennan pakatussa esityksessä ja tuottaa siitä pikselit dekooderilla. Tekstiehdollistus voi ohjata verkkoa kohti pyydettyä näkymää.
Yllä oleva silmukka tuottaa kuvia pikseliavaruudessa ilman ehtosyötettä: mukana ei ole tekstienkooderia eikä latenttien esitysten dekooderia. Ne kuuluvat muihin putkiin. Perussuhde säilyy: opittu ennuste ohjaa nykyisen näytteen aikataulutettua päivitystä.