{"id":68,"date":"2017-05-01T14:56:23","date_gmt":"2017-05-01T14:56:23","guid":{"rendered":"http:\/\/liipetti.net\/retkia\/?p=68"},"modified":"2017-05-02T12:09:27","modified_gmt":"2017-05-02T12:09:27","slug":"neuroverkot-kaytannon-johdanto-1","status":"publish","type":"post","link":"https:\/\/liipetti.net\/retkia\/neuroverkot-kaytannon-johdanto-1\/","title":{"rendered":"Neuroverkot -k\u00e4yt\u00e4nn\u00f6n johdanto 1"},"content":{"rendered":"<p>K\u00e4sittelen t\u00e4ss\u00e4 artikkelisarjassa neuroverkkoja taiteilijainsin\u00f6\u00f6rin\u00e4 k\u00e4yt\u00e4nn\u00f6n n\u00e4k\u00f6kulmasta. Mit\u00e4 niill\u00e4 voi tehd\u00e4, kuinka ne suurin piirtein toimivat, miten niit\u00e4 voidaan k\u00e4ytt\u00e4\u00e4 k\u00e4yt\u00e4nn\u00f6n sovelluksissa ja kuinka voi itse alkaa kokeilla niiden k\u00e4ytt\u00f6\u00e4. P\u00e4\u00e4paino on kuvaa k\u00e4sitteleviss\u00e4 neuroverkoissa ja niiden sovelluksissa, koska tunnen ne parhaiten; olen itse perehtynyt niihin ja kokeillut niiden soveltamista yli puolentoista vuoden ajan.<\/p>\n<p>Neuroverkoista on yll\u00e4tt\u00e4v\u00e4n paljon tietoa saatavilla internetist\u00e4, varsinkin englanniksi. Alan kehitys on niin nopeata ett\u00e4 kirjat ovat vain harvoin ajan tasalla. Alan tutkijat julkaisevat tutkimuspapereitaan netiss\u00e4 tiuhaan tahtiin ja t\u00e4t\u00e4 aineistoa on paljon\u00a0kaikkien vapaasti saatavilla. Ideat ja ratkaisut esitet\u00e4\u00e4n n\u00e4iss\u00e4 p\u00e4\u00e4s\u00e4\u00e4nt\u00f6isesti matematiikan kaavoina, varmaankin siksi ett\u00e4 se on t\u00e4sm\u00e4llinen ja kompakti tapa esitt\u00e4\u00e4 ratkaisuja. T\u00e4m\u00e4 ei kuitenkaan yleens\u00e4 tarkoita sit\u00e4 ett\u00e4 ratkaisut olisi matemaattisesti johdettu jonkinlaisesta teoriasta. Neuroverkkojen toteutus perustuu matematiikkaan, mutta niiden kehitt\u00e4minen on enimm\u00e4kseen kokeellista. On my\u00f6s hyvin yleist\u00e4 ett\u00e4 tutkijat julkaisevat k\u00e4ytt\u00e4m\u00e4ns\u00e4 l\u00e4hdekoodin v\u00e4hint\u00e4\u00e4nkin tutkimus- ja kokeiluk\u00e4ytt\u00f6\u00f6n. Ratkaisuihin voi siis tutustua\u00a0tutkimuspaperien lis\u00e4ksi my\u00f6s koodiin perehtym\u00e4ll\u00e4, tai asentamalla sen omalle koneelle ja kokeilemalla. Kokemuksen my\u00f6t\u00e4 ohjelmia voi my\u00f6s l\u00e4hte\u00e4 itse muuttamaan ja sit\u00e4 kautta tekem\u00e4\u00e4n omia kokeiluja. Itselleni on pari kertaa sattunut, ett\u00e4 itse intuitiivisesti keksim\u00e4ni idea on my\u00f6hemmin tullut vastaan tutkimuspaperissa matemaattisesti tarkassa muodossa. Neuroverkkojen soveltamista voi siis kokeilla my\u00f6s intuitiivisen hahmottamisen kautta, syv\u00e4llinen matematiikan hallinta ei ole v\u00e4ltt\u00e4m\u00e4t\u00f6nt\u00e4 vaikka siit\u00e4 toki onkin apua.<\/p>\n<p>Mit\u00e4 neuroverkoilla sitten voidaan tehd\u00e4? Jos pysyt\u00e4\u00e4n kuvia k\u00e4sitteleviss\u00e4 sovelluksissa, niin kenties ensisijainen sovellus on t\u00e4h\u00e4n asti ollut tietokonen\u00e4k\u00f6. Yksi laji on ett\u00e4 opetetaan neuroverkko tunnistamaan mit\u00e4 kuvassa n\u00e4kyy, t\u00e4t\u00e4 sanotaan luokitteluksi (<em>classification<\/em>). Luokittelu voi vaikkapa kertoa n\u00e4kev\u00e4ns\u00e4 kuvassa tietyn el\u00e4inlajin. Itse olen soveltanut\u00a0luokittelua maisemakuviin jolloin luokittelun tuloksena voidaan saada vaikkapa t\u00e4llainen lista.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-78 alignleft\" src=\"https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/Image-1.5.2017-at-18.02.jpg\" alt=\"Image 1.5.2017 at 18.02\" width=\"225\" height=\"168\" srcset=\"https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/Image-1.5.2017-at-18.02.jpg 225w, https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/Image-1.5.2017-at-18.02-201x150.jpg 201w, https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/Image-1.5.2017-at-18.02-150x112.jpg 150w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/>&#8212;&#8212;&#8212;&#8211; seeing the features &#8212;&#8212;&#8212;&#8212;&#8211;<br \/>\n0.4539 \/b\/basilica 21<br \/>\n0.0939 \/c\/cathedral\/outdoor 61<br \/>\n0.0704 \/c\/church\/outdoor 62<br \/>\n0.0832 \/h\/harbor 90<br \/>\n0.0673 \/p\/palace 133<\/p>\n<p>&nbsp;<\/p>\n<p>Luokittelussa neuroverkkoon sy\u00f6tet\u00e4\u00e4n kuva, ja verkon ulostulosta\u00a0saadaan tieto mit\u00e4 verkko mielest\u00e4\u00e4n n\u00e4kee kuvassa. Sy\u00f6te on silloin v\u00e4rikuvalle muotoa 3 x kuvan_leveys x kuvan_korkeus ja verkon ulostulossa on sitten l\u00e4ht\u00f6 jokaista luokkaa kohti. Verkon kouluttaminen vaatii aineiston (<em>dataset<\/em>) joka koostuu kuva-luokka -pareista. Koulutuksessa verkkoon sy\u00f6tet\u00e4\u00e4n kuva kerrallaan ja oppimista ohjataan virheen avulla, jolloin verkko asteittain korjaa toimintaansa ja v\u00e4hitellen oppii toimimaan halutulla tavalla. T\u00e4st\u00e4 tarkemmin my\u00f6hemmin (ns. <em>backpropagation<\/em>). Onnistunut kouluttaminen vaatii kuitenkin hyvin suuren ja edustavan joukon koulutusdataa.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-67 alignnone\" src=\"https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/koulutus-crop-300x186.png\" alt=\"Neuroverkon kouluttaminen\" width=\"427\" height=\"265\" srcset=\"https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/koulutus-crop-300x186.png 300w, https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/koulutus-crop-768x476.png 768w, https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/koulutus-crop-1024x635.png 1024w, https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/koulutus-crop-242x150.png 242w, https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/koulutus-crop-150x93.png 150w, https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/koulutus-crop.png 2010w\" sizes=\"auto, (max-width: 427px) 100vw, 427px\" \/><\/p>\n<p>N\u00e4in toteutettu luokittelu kertoo kuitenkin vain, mit\u00e4 kuvassa n\u00e4kyy, ei sit\u00e4 miss\u00e4 kohtaa kuvassa on mit\u00e4kin. Yksi ratkaisu t\u00e4h\u00e4n on segmentointi, jossa kuva jaetaan alueisiin (esim. ajorata, ajoneuvo, jalankulkija, rakennus). Sy\u00f6tteen\u00e4 on edelleen v\u00e4rikuva, mutta ulostulona on luokkien sijaan kuva jossa eri segmentit ovat eri v\u00e4risi\u00e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-72\" src=\"https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/17799448_10155336941318729_7614366503578116398_n.jpg\" alt=\"17799448_10155336941318729_7614366503578116398_n\" width=\"256\" height=\"256\" srcset=\"https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/17799448_10155336941318729_7614366503578116398_n.jpg 256w, https:\/\/liipetti.net\/retkia\/wp-content\/uploads\/2017\/05\/17799448_10155336941318729_7614366503578116398_n-150x150.jpg 150w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/p>\n<p>T\u00e4llaisen verkon kouluttaminen on periaatteessa yksinkertaista, mutta koulutusdatan tuottaminen on ty\u00f6l\u00e4st\u00e4. Tarvitaan hyvin suuri joukko kuvapareja, sama kuva valokuvana ja segmenttikuvana, joka yleens\u00e4 on ihmisen teht\u00e4v\u00e4. Kouluttamisessa on muitakin vaikeuksia kuin koulutusdatan tuottaminen tai l\u00f6yt\u00e4minen. Verkon saaminen oppimaan ei aina ole helppoa. Verkon koon ja rakenteen on oltava oikeassa suhteessa koulutuksen tavoitteiden ja koulutusdatan m\u00e4\u00e4r\u00e4n kanssa. Oppimistahdin (tearning rate) on oltava sopiva, eli\u00a0verkon toimintaa ei saa korjata virheiden perusteella liian rajusti muttei my\u00f6sk\u00e4\u00e4n liian v\u00e4h\u00e4n. Toisaalta koko ajan kehitet\u00e4\u00e4n helpommin oppivia neuroverkkoratkaisuja, esimerkkin\u00e4 t\u00e4m\u00e4n hetken suosikki GAN-arkkitehtuurit, joissa tavallaan yksi verkko oppii ja toinen toimii sparraajana, oppien my\u00f6s koko ajan tiukemmaksi vastustajaksi.<\/p>\n<p>Muita kuvank\u00e4sittelyyn liittyvi\u00e4 sovelluksia on erilaiset kuvanmuunnokset ja kuvien generointi. Valokuva voidaan muuntaa toisen kuvan, vaikkapa maalauksen tyyliseksi (tyylimuunnos, <em>neural style transfer<\/em>). <a href=\"https:\/\/liipetti.net\/retkia\/index.php\/2016\/02\/29\/neuroverkoillako-taidetta\/\" target=\"_blank\">T\u00e4st\u00e4 olen jo kirjoittanutkin<\/a>. Kuvanmuunnosratkaisut ovat enimm\u00e4kseen\u00a0syntyneet\u00a0kuvia luokittelevien neuroverkkojen pohjalle: kun verkko on oppinut tunnistamaan mit\u00e4 kuvassa n\u00e4kyy, se on samalla oppinut tunnistamaan kuvassa erilaisia muotoja ja piirteit\u00e4, joita tyylinmuunnoskin tarvitsee. Jatkossa lis\u00e4\u00e4 siit\u00e4 kuinka neuroverkko hahmottaa kuvasta piirteit\u00e4, hahmoja, esineit\u00e4 ja olentoja.<\/p>\n<p>Tyylin lis\u00e4ksi pystyt\u00e4\u00e4n jo muuntamaan my\u00f6s kuvan sis\u00e4lt\u00f6\u00e4, esim. kasvojen ilmeit\u00e4. Pystyt\u00e4\u00e4n my\u00f6s jo, ainakin jossain m\u00e4\u00e4rin, tuottamaan kokonaan uusia kuvia joissa on haluttu sis\u00e4lt\u00f6. Kaikkia n\u00e4it\u00e4 pystyy itsekin kokeilemaan, tarvitaan vain perustehokas linuxkone; nvidia-pohjainen n\u00e4yt\u00f6nohjain (v\u00e4h. 4GB muistilla) on suositeltava.<\/p>\n<p>Nyt olemme siis hahmottaneet v\u00e4h\u00e4n mit\u00e4 neuroverkolla voi kuvalle tehd\u00e4. Jatkossa on tarkoitus k\u00e4yd\u00e4 tarkemmin l\u00e4pi n\u00e4it\u00e4 sovelluksia ja my\u00f6s sit\u00e4 kuinka niit\u00e4 p\u00e4\u00e4see itse kokeilemaan.\u00a0Olemme my\u00f6s todenneet ett\u00e4 neuroverkko koulutetaan koulutusaineistolla. T\u00e4m\u00e4 kannattaa sis\u00e4ist\u00e4\u00e4: se tarkoittaa todella ett\u00e4 neuroverkkoa ei ohjelmoida, se koulutetaan esimerkkien kautta. Tulemme jatkossa n\u00e4kem\u00e4\u00e4n, miten neuroverkon sis\u00e4isell\u00e4 arkkitehtuurilla on oleellinen merkitys, sen pit\u00e4\u00e4 vastata sovelluksen vaatimuksia, mutta toisaalta emme voi juurikaan vaikuttaa siihen miten tieto ja oppiminen organisoituu siell\u00e4 neuroverkon sis\u00e4ll\u00e4. Ihan turha ajatellakaan l\u00e4hte\u00e4 speksaamaan tietomallia tai tiedon esityst\u00e4 neuroverkon sis\u00e4lle. Oleellista on ett\u00e4 koulutusaineisto on tarkoitukseen sopivaa.<\/p>\n<p>Seuraavassa osassa katsotaan hieman sit\u00e4 neuroverkon sis\u00e4ist\u00e4 toimintaa ja rakennetta ja l\u00e4hestyt\u00e4\u00e4n my\u00f6s k\u00e4yt\u00e4nn\u00f6n sovelluksia ja kokeilumahdollisuuksia.<\/p>\n<p>PS. koska olen oppinut neuroverkkohommat englanniksi, k\u00e4ytt\u00e4m\u00e4ni termit voivat olla v\u00e4h\u00e4n hukassa. Ja kun sis\u00e4lt\u00f6 perustuu omiin kokemuksiini, n\u00e4k\u00f6kulma on kokeilevan taiteilijainsin\u00f6\u00f6rin, ei esimerkiksi opettajan tai tutkijan. Otan mielell\u00e4ni vastaan korjauksia ja parannusehdotuksia.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>K\u00e4sittelen t\u00e4ss\u00e4 artikkelisarjassa neuroverkkoja taiteilijainsin\u00f6\u00f6rin\u00e4 k\u00e4yt\u00e4nn\u00f6n n\u00e4k\u00f6kulmasta. Mit\u00e4 niill\u00e4 voi tehd\u00e4, kuinka ne suurin piirtein toimivat, miten niit\u00e4 voidaan k\u00e4ytt\u00e4\u00e4 k\u00e4yt\u00e4nn\u00f6n sovelluksissa ja kuinka voi itse alkaa kokeilla niiden k\u00e4ytt\u00f6\u00e4. P\u00e4\u00e4paino on kuvaa k\u00e4sitteleviss\u00e4 neuroverkoissa ja niiden sovelluksissa, koska tunnen ne parhaiten; olen itse perehtynyt niihin ja kokeillut niiden soveltamista\u2026<\/p>\n<p class=\"continue-reading-button\"> <a class=\"continue-reading-link\" href=\"https:\/\/liipetti.net\/retkia\/neuroverkot-kaytannon-johdanto-1\/\">Continue reading<i class=\"crycon-right-dir\"><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,2],"tags":[],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry","category-kuvankasittely","category-neuroverkot"],"_links":{"self":[{"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":16,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":95,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/posts\/68\/revisions\/95"}],"wp:attachment":[{"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/media?parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/categories?post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/liipetti.net\/retkia\/wp-json\/wp\/v2\/tags?post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}