Ez a lecke a Microsoft nyílt forráskódú "AI kezdőknek" (AI For Beginners) tananyagának magyar adaptációja. A konvolúciós neurális hálók tanításának egyik nagy korlátja, hogy rengeteg címkézett adatra van szükség. Egy képosztályozó betanításához valakinek végig kellett néznie és kategorizálnia a képeket, ez pedig drága és lassú folyamat. Az autoenkóder erre ad választ, mert nyers, címkézetlen adatokból is képes tanulni.
A módszert önfelügyelt tanulásnak nevezzük, mert nincs szükség külön címkére, a bemenet és a kimenet egyaránt maga a kép. Az autoenkóder két részből áll. Az enkóder hálózat a bemeneti képet egy jóval kisebb méretű, úgynevezett latens térbe tömöríti, majd a dekóder hálózat ebből a tömör reprezentációból megpróbálja visszaállítani az eredeti képet. Mivel a hálót arra tanítjuk, hogy a rekonstrukció minél pontosabb legyen, kénytelen megtalálni a kép lényegét megragadó, tömör beágyazást.
Mire jó egy autoenkóder
Önmagában egy kép visszaállítása nem tűnik különösebben hasznosnak, de az autoenkóder számos gyakorlati helyzetben bizonyul értékesnek.
- Dimenziócsökkentés és vizualizáció. Az autoenkóderek jellemzően jobb eredményt adnak, mint a hagyományos PCA módszer, mert figyelembe veszik a képek térbeli szerkezetét és a jellemzők hierarchiáját.
- Zajcsökkentés. Mivel a zaj rengeteg felesleges információt hordoz, a szűk latens tér nem tudja mindezt megőrizni, így a háló kénytelen csak a kép lényegi részére koncentrálni. Zajcsökkentő tanításnál eredeti képekkel dolgozunk, a bemenetet pedig mesterségesen hozzáadott zajjal terheljük meg.
- Felbontásnövelés. Magas felbontású képekből indulunk ki, a hálót pedig az alacsonyabb felbontású változat bemenetére tanítjuk.
- Generatív modellezés. A betanított dekóder rész önmagában is használható, véletlenszerű latens vektorokból kiindulva teljesen új, addig nem létező képeket hozhatunk létre vele.
A variációs autoenkóder (VAE)
A hagyományos autoenkóder csökkenti a bemeneti adat dimenzióját, és megtalálja a legfontosabb jellemzőket, de a latens tér szerkezete nem igazán értelmezhető. Vegyük az MNIST kézzel írott számjegyek adathalmazát, ahol a közeli latens vektorok nem feltétlenül ugyanazt a számjegyet reprezentálják. Ha viszont generatív modellt szeretnénk építeni, sokkal jobban járunk, ha van valamilyen elképzelésünk a latens tér szerkezetéről. Erre a problémára ad választ a variációs autoenkóder, röviden VAE.
A VAE nem közvetlenül egy latens vektort tanul meg előre jelezni, hanem egy statisztikai eloszlást, az úgynevezett latens eloszlást. A gyakorlatban ez azt jelenti, hogy az enkóder egy átlagot és egy szórást jósol meg minden bemeneti képhez, a dekóder pedig egy ebből az eloszlásból véletlenszerűen mintavételezett vektor alapján állítja vissza a képet.
A VAE veszteségfüggvénye két részből áll. A rekonstrukciós veszteség azt méri, mennyire hasonlít a visszaállított kép az eredetihez, ez lényegében ugyanaz, mint a hagyományos autoenkódernél. Emellett van egy úgynevezett KL veszteség is, amely a Kullback-Leibler divergencia fogalmán alapul, és arra kényszeríti a latens eloszlást, hogy közel maradjon a normális eloszláshoz. Ez utóbbi teszi lehetővé, hogy a latens teret értelmes módon be lehessen járni.
Ennek az az előnye, hogy sokkal könnyebben generálhatunk új, valósághű képeket, hiszen pontosan tudjuk, milyen eloszlásból érdemes mintavételezni. Ha például egy kétdimenziós latens térrel tanítunk VAE-t az MNIST adathalmazon, a latens vektor komponenseit finoman változtatva a számjegyek szépen, folytonosan egymásba alakulnak át. Ez a viselkedés jól mutatja, hogy a VAE valóban egy értelmes, folytonos térképet rajzol fel az adatok mögötti struktúráról.
Az autoenkóderek korlátai
Fontos tisztában lenni azzal, hogy az autoenkóder nem varázslat, hanem egy adatspecifikus eszköz. Egy virágokon betanított felbontásnövelő háló nem fog jól teljesíteni portréképeken, mert a finom részleteket a tanítóadatból tanulta meg, és azok más témájú képeknél nem érvényesek. A rekonstrukció emellett mindig veszteséges, a visszaállított kép sosem lesz pixelre pontosan azonos az eredetivel, a veszteség jellegét pedig a tanítás során használt veszteségfüggvény határozza meg. Ugyanakkor épp az a legnagyobb erénye, hogy címkézetlen adaton is működik, ami a gyakorlatban rendkívül értékes tulajdonság, hiszen a legtöbb szervezetnél és kutatói projektnél a nyers, felcímkézetlen kép sokkal könnyebben elérhető, mint a gondosan kategorizált adat.
Miért érdemes ezzel foglalkozni
Az autoenkóder és a VAE gyakorlati jelentősége túlmutat a puszta kép rekonstruáláson. Vállalati környezetben gyakran van hatalmas mennyiségű címkézetlen kép, dokumentum vagy szenzoradat, amit hagyományos felügyelt tanítással nem tudnánk kihasználni, mert nincs hozzá elég emberi annotáció. Az önfelügyelt megközelítés ezt a korlátot oldja fel, hiszen a tanítójel maga az adat, nem egy külön elkészített címke. Ez az elv nemcsak a képfeldolgozásban jelenik meg, hanem a nagy nyelvi modellek tanítási módszertanában is visszaköszön, hiszen azok is jórészt önfelügyelt módon, nyers szövegen tanulnak.
A VAE-nél megismert gondolat, hogy a latens teret egy értelmezhető, folytonos statisztikai eloszlásként kezeljük, azóta is alapja számos újabb generatív architektúrának. Aki megérti, hogyan és miért kényszerítjük a hálót arra, hogy a latens tér normális eloszlást kövessen, az sokkal könnyebben fogja megérteni a diffúziós modellek és más modern képgeneráló rendszerek működését is.
Gyakorlati kód
Ha szeretnéd saját kezűleg is kipróbálni, hogyan épül fel és tanul egy autoenkóder PyTorchban, a Microsoft eredeti jegyzetfüzete lépésről lépésre bemutatja a folyamatot. 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 →