Magamról

Saját fotó
Főiskolai, majd egyetemi diplomamunkáimtól kezdve világ életemben, adatok, adatbázisok, adattárházak (leginkább Oracle) környékén mozogtam. Mostanság adattárházasként, adatbányászként élem napjaimat.

2015. december 2., szerda

Deep Learning

.
Volt szerencsém résztvenni kedvenc adatbányászós phd-szeminárium legutóbbi poszt-címbeli tárgyat érintő, Daróczy Bálint -nak köszönhetően szenzációsan jó alkalmán/előadásán és megpróbálnám reprodukálni az ottani infókat és saját gondolatvilágomba ágyazni az ott elhangzottakat.

Előre szólok, csak "trécselés" szinten, kedvcsinálóként írok, ami alulról próbálja elérni a szakmai blogposzt műfaját.
- Disclaimer: ami jó és érdekes az alábbi írásban az alapvető módon az előadásból származik, ami rossz az az én öreg rossz szemem és fülem, félreértelmezésem, hibáim/tévedéseim eredménye: ezt az olvasónak kell sajnos szétválogatnia, bár igyekszem megtámogatni ebben.
- A neurális hálók(NN) külön nagy tudomány, aminek részleteire itt meg sem kísérelhetek kitérni és bár bőven tanultam róla, gyakorlati tapasztalataimból elég rendesen hiányzik az alkalmazása.
- Én felhasználói szinten kvázi kívülről érkeztem a témához, mondhatni ez az első benyomásom a címbeli cuccról. Perpillanat nemhogy nem értek hozzá egyelőre nemhogy részleteihez, de felhasználói szinthez sem, de csomó mindent még az előadáson elhangzottakból sem igazán értek, tudok érdemben feldolgozni.

A deep learning, a neural network-ös machine learning egy aktuálisan nagyon is hottopic-ja, konkréten tudható, hogy mostanság komoly versenyeket lehet vele nyerni. Ráadásul óriási potenciál van benne még, hiszen alig-alig tudunk bármit is, meg értünk a működéséből, illetve rengeteg irányba lehet továbbvinni a tuningolását, és egy-egy ötlet végigvitele egy csoport heteit-hónapjait is le tudhatja kötni.

Ha bárkit mélyebben érdekel a téma, például kipróbálási szinten, akkor valamelyik győztes publikációjából valamint datasetjéből érdemes kiindulni, de javaslom a Kaggle-t itt is mint oly sokszor máskor is, mert a győzteseknek itt vannak legszigorúbb publikálási kötelezettségei, továbbá a résztvevők fórumokon osztják meg tapasztalataikat. (Ugyanis köztudottan lehet akár 12 oldalas „elfogadható” cikket publikálni a semmiről és/vagy reprodukálhatatlan módon, amivel nem kerül beljebb senki).  Léteznek tutorialok is. Kiváncsi leszek könyvben és tantervben mikor látom majd.... ;)

Ami a számítási teljesítményigényt jelenti, egy jelentősebb CUDA-s 100.000 forintos NVIDIA-kártyával már csodákat lehet tenni, amik ráadásul skálázhatók: 2x annyi kártya kvázi 2x annyi teljesítményt jelent (mínusz overhead). Azaz otthon is lehet próbálkozni;  kvázi nulla tőkét, "csak" tudást igényel a tárgybeli erőlködés.

Már most kétszámjegyű egyre okosabb és általánosabb implementáció áll rendelkezésre, számomra meglepő módon java egy sincs és 9:1 arányban van Python/C++ wrapper valamint egy szem LUA (torch), amikkel szintén lehet játszani.  Ugye mondanom sem kell, hogy IBM SPSS-ben, SAS-ban, Alteryxben és hasonló csillagrombolós gigászokban ne keressünk ilyeneket (még ha elvi plugin-technika miatti akadályuk nem is lenne). Viszont az open source cuccokban Weka/Knime/Rapidminer/R könnyedébben/gyorsabban meg fog tudni jelenni, bár a java-centrikusságuk lassító tényező lehet.
A leghíresebb, legelső, legáltalánosabb célú implementáció a theano

Előzmény: régen volt sok(féle) adatunk például ügyfelekről, majd némi trükközés pl.: mezőszármaztatás után relatíve egyszerű dolgok (mint elvándorlás-hajlandóság leképzése) következtek, pl.: kőegyszerű logisztikus regresszióval. Persze adattisztítással, data mart építéssel, vizualizációval, prezentációval, decision makinggel, folyamatba-integrálással, de ezek ezután is kellenek, szóval offtopik itt. Ha az embernek volt egy csodajó osztályozó algoritmusa pl.: SVM, avval már versenyeket lehetett nyerni még pár éve is.

Na a manapság nagyon menő jollyjoker már a Deep Learning, és már felhasználói szinten is brutálisan nehéz: környezetet setupolni, brutális komplexitásig menően neuron-layereket programozni, ráadásul úgy, hogy 90% megy aztán a kukába sikertelen próbálkozásként (max. lehet belőle cikket írni és/vagy jobb esetben beépül a tapasztalatba valamilyen formában).

