A generatív ellenfeles háló, röviden GAN, két külön neurális hálóra épül, amelyeket egymás ellen tanítunk. A generátor egy véletlenszerű vektorból indulva próbál képet létrehozni. A diszkriminátor pedig egy képet kap, és el kell döntenie, hogy az a valódi tanítóadatból származik, vagy a generátor termelte ki. A diszkriminátor lényegében egy hagyományos képosztályozó, a generátor pedig ennek a fordítottja, egy latens vektorból indulva teljesen összekapcsolt réteggel, majd dekonvolúciós és felbontásnövelő rétegekkel épít fel egy képet. Ez nagyon hasonlít az autoenkóder dekóder részéhez, amelyről az előző leckében volt szó.
Miért ellenfeles a tanítás
A GAN nevében az "ellenfeles" szó onnan ered, hogy a generátor és a diszkriminátor folyamatosan versenyeznek egymással. A tanítás két lépésben zajlik. Először a diszkriminátort tanítjuk, ehhez a generátorral létrehozott, hamisnak címkézett képeket és a valódi adathalmazból vett, valódinak címkézett képeket egyaránt felhasználjuk. Utána a generátort tanítjuk, ehhez befagyasztjuk a diszkriminátor paramétereit, és a teljes hálózatot úgy futtatjuk, hogy a generátor véletlen vektorból induló kimenetét a diszkriminátor lehetőleg valódinak ítélje.
A folyamat során mindkét háló folyamatosan javul, ezért a veszteségértékek nem csökkennek monoton módon, hanem inkább oszcillálnak. Ez a viselkedés természetes, és azt jelzi, hogy a két háló valóban versenyben van egymással.
Miért nehéz tanítani egy GAN-t
A GAN-ok tanítása köztudottan kényes feladat, több jellegzetes probléma is felmerülhet.
- Módusösszeomlás. A generátor rájön, hogy elég egyetlen olyan képet előállítania, amivel becsapja a diszkriminátort, és nem kényszerül változatos kimenetekre.
- Érzékenység a hiperparaméterekre. Gyakori, hogy a tanítás egyáltalán nem konvergál, majd egy apró tanulási ráta módosítás hirtelen beindítja a folyamatot.
- Egyensúly a két háló között. Ha a diszkriminátor vesztesége túl gyorsan nullára esik, a generátor elveszíti a tanulási jelet. Ennek elkerülésére eltérő tanulási rátákat érdemes beállítani a két hálónak, vagy időnként ki kell hagyni a diszkriminátor tanítási lépését.
- Magas felbontás elérése. Sok konvolúciós réteg egymásra építése torzításokat okoz, hasonlóan az autoenkóderes felbontásnöveléshez. Erre az egyik megoldás az úgynevezett progresszív növekedés, amikor a tanítás alacsony felbontású képeken kezdődik, és a rétegeket fokozatosan oldják fel vagy adják hozzá.
Stílusátvitel
A GAN-okhoz szorosan kapcsolódó technika a stílusátvitel, amely egy tartalomképet egy másik, stíluskép szerinti vizuális stílusban rajzol újra. A módszer egy véletlen zajképből, vagy akár közvetlenül a tartalomképből indul ki, majd fokozatosan úgy alakítja azt, hogy egyszerre hasonlítson a tartalomképre és a stílusképre.
Ezt három veszteségfüggvény együttese biztosítja. A tartalomveszteség azt méri, mennyire őrződtek meg a konvolúciós háló mélyebb rétegeiben kinyert jellemzők a tartalomkép és az aktuális kép között. A stílusveszteség Gram mátrixok segítségével hasonlítja össze az aktuális kép és a stíluskép textúráját, mintázatait. A harmadik, úgynevezett variációs veszteség a szomszédos pixelek közti átlagos eltérést csökkenti, hogy az eredmény simább, kevésbé zajos legyen. Az optimalizáció ezt a három veszteséget súlyozottan összegzi, és gradiens módszerrel finomítja az aktuális képet, amíg az egyre inkább egyesíti a két forrás jellemzőit.
Gyakorlati jelentőség
A GAN-ok az elmúlt évek egyik legfontosabb generatív architektúrái közé tartoznak, és bár a legújabb, diffúzió alapú képgeneráló rendszerek sok területen átvették a vezető szerepet, a GAN mögötti alapelv, két hálózat versenyeztetése, a mai napig fontos építőelem marad. Olyan gyakorlati alkalmazásokban is találkozhatunk vele, mint a fotórealisztikus arcgenerálás, a régi vagy sérült fényképek felújítása, a szintetikus tréningadat előállítása olyan esetekben, ahol valós adat nehezen elérhető, vagy éppen a divat és a tervezőipar számára készült stílustranszfer eszközök.
Aki üzleti döntéshozóként találkozik ezzel a technológiával, annak érdemes tudnia, hogy a GAN tanítása erőforrás- és szakértelemigényes feladat, a fentebb felsorolt problémák miatt gyakran hosszú kísérletezést igényel, mire egy stabil, jól működő modell születik. Ezért a legtöbb valós projektben előre betanított, nyilvánosan elérhető GAN architektúrákra épülnek a megoldások, amelyeket a konkrét felhasználási területre finomhangolnak.
Érdemes megjegyezni, hogy a GAN-ok elterjedésével egy időben komoly etikai és jogi kérdések is felmerültek, elsősorban a hiteles, de valójában generált tartalmak, az úgynevezett deepfake-ek miatt. Egy vállalatnak, amely generatív képalkotást épít be a folyamataiba, érdemes már a bevezetés előtt tisztázni, milyen felhasználási és jelölési szabályokat követ, hogy a generált tartalom egyértelműen megkülönböztethető legyen a valós felvételektől.
Gyakorlati kód
A GAN felépítését és tanítását, valamint a stílusátvitel megvalósítását a Microsoft eredeti jegyzetfüzete mutatja be lépésről lépésre, PyTorchban. Gyakorlati kód a GitHubon.
Forrás
Ez a lecke a Microsoft nyílt forráskódú, MIT licenc alatt elérhető "AI For Beginners" tananyagának magyar adaptációja. Eredeti angol lecke. GitHub. Felhasznált magyar gépi fordítás. GitHub.
Workshop
AI Transformation Day
Egésznapos, vezetőknek szóló program. Feltérképezzük, hol tart a szervezet, mi az első reális lépés, és milyen belső feltételek szükségesek a sikerhez. A nap végén konkrét, prioritizált cselekvési lista.
Érdekel a program →