Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Koulutus ja Optimointi | Generatiivisten Mallien Rakentaminen ja Kouluttaminen
Syvät Generatiiviset Mallit Pythonilla

Koulutus ja Optimointi

Pyyhkäise näyttääksesi valikon

Generatiivisten mallien koulutus sisältää usein epävakaiden ja monimutkaisten tappiofunktioiden optimointia. Tässä osiossa esitellään kullekin mallityypille räätälöidyt tappiofunktiot, koulutuksen vakauttamiseen tarkoitetut optimointistrategiat sekä menetelmät esikoulutettujen mallien hienosäätöön räätälöityihin käyttötarkoituksiin.

Keskeiset tappiofunktiot

Eri generatiivisten mallien perheet käyttävät erilaisia tappiofunktioita riippuen siitä, miten ne mallintavat datan jakaumia.

GAN-tappiot

Minimax-tappio (alkuperäinen GAN)

Generaattorin GG ja diskriminaattorin DD välinen adversaarinen asetelma (esimerkki pythorch-kirjastolla):

loss_D = -torch.mean(torch.log(D(real_data)) + torch.log(1. - D(fake_data)))
loss_G = -torch.mean(torch.log(D(fake_data)))

Least squares GAN (LSGAN)

Käyttää L2-häviötä logaritmisen häviön sijaan parantaakseen vakautta ja gradienttien kulkua:

loss_D = 0.5 * torch.mean((D(real_data) - 1) ** 2 + D(fake_data) ** 2)
loss_G = 0.5 * torch.mean((D(fake_data) - 1) ** 2)

Wasserstein GAN (WGAN)

Minimoi Earth Mover (EM) -etäisyyden; korvaa diskriminaattorin "kriitikolla" ja käyttää painojen leikkausta tai gradienttirangaistusta Lipschitz-jatkuvuuden varmistamiseksi:

loss = torch.mean(D(fake_data)) - torch.mean(D(real_data)) + gradient_penalty

VAE-häviö

Evidence Lower Bound (ELBO)

Yhdistää rekonstruoinnin ja regularisoinnin. KL-divergenssitermi ohjaa latenttiposteriota pysymään lähellä prioria (yleensä standardinormaali):

recon_loss = F.binary_cross_entropy(recon_x, x, reduction='sum')
kl_div = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
loss = recon_loss + kl_div

Diffuusiomallien tappiot

Kohinan ennustamisen tappio

Mallit oppivat poistamaan lisätyn Gaussin kohinan diffuusioaikataulun aikana. Vaihtoehtoina käytetään nopeuden ennustamista (esim. v-prediktio Stable Diffusion v2:ssa) tai hybriditavoitteita:

noise = torch.randn_like(x)
x_t = q_sample(x, t, noise)
pred_noise = model(x_t, t)
loss = F.mse_loss(pred_noise, noise)

Optimointitekniikat

Generatiivisten mallien koulutus on usein epävakaata ja herkkää hyperparametreille. Useita tekniikoita käytetään konvergenssin ja laadun varmistamiseksi.

Optimointialgoritmit ja oppimisaikataulut

  • Adam / AdamW: adaptiiviset gradienttioptimointialgoritmit ovat de facto -standardi. Käytä β1=0.5, β2=0.999\beta_1=0.5,\ \beta_2=0.999 GAN-malleissa;
  • RMSprop: joskus käytössä WGAN-muunnelmissa;
  • Oppimisnopeuden aikataulutus:
    • Lämmittelyvaiheet transformereille ja diffuusiomalleille;
    • Kosinipohjainen lasku tai ReduceLROnPlateau vakaan konvergenssin saavuttamiseksi.
optimizer = torch.optim.Adam(model.parameters(), lr=2e-4, betas=(0.5, 0.999))
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)

Vakauttamismenetelmät

  • Gradientin leikkaus: estää gradienttien räjähtämisen RNN- tai syvissä UNet-malleissa;
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
  • Spektrinen normalisointi: käytetään GAN-mallien diskriminaattorikerroksissa Lipschitz-ehtojen varmistamiseksi;
from torch.nn.utils import spectral_norm
layer = spectral_norm(nn.Linear(100, 100))
  • Label smoothing: pehmentää kovia luokkia (esim. todellinen = 0.9 sijaan 1.0) ylivarovaisuuden vähentämiseksi;
  • Kahden aikaskaalan päivityssääntö (TTUR): käytetään eri oppimisnopeuksia generaattorille ja diskriminaattorille konvergenssin parantamiseksi;
  • Sekatarkkuusharjoittelu: hyödyntää FP16-tarkkuutta (NVIDIA Apexin tai PyTorch AMP:n kautta) nopeampaan harjoitteluun moderneilla GPU:illa.