Volt 1-2 éve egy ImageNet-es képfelismerő verseny A feladat nem is olyan egyszerű, ha gépi algoritmussal kell felismerni (osztályokba sorolni), hogy a képen például egy házimacsek avagy hiúz van. ;). A győztes 1-2 százalékot tudott javítani a többiekhez képest deep learninggel és evvel meg is nyerték a versenyt a klasszikus Fisher-score-os módszerekkel szemben. Plusz paraméteres aktivációs függvényt alkalmaztak, ahol a paraméter további machine learningből illetve nem normál (Gauss-)eloszlásos modellinicializálást és vagy még 8 további trükköt, de most nem cél ebbe jobban belemenni.

A versenyen: 1.2 millió képet adtak trainingnek, feladat: ha jól emlékszem 500.000 kép, 1000 osztályba sorolandó, 5-6 óra alatt. TOP1 40%hiba, TOP5 16% hiba már csak. Vagyis a legvalószínűbb illetve öt legvalószínűbb osztály megjelölése és annak hibaszázaléka, mind az 500.000 képre.

Egy következő fordulóban a Microsoft/GoogleNet/IBM-es gigacégek rúgtak már csak labdába, az akadémiai szféra kompletten nem fért fel a listára. ;) (Emlékszünk még, hogy a Netflixnél tarolt az akadémiai szféra?) Úgymond semmi hozzáadott értéket nem adtak, ugyanis ugyanezzel a deep learninggel, csak felskálázva több gépen, több és jobb CUDA-val, több réteggel (azaz mélyebb tanulással), több számolással, szignifikánsan jobb eredményt értek el.

A győztes levitte 30% és 11%-ra a hibázásokat és az az érdekes eredmény jött ki, hogy lassan-lassan az emberi hibázáshoz konvergál már a dolog. Nem úgy kell érteni, hogy egy ember nem ismer fel egy képen egy kutyát, hanem a sokadik kép után megnő a humánosztályozós félreklikkelések száma.

Mi is ez a Deep Learning? Vannak input és output rétegek adatszinten (ahogy mindig is, eddig is megszokottan).

Feladat
* tegyünk közéjük - definitive nem-lineáris típusú - hidden neuron-layereket a célból, hogy minden layer mást tanuljon olyatén transzformációőrző módon (azaz divergálás kicsi legyen), hogy réteg(elemek) ne tegyenek keresztbe másnak (súlyozás mindvégig közös például).

* A távolabbi cél e rétegezéssel kideríteni az adatokból, hogy mit érdemes megtanulni az adatokból (ezt manapság még data scientistes humanoid ember csinálja, ugye).
* Ennek aztán rögtön következménye az is, hogy például egy (fix) feature extraction (ami szívemnek oly kedves tevékenység volt eddig az adatbányászatban), innentől erősen felejtőssé válik értelemszerűen.
Ezt póriasan úgy is el lehet elképzelni, hogy egy SQL-es lekérdezéshez képest az adatbányászati tevékenység sokkal szofisztikáltabb (magyarán egy SQL-es csak "elefánt"-ként tud fungálni az adatok "porcelánboltjá"-ban), addig a feature extractionhöz képest a hidden-layerek tanulása a sokkal-sokkal kifinomultabb eljárás. Az információ áramlás input->hidden layerek->output-on kétirányú, egyrészt előrefele tanulóak, visszafele hibakorrigálók lehetnek (de nem kötelezően).

Mi a cél? Hát az, hogy a jelszó innentől: jól kell generalizálni (számok nyelvére lefordítani az alapproblémát), utána az ígéret szerint pl.: egy osztályozás már gyerekjáték lesz. A gond az, hogy ez baromi nehéz feladat, nem mindig végezhető el, sok minden megy a kukába menetközben és nem értjük pontosan mi hogyan működik benne (jól), lásd még NN-világban triviális "blackbox"-problémát, fogalmunk sincs hány réteg kéne, hogyan kell aztán visszanyesni őket (egyébként a döntési fa visszanyeséséhez – „prune” - analóg módon) a jó működés érdekében. A jó hír viszont az, hogy tettenérhető, ha jól működik a generalizált modell, „csak” el kell kapni a fonalat hozzá.

A fenti rizsa más szavakkal: építünk egy akár végletekig szofisztikált generalizált „modellszobrot”, ez erős túltanuláshoz (overfitting) vezet (hiszen „megtanulódik” maga a teljes adathalmaz) és emiatt a gond miatt baltával nekiesünk a szobornak és ütjük-vágjuk-nyessük, hogy jó és stabil legyen a modellműködés. A generalizálás során végletekig habosítjuk a kiinduló adatkáoszt: ami után adatpont x dimenzió szorzat így sokkal kisebb lesz mint a felhabosítás utáni teljes paramétertér (azaz pont nem sok adatból képzünk le keveset, mint korábban, hanem fordítva sokból még többet)

