keskiviikko 23. syyskuuta 2020

Tekoälyn oppivuodet: näin koulutamme hermoverkon

Kirjoittaja: Samuli Siltanen

Jos tekoäly osaa auttaa lääkäriä löytämään syövän, kai se kykenee myös erottamaan kesän talvesta? Kokeillaan!

Poimin Ilmatieteen laitoksen ilmaisesta tietopalvelusta säämittauksia. Kuvassa näkyy vuoden 2019 tammikuussa ja heinäkuussa mitatut päivien keskilämpötilat Helsingissä Kumpulan kampuksella. 


Selvästikin kaikkina tammikuun päivinä on ollut kylmempää kuin 6 astetta ja heinäkuussa puolestaan lämpimämpää kuin 8 astetta. Saisimmeko tämän helpon säännön nuijittua tekoälyn tajuntaan? Tai digitaalisemmin muotoiltuna: osaammeko rakentaa hermoverkon, joka merkitsee tammikuussa mitatut lämpötilat ykkösellä ja heinäkuussa mitatut nollalla?


Tietokone oppii matkimalla hermosolun eli neuronin toimintaa. Laskennallinen neuroni on matemaattinen viestin välittäjä, joka vastaanottaa lukuja muilta neuroneilta, muokkaa niitä pikkuisen, ja lähettää tuloksen eteenpäin. Siinä on kaksi säädettävää asiaa: kertolaskulla toimiva vahvistus ja yhteenlaskuun perustuva lisäys. Tältä näyttää esimerkkineuroni:





Mitä luvulle tapahtuu, kun se menee neuroniin sisään vasemmalta? Ensin se kerrotaan ykkösellä, eli ei tapahdu muutosta. Seuraavaksi luvusta vähennetään kuutonen. "Kielletyn lumihiutaleen" näköistä osaa kutsun pakkasen estoksi; se korvaa miinusmerkkisen luvun nollalla mutta jättää plusmerkkiset luvut ennalleen. 


Lämpötilamittauksille tapahtuu jotakin mielenkiintoista, kun ne kulkevat tuon neuronin läpi. Muistathan, että kaikki tammikuun päivät olivat kuutta astetta kylmempiä? Koska neuroni vähentää kuutosen ja sitten vaihtaa miinusmerkkiset luvut nolliksi, kaikki tammikuun mittaukset tulevat nollana ulos. 


Mutta toiveemme oli, että hermoverkko merkitsee tammikuun ykkösellä ja heinäkuun nollalla. Laadimme sitä varten koneaivot, joissa on kaksi laskennallista neuronia yhden sijasta. Ensimmäinen niistä on sama, jota käsittelimme yllä. Toisen laitamme perään:



Kakkosneuroni siis kertoo sisään tulevaa lukua miinus puolella, lisää siihen ykkösen ja muuttaa näin mahdollisesti syntyvän negatiivisen luvun nollaksi. 


Käydään nyt läpi tuplaneuronivirityksemme toiminta. 


Jos syötämme kahden neuronin systeemiimme tammikuun lämpötilan eli kuutta astetta alhaisemman, ensimmäinen neuroni tuottaa tulokseksi nollan. Kakkosneuroni puolestaan kertoo tuota nollaa miinus puolikkaalla, mikä edelleen antaa nollan, ja lisää siihen ykkösen. Niinpä lopputulos on haluttu: tammikuulle ykkönen. 


Kun koneaivoillemme syötetään heinäkuun lämpötila eli jotakin suurempaa kuin 8, ensimmäinen neuroni vähentää siitä kuutosen ja tuottaa jotakin ainakin kakkosen kokoista. Sellaista lukua kun kertoo miinus puolikkaalla, saa tulokseksi jotakin pienempää kuin -1. Toinen neuroni lisää siihen ykkösen, jolloin tulos on edelleen pakkasen puolella. Kakkosneuronin lopussa oleva lumihiutalekielto sitten vaihtaa sen nollaksi. Saavutamme siis toisenkin tavoitteemme: heinäkuulle nolla.



Yllä kuvattu numeroleikki voi vaikuttaa oudolta, mutta tällä tavalla nykyaikainen tekoäly todella toimii. Käytännössä neuroneita vain on paljon suurempi määrä kuin kaksi, mutta ne laskevat samoin kuin yksinkertainen esimerkkimme. 


Tekoälyn “oppiminen” tarkoittaa sopivien lukujen löytämistä neuroneihin. Yleensä tietokone oppii automaattisesti itse sille annetun aineiston pohjalta, mutta tässä havainnollisessa esimerkissä opetin hermoverkon itse. Siis syöttämällä siihen luvut 1, 6, -1/2 ja 1. Nuo neljä lukua tuottavat hermoverkolle sen “osaamisen”, että tammikuun lämpötilat merkitään ykkösellä ja heinäkuun nollalla. Yksinkertaisuudestaan huolimatta tämä osaaminen on sentään jotakin: hermoverkko tunnistaa oikein myös vuoden 2017 aineiston: 



Tätä ensimmäistä kahden neuronin esimerkkiämme helpotti se, että talven ja kesän säät ovat niin erilaiset. Jos vertaamme huhti- ja heinäkuun lämpötiloja, yksinkertainen lämpötilaraja ei enää toimikaan. Tarvitsemme siis mutkikkaammat tekoaivot kevään ja kesän erotteluun! Siihen perehdymme tämän kirjoitussarjan toisessa osassa.



Lopuksi aivopähkinä tekoälyn ystäville. Kahden neuronin hermoverkkomme jaottelee onnistuneesti alle kuuden ja yli kahdeksan asteen lämpötilamittaukset. Entä jos syötämme siihen 7 asteen lämpötilan? Mitä hermoverkko silloin tulostaa ulos?