MLP-hermoverkko ja sen soveltaminen kuvien luokitteluun Konenäkö -kurssin 2008 vierailuluento Tietotekniikan laitos Jyväskylän yliopisto Konenäkö -kurssi, 25.9. ja 30.9.2008
Sisältö 1 Hermoverkon perusidea 2 Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus 3 Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja 4
Sisältö Hermoverkon perusidea 1 Hermoverkon perusidea 2 Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus 3 Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja 4
Neuroni Hermoverkon perusidea http://commons.wikimedia.org/wiki/image:neuron.jpg Hermosoluun saapuu eri lähteistä sähkökemiallisia signaaleja, joiden ylittäessä kynnyksen hermosolu laukeaa ja välittää signaalin eteenpäin. 1950-luvulta asti analogiaa on käytetty pohjana ainakin tietyn laskentamallin markkinoinnissa.
Keinotekoinen neuroni, aktivaatiofunktio Keinotekoinen hermosolu yhdistää herätteet esim. painotetulla summalla. Ulostulo on yksi luku, joka tulee ns. aktivaatiofunktiosta, esim. hyperbolisesta tangentista. Matemaattisesti esim. o = f (b + n i=1 w i(a) i ), missä o on ulostulo, (a) i ovat n kpl syötteitä, w i painokertoimet ja f on aktivaatiofunktio; b on bias- eli painotustermi, joka siirtää aktivaation kynnyspistettä. Demo: Plottaillaan aktivaatiofunktioita Octavella
Kerros, joka koostuu useista neuroneista Laitetaan useita keinotekoisia hermosoluja riviin. Jokaisella neuronilla on omat painokertoimet, ja niissä operoi aktivaatiofunktio. Sekä sisääntulo että ulostulo ovat vektoreita. Matemaattisesti esim. (o l ) j = f j (bj l + n l 1 i=1 w j,i l (ol 1 ) i ), missä o l on ulostulovektori, (o l 1 ) i ovat n l 1 kpl syötteitä, wj,i l on i:nnen syötteen painokerroin j:nnessä neuronissa, f j on aktivaatiofunktio; bj l on j:nnen neuronin bias. Indeksointi l 1 syötevektorille ja l ulostulovektorille ennakoi useiden kerrosten ketjuttamista (seur. kalvo).
Useita kerroksia yhdistämällä saadaan MLP Erikokoisia kerroksia voidaan yhdistää mikä tahansa määrä. Jokaisen kerroksen ulostulo lasketaan periaatteessa samoin. Kerroksen l ulostulo syötetään eteenpäin kerrokselle l + 1 (ilman takaisinkytkentää). Pienellä kikkailulla koko homma painotustermeineen voidaan esittää matriisimuodossa, jossa jokaista kerrosta vastaa yksi kerroinmatriisi ja yksi funktiomatriisi...
MLP:n ulostulo matriisimuodossa Kompakti esitystapa MLP:lle on o 0 = x, o l = F l (W l ô (l 1) ) for l = 1,..., L. (1) Tässä x on syötevektori. Se asetetaan nollannen kerroksen ulostuloksi. Kunkin kerroksen ulostulon kaavassa on erikoismerkintä ô (l 1). Se tarkoittaa operaatiota, jossa vektorin alkuun lisätään ylimääräinen ykkönen. Silloin bias-termit voidaan sijoittaa kutakin kerrosta vastaavan matriisin W l ensimmäiseksi sarakkeeksi ja vaikutus on sama kuin edellä esitettiin. F l puolestaan tarkoittaa sitä, että sovelletaan aktivaatiofunktiota vektorin alkioihin.
Lisähuomioita perus-mlp:stä Aktivaatiofunktioiksi valitaan usein logistinen sigmoidi tai hyperbolinen tangentti. Ovat derivoituvia. Kannattanee olla sama aktivaatiofunktio kaikilla kerroksilla. Viimeisellä kerroksella jätetään usein aktivaatio pois. Näin ollen ulostulojen arvot eivät rajoitu välille [0, 1] (logsig) tai [ 1, 1] (tansig). Riippuu tilanteesta, mitä halutaan.
Hermoverkon sovelluksia MLP on universaali approksimaattori: Matemaattisesti voidaan osoittaa, että mitä tahansa kuvausta voi approksimoida mielivaltaisen tarkasti valitsemalla riittävä määrä neuroneita ja sopivat kertoimet. (Tämä ei anna mitään konstruktiota sille, miten valinta tulisi tehdä!) Tällainen värkki soveltunee siis ilmeisen hyvin tuntemattoman funktion approksimointiin. Muita sovelluksia luokittelu, kohinan poisto,... Ks. kirjallisuus hakusanalla Neural network tai ensihätään esim. http://en.wikipedia.org/wiki/artificial_neural_network
Muita neuraaliarkkitehtuureja Edellä esitettiin yksinkertainen feed-forward eli eteenpäin syöttävä keinotekoinen hermoverkko. Takaisinsyöttö on mahdollinen, jolloin hermoverkosta tulee ajan suhteen elävä olio, jonka sisäinen tila muuttuu syötteen perusteella. Laskenta on niille vaativampaa, mutta ne toimivat luonnollisemmin mm. aikasarjoihin sovellettaessa. Radial basis function networks Itseorganisoituvat verkot Ks. kirjallisuus hakusanoilla Neural network recurrent/self-organizing tai ensihätään se http://en.wikipedia.org/wiki/artificial_neural_network
Transhumanistinen singulariteetti vuonna 2015? Eräänä päivänä ihminen ohjelmoi ihmistä itseään älykkäämmän koneen? (Ks. Matrix-elokuva)
Transhumanistinen singulariteetti vuonna 2015? Eräänä päivänä ihminen ohjelmoi ihmistä itseään älykkäämmän koneen? (Ks. Matrix-elokuva) Realiteetti on, että nykytietokoneella esim. keinotekoinen hermoverkko kykenee käsittelemään luokkaa 10 5 :n neuronin (varsin yksinkertaistettua) mallia kun taas eräs arvio ihmisaivojen hermosolumäärälle on luokkaa 10 12.
Transhumanistinen singulariteetti vuonna 2015? Eräänä päivänä ihminen ohjelmoi ihmistä itseään älykkäämmän koneen? (Ks. Matrix-elokuva) Realiteetti on, että nykytietokoneella esim. keinotekoinen hermoverkko kykenee käsittelemään luokkaa 10 5 :n neuronin (varsin yksinkertaistettua) mallia kun taas eräs arvio ihmisaivojen hermosolumäärälle on luokkaa 10 12. Ilmeisesti ihmiskunta on monen teknisen innovaation päässä omien koneidensa jalkoihin jäämisestä!
Transhumanistinen singulariteetti vuonna 2015? Eräänä päivänä ihminen ohjelmoi ihmistä itseään älykkäämmän koneen? (Ks. Matrix-elokuva) Realiteetti on, että nykytietokoneella esim. keinotekoinen hermoverkko kykenee käsittelemään luokkaa 10 5 :n neuronin (varsin yksinkertaistettua) mallia kun taas eräs arvio ihmisaivojen hermosolumäärälle on luokkaa 10 12. Ilmeisesti ihmiskunta on monen teknisen innovaation päässä omien koneidensa jalkoihin jäämisestä! Ei siis huolta vielä vuonna 2015.
Sisältö Hermoverkon perusidea Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus 1 Hermoverkon perusidea 2 Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus 3 Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja 4
Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus Tavoiteen asettaminen: Millainen verkko halutaan? Esimerkkinä luokittelu: Olkoon tarkoituksena että MLP kuvaa syötevektorin tiettyyn kategoriaan: esim. onko digikuvassa lintu, lentokone vai päärynä. Tai kohinanpoistaja, jolle ei ole suoraan tiedossa mallia: Olkoon tarkoituksena että MLP kuvaa syötteenä olevan häiriöisen digikuvan mahdollisimman häiriöttömäksi vastineeksi.
Kaikki vektoreiksi Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus MLP syö ja tulostaa vektoreita, joten kaikki on koodattava numeerisiksi vektoreiksi. Esim. kuva on kaksiulotteinen, joten täytyy esim. liittää pikselirivit peräkkäin yksiulotteiseksi vektoriksi. Käytännössä toimitaan piirteiden kanssa, ei alkuperäisten bittikarttojen. Ne ovat liian isoja (ellei tehtävänä ole jonkin lokaalin kohteen tarkastelu, esim. 5x5 pikselin alueen pakkaaminen pienempään tallennustilaan)
Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus Kategoristen piirteiden ja tulosteiden koodaus Joku piirre voi olla ns. kategorinen, jollainen on mukava kirjoittaa vaikkapa kokonaislukuna (esim. 1=kuvattu web-kameralla, 2=kuvattu järkkärillä, 3=kaapattu TV-lähetyksestä). Hermoverkon luonteesta johtuen tällaiset on syytä esittää binäärivektoreina, esim. [1-1 -1] = kuvattu web-kameralla, [-1 1-1] = kuvattu järkkärillä. [-1-1 1] = kaapattu TV:stä Sama pätee luokittelutehtävän tulosten eli luokkien koodaamiseen. Syy: Luokkien etäisyys kaikista muista luokista tulee olla sama.
Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus Kustannusfunktio: kuinka huonosti verkko toimii Arvioidaan sitä, miten huonosti verkko toimii! Yritetään löytää huonoutta kuvaavan funktion minimikohta. Esim. keskimääräinen virhe J({W}) = 1 N 2N i=1 N (x i) y i 2 missä N (x i ) on hermoverkon tuloste opetusvektorille x i ja y i on tunnettu totuus siitä, mihin ideaalinen hermoverkko kuvaisi x i :n. Tämä formulointihan näyttää pienimmän neliösumman tehtävältä...
Opetus-, validointi- ja testijoukko Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus Haluamme verkon, joka luokittelee ennaltanäkemätöntä aineistoa mahdollisimman hyvin. Saatavilla oleva aineisto on ns. opetusjoukko. Voi olla myös validointijoukko, jota käytetään opettamisen yhteydessä. (Lopetetaan ennen ylioppimista.) Parhaimmillaan on myös testijoukko, jonka avulla varmistutaan opetetun verkon laadusta. Validointi- ja testijoukko lohkaistaan käytettävissä olevasta opetusaineistosta. Mieluiten sitä siis olisi paljon! Verkon toimivuus riippuu siitä, miten hyvin opetuksessa käytetyt vektorit vastaavat todellisuutta (ja miten hyvin kustannusfunktio on kyetty minimoimaan).
Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus Miten kunkin painon muuttaminen vaikuttaa kustannusfunktioon Merkitään i:nnen opetusvektoriparin aiheuttamaa virhettä e i = N ({W l })(x i ) y i. Osoittautuu, että edellä mainitun kustannusfunktion gradientti voidaan laskea iteratiivisesti matriisimuodossa virheen etenemisen (backpropagation) avulla: missä W l J({W l }) = 1 N N i=1 ξ l i [ô (l 1) i ] T, ξ L i = e i, ξ l i = Diag{(F l ) (W l ô (l 1) i )} (W (l+1) 1 ) T ξ (l+1) i. (3) Kaavassa W (l+1) 1 on matriisi, joka saadaan poistamalla W (l+1) :stä ensimmäinen sarake, jossa on neuronien bias-termit. (2)
Miten huonous minimoidaan Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus Nyt osataan laskea kustannuksen gradientti! Voidaan käyttää esim. jyrkimmän laskun menetelmää: Jokaisella kierroksella jokaisesta painosta vähennetään vakiokertoimella kerrottu osittaisderivaattansa. Pikkuhiljaa verkko konvergoi varmasti kustannusfunktion lokaaliin minimiin, mikäli askelpituus on riittävän pieni.
Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus Muita opetusmenetelmiä ja formulointeja Edellä esitettiin derivoituva kustannusfunktio sekä ehkä yksinkertaisin mahdollinen kustannusfunktion gradienttiin perustuva opetusmenetelmä. Optimointi on tieteenala, joka kehittää jatkuvasti tehokkaampia ja luotettavampia menetelmiä funktion minimointiin. MLP:lle soveltuvia menetelmiä ovat mm. konjugaattigradienttimenetelmät, BFGS-menetelmä, Levenberg-Marquardt,... Mikä ettei myös geneettiset algoritmit! Kustannus voidaan formuloida myös eri tavoin, mm. epäsileäksi funktioksi (jolla ei siis ole kaikkialla gradienttia). Siihenkin on olemassa menetelmiä! Eli ei muuta kuin kirjastoon, hakusana optimization
Sisältö Hermoverkon perusidea Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja 1 Hermoverkon perusidea 2 Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus 3 Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja 4
Esimerkkiohjelmat Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja Katsotaan Matlab-koodia. (Käy myös Octaveen) Testiohjelmana oli varsin yksinkertainen funktioapproksimointi hyvin pienellä opetusjoukolla treenattuna. (Tähän päättyy torstain 25.9.2008 osuus)
Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja Kuvien tunnistaminen piirteiden avulla (Tästä alkaa tiistain 30.9.2008 osuus) Kokeillaan koodia Villen irrottamiin piirteisiin, ja yritetään luokitella ankkoja ym. Samalla tutustutaan testijoukon käyttöön sekä confusion matrix -tulosteeseen Tehdään myös variaatioita verkon kokoon ym. ja katsotaan vaikutusta. Kuvien alkuperä: Columbia University Image Library (COIL-20) http://www1.cs.columbia.edu/cave/software/softlib/coil-20.php
Pitkät piirrevektorit, dimensiokirous Ongelma: Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja Mitä enemmän numeroita piirrevektorissa, sitä enemmän painokertoimia optimoitavana Dimensiokirous : N-ulotteisen avaruuden tilavuudet ja etäisyydet karkaavat käsistä kun N on iso Laskenta hitaampaa ja globaalin optimin löytyminen epävarmempaa Optimointimenetelmät koetuksella myös muistinkäytön suhteen (mm. N 2 -kokoisen Hessen matriisin approksimointi) Epäolennaiset piirteet sekoittavat oppimista Ratkaisuna esimerkiksi: Dimensioreduktio: olennaisimpien piirteiden valitseminen Yksinkertaisimpia keinoja esim. PCA
Suo siellä lokaalit optimit Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja Ongelma: Nopeat, gradienttiin perustuvat optimointimenetelmät löytävät määrittelynsä perusteella lokaalin optimin. Millekään menetelmälle ei voida luvata sen löytävän mistä tahansa funktiosta aina globaalin minimin. Hermoverkon kustannus on mutkikas funktio minimoitavaksi. Ratkaisuna esimerkiksi: Niin vähän neuroneita kuin sovellus sallii. Paljon satunnaisia aloituspisteitä, joista uusi optimointi. Geneettiset algoritmit. Kustannusfunktion ns. regularisointi sakkotermein.
Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja Suuren aineiston ongelmia ja ratkaisuja Ongelma: Opetusaineistoa on paljon (mikä on tietysti hyvä asia). Kustannuksen laskeminen kuitenkin hidastuu lineaarisesti opetusaineiston määrän suhteen. Jos aineisto ei mahdu kerralla muistiin, joudutaan hankaluuksiin. Ratkaisuna esimerkiksi: Valitaan pienempi otanta opetusaineistoksi. Esim. jonkin metriikan mukaan eniten luokkien välisiä eroja kuvaava aineisto Tai sitten satunnaisesti, toivoen että pieni otanta kuvaa alkuperäisen ominaisuuksia hyvin.
Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja Pienen aineiston ongelmia ja ratkaisuja Ongelma: Opetusaineistoa on vähän. Jakaminen validointi- ja testijoukkoihin pienentää varsinaista opetusjoukkoa tuntuvasti. Luokittelija ylioppii opetusjoukon, eikä sillä ole käytössään kaikkea informaatiota. Ratkaisuna esimerkiksi: Ns. cross-validation: Jätetään yksi opetusesimerkki kerrallaan validointia varten, opetetaan kaikilla muilla ja katsotaan luokittuuko poisjätetty oikein. Saadaan jonkinlainen kuva ja luottamus siihen, miten käy kun koko aineisto käytetään opetukseen. Ylioppimista voidaan säännöstellä validointijoukon lisäksi kustannusfunktion regularisoinnilla (auttaa myös minimointia).
Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja Hankalan aineiston ongelmia ja ratkaisuja Ongelma: Se ei opi yhtään mitään Se oppii kaiken muun, mutta tietyt luokat keskenään sekaisin Ratkaisuna esimerkiksi: Onko piirteiden valinta mennyt oikein? Kokeillaan eri piirteitä. Onko opetusaineisto OK? Jos siellä on vääriä luokituksia tai liian kohinaista dataa, ei luokitinta voi opettaa. Käydään aineisto läpi. Käytetään maalaisjärkeä: Esim. jos erilaiset autot erottuvat kumiankoista ym. mutta luokittuvat keskenään sekaisin, ehkä voidaan tehdä erillinen luokitin tunnistamaan pelkästään autoja keskenään. Muodostetaan siis puumaisesti etenevä luokitin. Soveltuuko joku muu luokittelumenetelmä paremmin kuin MLP! Kaikki riippuu datasta, mm. se mikä menetelmä kannattaa valita.
Sisältö 1 Hermoverkon perusidea 2 Datan koodaaminen hermoverkolle sopivaksi Verkon hyvyyden/huonouden arviointi Backpropagation -opetus 3 Ohjelmakoodia Sovellusesimerkki Käytännön ongelmia ja ratkaisuja 4
Tämä oli kahden luennon mittainen esitys MLP-tyyppisen keinotekoisen hermoverkon soveltamisesta kuvien luokittelemiseen: Luonnon hermosolustoa jäljittelevä menetelmä voidaan kuvata matriisilaskujen ja aktivaatiofunktioiden avulla. Pari kuvaruudullista Matlab-koodia riittää toimivan toteutuksen luomiseen. Esim. C:llä tai Javalla on toteutettava matriisilaskut tai käytettävä valmista kirjastoa. Gradienttipohjaiset optimointimenetelmät käyvät opetukseen. Käytetään useimmiten opetus-, validointi- ja testijoukkoa. Lähtödatan kuten kuvien piirteistäminen ja aineiston esikäsittely (valinta, skaalaus, dimensioreduktio ym.) on erittäin tärkeää. Demonstroitiin COIL-20 -kuvilla; lähes 100% luokittelija lienee mahdollinen, jos opetettaisiin tarkentavat luokittimet keskenään samantyyppisille esineille.