Eigenfelületek:
Having more by having less… Easy! Ez a gépi tanulási módszer segít abban, hogy több információt tároljon kisebb méretben, mindössze néhány lineáris algebrai alapismerettel. Ezáltal emberi arcokat fogunk visszanyerni néhány szellem alakú kuszaságból.
Megmondhattuk már, hogy a független vektorok absztrakt módon tereket hoznak létre. Most képzeljétek el a valóságban. Minden teret a vektorok alkotnak, és a terekben lévő dolgokat is. Ezek közül a vektorok közül néhány vektor egyes dolgokhoz jobban hozzájárul, mint a többiekhez. A többiek talán elhanyagolhatóak mellettük, és talán nem is kell tudnunk róluk, mert alapvetően nem érdekel minket, és nem akarjuk magunkkal cipelni a problémáikat. Ebben a bejegyzésben pontosan ezt fogom megmutatni a sajátterületekről.
Elvi témánk a PCA. Ez egy széles körben használt algoritmus a legkülönbözőbb témákban. Az arcokon való alkalmazása emberileg jobban értelmezhetővé teszi, ezért az egyik legnépszerűbb alkalmazás. A sajátarcok egy olyan módszer, amely hasznos az arcfelismeréshez és -detektáláshoz azáltal, hogy meghatározza az arcok varianciáját egy arcképgyűjteményben, és ezeket a varianciákat használja fel az arcok gépi tanulással történő kódolására és dekódolására a teljes információ nélkül, csökkentve a számítási és térbeli komplexitást. Bár ezt a módszert először 1991-ben Turk és Pentland alkalmazta, és a mai technológiához képest korlátai vannak, alapjai még mindig rendkívül hasznosak az új gyakorlatok számára.
Mielőtt rátérnénk a megvalósításra, szeretnék egy kis bevezetőt adni az említett alapfogalmakról. Emellett az általam használt teljes szkript és adatkészlet (az LFW_cropped egy kis töredéke) itt található.
Eigenvektorok és sajátértékek
Mindannyian tudjuk, hogyan működnek pontosan a sajátvektorok és a sajátértékek. Talán nem pontosan, de hallottunk már róluk, legalábbis sokszor. Íme egy magyarázat a hozzám hasonló kisebbség számára, akik folyton elfelejtik.
Legyen egy négyzetes A mátrix. Majdnem minden vektor irányt változtat, ha megszorozzuk A-val, ahogy azt várjuk. Vannak azonban bizonyos x vektorok, amelyek pontosan ugyanolyan irányúak, mint Ax. Szóval… Találd ki, mi a helyzet? Ezek a mi sajátvektoraink. Különlegesek… Még ha azonos irányúak is, Ax és x akkor is két különböző vektor lehet a nagyságuk alapján. Itt van egy ismerős egyenlőség. Ax=λx. Ami ezt a kettőt egyenlővé teszi, az λ, a nagyságkiegyenlítő skalárunk, sajátértékünk. Ebből megtudhatjuk, hogyan változott a sajátvektorunk a szorzás után
A fentiekből kiderül, miért hasznosak a gyakorlatban. A mélyebb megértésért és valószínűleg a megbecsülésért látogass el a MIT sajátértékek és sajátvektorok című fejezetébe.
Fő komponensanalízis (PCA)
A PCA fő célja a dimenziócsökkentés. Számos alkalmazása van a vizualizációban, a jellemzők kinyerésében, az adattömörítésben stb. A mögötte álló ötlet az eredeti adatok lineáris kivetítése egy alacsonyabb dimenziójú altérre, amely a vetített adatok maximális varianciáját és/vagy a vetítés minimális torzítási hibáját kínáló főkomponenseket (sajátvektorokat) kínálja. Végül mindkettő ugyanahhoz az eredményhez vezet, ami a legjobb rekonstrukciós képlet. Mellékesen megjegyezzük, hogy ezt az altérséget fő altérnek nevezik.
A variancia maximalizálásának és a torzítási hiba minimalizálásának számításait az ANU PCA-ról szóló előadásjegyzetében találja. Emellett egy másik videó a youtube-on Principal Components Analysis -Georgia Tech-Machine Learning címmel segített sokkal jobban megérteni a fogalmakat.
Implementáció
Oké! Mindenki készen áll a megvalósításra. Először is importáljuk a szükséges könyvtárakat. Feltételezem, hogy mindannyian tudjátok, mire valók. Én az algoritmusok magyarázó részére fogok koncentrálni. Ha bármilyen más kérdésetek van a kóddal kapcsolatban, hagyjatok választ alább.
Ezután szükségünk van egy függvényre, amely az adathalmazunkból származó képeket szépen megjeleníti. Itt is van.
Tegyük rá az lfwcrop_grey.zip adatállományunkra. Itt a számítási bonyolultság miatt csak az első 1000 arcot veszem, de ez igazából nem számít. Ha teljes házzal akarsz menni, akkor hajrá. Én is átalakítottam a képeket numpy tömbbe (1000, 64, 64, 64 alakú) a feldolgozáshoz.
Leave a Reply