scaler = torch.cuda.amp.GradScaler()
with torch.cuda.amp.autocast():
    output = model(input)
    loss = loss_fn(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
Note
Huomio

Seuraa generaattorin ja diskriminaattorin tappioita erikseen. Käytä säännöllisesti mittareita kuten FID tai IS arvioidaksesi todellista ulostulon laatua sen sijaan, että luottaisit pelkästään tappioarvoihin.

Esikoulutettujen generatiivisten mallien hienosäätö

Esikoulutettuja generatiivisia malleja (esim. Stable Diffusion, LLaMA, StyleGAN2) voidaan hienosäätää alakohtaisiin tehtäviin kevyemmillä koulutusstrategioilla.

Siirtoloppuoppimisen tekniikat

  • Täysi hienosäätö: kaikkien mallin painojen uudelleenkoulutus. Korkea laskentakustannus, mutta maksimaalinen joustavuus;
model = AutoModel.from_pretrained('model-name')
model.train()
optimizer = torch.optim.Adam(model.parameters(), lr=5e-5)
  • Kerrosjäädytys / asteittainen sulatus: aloitetaan jäädyttämällä suurin osa kerroksista ja sulatetaan vähitellen valittuja kerroksia paremman hienosäädön saavuttamiseksi. Tämä estää katastrofaalisen unohtamisen. Alkuvaiheen kerrosten jäädyttäminen säilyttää esikoulutuksen yleiset piirteet (kuten reunat tai sanakuviot), kun taas myöhempien kerrosten sulatus mahdollistaa mallin oppia tehtäväkohtaisia piirteitä;
for param in model.parameters():
    param.requires_grad = False
# Unfreeze final transformer block or decoder
for param in model.transformer.block[-1].parameters():
    param.requires_grad = True
  • LoRA / adapterikerrokset: matalan asteen opetettavien kerrosten lisääminen ilman, että perusmallin parametreja päivitetään;
from peft import get_peft_model, LoraConfig, TaskType

config = LoraConfig(task_type=TaskType.SEQ_2_SEQ_LM, r=8, lora_alpha=16, lora_dropout=0.1)
model = get_peft_model(base_model, config)
  • DreamBooth / tekstuaalinen inversio (diffuusiomallit):
    • Hienosäätö muutamalla kohteeseen liittyvällä kuvalla.
    • Käytä diffusers-putkea:
from diffusers import StableDiffusionPipeline
pipeline = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
pipeline.train(texts, images)  # pseudo-call: use DreamBooth training scripts in practice
  • Prompt tuning / p-tuning:
from peft import PromptTuningConfig, get_peft_model
config = PromptTuningConfig(task_type=TaskType.CAUSAL_LM, num_virtual_tokens=20)
model = get_peft_model(base_model, config)

Yleisiä käyttötapauksia

  • Tyylin mukauttaminen: hienosäätö anime-, sarjakuva- tai taidedatalla;
  • Toimialakohtainen hienosäätö: LLM-mallien mukauttaminen oikeudellisiin, lääketieteellisiin tai yritysalueisiin;
  • Personointi: mukautettu identiteetti tai äänen ehdollistaminen pienten viitesettien avulla.
Note
Huomio

Käytä Hugging Face PEFT -kirjastoa LoRA-/adapteripohjaisiin menetelmiin ja Diffusers-kirjastoa kevyisiin hienosäätöputkiin, joissa on sisäänrakennettu tuki DreamBoothille ja luokitteluvapaalle ohjaukselle.

Yhteenveto

  • Käytä mallikohtaisia tappiotoimintoja, jotka vastaavat koulutustavoitteita ja mallin rakennetta;
  • Optimoi adaptiivisilla menetelmillä, stabilointitekniikoilla ja tehokkaalla aikataulutuksella;
  • Hienosäädä esikoulutettuja malleja nykyaikaisilla matalan asteen tai kehotepohjaisilla siirtostrategioilla kustannusten pienentämiseksi ja toimialakohtaisen mukautuvuuden lisäämiseksi.

1. Mikä seuraavista on regularisointitekniikoiden ensisijainen tarkoitus koulutuksen aikana?

2. Mikä seuraavista optimointialgoritmeista on yleisesti käytössä syväoppimismallien koulutuksessa ja mukauttaa oppimisnopeutta koulutuksen aikana?

3. Mikä on tärkein haaste generatiivisten mallien koulutuksessa, erityisesti GAN-mallien (Generative Adversarial Networks) yhteydessä?

question mark

Mikä seuraavista on regularisointitekniikoiden ensisijainen tarkoitus koulutuksen aikana?

Valitse oikea vastaus

question mark

Mikä seuraavista optimointialgoritmeista on yleisesti käytössä syväoppimismallien koulutuksessa ja mukauttaa oppimisnopeutta koulutuksen aikana?

Valitse oikea vastaus

question mark

Mikä on tärkein haaste generatiivisten mallien koulutuksessa, erityisesti GAN-mallien (Generative Adversarial Networks) yhteydessä?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 3. Luku 2
some-alt