Käsittelen tässä artikkelisarjassa neuroverkkoja taiteilijainsinöörinä käytännön näkökulmasta. Mitä niillä voi tehdä, kuinka ne suurin piirtein toimivat, miten niitä voidaan käyttää käytännön sovelluksissa ja kuinka voi itse alkaa kokeilla niiden käyttöä. Pääpaino on kuvaa käsittelevissä neuroverkoissa ja niiden sovelluksissa, koska tunnen ne parhaiten; olen itse perehtynyt niihin ja kokeillut niiden soveltamista yli puolentoista vuoden ajan.
Neuroverkoista on yllättävän paljon tietoa saatavilla internetistä, varsinkin englanniksi. Alan kehitys on niin nopeata että kirjat ovat vain harvoin ajan tasalla. Alan tutkijat julkaisevat tutkimuspapereitaan netissä tiuhaan tahtiin ja tätä aineistoa on paljon kaikkien vapaasti saatavilla. Ideat ja ratkaisut esitetään näissä pääsääntöisesti matematiikan kaavoina, varmaankin siksi että se on täsmällinen ja kompakti tapa esittää ratkaisuja. Tämä ei kuitenkaan yleensä tarkoita sitä että ratkaisut olisi matemaattisesti johdettu jonkinlaisesta teoriasta. Neuroverkkojen toteutus perustuu matematiikkaan, mutta niiden kehittäminen on enimmäkseen kokeellista. On myös hyvin yleistä että tutkijat julkaisevat käyttämänsä lähdekoodin vähintäänkin tutkimus- ja kokeilukäyttöön. Ratkaisuihin voi siis tutustua tutkimuspaperien lisäksi myös koodiin perehtymällä, tai asentamalla sen omalle koneelle ja kokeilemalla. Kokemuksen myötä ohjelmia voi myös lähteä itse muuttamaan ja sitä kautta tekemään omia kokeiluja. Itselleni on pari kertaa sattunut, että itse intuitiivisesti keksimäni idea on myöhemmin tullut vastaan tutkimuspaperissa matemaattisesti tarkassa muodossa. Neuroverkkojen soveltamista voi siis kokeilla myös intuitiivisen hahmottamisen kautta, syvällinen matematiikan hallinta ei ole välttämätöntä vaikka siitä toki onkin apua.
Mitä neuroverkoilla sitten voidaan tehdä? Jos pysytään kuvia käsittelevissä sovelluksissa, niin kenties ensisijainen sovellus on tähän asti ollut tietokonenäkö. Yksi laji on että opetetaan neuroverkko tunnistamaan mitä kuvassa näkyy, tätä sanotaan luokitteluksi (classification). Luokittelu voi vaikkapa kertoa näkevänsä kuvassa tietyn eläinlajin. Itse olen soveltanut luokittelua maisemakuviin jolloin luokittelun tuloksena voidaan saada vaikkapa tällainen lista.
———– seeing the features ————–
0.4539 /b/basilica 21
0.0939 /c/cathedral/outdoor 61
0.0704 /c/church/outdoor 62
0.0832 /h/harbor 90
0.0673 /p/palace 133
Luokittelussa neuroverkkoon syötetään kuva, ja verkon ulostulosta saadaan tieto mitä verkko mielestään näkee kuvassa. Syöte on silloin värikuvalle muotoa 3 x kuvan_leveys x kuvan_korkeus ja verkon ulostulossa on sitten lähtö jokaista luokkaa kohti. Verkon kouluttaminen vaatii aineiston (dataset) joka koostuu kuva-luokka -pareista. Koulutuksessa verkkoon syötetään kuva kerrallaan ja oppimista ohjataan virheen avulla, jolloin verkko asteittain korjaa toimintaansa ja vähitellen oppii toimimaan halutulla tavalla. Tästä tarkemmin myöhemmin (ns. backpropagation). Onnistunut kouluttaminen vaatii kuitenkin hyvin suuren ja edustavan joukon koulutusdataa.
Näin toteutettu luokittelu kertoo kuitenkin vain, mitä kuvassa näkyy, ei sitä missä kohtaa kuvassa on mitäkin. Yksi ratkaisu tähän on segmentointi, jossa kuva jaetaan alueisiin (esim. ajorata, ajoneuvo, jalankulkija, rakennus). Syötteenä on edelleen värikuva, mutta ulostulona on luokkien sijaan kuva jossa eri segmentit ovat eri värisiä.
Tällaisen verkon kouluttaminen on periaatteessa yksinkertaista, mutta koulutusdatan tuottaminen on työlästä. Tarvitaan hyvin suuri joukko kuvapareja, sama kuva valokuvana ja segmenttikuvana, joka yleensä on ihmisen tehtävä. Kouluttamisessa on muitakin vaikeuksia kuin koulutusdatan tuottaminen tai löytäminen. Verkon saaminen oppimaan ei aina ole helppoa. Verkon koon ja rakenteen on oltava oikeassa suhteessa koulutuksen tavoitteiden ja koulutusdatan määrän kanssa. Oppimistahdin (tearning rate) on oltava sopiva, eli verkon toimintaa ei saa korjata virheiden perusteella liian rajusti muttei myöskään liian vähän. Toisaalta koko ajan kehitetään helpommin oppivia neuroverkkoratkaisuja, esimerkkinä tämän hetken suosikki GAN-arkkitehtuurit, joissa tavallaan yksi verkko oppii ja toinen toimii sparraajana, oppien myös koko ajan tiukemmaksi vastustajaksi.
Muita kuvankäsittelyyn liittyviä sovelluksia on erilaiset kuvanmuunnokset ja kuvien generointi. Valokuva voidaan muuntaa toisen kuvan, vaikkapa maalauksen tyyliseksi (tyylimuunnos, neural style transfer). Tästä olen jo kirjoittanutkin. Kuvanmuunnosratkaisut ovat enimmäkseen syntyneet kuvia luokittelevien neuroverkkojen pohjalle: kun verkko on oppinut tunnistamaan mitä kuvassa näkyy, se on samalla oppinut tunnistamaan kuvassa erilaisia muotoja ja piirteitä, joita tyylinmuunnoskin tarvitsee. Jatkossa lisää siitä kuinka neuroverkko hahmottaa kuvasta piirteitä, hahmoja, esineitä ja olentoja.
Tyylin lisäksi pystytään jo muuntamaan myös kuvan sisältöä, esim. kasvojen ilmeitä. Pystytään myös jo, ainakin jossain määrin, tuottamaan kokonaan uusia kuvia joissa on haluttu sisältö. Kaikkia näitä pystyy itsekin kokeilemaan, tarvitaan vain perustehokas linuxkone; nvidia-pohjainen näytönohjain (väh. 4GB muistilla) on suositeltava.
Nyt olemme siis hahmottaneet vähän mitä neuroverkolla voi kuvalle tehdä. Jatkossa on tarkoitus käydä tarkemmin läpi näitä sovelluksia ja myös sitä kuinka niitä pääsee itse kokeilemaan. Olemme myös todenneet että neuroverkko koulutetaan koulutusaineistolla. Tämä kannattaa sisäistää: se tarkoittaa todella että neuroverkkoa ei ohjelmoida, se koulutetaan esimerkkien kautta. Tulemme jatkossa näkemään, miten neuroverkon sisäisellä arkkitehtuurilla on oleellinen merkitys, sen pitää vastata sovelluksen vaatimuksia, mutta toisaalta emme voi juurikaan vaikuttaa siihen miten tieto ja oppiminen organisoituu siellä neuroverkon sisällä. Ihan turha ajatellakaan lähteä speksaamaan tietomallia tai tiedon esitystä neuroverkon sisälle. Oleellista on että koulutusaineisto on tarkoitukseen sopivaa.
Seuraavassa osassa katsotaan hieman sitä neuroverkon sisäistä toimintaa ja rakennetta ja lähestytään myös käytännön sovelluksia ja kokeilumahdollisuuksia.
PS. koska olen oppinut neuroverkkohommat englanniksi, käyttämäni termit voivat olla vähän hukassa. Ja kun sisältö perustuu omiin kokemuksiini, näkökulma on kokeilevan taiteilijainsinöörin, ei esimerkiksi opettajan tai tutkijan. Otan mielelläni vastaan korjauksia ja parannusehdotuksia.