Eigenfelületek:

Figure #1: Casper the Friendly Ghost (forrás: https://vignette.wikia.nocookie.net/christmasspecials/images/e/e8/Casper.jpg/revision/latest?cb=20121014033319)

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.

2. ábra: nem ez a tér, hanem ez a tér is (forrás: https://img.purch.com/w/660/aHR0cDovL3d3dy5saXZlc2NpZW5jZS5jb20vaW1hZ2VzL2kvMDAwLzA5Ny85NTcvb3JpZ2luYWwvc3BhY2UuanBn)

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.

3. ábra: LFW (forrás: http://vis-www.cs.umass.edu/lfw/Six_Face_Panels_sm.jpg)

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