Kirjoittaja: Helinä Heino
Nykyisin syväoppimista voidaan käyttää kasvojen tunnistukseen ja
tunnistautumiseen. Tunnistautuminen perustuu siihen, että jokaisen ihmisen
kasvonpiirteiden mittasuhteet ovat uniikkeja ja syvä neuroverkko oppii näitä kasvojen
edustavia piirteitä. Yllä oleva kuva on Pixabayn kuvapankin
materiaalia.
|
Syvät neuroverkot vaativat riittävää laskentatehoa
Syvät neuroverkot (engl. Deep Neural
Network, DNN) ovat tällä hetkellä hyvin suosittuja tekoälyn sovelluksia.
Neuroverkkoja on tutkittu 1960-luvulta asti, mutta jo 1940-luvulla on luotu
neuroverkkojen matemaattisia perusteita.
Kuitenkin vasta 2000-luvulla tietokoneiden muisti, kapasiteetti ja
laskentateho riittivät verkkojen järkevään käyttöön.
Merkittävässä roolissa on ollut
erityisesti grafiikkaprosessorien (engl. Graphical Processing Unit, GPU)
kehitystyö. GPU on tärkeä osa neuroverkkotyöskentelyyn tarkoitettua
laskentatyöasemaa, sillä se mahdollistaa tehokkaan rinnakkaislaskennan.
Esimerkiksi näytönohjaimia valmistava NVIDIA on kehittänyt verkosta ilmaiseksi
ladattavan CUDA-ohjelmointirajapinnan, jota monet koneoppimiskirjastot
käyttävät.
Kuva Pixabayn kuvapankista. Yllä olevassa kuvassa on Nvidian näytönohjain.
|
Neuroverkkojen kerroksissa on usein
tuhansia toisistaan riippumattomia laskutoimituksia, mistä syystä
rinnakkaislaskennalla voidaan nopeuttaa prosessointia merkittävästi, kun dataa
on runsaasti. Tällöin ei muodostu pullonkaulaa, jossa yksi yksikkö laskisi
kaikki operaatiot perättäin, vaan useat ytimet laskevat eri operaatioita
samanaikaisesti. Tietokoneen keskusprosessoriin (engl. Central Processing Unit,
CPU) verrattuna GPU tarjoaa moninkertaisen määrän laskentaytimiä, ja näin ollen
jopa 100-kertaisen nopeuden pelkkään CPU:n verrattuna. Karkeasti arvioiden
neuroverkkojen koulutus nopeutuu suoraan verrannollisesti saatavilla olevan
laskentatehon mukaan.
Syväoppiminen
Syväoppiminen (engl. deep learning) on
monikerroksisia, syviä neuroverkkoja hyödyntävä tekoälymenetelmä. Syväoppimista
voidaan soveltaa hyvin monenlaisille datatyypeille, kuten esimerkiksi
puheentunnistukseen äänisignaalista tai hintakuplien ennustamiseen
talousdatasta.
Kuvadatan prosessointiin käytetään ns.
konvoluutioneuroverkkoja (engl. Convolutional Neural Network, CNN), jotka
saavat nimensä verkon kerroksissa esiintyvistä matemaattisista
konvoluutio-operaatioista. Menemättä sen syvemmälle matematiikkaan,
konvoluutiolla voidaan erottaa kuvista erilaisia piirteitä, joita voidaan
syöttää edelleen seuraaville konvoluutiokerroksille. Näin ensimmäiset
konvoluutiokerrokset oppivat yksinkertaisia piirteitä kuten värejä, reunoja ja
muotoja, ja syvemmällä verkossa opitaan monimutkaisia piirteitä kuten
esimerkiksi silmä, nenä tai korva. Lopulta kuvasta voidaan vaikkapa tunnistaa
tietty henkilö. AIDMEI-projektissa ollaan kiinnostuneita lääketieteellisten
kuvien käsittelystä näiden neuroverkkojen avulla.
Lähestytään asiaa perinteisellä
esimerkillä, jossa tunnistetaan, onko verkkoon syötetyssä kuvassa kissa. Jotta
kissa voidaan tunnistaa kuvasta, on ensin oltava selkeä malli siitä, miltä
kissa näyttää. Tätä varten täytyy koota näytteitä eli kuvia monen kokoisista,
värisistä ja mallisista kissoista, kuvia jotka eivät sisällä kissoja, sekä
tieto että, onko kussakin kuvassa kissaa vai ei (annotointi). Tämän jälkeen
verkko koulutetaan tunnistamaan kissa kuvasta. Verkon painokertoimet alustetaan
esimerkiksi satunnaisilla luvuilla ja sille syötetään kuvia, joissa on kissa
sekä kuvia, joissa ei ole kissaa (opetusdata). Kuvan prosessoituaan verkko
antaa ulos ennusteen väliltä [0-1], joka tulkitaan esimerkiksi siten, että
lukua 0.5 suurempi ennusteen arvo tarkoittaa, että verkon tuottaman mallin
mukaan kuvassa olisi kissa.
Jos olet aiemmin liittänyt
tarkasteltavan kohteen väärään luokkaan eli vaikkapa luullut pientä koiraa
kissaksi, olet luultavasti saanut tästä palautetta ja oppinut virheestäsi. Myös
neuroverkot oppivat palautteen kautta. Jos käsiteltävässä kuvassa ei ollut
kissaa, verkkoa pyritään muokkaamaan siten, että luokitus onnistuisi
seuraavalla kerralla. Käytännössä tämä tapahtuu päivittämällä verkon
painokertoimia (ks. blogipostaus hermosolun toiminnasta) tappiofunktiota (loss
function) minimoimalla. Jos taas kissa tunnistettiin onnistuneesti, ei muutosta
tarvitse tehdä. Käymällä kaikki kuvat läpi useaan kertaan verkko lopulta
onnistuu luomaan mallin, jolla voidaan tunnistaa kissoja tietyllä tarkkuudella.
Seuraavaksi käyttäjä voi syöttää verkolle kuvan omasta kissastaan (joka ei siis
ole osa opetukseen käytettyä datajoukkoa), jonka verkko toivottavasti tunnistaa
täksi notkealiikkeiseksi petoeläimeksi.
Sama luokittelu toimii myös
lääketieteellisten kuvien tapauksessa. Jos halutaan esimerkiksi erottaa syöpää
sairastavien röntgenkuvat terveistä kuvista,
on neuroverkko ensin opetettava tähän tehtävään. Opetukseen käytettävän
datan pitäisi olla annotoitua, eli kuviin liittyvät diagnoosit tulisi olla
saatavilla (yksinkertaisimmassa tapauksessa sairas vai terve). Lisäksi muut
tiedot, kuten esimerkiksi ikä, elämäntavat ja mahdolliset koepalalöydökset
hyödyttävät verkon opetusta.
Hieman matemaattisemmin ilmaistuna
syvä neuroverkko oppii funktion syötteen ja ennusteen välille, jota se soveltaa
uusiin syötteisiin, ja joka voidaan optimoida minimoimalla ennusteen ja
todellisen luokituksen välinen tappiofunktio.
Syvän neuroverkon koulutuksesta
Koulutukseen
käytettävään dataan kuuluu tavallisesti opetusjoukko ja validiointijoukko.
Nimensä mukaisesti opetusdatalla opetetaan verkko luokittelemaan näytteet
oikein. Validiointijoukon avulla nähdään, kuinka hyvin verkko toimii datalle,
jota ei käytetty opetusvaiheessa. Opetusdatan tarkoitus on saada verkko
toimimaan mahdollisimman hyvällä tarkkuudella, ja validointidatan tarkoitus on
ehkäistä ylisovittamista (overfitting). Ylisovitus on ongelmallista, sillä
vaikka tässä tilanteessa neuroverkko pystyykin luokittelemaan opetusjoukon
miltei täydellisesti, uudet verkon ennalta näkemättömät näytteet saavat
virheellisen luokituksen, eikä verkko näin ollen ole tarpeeksi yleistettävissä
muulle, kuin opetusdatalle.
Tässä kuvaajassa vaaleansiniset
pisteet edustavat opetusdatan terveitä potilaita ja harmaat pisteet opetusdatan
sairaita potilaita. Violetit pisteet
edustavat terveitä potilaita, jotka eivät kuulu opetusjoukkoon, ne edustavat
siis ennennäkemätöntä dataa. Punainen luokittelurajapinta viiva kuvastaa
ylisovitettua mallia ja vastaava vihreä rajapinta viiva kuvastaa tavoiteltua
mallia. Kuvaajalta nähdään että punainen viiva pystyy luokittelemaan
täydellisesti opetusjoukon, mutta luokittelee ennennäkemättömät potilaat
väärin.
|
Lopuksi verkon varsinainen
suorituskyky selvitetään erillisen testijoukon avulla, jota ei käytetä
opetuksessa eikä validoinnissa. Näin ollen saadaan arvio siitä, miten hyvin
verkko toimii täysin ennennäkemättömälle datalle. Tyypillinen jako opetus,
validointi ja testidataan on 80%, 15% ja 5% koko koulutukseen käytetystä
datasta.
Jos neuroverkon suorituskykyä halutaan
parantaa, lisätään usein koulutukseen käytettyä dataa, jolloin algoritmi pääsee
käsittelemään mahdollisimman monenlaisia tapauksia. Kuviin voidaan myös lisätä
kohinaa tai niitä voidaan kiertää, peilata ja venyttää (datan augmentointi) ja
näin ollen luoda keinotekoisesti uusia näytteitä. Voidaan myös generoida
varsinaisesta opetusdatasta poikkeavaa kuvadataa. Näiden operaatioiden
tarkoituksena on estää verkkoa oppimasta liian spesifejä piirteitä ja parantaa
verkon kykyä luokitella ennennäkemättömiä tapauksia. Toisaalta tämä lisää
tarvittavan muistin määrää ja laskennan kestoa. Oppimisnopeutta voidaan
parantaa eri keinoin, kuten esimerkiksi skaalaamalla kuvia pienemmiksi, jolloin
käsiteltävän datan rakenne saadaan muotoon, jota syvän neuroverkon on nopeampi
käsitellä.
Kun ollaan tyytyväisiä neuroverkon
luokituskykyyn, voidaan tämä optimoitu algoritmi sulauttaa johonkin
olemassaolevaan tietokonejärjestelmään. Opetettu syvä neuroverkko ei vaadi
suuria määriä muistitilaa tai erityisen tehokkaita prosessoreita sen käyttöön.
Ei kommentteja:
Lähetä kommentti