28.01.2016

Deep learning – Mitä se on?

“Deep learning”- termiin törmää nykyisin monessa yhteydessä, esimerkiksi lukiessaan kagglen kilpailujen tuloksia tai alan kirjoituksia (machine learning). Google Trendsistä tarkastettuna “deep learning” tai tuttavallisemmin syväoppiminen on alettu hypettämään 2012 vuoden lopusta lähtien ja termin viljeleminen internetissä on ollut liki eksponentiaalisessa nousukiidossa. Mistä oikein on kyse?

Syväoppimisen voi ymmärtää monella tapaa. Joillekin se voi merkitä ainoastaan perinteisien mallinnusmenetelmien soveltamista, askeleena raportoinnista kohti ennustavaa analytiikka. Omasta näkökulmasta ajateltuna kyseessä on joukko mallinnusmenetelmiä normaalia kompleksisempien datastruktuurien tai ilmiöiden mallintamiseen/ennustamiseen. Tekisi mieli sanoa, että syväoppiminen on suurilta osin erityyppisten neuroverkkojen (convolution, radial basis, recurrent, stochastic,…) tuunaamista ja optimoimista erilaisiin tavallista haastavampiin mallinnusongelmiin. Tälläisiä ongelmia ovat esimerkiksi käsialan (kirjainten ja numeroiden) ja puheen tunnistaminen, genetiikan mallinnusongelmat. Kyseiset mallinnusongelmat voivat olla tyypiltään supervised- tai unsupervised (mitä nämä ovat suomeksi? itseoppiva ja ei-itseoppiva?).

Vahvasti kuitenkin näyttää siltä, että myös ns. tukivektorikoneen (SVM) käyttöä voidaan pitää syväoppimisena, tämä on hyvin ymmärrettävää, sillä todellisuudessa suurin osa kyseisen menetelmän soveltajista ei oikeastaan tiedä yhtään mitään siitä, mitä mallinnuksen aikana tapahtuu matemaattisesti, enkä voi myöskään suosittele kaikkia ottamaan selvää asiasta, ainakaan kovin syvällisesti. Perusperiaatteen tunteminen yksinkertaisessa tapauksessa on tietysti suotavaa. Lisäksi todettakoon, että tukivektorikone ja neuroverkko eivät itseasiassa pohjimmiltaan eroa kovinkaan suuresti toisistaan, joten on perusteltua lisätä tukivektorikoneet samaan kategoriaan, kun rajoitetaan tarkastelu supervised-tyyppisiin syväoppimisen menetelmiin.

“Tavanomaisiin” mallinnusongelmiin (supervised & verrattain selkeä datan rakenne) käytettävissä neuroverkoissa on tavallisesti yksi, tai maksimissaan kaksi tasoa (hidden layers). Syväoppimisessa käytettävien neuroverkkojen tasojen määrä voi olla huomattavasti suurempi, joka mahdollistaa kompleksisemman datan rakenteen mallintamisen. Itseasiassa syväoppimiseen luokiteltavien neuroverkkotyyppien rakenne ja estimointimenetelmät mahdollistavat sen, että laskennan takana ei tarvita välttämättä yhtä paljon rautaa kuin saman mallinnusongelman ratkaisemisessa tavanomaisella neuroverkolla. Tästä syystä tasojen lisääminen ei välttämättä muodostu laskennallisesti mahdottomaksi.

Tein kenttäkokeita syväoppimiseen lukeutuvilla neuroverkoilla luokitteluongelmille, joihin business-maailmassa törmää usein ja vertasin tuloksia perinteisempien menetelmien (satunnainen metsä, boostattu päätöspuu) tuloksiin, tässä joitakin huomioita:

a. Neuroverkon parametrien optimointi (~15-20 parametria, mm. tasojen lkm, regularisointiparametrit, aktivointifunktioit.) muistutti läheisesti tietokoneen tweekkaamista, ts. laskenta-ajan mahdottomuus vs. luokittelutarkkuus. Joidenkin parametrien merkityksestä itse neuroverkon estimointiprosessissa ei itselläni ollut mitään hajua (laiskuus iski, en jaksanut selvittää ja/tai ymmärtää kaikkien syvällistä merkitystä!). Onneksi käyttämäni ohjelma kertoi arvioidun jäljellä olevan laskenta-ajan suhteellisen osuuden, joten joidenkin parametrikombinaatioiden osalta oli peli vihellettävä poikki hyvissä ajoin!

b. Satunnainen metsä ja boostattu päätöspuu suoriutuivat mallinnusongelmista yhtä hyvin kuin neuroverkko, pienemmällä määrällä parametrien säätöä. Neuroverkon laskenta-ajan käytin taustamuuttujien muunnoksien muodostamiseen ja muuttujien valintaan. Neuroverkkoihin syötin taustamuuttujat sellaisenaan.

c. Neuroverkon parametrien optimointi suoritettiin intensitiivisenä rinnakkaislaskentana, joten koneen käyttäminen laskenta-aikana oli liki mahdotonta. Tästä tuli mieleen tunnettu slogan “jää aikaa muuhunkin”. Ilman rinnakkaislaskentaa olisi mallinnukset kestäneet arviolta 3 kertaa kauemmin.

d. Enpä oikeistaan ymmärtänyt mitä neuroverkon opettamisessa tapahtui, täysin blackbox… No tulokset olivat kuitenkin yllättävän hyviä manuaaliseen iteroimisvaivaan nähden, rauta hoiti hommat. Tulokset olivat vahvasti sidoksissa parametrien optimointiin, joten optimointi oli välttämätöntä.

Yhteenvetona voisi todeta, että neuroverkkoa (syväoppimiseen lukeutuva/lukeutuvat) käytettäessä analyytikon manuaalinen iteraatiokierroksiin käytetty aika käytettiin laskenta-aikaan. Satunnaisen metsän ja boostatun päätöspuun parametrien optimointi tuntui varsin tylsältä ja yksinkertaiselta. Fiilis neuroverkon estimoinnin valmistumisesta ja tulosten tupsahtamisesta toi mieleen joulunajan odotuksen ja lahjojen avaamisen: aina ei piinallisen odottelun jälkeen lahja (mallin tarkkuus) ollut mieleinen tai vastaavasti joulupäivänä seuraavan jouluun (estimoinnin valmistuminen) odottaminen tuntui tolkuttoman pitkältä ajalta.

Omien kenttäkokeiden perusteella suurin osa supervised-tyyppisistä yritysmaailman mallinnusongelmista ei välttämättä tarvitse syväoppimisen menetelmien kirjoa, voi kuitenkin joskus olla järkevää jättää yöksi kone jauhamaan neuroverkkojen (ja tukivektorikoneiden) pariin saadakseen jonkin benchmark-tuloksen perinteisimmille, ehkä hieman tulkinnallisemmille menetelmille.

Itse en ole suuri neuroverkko tai tukivektorikone fani/spesialisti, mutta lupasin itselleni jatkossa hyödyntää koesession oppeja ja valmiita syväoppimisen aihioita päivittäisessä mallinnustyössäni enemmän. Syväoppimisen menetelmiin syvällinen perehtyminen ei siis välttämättä ole aivan tarpeen ellei työnkuvaasi kuulu unsupervised-ongelmien ratkominen, joissa tulet ennen pitkään törmäämään hypetettyyn käsitteeseen halusit sitä tai et.

Share
Contact Person

Blog writer

Lasse Liukkonen