Szinguláris értékbontás vs. mátrixfaktorizálás az ajánló rendszerekben

Nemrég, miután megnéztem Andrew Ng professzor gépi tanulási tanfolyamának Ajánló Rendszerek osztályát, nagyon kellemetlennek éreztem magam, mert nem értettem, hogyan működik a Matrix Factorization.

Tudom, hogy a gépi tanulás néha nagyon homályos. Jobb, ha fekete dobozként gondolunk rá, de ez a modell nagyon "varázslatos" volt az én szabványaim szerint.

Ilyen helyzetekben általában megpróbálok további hivatkozásokat keresni a Google-on, hogy jobban megértsem a koncepciót. Ezúttal még jobban összezavarodtam. Míg Ng professzor az algoritmust (alacsony faktorszámú) mátrixfaktorizációnak nevezte, addig az interneten egy másik nomenklatúrát találtam: Szinguláris értékbontás.

A legjobban az zavart, hogy az Egyedüli értékbontás nagyon különbözött attól, amit Ng professzor tanított. Az emberek folyton azt sugallták, hogy mindkettő ugyanaz.

Ebben a szövegben összefoglalom a megállapításokat, és megpróbálok tisztázni néhány zavart, amelyet ezek a kifejezések okozhatnak.

Ajánló rendszerek

Az Ajánló rendszerek (RS) csak automatizált módszerek arra, hogy valakinek ajánljanak valamit. Az ilyen rendszereket széles körben használják az e-kereskedelmi vállalatok, a streaming szolgáltatások és a híroldalak. Segít csökkenteni a felhasználók súrlódását, amikor megpróbálnak megtalálni valamit, ami tetszik nekik.

Az RS határozottan nem új keletű dolog: legalább 1990 óta szerepelnek benne. Valójában a közelmúlt Machine Learning hype egy része az RS iránti érdeklődésnek tulajdonítható. 2006-ban a Netflix feltűnést keltett, amikor versenyt szponzoráltak, hogy megtalálják filmjeik legjobb RS-jét. Mint hamarosan látni fogjuk, ez az esemény összefügg az ezt követő nómenklatúra rendetlenségével.

A mátrixábrázolás

Nagyon sokféleképpen gondolkodhat az ember, ha filmet ajánlana valakinek. Az egyik stratégia, amely nagyon jónak bizonyult, a filmek értékelését a Felhasználók x Filmek mátrixként kezeli, így:

Ebben a mátrixban a kérdőjelek azokat a filmeket jelentik, amelyeket a felhasználó nem minősített. A stratégia az, hogy valahogy megjósolja ezeket az értékeléseket, és ajánlja a felhasználóknak azokat a filmeket, amelyek valószínűleg tetszeni fognak nekik.

Mátrix faktorálás

A Netflix versenyére benevezett srácok (nevezetesen Simon Funk) igazán okos felismerése az volt, hogy a felhasználók értékelése nem csak véletlenszerű találgatás volt. A minősítők valószínűleg követnek valamilyen logikát, ahol a filmben tetsző dolgokat (egy adott színésznő vagy műfaj) összevetik a nem tetsző dolgokkal (hosszú időtartamú vagy rossz poénok), majd pontszámot állítanak elő.

Ez a folyamat a következő lineáris képlettel ábrázolható:

ahol xₘ egy oszlopvektor az m film jellemzőinek értékeivel és θᵤ egy másik oszlopvektor, amelynek súlya u felhasználó által az egyes jellemzőkhöz megadható . Minden felhasználónak különböző súlykészlete van, és minden filmnek más és más értékkészlete van a jellemzőihez.

Kiderült, hogy ha önkényesen rögzítjük a funkciók számát, és figyelmen kívül hagyjuk a hiányzó minősítéseket, akkor olyan súlyok és jellemzők értékét találhatjuk, amelyek új mátrixot hoznak létre az eredeti minősítési mátrixhoz közeli értékekkel. Ez gradiens süllyedéssel történhet, nagyon hasonlóan a lineáris regresszióhoz. Ehelyett most két paraméterkészletet (súlyok és jellemzők) optimalizálunk egyszerre.

A fenti példaként megadott táblázat segítségével az optimalizálási probléma a következő új mátrixot generálja:

Figyelje meg, hogy a kapott mátrix nem lehet az eredeti pontos másolata a legtöbb valós adatállományban, mert a való életben az emberek nem szorzást és összegzést végeznek egy film értékeléséhez. A legtöbb esetben a minősítés csak egy bélérzet, amelyet mindenféle külső tényező is befolyásolhat. Mégis reméljük, hogy a lineáris képlet jó módszer arra, hogy kifejezze a főbb logikát, amely a felhasználói értékeléseket vezérli.

Rendben, most van egy hozzávetőleges mátrixunk. De hogyan segítsen nekünk megjósolni a hiányzó értékeléseket? Ne feledje, hogy az új mátrix felépítéséhez létrehoztunk egy képletet az összes érték kitöltésére, beleértve azokat is, amelyek hiányoznak az eredeti mátrixból. Tehát, ha meg akarjuk jósolni egy felhasználó hiányzó besorolását egy filmnél, akkor csak a film összes jellemző értékét vesszük, megszorozzuk a felhasználó összes súlyával, és mindent összegezünk. Tehát a példámban, ha meg akarom jósolni a 2. felhasználó besorolását az 1. filmre, a következő számítást végezhetem:

A dolgok világosabbá tétele érdekében szét tudjuk választani θ- eket és x- eket, és felrakhatjuk a saját mátrixukba (mondjuk P és Q ). Ez tulajdonképpen egy Mátrix Faktorizáció, ezért a Prof. Ng.

Ezt a Mátrix Faktorizálást alapvetően Funk tette. A Netflix versenyén harmadik helyezést ért el, nagy figyelmet keltve (ami érdekes eset, amikor a harmadik hely híresebb, mint a győztesek). Szemléletét azóta megismételték és finomították, és még mindig számos alkalmazásban használják.

Szinguláris érték felbontás

Írja be az egyes értékek bomlását (SVD). Az SVD egy fantasztikus módszer a mátrix három másik mátrixba való faktorizálására ( A = UΣVᵀ ). Az SVD végrehajtásának módja garantálja, hogy ez a 3 mátrix jó matematikai tulajdonságokkal bír.

Számos alkalmazás létezik az SVD számára. Az egyik a Principal Component Analysis (PCA), amely éppen egy n dimenziós adatállományt redukál k ( d <d ) dimenzióvá .

Nem adok további részleteket az SVD-kről, mert nem ismerem magam. A lényeg az, hogy ez nem ugyanaz, mint a Matrix Factorization esetében. A legnagyobb bizonyíték az, hogy az SVD 3 mátrixot hoz létre, míg Funk Matrix Factorization csak 2-t.

Tehát miért mindig felbukkan az SVD, amikor az Ajánló rendszereket keresem? Kicsit kellett ásnom, de végül találtam néhány rejtett drágakövet. Luis Argerich szerint:

Az ajánló rendszereknél használt mátrixfaktorizáló algoritmusok két mátrixot próbálnak megtalálni: P, Q, például P * Q, megegyezik a segédmátrix TUDOTT értékeivel. Ez az elv jelent meg a híres SVD ++ „Faktorizáció találkozik a szomszédsággal” című cikkben, amely sajnos az „SVD ++” nevet használta egy olyan algoritmushoz, amely semmilyen kapcsolatban nincs az SVD-vel .

A nyilvántartáshoz azt gondolom, hogy Funk, nem az SVD ++ szerzői, először javasolta az említett mátrixfaktorizálást az ajánló rendszerek számára. Valójában az SVD ++, amint a neve is mutatja, Funk munkájának kiterjesztése.

Xavier Amatriain nagyobb képet ad nekünk:

Kezdjük azzal, hogy rámutatunk arra, hogy az általában SVD-ként emlegetett módszer, amelyet az ajánlások összefüggésében használnak, nem szigorúan véve a mátrix matematikai egyesérték-bontását jelenti, hanem inkább egy megközelítő módszer a mátrix alacsony rangú közelítésének kiszámításához azáltal, hogy minimalizálják a négyzetes hibahullást Ennek pontosabb, bár általánosabb módja ennek a hívásnak a Matrix Factorization lenne. Ennek a megközelítésnek a kezdeti változatát a Netflix-díj kapcsán Simon Funk mutatta be híres Try This at Home blogpostjában. Fontos megjegyezni, hogy az „igazi SVD” megközelítést évekkel korábban valóban alkalmazták ugyanarra a feladatra, nem annyira gyakorlati sikerrel.

A Wikipedia hasonló információkat is tartalmaz a Matrix factorization (ajánló rendszerek) cikkében:

A Simon Funk által blogbejegyzésében javasolt eredeti algoritmus a felhasználói elem értékelési mátrixát két alsó dimenziós mátrix szorzataként faktorizálta, az elsőnél minden felhasználónak sora van, míg a másodiknak minden elemhez oszlop tartozik. Az adott felhasználóhoz vagy elemhez társított sort vagy oszlopot látens tényezőknek nevezzük. Ne feledje, hogy neve ellenére a FunkSVD-ben nem alkalmaznak egyes értékek bontását.

Összefoglalni:

1. Az SVD egy kissé bonyolult matematikai technika, amely három új mátrixba integrálja a mátrixokat, és számos alkalmazással rendelkezik, beleértve a PCA-t és az RS-t is.

2. Simon Funk nagyon okos stratégiát alkalmazott a 2006-os Netflix versenyen, egy mátrixot két másikba osztva, és a gradiens süllyedést használva a tulajdonságok és a súlyok optimális értékeinek meghatározásához. Ez nem SVD , de egyébként is ezt a kifejezést használta a technika leírására.

3. A Funk megfelelőbb kifejezése a Matrix Factorization.

4. A jó eredmények és az ezt követő hírnév miatt az emberek még mindig SVD-nek hívják ezt a technikát, mert nos, a szerző így nevezte el.

Remélem, ez segít egy kicsit tisztázni a dolgokat.