A nagy nóvum, ami az phd-előadást is inspirálta Hinton (őt az előadó szerint nagyon érdemes olvasni, röviden, tömören, érthetően ír) 2012-es cikke: dropout, ahol nem neuronokat, pláne layereket dobálnak el visszanyesés során, hanem csak neuronkötéseket pl.: full connected-ből, nem a számítási igény korlátai miatt, hanem helyesség iránti igényből (vesd össze hálózatelemzés, NN-től függetlenül is) olyatén módon, hogy minden neuron(működés) állapotját javítják (nem rontják).
Ha jól értettem az előadó szkeptikus volt ("miért és miért így") én a sokkal "távolabb" elhelyezkedő intuiciómmal ezt nagyon erős ígéretes iránynak érzem.
És akkor még réteg-átlapolásról, szavazásos boostingról egy szó sem esett.

Személyes konklúzióm: abszolút nem látom, nem érzékelem, hogy ekkora témabeli erőfeszítés hogyan-miképp hat és térül meg.
* Nekem ez az egész blackbox a négyzeten, még ha főbb vonalakban értem is, hogy mi történik (neurális hálók révén, ami 1950+-től létezik, 1980-tól intenzívebben). Vaktában kell a sötétben tapogatózni, vajákolni, nem kérdezni csak csinálni intuicióból, és siker esetén aztán örülni. Nagyon távol van ez még nekem a felhasználói "algoritmizálhatóságtól".
* Viszont az elvitathatatlanul nagyon jó indikátor, ha (jellemzően domain-free) versenyeket lehet vele megnyerni.
* Képzeljük el, ha erre még domainfüggő üzleti tudást is ráépít valaki (ami a versenyeken definitive nem tudhat működni, hiszen ott csak számokkal küzdenek a versenyzők legtöbbször).
* Belegondolni is brutális élmény, hogy bambán ugyanaz a módszer több gépen több számolással ekkora megbízható szignifikáns javulást tud hozni, úgy is, hogy alig-alig értünk az egészből bármit is. Képzeljük el, mi lenne, ha értenénk pontosan melyik részletből mi következik?


Update-1: bi.hu

Milyen  kicsi a világ. :) Arató Bence bi.hu-s honlapja a minap ezt a "Egyre több a nyílt forráskódú adatbányászati szoftver" link -et osztja meg, ami rögtön két érdekességet is rejt:

 (1) Amiről több szálon is beszéltem (deep learning és implementációi, ImageNet verseny)
"A Google TensorFlow az úgynevezett mély tanulás (deep learning)  terültének fonton szereplője. A szoftver többek között a Google Photos képkeresőszolgáltatásba is beépül."

(2) Öt évvel az adatbányász kihívások blogposztom után végre nagy örömmel ábrán is látom a megvalósított update cache egy verzióját.  Korábban ugye csak annyi volt, hogy a processben manuális állítás után  a szükségtelen (impact nélküli) kalkulációkat ne végezzünk a gyorsabb futás érdekében.  A valódi cache persze ennél sokkal értékesebb és komplexebb: amikor a szotver maga tud dönteni a rekalkulációról, sőt támaszkodik a korábbi eredményekre is.


Update-2: DATO

Következő PhD-szemináriumon Benczúr András mutatott egy DATO-s (iPython+scikit-learn) Deep Learning-es notebookot a MINST-adatbázisra.
* 80% training
* layerek, (hány) konvolúció, flatten, aggregációk, maxpool és egyéb paraméterek meghatározása, dropout-konfig, etc. automatikusan program által meghatározva.
* 99% pontosság 1 konvolúcióval(!)
* Kétséges, hogy ez az automatizmus megy általánosan is. Beszélgetés során elhangzott megjegyzés: "Ha majd idõsorokra jól megy majd akkor esetleg".

Update-3:  Google Tensorflow

* Soft Max Regresszió, amiről most hallottam előszőr.
* Bár épp a napokban csalódottságos cikket is lehet olvasni vele kapcsolatban, a SZTAKI-s csapat lát benne potenciált, szemléletileg is, implemenetációilag is, szemben a DATO-nál említett automatikussággal kapcsolatos szkepticizmussal.
* DATO-val szemben három lényegi ponton a felhasználó paraméterez/legóz, kötött szabályok szerint.
(1) Modell
(2) Célfüggvény
(3) Algoritmus


Google: TensorFlow - Google’s latest machine learning system, open sourced for everyone
Google: Building a deeper understanding of images


KDNuggets: TensorFlow Disappoints – Google Deep Learning falls shallow
KDNuggets: Popular Deep Learning Tools – a review
KDNuggets: Top 5 arXiv Deep Learning Papers, Explained
KDNuggets: Decision Boundaries for Deep Learning and other Machine Learning classifiers (R)
KDNuggets: Where to Learn Deep Learning – Courses, Tutorials, Software



Update-4: Chainer

* Japán eredetű, jóhírű cucc, csak megemlítődött.
* Itt egy 36 slide-os prezi.

Nincsenek megjegyzések:

Megjegyzés küldése