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 G ja diskriminaattorin D 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 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()
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.
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ä?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme