Trening og optimalisering
Sveip for å vise menyen
Å trene generative modeller innebærer å optimalisere ofte ustabile og komplekse tapslandskap. Denne seksjonen introduserer tapsfunksjoner tilpasset hver modelltype, optimaliseringsstrategier for å stabilisere treningen, og metoder for finjustering av forhåndstrente modeller for tilpassede bruksområder.
Kjerne-tapsfunksjoner
Ulike familier av generative modeller benytter distinkte tapsformuleringer avhengig av hvordan de modellerer datadistribusjoner.
GAN-tap
Minimax-tap (original GAN)
Adversarialt oppsett mellom generator G og diskriminator D (eksempel med pythorch-biblioteket):
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)
Bruker L2-tap i stedet for log-tap for å forbedre stabilitet og gradientflyt:
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)
Minimerer Earth Mover (EM)-avstand; erstatter diskriminator med en "kritiker" og bruker vektklipping eller gradientstraff for Lipschitz-kontinuitet:
loss = torch.mean(D(fake_data)) - torch.mean(D(real_data)) + gradient_penalty
VAE-tap
Evidence Lower Bound (ELBO)
Kombinerer rekonstruksjon og regularisering. KL-divergenstermen oppmuntrer den latente posterioren til å forbli nær prioren (vanligvis standard normalfordeling):
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
Tap for diffusjonsmodell
Tap for støyforutsigelse
Modeller lærer å fjerne Gaussisk støy som er lagt til gjennom en diffusjonsplan. Varianter bruker hastighetsforutsigelse (for eksempel v-prediksjon i Stable Diffusion v2) eller hybride mål:
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)
Optimaliseringsteknikker
Trening av generative modeller er ofte ustabilt og følsomt for hyperparametere. Flere teknikker benyttes for å sikre konvergens og kvalitet.
Optimalisatorer og planleggere
- Adam / AdamW: adaptive gradientoptimalisatorer er standardvalg. Bruk β1=0.5, β2=0.999 for GANs;
- RMSprop: noen ganger brukt i WGAN-varianter;
- Læringsrateplanlegging:
- Oppvarmingsfaser for transformere og diffusjonsmodeller;
- Cosine decay eller ReduceLROnPlateau for stabil konvergens.
optimizer = torch.optim.Adam(model.parameters(), lr=2e-4, betas=(0.5, 0.999))
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)
Stabiliseringsmetoder
- Gradientklipping: unngå eksploderende gradienter i RNN-er eller dype UNet-er;
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
- Spektral normalisering: brukt på diskriminatorlag i GAN-er for å håndheve Lipschitz-betingelser;
from torch.nn.utils import spectral_norm
layer = spectral_norm(nn.Linear(100, 100))
- Label smoothing: mykner harde etiketter (f.eks. ekte = 0.9 i stedet for 1.0) for å redusere overkonfidens;
- To-tids-skala oppdateringsregel (TTUR): bruk ulike læringsrater for generator og diskriminator for å forbedre konvergens;
- Trening med blandet presisjon: utnytter FP16 (via NVIDIA Apex eller PyTorch AMP) for raskere trening på moderne GPU-er.
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()
Overvåk både generator- og diskriminator-tap separat. Bruk metrikker som FID eller IS periodisk for å evaluere faktisk utgangskvalitet i stedet for å kun stole på tapverdier.
Finjustering av forhåndstrente generative modeller
Forhåndstrente generative modeller (f.eks. Stable Diffusion, LLaMA, StyleGAN2) kan finjusteres for domene-spesifikke oppgaver ved bruk av lettere treningsstrategier.
Overføringslæringsteknikker
- Full finjustering: tren alle modellens vekter på nytt. Høy beregningskostnad, men maksimal fleksibilitet;
model = AutoModel.from_pretrained('model-name')
model.train()
optimizer = torch.optim.Adam(model.parameters(), lr=5e-5)
- Lagvis frysing / gradvis opplåsing: start med å fryse de fleste lagene, og lås deretter gradvis opp utvalgte lag for bedre finjustering. Dette unngår katastrofal glemsel. Å fryse tidlige lag bidrar til å bevare generelle trekk fra forhåndstreningen (som kanter eller ordmønstre), mens opplåsing av senere lag lar modellen lære oppgavespesifikke trekk;
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 / adapterlag: injiserer trenbare lag med lav rang uten å oppdatere basismodellens parametere;
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 / tekstuell inversjon (diffusjonsmodeller):
- Finjustering på et begrenset antall motivspesifikke bilder.
- Bruk
diffusers-pipeline:
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)
Vanlige bruksområder
- Stiltilpasning: finjustering på anime-, tegneserie- eller kunstneriske datasett;
- Bransjespesifikk tilpasning: tilpasning av LLM-er til juridiske, medisinske eller bedriftsdomener;
- Personalisering: egendefinert identitet eller stemmekondisjonering ved bruk av små referansesett.
Bruk Hugging Face PEFT for LoRA-/adapter-baserte metoder, og Diffusers-biblioteket for lette finjusteringspipelines med innebygd støtte for DreamBooth og classifier-free guidance.
Sammendrag
- Bruk modellspecifikke tapsfunksjoner som samsvarer med treningsmål og modellstruktur;
- Optimaliser med adaptive metoder, stabiliseringsteknikker og effektiv planlegging;
- Finjuster forhåndstrente modeller ved hjelp av moderne lav-rang eller prompt-baserte overføringsstrategier for å redusere kostnader og øke domenetilpasning.
1. Hva er hovedformålet med å bruke regulariseringsteknikker under trening?
2. Hvilken av følgende optimalisatorer brukes ofte til å trene dyp læringsmodeller og tilpasser læringsraten under trening?
3. Hva er den viktigste utfordringen ved trening av generative modeller, spesielt i sammenheng med GAN-er (Generative Adversarial Networks)?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår