AI kezdőknek · Számítógépes látás · Lecke 10

Generatív ellenfeles hálók (GAN)

Az előző leckében megismert VAE remek eszköz, de valósághű, magas felbontású képek generálására nem elég erős. A GAN két neurális hálót versenyeztet egymással, hogy egyre meggyőzőbb képeket állítsanak elő.

Vissza a tananyaghoz


Generátorhamis mintát próbál gyártaniDiszkriminátorvalódit próbál megkülönböztetni a hamistól
A GAN két hálózat versengéséből tanul egyre jobb generálást.

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ó.


Latens vektor véletlen számok Teljesen kapcsolt réteg Dekonvolúció, felbontásnövelés Generált kép hamis minta a generátor egy fordított képosztályozó, vektorból épít képet
A generátor latens vektorból, rétegről rétegre épít fel egy egyre nagyobb felbontású képet.

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.


  1. Diszkriminátor tanításaValódinak címkézett képek az adathalmazból, hamisnak címkézett képek a generátortól.
  2. Diszkriminátor befagyasztásaA paraméterei ideiglenesen nem változhatnak.
  3. Generátor tanításaÚgy módosul, hogy a kimenetét a befagyasztott diszkriminátor lehetőleg valódinak ítélje.
  4. IsmétlésA két lépés váltakozik, a veszteségek oszcillálnak, mindkét háló egyre jobb lesz.

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 egyetlen becsapós képet talál, és azt ismételgeti
  • A kimenetek változatossága eltűnik
  • Gyakori jel, ha a diszkriminátor vesztesége túl gyorsan nullára esik

Egészséges versengés

  • Mindkét háló vesztesége oszcillál, egyik sem nyer véglegesen
  • A generált képek változatosak és egyre meggyőzőbbek
  • Segít az eltérő tanulási ráta vagy a diszkriminátor lépéseinek ritkítása

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.


Tartalomkép mi legyen a képen Stíluskép milyen legyen a textúra Tartalomveszteség Stílusveszteség Variációs veszteség Eredmény tartalom új stílusban a három veszteség súlyozott összegét gradiens módszer csökkenti
A stílusátvitel három veszteségfüggvény egyensúlyából rajzolja újra a tartalomképet.

GenerátortanulDiszkriminátorértékelHibavisszacsatolásEgyensúlyfelé
A generátor és a diszkriminátor felváltva lép, a hurok szemlélteti a folyamatos versengést.

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.


← Előző lecke Következő lecke →

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 →