31.2 GAN mint minimax probléma

31.2.1 Cél, előismeret és induló kérdés

Ez az egység a generatív adversarialis hálót (GAN) nem likelihood-közelítésként, hanem két szereplős játékként vezeti be. A 31.1. VAE és variációs alsó korlát VAE-jében a tanulási cél az ELBO, tehát egy explicit látens posterior és egy dekódoló likelihood együttes maximalizálása volt. A GAN ezt a becslési keretet elhagyja: nincs q(z|x)q(z|x) következtető háló és nincs dekódoló likelihood, csak egy generátor és egy diszkriminátor versenye. Előismeret a 7.1. Entrópia, cross-entropy és KL keresztentrópiája és a 30.2. Kontrasztív cél és temperature logisztikus alakú célfüggvénye.

Induló kérdés: ha a generátor már adott, milyen diszkriminátor hozza ki a legtöbbet a valós és generált minták megkülönböztetéséből? Ennek zárt alakja lesz a központi levezetés.

31.2.2 Minimax cél, generátor és diszkriminátor

Legyen pdatap_{\mathrm{data}} a valós adatok sűrűsége ℝdx\mathbb R^{d_x}-en, pzp_z pedig egy rögzített látens prior, tipikusan standard normális ℝdz\mathbb R^{d_z}-n. A generátor

Gθ:ℝdz→ℝdx,xg=Gθ(z), G_\theta:\mathbb R^{d_z}\to\mathbb R^{d_x},\qquad x_g=G_\theta(z),

a diszkriminátor pedig

Dϕ:ℝdx→(0,1),Dϕ(x)=σ(sϕ(x)), D_\phi:\mathbb R^{d_x}\to(0,1),\qquad D_\phi(x)=\sigma(s_\phi(x)),

ahol sϕ(x)∈ℝs_\phi(x)\in\mathbb R a logit, σ\sigma a szigmoid. A GθG_\theta által indukált eloszlást pgp_g-vel jelöljük. A [P19]-ben bevezetett kétjátékos cél természetes alapú logaritmussal:

V(Dϕ,Gθ)=𝔼x∼pdata[lnDϕ(x)]+𝔼z∼pz[ln(1−Dϕ(Gθ(z)))]. V(D_\phi,G_\theta) =\mathbb E_{x\sim p_{\mathrm{data}}}[\ln D_\phi(x)] +\mathbb E_{z\sim p_z}[\ln(1-D_\phi(G_\theta(z)))].

A második tag átírható a generált eloszlás szerinti várható értékké:

V(D,G)=𝔼x∼pdata[lnD(x)]+𝔼x∼pg[ln(1−D(x))]. V(D,G)=\mathbb E_{x\sim p_{\mathrm{data}}}[\ln D(x)] +\mathbb E_{x\sim p_g}[\ln(1-D(x))]. \tag{1}

A D maximalizálni, a G minimalizálni akarja VV-t, tehát a formális cél minGmaxDV(D,G)\min_G\max_D V(D,G). Ez nem „egyetlen közös loss” minimalizálása: ugyanaz a VV a két paraméterkészletben ellentétes irányú.

A PyTorch-féle batchelt alakok: Z∈ℝB×dzZ\in\mathbb R^{B\times d_z}; valós adat X∈ℝB×dxX\in\mathbb R^{B\times d_x}, képnél NCHW esetén X∈ℝB×C×H×WX\in\mathbb R^{B\times C\times H\times W}; a generált minta Xg∈ℝB×dxX_g\in\mathbb R^{B\times d_x}; a diszkriminátor logitja S∈ℝB×1S\in\mathbb R^{B\times 1}, valószínűségi kimenete D(X)∈(0,1)B×1D(X)\in(0,1)^{B\times 1}. Az osztálycímke 11 a valós, 00 a generált mintára.

A gyakorlati frissítés szétválasztott: θ\theta-t csak a generátorcél, ϕ\phi-t csak a diszkriminátorcél szerint frissítjük. Legyen

ℓBCE(s,y)=−[ylnσ(s)+(1−y)ln(1−σ(s))]. \ell_{\mathrm{BCE}}(s,y) =-\bigl[y\ln\sigma(s)+(1-y)\ln(1-\sigma(s))\bigr].

Egy BB méretű minibatchre

LD=1B∑i=1BℓBCE(sϕ(xi),1)+1B∑i=1BℓBCE(sϕ(Gθ(zi)),0). L_D=\frac1B\sum_{i=1}^B\ell_{\mathrm{BCE}}(s_\phi(x_i),1) +\frac1B\sum_{i=1}^B\ell_{\mathrm{BCE}}(s_\phi(G_\theta(z_i)),0). \tag{2}

A második tagban a generált mintát detach()-kel leválasztjuk, mert LDL_D nem frissíti θ\theta-t. A generátor eredeti, telítődő célja

LGsat=1B∑iln(1−Dϕ(Gθ(zi))), L_G^{\mathrm{sat}}=\frac1B\sum_i \ln(1-D_\phi(G_\theta(z_i))), \tag{3}

a nem telítődő (non-saturating) változat pedig

LGns=−1B∑ilnDϕ(Gθ(zi))=1B∑iℓBCE(sϕ(Gθ(zi)),1). L_G^{\mathrm{ns}}=-\frac1B\sum_i \ln D_\phi(G_\theta(z_i)) =\frac1B\sum_i\ell_{\mathrm{BCE}}(s_\phi(G_\theta(z_i)),1). \tag{4}

PyTorchban a (4) a binary_cross_entropy_with_logits hívás ones_like targettel, a (3) pedig lnσ(−s)=𝚕𝚘𝚐𝚜𝚒𝚐𝚖𝚘𝚒𝚍(−s)\ln\sigma(-s)=\texttt{logsigmoid}(-s).

31.2.3 Az ideális diszkriminátor levezetése

A következő állítás idealizált függvényosztályra szól; nem állítja, hogy egy véges neurális háló ezt eléri.

Állítás (optimális diszkriminátor rögzített generátor mellett). Legyen pdatap_{\mathrm{data}} és pgp_g sűrűség ugyanazon Ω⊆ℝdx\Omega\subseteq\mathbb R^{d_x} tartón. minden vizsgált xx-re pdata(x)+pg(x)>0p_{\mathrm{data}}(x)+p_g(x)>0, és a DD függvényt az idealizált, pontonként szabadon választható (0,1)(0,1)-beli értékű mérhető függvények körében keressük, a határpontokat a lezárt [0,1][0,1]-ben értve. Ekkor az (1) cél pontonkénti szuprémumát

D*(x)=pdata(x)pdata(x)+pg(x) D^*(x)=\frac{p_{\mathrm{data}}(x)}{p_{\mathrm{data}}(x)+p_g(x)} \tag{5}

adja.

Bizonyítás. Rögzített xx-re legyen a=pdata(x)≥0a=p_{\mathrm{data}}(x)\ge 0, b=pg(x)≥0b=p_g(x)\ge 0, és y=D(x)y=D(x). Az integrandus ott

f(y)=alny+bln(1−y),y∈(0,1). f(y)=a\ln y+b\ln(1-y),\qquad y\in(0,1).

A deriváltak

f′(y)=ay−b1−y,f″(y)=−ay2−b(1−y)2≤0, f'(y)=\frac{a}{y}-\frac{b}{1-y},\qquad f''(y)=-\frac{a}{y^2}-\frac{b}{(1-y)^2}\le 0,

tehát ff konkáv minden rögzített (a,b)(a,b) mellett. A kritikus pont

f′(y)=0⇔a(1−y)=by⇔y=aa+b. f'(y)=0 \iff a(1-y)=by \iff y=\frac{a}{a+b}.

Ez a konkavitás miatt egyértelmű globális maximum. Ha a=0,b>0a=0,b>0, akkor y→0+y\to 0+ adja a szuprémumot; ha a>0,b=0a>0,b=0, akkor y→1−y\to 1- adja a szuprémumot; az (5) képlet így a határpontokra is érvényes. Ha a=b=0a=b=0, a pont az integrálhoz nem járul hozzá, ott D*D^* tetszőleges.

Mivel minden xx-ben az integrál egy tagját függetlenül maximalizáltuk, bármely más DD-re az integrandus pontonként legfeljebb akkora, mint D*D^*-nál, így V(D)≤V(D*)V(D)\le V(D^*). ∎

Az (5) képlet olvasata: ahol a valós adat sűrűbb a generáltnál, ott a diszkriminátor 1/21/2-nél nagyobb valós valószínűséget ad; ahol fordítva, ott 12\frac12-nél kisebbet. Ha a két eloszlás egyenlő, D*≡1/2D^*\equiv 1/2.

Jensen–Shannon-kapcsolat. Legyen m=(pdata+pg)/2m=(p_{\mathrm{data}}+p_g)/2. Ekkor

$$ V(D^*)= \mathbb E_{p_{\mathrm{data}}}\Bigl[\ln\frac{p_{\mathrm{data}}}{p_{\mathrm{data}}+p_g}\Bigr] +\mathbb E_{p_g}\Bigl[\ln\frac{p_g}{p_{\mathrm{data}}+p_g}\Bigr]. $$

Mivel pdata+pg=2mp_{\mathrm{data}}+p_g=2m, és ∫pdata=∫pg=1\int p_{\mathrm{data}}=\int p_g=1, ez

V(D*)=DKL(pdata∥m)+DKL(pg∥m)−ln4=−ln4+2DJS(pdata∥pg). V(D^*)=D_{\mathrm{KL}}(p_{\mathrm{data}}\|m) +D_{\mathrm{KL}}(p_g\|m)-\ln 4 =-\ln 4+2D_{\mathrm{JS}}(p_{\mathrm{data}}\|p_g). \tag{6}

A KL-nemnegativitásból V(D*)≥−ln4V(D^*)\ge-\ln 4, egyenlőség a pdata=pgp_{\mathrm{data}}=p_g esetben áll fenn. Az eloszlástérbeli optimum tehát úgy áll elő, hogy a generátor a JS-távolságot nullára nyomja; ekkor D*=1/2D^*=1/2. Ez idealizált eredmény: a minG\min_G akkor vihető el −ln4-\ln 4-be, ha a generátorcsalád ténylegesen képes pdatap_{\mathrm{data}}-t előállítani.

31.2.4 Telítődés, nem telítődő loss és mode collapse

Legyen h=sϕ(xg)h=s_\phi(x_g) egy generált minta logitja. A (3) telítődő loss deriváltja a logit szerint

∂∂hln(1−σ(h))=∂∂hlnσ(−h)=−σ(h)=−Dϕ(xg). \frac{\partial}{\partial h}\ln(1-\sigma(h)) =\frac{\partial}{\partial h}\ln\sigma(-h) =-\sigma(h)=-D_\phi(x_g).

Ha a diszkriminátor határozottan „hamisnak” látja a generált mintát, Dϕ(xg)≈0D_\phi(x_g)\approx 0, így ez a gradiens nullához tart. A (4) nem telítődő loss deriváltja ezzel szemben

∂∂h[−lnσ(h)]=−(1−σ(h))=Dϕ(xg)−1. \frac{\partial}{\partial h}\bigl[-\ln\sigma(h)\bigr] =-\bigl(1-\sigma(h)\bigr)=D_\phi(x_g)-1.

Dϕ(xg)≈0D_\phi(x_g)\approx 0 mellett ez ≈−1\approx -1, tehát nem tűnik el. Ezért a gyakorlati GAN-training a generátorra szinte mindig a (4) alakot használja. A „telítődés” tehát a GG-gradiens eltűnése, nem a diszkriminátor pontossága önmagában.

Mode collapse. Ha pdatap_{\mathrm{data}} több jól elkülönülő módust tartalmaz, de a generátor sok zz-t ugyanabba a kis tartományba képez, akkor pgp_g csak egy vagy kevés módust fed le. Formális egységes definíció nincs; operatív jellemzői: hiányzó módusok (a valós adat egyes tartományaiba alig vagy egyáltalán nem esik generált minta), csökkent változatosság (a generált minták szórása, illetve a különböző minták aránya lényegesen kisebb, mint a valós adaté), és az, hogy sok különböző látens pont közel azonos kimenetre képeződik. A diszkriminátorra vonatkozó feltétel nem része a definíciónak: a diverzitás összeomlása erős diszkriminátor mellett is kialakulhat (egy ideális diszkriminátor éppen felismeri, hogy a két eloszlás eltér). Lehetséges, gyakran leírt tanítási helyzet, hogy a generátor egy olyan módusra tér át, amelyet a diszkriminátor éppen nem büntet, majd a diszkriminátor alkalmazkodása után másik módusra ugrik; ez a jelenség dinamikájának egyik formája, nem a feltétele. A nem telítődő loss javítja a gradiens erősségét, de önmagában nem akadályozza meg a mode collapse-et.

31.2.5 Kézi példa és kódos ellenőrzés

Legyen Ω={0,1,2}\Omega=\{0,1,2\} diszkrét, pdata=(0.5,0.3,0.2)p_{\mathrm{data}}=(0.5,0.3,0.2) és pg=(0.2,0.5,0.3)p_g=(0.2,0.5,0.3). Az (5) képlet pontonként:

xx pdatap_{\mathrm{data}} pgp_g D*D^*
0 0.5 0.2 5/7=0.71435/7=0.7143
1 0.3 0.5 3/8=0.37503/8=0.3750
2 0.2 0.3 2/5=0.40002/5=0.4000

A cél értéke az optimumnál

$$ V(D^*)=\sum_x\Bigl[p_{\mathrm{data},x}\ln D^*_x+p_{g,x}\ln(1-D^*_x)\Bigr]. $$

Behelyettesítve négy tizedesre: V(D*)=−1.2845V(D^*)=-1.2845. Az egyenletes D=0.5D=0.5 esetben

V(0.5)=2ln(0.5)=−1.3863, V(0.5)=2\ln(0.5)=-1.3863,

tehát az ideális diszkriminátor magasabb értéket ad. Az x=0x=0 pontban a derivált-ellenőrzés: p/D−q/(1−D)=0.5/(5/7)−0.2/(2/7)=0.7−0.7=0p/D-q/(1-D)=0.5/(5/7)-0.2/(2/7)=0.7-0.7=0.

# munkakönyvtár: lab/n122/
# Futtatás: python optimal_d_demo.py
import numpy as np

p = np.array([0.5, 0.3, 0.2], dtype=np.float64)
q = np.array([0.2, 0.5, 0.3], dtype=np.float64)

def V(D):
    return float(np.sum(p * np.log(D) + q * np.log(1.0 - D)))

D_star = p / (p + q)
D_half = np.array([0.5, 0.5, 0.5], dtype=np.float64)

print("V(0.5) =", f"{V(D_half):.6f}")
print("D*     =", np.round(D_star, 6))
print("V(D*)  =", f"{V(D_star):.6f}")
# Várt: V(0.5)=-1.386294; D*=[0.714286 0.375 0.4]; V(D*)=-1.284545

A kód nem igényel tanítást, csak a levezetett képletet ellenőrzi a diszkrét példán.

31.2.6 Labor: kétdimenziós keverék és collapse-diagnosztika

Kérdés. Négymódusú 2D-s adaton milyen móduslefedettséget mutat a generátor, és mikor jelez a diagnosztika mode collapse-gyanút?

Adat és környezet. A valós eloszlás négy izotróp Gauss-komponens keveréke, középpontjaik (0,0),(0,3),(3,0),(3,3)(0,0),(0,3),(3,0),(3,3), kovarianciájuk 0.05I0.05I, súlyaik egyenként 1/41/4. A latent pz=𝒩(0,I2)p_z=\mathcal N(0,I_2).

Specifikáció. A generátor 2→32→32→22\to32\to32\to2 MLP ReLU aktivációval, a diszkriminátor 2→32→32→12\to32\to32\to1 MLP, a kimenet logit. Adam-optimalizáló, tanulási ráta 2⋅10−42\cdot10^{-4}, batch B=128B=128, 2020 epoch ×100\times100 lépés. A generátor a (4) nem telítődő célfüggvényt használja. Seed 20261020, dtype float32, device "cpu". Futtatási parancs: python lab_toy_gan.py --seed 20261020 --epochs 20 --batch 128. A kézirat írásakor ez a labor nem futott; az alábbi kimenet ezért jelölt szemléltetés.

A collapse-diagnosztika a mentett generált mintákra:

# munkakönyvtár: lab/n122/
import numpy as np
samples = np.load("output/fake_seed20261020_epoch20.npy")  # (2048, 2)
centers = np.array([[0.,0.],[0.,3.],[3.,0.],[3.,3.]], dtype=np.float32)
d = np.linalg.norm(samples[:,None,:] - centers[None,:,:], axis=2)
mode = d.argmin(axis=1)
counts = np.bincount(mode, minlength=4) / len(samples)
nn_dist = []
for i in range(0, len(samples), 8):
    block = samples[i:i+8]
    dd = np.linalg.norm(block[:,None,:]-block[None,:,:], axis=2)
    np.fill_diagonal(dd, np.inf)
    nn_dist.append(dd.min(axis=1))
dup_rate = float(np.mean(np.concatenate(nn_dist) < 0.05))
print("modus_ratios:", np.round(counts, 4))
print("near_duplicate_rate:", round(dup_rate, 4))

A döntési szabály heurisztika: ha valamely középponthoz rendelt minta aránya 1%1\% alá esik, hiányzó módust jelentünk; ha a közeli duplikátumok aránya 0.050.05-ös küszöbnél 10%10\% fölé nő, az egyetlen módusra való összeomlást jelez. A küszöb a toy feladathoz tartozik, nem univerzális elméleti határ.

31.2.7 Feladatok

F1 (fogalmi, 1). Definíció szintjén adja meg a V(D,G)V(D,G) célfüggvényt, valamint a diszkriminátor- és generátorparaméterek frissítési irányát. Miért nem állítható, hogy a GAN „egyetlen közös loss” minimalizálása? Átadandó: a VV képlete, a két optimalizáló paraméterhalmaza, egy mondat a szerepek különbségéről.

F2 (levezetési, 2). Legyen Ω={0,1}\Omega=\{0,1\}, pdata=(0.6,0.4)p_{\mathrm{data}}=(0.6,0.4), pg=(0.9,0.1)p_g=(0.9,0.1). Vezesse le a D*D^* értékeit, számítsa ki V(D*)V(D^*)-ot és V(0.5)V(0.5)-öt, és ellenőrizze a konkavitást a 00 pontbeli második deriválttal. Átadandó: a teljes számolás négy tizedes pontossággal.

F3 (implementációs, 2). Írjon NumPy/PyTorch nélküli tiszta NumPy függvényt, amely tetszőleges azonos hosszúságú p,qp,q valószínűségvektorra kiszámítja D*D^*-ot, V(D*)V(D^*)-ot, és az első koordinátán egy finom rácson ellenőrzi, hogy D*D^* első eleme maximalizálja az első tagot. Átadandó: futtatható verify_optimal_d(p,q) függvény, inputpélda, tolerancia 10−610^{-6}, futtatási parancs.

F4 (hibakeresési, 2). Az alábbi kódrészletben hibásan van-e valamelyik optimalizáló paraméterhalmaza?

optD = torch.optim.Adam(D.parameters(), lr=2e-4)
optG = torch.optim.Adam(list(G.parameters()) + list(D.parameters()), lr=2e-4)

Lokalizálja a hibát, mondja meg a következményét, javítsa, és adjon egy torch.allclose-alapú utóellenőrzési lépést.

F5 (kísérleti transzfer, 3). Tervezzen kísérletet a telítődő (3) és nem telítődő (4) generátorcél összehasonlítására a fenti négymódusú 2D-s toy adaton öt seeddel. Rögzítse a megfigyelési egységet, a baseline-t, az összehasonlítási metrikákat, az erőforrásokat és a következtetési határt. Átadandó: protokolltáblázat és a lehetséges negatív eredmény értelmezése.

31.2.8 Megoldások és indoklás

F1. A cél

minGθmaxDϕV(Dϕ,Gθ),V=𝔼pdata[lnD]+𝔼pg[ln(1−D)]. \min_{G_\theta}\max_{D_\phi}V(D_\phi,G_\theta),\quad V=\mathbb E_{p_{\mathrm{data}}}[\ln D]+\mathbb E_{p_g}[\ln(1-D)].

A diszkriminátor ϕ\phi paramétereit VV maximalizálásával, a generátor θ\theta paramétereit VV minimalizálásával frissítjük; a gyakorlatban a generátorra gyakran a (4) nem telítődő cél kerül. Két külön paraméterkészletről és ellentétes célról van szó, ezért nem egy közös loss minimalizálása.

F2. D0*=0.6/(0.6+0.9)=0.4D^*_0=0.6/(0.6+0.9)=0.4, D1*=0.4/(0.4+0.1)=0.8D^*_1=0.4/(0.4+0.1)=0.8.

V(D*)=0.6ln0.4+0.4ln0.8+0.9ln0.6+0.1ln0.2=−1.2597. V(D^*)=0.6\ln0.4+0.4\ln0.8+0.9\ln0.6+0.1\ln0.2=-1.2597.

V(0.5)=2ln0.5=−1.3863. V(0.5)=2\ln0.5=-1.3863.

A 00 pontban a cél f(y)=0.6lny+0.9ln(1−y)f(y)=0.6\ln y+0.9\ln(1-y), második deriváltja

f″(0.4)=−0.60.42−0.90.62=−3.75−2.5=−6.25<0, f''(0.4)=-\frac{0.6}{0.4^2}-\frac{0.9}{0.6^2}=-3.75-2.5=-6.25<0,

tehát a pont maximum. A nevezőben a D*D^* második eleme is belül van (0,1)(0,1)-en, így a 44 tizedesre kerekített számolás érvényes.

F3. Példa-megoldás:

# munkakönyvtár: lab/n122/
# Futtatás: python verify_optimal_d.py
import numpy as np

def verify_optimal_d(p, q, tol=1e-6):
    p = np.asarray(p, dtype=np.float64)
    q = np.asarray(q, dtype=np.float64)
    assert p.shape == q.shape
    assert np.all(p >= 0) and np.all(q >= 0)
    assert abs(p.sum()-1) < tol and abs(q.sum()-1) < tol
    D_star = p / (p + q)
    y = np.linspace(1e-7, 1-1e-7, 200001)
    v1 = p[0]*np.log(y) + q[0]*np.log(1-y)
    j = int(np.argmax(v1))
    assert abs(y[j] - D_star[0]) < tol, (y[j], D_star[0])
    return D_star

if __name__ == "__main__":
    p = np.array([0.6, 0.4], dtype=np.float64)
    q = np.array([0.9, 0.1], dtype=np.float64)
    ds = verify_optimal_d(p, q)
    print("D*:", ds)
    print("OK, maximum a rácson:", ds[0])

A rács csak az első koordinátát változtatja; a többi koordináta rögzített. A tol=1e-6 a numerikus rácsfelbontásra és a normalizáltságra vonatkozik.

F4. A hiba az optG konstruktorában van: list(G.parameters()) + list(D.parameters()) a generátor-optimalizálóhoz köti a diszkriminátor súlyait is. Következmény: egy generátorlépés a ϕ\phi súlyokat is módosítja, tehát a két frissítés nem szétválasztott; a játék nem a tervezett minGmaxD\min_G\max_D sémát követi, oszcilláció vagy összeomlás léphet fel. Javítás:

optD = torch.optim.Adam(D.parameters(), lr=2e-4)
optG = torch.optim.Adam(G.parameters(), lr=2e-4)

Utóellenőrzés: a GG-lépés előtt mentsük el D_ref = [w.detach().clone() for w in D.parameters()], majd loss_G.backward(); optG.step() után ellenőrizzük, hogy minden torch.allclose(w.detach(), w_ref) igaz. Ha bármelyik eltér, a ϕ\phi súly még mindig az optG hatókörében van.

F5. Egy lehetséges protokoll:

Tényező Rögzített érték
Megfigyelési egység Egy teljes, rögzített lépésszámú training futás
Adat Négymódusú 2D Gauss-keverék, seed 20261020
D, G architektúra, Adam, batch Azonos a kettő karban
Változó tényező LGsatL_G^{\mathrm{sat}} (3) vagy LGnsL_G^{\mathrm{ns}} (4)
Seedek 5–5 training seed
Metrika Módusarányok, near-duplicate arány, D(G(z))D(G(z)) átlag

A baseline a telítődő cél, mert az eredeti V közvetlenül ezt tartalmazza. Előre rögzített lépésszám után értékelünk, nem válogatunk a seedek közül a metrika szerint. A következtetési határ: a négymódusú toy adat csak a mechanizmust teszteli; sem nagy képi adatra, sem termelési generatív modellre nem általánosítható. Negatív eredmény, például mindkét kar egyetlen módusra esik össze, korrekt eredmény, ha a nyers módusarányokat és a seedeket közöljük.

31.2.9 Tipikus tévedés és ellenpélda

Tévedés: „ha bebizonyítottuk a D*D^* képletét és a pg=pdatap_g=p_{\mathrm{data}} globális optimumot, akkor a gyakorlati GAN-training konvergálni fog.” A levezetés ideális, eloszlástéri eredmény. Ha a generátorcsalád nem képes pdatap_{\mathrm{data}}-t előállítani, a optimum nem is eleme a paramétertérnek.

Ellenpélda: legyen pdatap_{\mathrm{data}} egyenletes a {0,1}\{0,1\} halmazon, és legyen a generátor paraméter nélküli konstans leképezés, G(z)=0G(z)=0 minden zz-re. Ekkor pg=(1,0)p_g=(1,0). A képlet szerint D*(0)=0.5/(0.5+1)=1/3D^*(0)=0.5/(0.5+1)=1/3, D*(1)=1D^*(1)=1 határállapotban; a JS-távolság pozitív. A pg=pdatap_g=p_{\mathrm{data}} állapot ebből a generátorcsaládból elérhetetlen, bármilyen diszkriminátorfrissítést is végzünk. A nemkonvex, alternáló sztochasztikus gradiensfrissítés konvergenciája külön empirikus kérdés; az eloszlástéri optimum nem garantálja.

31.2.10 Önellenőrzés és korábbi fogalom visszahívása

Ellenőrizendő: szerepel-e minGmaxD\min_G\max_D, a D valós címkéje 11 és a generálté 00, a G nem telítődő céljában a generált minta targetje 11; a D-frissítésben detach; a labor nincs futtatottként feltüntetve. A 31.1. VAE és variációs alsó korlát VAE-jében explicit posterior és likelihood volt; itt egyik sincs, ezért a két modellcsalád optimalizálási garanciái nem felcserélhetők. A 30.2. Kontrasztív cél és temperature kontrasztív cél is logisztikus alakú, de ott a pozitív pár definíciója pretext-invarianciából jött; itt a „pozitív” egyszerűen a valós adat címkéje.

31.2.11 Rövid összefoglaló

A GAN a generátor és diszkriminátor minimax játékát optimalizálja: a diszkriminátor a valós és generált minták logisztikus osztályozója, a generátor a diszkriminátor megtévesztésére törekszik. Rögzített generátor mellett az ideális diszkriminátor pdata/(pdata+pg)p_{\mathrm{data}}/(p_{\mathrm{data}}+p_g), és a cél értéke −ln4+2DJS-\ln 4+2D_{\mathrm{JS}}. A telítődő generátorcél gradiense D≈0D\approx0-nál eltűnik, ezért használatos a −lnD-\ln D nem telítődő alak. A mode collapse a generált eloszlás diverzitásának összeomlása, amelyet külön diagnosztikával kell mérni. Az eloszlástéri optimum nem garantálja véges hálók tanítási konvergenciáját.

31.2.12 Következő alkalmazás

A 31.3. Diffúziós zajmodell és CNN-denoiser egység a denoising diffusion probabilistic modellek alapgondolatát tárgyalja; ott a generátor egy zajos képből tanul denoise-lépést, ami a GAN diszkriminátorától eltérő tanítási jelet ad. A most bevezetett „generátor mint eloszlásleképezés” fogalma ott is szükséges.

31.2.13 Felhasznált források