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