Johdatus tekoälymatematiikkaan (kurssilla Johdatus Watson-tekniikkaan ITKA352) Informaatioteknologian tiedekunta Jyväskylän yliopisto 23.3.2018
Tekoälyn historiaa 6 1 Introduction Kuva Fig. lähteestä 1.3 History of [?]. the various AI areas. The width of the bars indicates prevalence of the method s use
Koneoppiminen Koneoppiminen on tekoälyn osa-alue, jossa kone/ohjelma oppii pohjatiedon ja käyttäjän toiminnan perusteella. Kaikkia erilaisia tilanteita varten ei ole erillistä ohjetta vaan oppiminen tapahtuu kokemuksen pohjalta. Ohjattu oppiminen Konetta opetetaan luokitellun aineiston (syöte-tavoite-parit) avulla. Halutaan, että kone osaa tehdä luokittelun samankaltaiselle aineistolle. (Käsinkirjoitettujen numeroiden tunnistus.) Ohjaamaton oppiminen Jäljittelee ihmisen oppimista. Opettamiseen käytetään raakadataa, josta pyritään löytämään samankaltaisuuksia ja suhteita eri syötteiden välillä. (Akateemikko Teuvo Kohosen 1980-luvulla kehittämä itseorganisoituva kartta.) Vahvistettu oppiminen Kone oppii ympäristön antaman palautteen perusteella. (Robotiikka.)
Ohjattu, ohjaamaton ja vahvistettu oppiminen
Ohjattu oppiminen Syöte-tavoite-parien (x, y) valinta. (esim. käsinkirjoitetun tekstin tunnistamisessa kirjain/sana/rivi) Opetusesimerkkijoukon valinta. Syötteen ominaisuusvektorin x = (x 1,..., x n ) valinta. Montako ominaisuutta? Mitkä ominaisuudet? Opetusmenetelmän -ja algoritmin valinta. Päätöspuu/tukivektorikone/neuroverkko/Bayes-verkko/...? Alkuparametrien valinta. Koneen opettaminen opetusesimerkkijoukon avulla. Parametrien päivittäminen. Testaaminen testijoukon avulla.
Keinotekoiset neuroverkot Jäljittelevät ihmisen aivojen toimintaa. Keksittiin 1940-luvulla. Uusi aalto 1990-luvulla - eivät olleet muita menetelmiä parempia ja silloisilla tietokoneilla ei voitu käsitellä neuroverkkojen opettamisessa tarvittavia suuria datamääriä. 2010-luvulla koneiden nopeutuminen ja datan määrän valtava kasvaminen ovat kasvattaneet innostusta syväoppimiseen (deep learning) = toinen uusi aalto! Kuvantunnistus, konenäkö, puheentunnistus, kieltenkääntäjät, pelit ja lääketieteelliset diagnoosit.
Keinotekoiset neuroverkot Neuroverkko koostuu syöte- ja ulostulokerroksesta ja niiden välissä olevista piilokerroksista. Neuroverkko on funktio f : R n R m. Syöte on n-ulotteinen vektori x = (x 1, x 2,..., x n ), piilokerrokset hoitavat laskutehtävän ja ulostulokerroksesta saadaan funktion arvo f (x) = y = (y 1, y 2,..., y m ).
Keinotekoiset neuroverkot Piilokerroksien ja ulostulokerroksen jokaisessa neuronissa lasketaan syötekerroksesta tai piilokerroksesta tulleiden syötteiden painotettu summa ja siihen lisätään neuronin vakiotermi. Ennen neuronin tuloksen lähettämistä seuraavalle neuronille summa viedään aktivointifunktioon. Aktivointifunktiot muuttavat affiinin (eli ensimmäisen asteen polynomin) syötteen epälineaariseksi. (Ohjatussa oppimisessa) tulosta verrataan syötettä x vastaavaan tavoitteeseen y ja verkkoa opetetaan tuloksen ja tavoitteen välisen virheen avulla.
Neuroverkkoesimerkki (1 piilokerros) Syötevektorin komponentit x 1 ja x 2 kerrotaan piilokerroksen neuroneiden painoilla wij 0, lasketaan yhteen ja summaan lisätään piilokerroksen neuronin vakiotermi b i :
Neuroverkkoesimerkki (1 piilokerros) z 1 1 = w 0 11x 1 + w 0 21x 2 + b 1 = z 1 2 = w 0 12x 1 + w 0 22x 2 + b 2 = 2 i=1 2 i=1 w 0 i1x i + b 1, w 0 i2x i + b 2, summat z3 1 ja z1 4 lasketaan samaan tapaan. Nämä summat viedään piilokerroksen aktivointifunktiolle. Piilokerroksen neuronien antamat syötteet ulostulokerrokselle ovat a 1 = ϕ(z 1 ), a 2 = ϕ(z 2 ), a 3 = ϕ(z 3 ) ja a 4 = ϕ(z 4 ). Verkon antama tulos saadaan käyttämällä piilokerroksen ja ulostulokerroksen välisiä painoja ja aktivointifunktiota: ( 4 t = ϕ(z1 2 ) = ϕ wi1a 1 i ). i=1
Keinotekoiset neuroverkot - parametrien merkinnät l on kerrosindeksi, 0 on syöte- ja L ulostulokerros N l = kerroksen l neuronien lukumäärä, wij l = kerroksen l 1 neuronin i ja kerroksen l neuronin j välillä oleva paino, bj l = kerroksen l neuronin j vakiotermi, z l j = kerroksen l neuronia j vastaava summa z l j = N l 1 i=1 a l j = kerroksen l neuronin j tulos a l j = ϕ(z l j ) = ϕ w l ija l 1 i + b l j, ( N l 1 i=1 ) wija l l 1 i + bj l, missä ϕ on aktivointifunktio (voi vaihdella kerroksesta toiseen).
Perseptroni - yksinkertaisin neuroverkko Perseptroni on syötekerroksen ja yhden neuronin muodostama verkko, jonka ainoat mahdolliset tulokset ovat 0 ja 1. syöte x = (x 1, x 2,..., x n ), painovektori w = (w 1, w 2,..., w n ), vakiotermi b R, aktivointifunktio yksikköporrasfunktio (Heavisiden funktio) { 1, jos s > 0 h(s) = 0, jos s 0.
Perseptroni lineaarinen luokittelija, päätöksentekijä Perseptronia vastaa funktio P : R n {0, 1}, { 1, jos w x + b > 0 P(x) = 0, jos w x + b 0. Funktio f : R n {0, 1} voidaan esittää perseptronilla jos ja vain jos alkukuvat f 1 ({0}) ja f 1 ({1}) ovat lineaarisesti erotettavat. Tasossa R 2 tämä tarkoittaa sitä, että joukkoja A ja B vastaavat pisteet voidaan erottaa suoralla ja R 3 :ssa sitä, että pistejoukot voidaan erottaa tasolla.
Perseptroni Vasemman kuvan pistejoukko on lineaarisesti erotettava, oikean ei.
Perseptroni ja loogiset konnektiivit AND ja XOR Konnektiivi AND : {0, 1} {0, 1} {0, 1}, AND(0, 0) = 0, AND(0, 1) = 0, AND(1, 0) = 0, AND(1, 1) = 1, voidaan esittää perseptronilla
Perseptroni ja loogiset konnektiivit AND ja XOR Konnektiivia XOR : {0, 1} {0, 1} {0, 1}, XOR(0, 0) = XOR(1, 1) = 0 XOR(0, 1) = XOR(1, 0) = 1 ei voida esittää perseptronilla.
Perseptroni Perseptronin ongelma: pieni muutos painoissa voi aiheuttaa ison muutoksen tuloksessa! Ratkaisu: vaihdetaan aktivointifunktiota
Aktivointifunktiot Neuroverkon piilo- ja ulostulokerroksissa käytetään aktivointifunktioita ϕ: R R. Aktivointifunktion toivottuja ominaisuuksia epälineaarisuus: summa ja yhdistetty funktio affiineista funktioista affiini - halutaan yleisempää derivoituvuus: monissa virhefunktion minimointitavoissa tarvitaan aktivointivointifunktion derivaattaa identtisen funktion approksimointi: lähellä identtistä funktiota nollan lähellä = neuroverkko oppii tehokkaasti kun painot alustetaan satunnaisluvuilla
Aktivointifunktiot - Sigmoid Sigmoid-funktio σ : R ]0, 1[, σ(x) = 1 1+e x = 1 1+ 1 e x rajoitettu, aidosti kasvava, jatkuva σ C (R) ja σ (x) = e x (1 + e x ) 2 = σ(x)(1 σ(x)). lim σ(x) = 0, lim σ(x) = 1 x x
Aktivointifunktiot - Sigmoid σ(x) = 1 1+e x kasvaa hyvin hitaasti kun x kasvaa ja vähenee hyvin hitaasti kun x vähenee Häviävän gradientin ongelma: σ = σ(x)(1 σ(x)) on hyvin pieni kun x on suuri tai pieni = verkko oppii hitaasti käytettäessä derivaattoihin perustuvia menetelmiä ei ole symmetrinen nollan suhteen käytetään lähinnä ulostulokerroksessa varsinkin jos verkon tulokset ovat välillä [0, 1].
Aktivointifunktiot - tanh Hyperbolinen tangentti tanh: R ] 1, 1[, tanh(x) = 1 e 2x 1+e 2x rajoitettu, aidosti kasvava, jatkuva tanh C (R) ja tanh (x) = 1 tanh 2 (x) lim tanh(x) = 1, lim tan(x) = 1 x x symmetrinen nollan suhteen, kasvaa nopeammin nollan lähellä kuin σ
Aktivointifunktiot - ReLu ReLu (Rectified Linear Unit f : R [0, [, f (x) = max{0, x}. kasvava, jatkuva ei ole derivoituva nollassa lim x f (x) = f (x) = 0 ja f (x) = 0 kun x < 0 = neuronien painot saattavat päivittyä oppimisen aikana nollaksi jolloin neuronit kuolevat
Aktivointifunktiot - ReLu yksinkertainen ja tehokas hyvin yleinen syväoppimisessa (deep learning) käytä vain piilokerroksissa häviävän gradientin ongelman korjaa Leaky ReLu, f : R R, f (x) = max{ax, x} 0 < a < 1.
Neuroverkon opettaminen - gradienttimenetelmä Neuroverkkoa opetetaan syöte-tavoite-pareilla (x, y) eli opetusesimerkeillä. Neuronien parametrit alustetaan ja verkon syötteelle x antamaa tulosta t verrataan valitulla virhefunktiolla tavoitteeseen y. Virhefunktion arvo lasketaan valitulla opetusesimerkkijoukolla. Tavoitteena on virhefunktion minimointi. Kaikkien neuronien vaikutus virheeseen ja virhefunktion E osittaisderivaatat E E w ja b verkon kaikkien painojen w ja vakiotermien b suhteen lasketaan esimerkiksi vastavirta-algoritmilla. Osittaisderivaatoista saadaan gradientti E.
Neuroverkon opettaminen - gradienttimenetelmä Virhefunktion gradientti E kertoo nopeimman kasvun ja siten gradientin vastavektori E nopeimman vähenemisen suunnan. Sopivilla askelilla nopeimman vähenemisen suuntaan siirtymällä löydetään (gradienttimenetelmään sopiville funktioille) lokaali minimi. Kun piilokerroksen parametreja on muutettu niin, että verkko toimii halutulla tavalla opetusesimerkeille, sen toimintaa tarkastetaan testiesimerkeillä. Gradientti Olkoon f : R n R funktio, jolla on osittaisderivaatat kaikkien muuttujien x i, i {1,..., n} suhteen. Funktion f gradientti on vektori ( f f (x) = (x), f (x),..., f ) (x). x 1 x 2 x n
Neuroverkon opettaminen - gradienttimenetelmä Kun etsitään gradienttimenetelmällä minimiä kahden muuttujan funktiolle, niin kuvaajan voi ajatella kumpuilevaksi maastoksi. Rinteessä seisova ihminen haluaa mennä laakson pohjalle jyrkkyydestä välittämättä. Gradienttimenetelmän keinolla alas mennään vähän matkaa jyrkintä rinnettä (gradientin vastavektorin suuntaan), pysähdytään ja valitaan taas jyrkin suunta. Näin jatketaan, kunnes päästään laakson pohjalle. Jos laaksoja on monta, niin liian pitkä siirtymä yhteen suuntaan voi johtaa väärän laakson pohjalle
Neuroverkon opettaminen - virhefunktio Monesti syötettä x vastaavan tavoitteen y R m ja verkon antaman tuloksen t R m virhefunktiona käytetään erotuksen normin neliötä E = 1 2 t y 2 = 1 2 m (t k y k ) 2 k=1 ja opetusesimerkkijoukon A virhefunktiona keskineliösummaa E A = 1 2N (t(x) y(x) 2, x A missä N on joukon A opetusesimerkkien lukumäärä. Miksi erotusfunktiossa käytetään neliöitä?
Gradientin laskeminen vastavirta-algoritmilla Esimerkki Ulostulokerroksessa on 2 ja viimeisessä piilokerroksessa 3 neuronia. Lasketaan virhefunktion osittaisderivaatat ulostulokerroksen painojen suhteen.
Vastavirta-algoritmi - ulostulokerros - esimerkki ulostulokerroksen aktivointifunktio ϕ(t) = t ulostulokerroksen vakiotermit b L 1 = bl 2 = 0 virhefunktio E = 1 2 y t 2 = 1 2 ( (t 1 y 1 ) 2 +(t 2 y 2 ) 2). ulostulokerroksen neuronien tulokset t j = ϕ(z j ) = z j = 3 k=1 w L kj al 1 k, j = 1, 2.
Vastavirta-algoritmi - ulostulokerros - esimerkki Lasketaan virhefunktion osittaisderivaatta ulostulokerroksen 1. neuronia vastaavien painojen w L i1 suhteen. Ulostulokerroksen 2. neuronin tulos on t 2 = z 2 = 3 k=1 w L k2 al 1 k. = Painot w 11, w 21 ja w 31 eivät vaikuta ulostuloon t 2. = Virhefunktiossa (t 2 y 2 ) 2 on vakio osittaisderivoinneissa painojen w 11, w 21 ja w 31 suhteen. = Kaikilla i = 1, 2, 3 on E w L i1 = 1 wi1 L 2 (t 1 y 1 ) 2 = (t 1 y 1 ) w L i1 (t 1 y 1 ).
Vastavirta-algoritmi - ulostulokerros - esimerkki Summan t 1 = z 1 = 3 k=1 w L k1 al 1 k termit, joissa on wk1 L, k i, ja y 1 ovat wi1 L :n suhteen vakiota. = wi1 L (t 1 y 1 ) = wi1 L = E w L i1 Vastaavasti saadaan E w L i2 3 k=1 w L k1 al 1 k = (t 1 y 1 )a L 1 i, i = 1, 2, 3. = (t 2 y 2 ) w L i2 = a L 1 i, i = 1, 2, 3 (t 2 y 2 )= (t 2 y 2 )a L 1 i.
Vastavirta-algoritmi - ulostulokerros Derivoinnin ketjusääntöä käyttäen saadaan laskettua yleinen tilanne. Jos ulostulokerroksessa on m neuronia, aktivointifunktio on ϕ ja virhefunktio on E = 1 2 y t 2 = 1 ( m (t k y k ) 2), 2 k=1 niin osittaisderivaatat painojen w L ij suhteen ovat E w L ij ja vakiotermien suhteen = (t j y j )ϕ (z L j )a L 1 i E b L j = (t j y j )ϕ (z j ).
Vastavirta-algoritmi - piilokerrokset Piilokerroksissa osittaisderivaatat ovat: E w l ij E b l j N l+1 = a l 1 i ϕ (zj l ) N l+1 = ϕ (zj l ) k=1 k=1 E z l+1 k E z l+1 k w l+1 jk. w l+1 jk.
Vastavirta-algoritmi - piilokerrokset Mieti, miksi osittaisderivaattoja painojen wij l suhteen ei lasketa erotusosamäärien E(w i +he i ) E(w i ) h avulla? (Painot järjestetty jonoon, e i on i. kantavektori.) Vastavirta: Osittaisderivaatat kerroksen l suhteen saadaan laskettua rekursiivisesti kerroksen l + 1 osittaisderivaattojen avulla. Aloita ulostulokerroksesta ja jatka kerros kerrokselta kohti syötekerrosta. Uudet painot vastavirta-algoritmin jälkeen ovat w l ij w l ij α E w l ij ja b l j b l j α E b l j missä α on verkon oppimisnopeus.
Vastavirta-algoritmi - huomioita Jos kerroksen l 1 syöte a l 1 i on pieni, niin kerroksen l osittaisderivaatat E ovat pieniä. wij l Jos osittaisderivaatta painojen suhteen on pieni, niin painot muuttuvat vastavirta-algoritmissa vähän ja neuroni oppii hitaasti. Aktivointifunktion derivaatat vaikuttavat virheen osittaisderivaattoihin ja siten neuroneiden parametrien muutokseen. Jos aktivointifunktion derivaatta on pieni, niin parametrit muuttuvat vähän ja neuronit oppivat hitaasti.
Vastavirta-algoritmi - huomioita Verkon käyttötarkoitukseen sopivan virhefunktion ja aktivointifunktioiden valinta on tärkeää. Muista aktivointifunktioiden ja niiden derivaattojen käyttäytyminen: Verkon eri kerroksissa voidaan käyttää eri aktivointifunktioita. (Käytä laskuissa ja kaavoissa verkon kerrosta vastaavia alaindeksejä ϕ l.)
Lineaarialgebraa Neuroverkon parametreihin liittyvät kaavat annetaan monesti vektorien- ja matriisien avulla. Kerroksen l parametrit ovat vakiotermit b l = (b l 1,..., bl N l ), painotetut summat z l = (z l 1,..., zl N l ) neuronien tulokset a l = (a l 1,..., al N l ) ja painot jolloin W l = w11 l w12 l... w1n l l w21 l w22 l... w2n l l... wn l l 1 1 wn l l 1 2... wn l l 1 N l, z l = a l 1 W l + b l ja a l = ϕ(z l ) = (ϕ(z l 1),..., ϕ(z l N l )).
Lineaarialgebraa Vastavirta-algoritmin, gradienttimenetelmän ja muiden algoritmien toteutus tehdään ohjelmistokirjastojen tehokkaiden vektori- ja matriisilaskentapakettien (esim. NumPy) avulla. Yksittäisiä parametreja ei kannata käsitellä silmukoilla. Lineaarialgebran opiskelu aloitetaan yleensä lineaarisen yhtälöryhmän ratkaisemista. Siitä on kyse myös neuroverkon parametrien etsinnässä.
W. Ertel: Introduction to Artificial Intelligence, Springer, 2011 ConvNetJS - Deep Learning in your browser Playgroung TensorFlow