Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Koulutus ja optimointi | Osio
Generatiivinen Syväoppiminen

bookKoulutus 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 yksilöllisiin 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 vastakkainasettelu (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 tappiotoiminnot

Kohinan ennustamisen tappio

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

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 alan standardi. Käytä β1=0.5, β2=0.999\beta_1=0.5,\ \beta_2=0.999 GAN-malleissa;
  • RMSprop: käytetään joskus WGAN-muunnelmissa;
  • Oppimisnopeuden aikataulutus:
    • Lämmittelyvaiheet transformereille ja diffuusiomalleille;
    • Kosinimuotoinen pienennys 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äytä 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 vapauttaminen: aloitetaan jäädyttämällä suurin osa kerroksista, sitten vapautetaan valittuja kerroksia asteittain paremman hienosäädön saavuttamiseksi. Tämä ehkäisee katastrofaalista unohtamista. Alkuvaiheen kerrosten jäädyttäminen säilyttää esikoulutuksen yleiset piirteet (kuten reunat tai sanakuviot), kun taas myöhempien kerrosten vapauttaminen 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: lisää matalan asteen opetettavia kerroksia 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ö pienellä määrällä kohdekohtaisia kuvia.
    • 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 taideaineistoilla;
  • Toimialakohtainen hienosäätö: LLM-mallien sovittaminen oikeudellisiin, lääketieteellisiin tai yritysalueisiin;
  • Personointi: yksilöllisen identiteetin tai äänen mukauttaminen pienten viiteaineistojen 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 tappiofunktioita, jotka vastaavat koulutustavoitteita ja mallin rakennetta;
  • Optimoi adaptiivisilla menetelmillä, vakautustekniikoilla ja tehokkaalla ajoituksella;
  • 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äytetty syväoppimismallien koulutuksessa ja mukauttaa oppimisnopeutta koulutuksen aikana?

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

question mark

Mikä seuraavista on regularisointitekniikoiden ensisijainen tarkoitus koulutuksen aikana?

Select the correct answer

question mark

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

Select the correct answer

question mark

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

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 12

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Osio 1. Luku 12
some-alt