ai.vostman.fi
← Tekoälysanasto

Tekoälyn tietosanakirja

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.

Periaatekuva kohinan muuttumisesta oranssiksi palloksi. Sama neuroverkko ja ajoittaja ohjaavat toistuvia päivityksiä; vaiheet ovat havainnollistavia, eivät mallin mitattuja tulosteita.

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ä.

Lähteet