Neurovõrgud

Järgnev on külalispostitus Joonatan Samuelilt. Joonatan on leitav Githubist ja Linkedinist.

Masinõppe valdkond on meie maailma viimase 20 aasta jooksul kardinaalselt muutnud. Kui miski, mida arvutid teha suudavad tundub nagu maagia, on see tõenäoliselt just see. Lihtsamates kasutusjuhtudes soovitatakse meile veebipoodides raamatuid, mis meile meeldida võiks, aga keerulistemates kasutatakse selle valdkonna võtteid selleks, et panna autod linnaliikluses iseseisvalt sõitma, diagnoosida patsiente või ennustada aktsiaturu kaootilist käitumist.
 
Tuvastamisülesande (inglise k. classification) lahendamine on ilmselt kõige laiemalt levinud masinõppe probleem. Tüüpilised näited on piltidelt objekti leidmine või nende eristamine, muusikapalade žanride identifitseerimine, teksti olulisuse hindamine, ja palju muud. Sisemiselt on enamik masinõppe algoritmid lihtsalt mingisugused matemaatilised valemid millel on palju parameetreid. Leidmaks sellele valemile parameetreid, mis lahendaksid meie tuvastamisülesande võetakse ette märgendatud näidete andmestik, ning kasutades mõnda optimeerimismeetodit otsitakse parameetritele väärtusi nõnda, et see vähendaks viga.

Kuigi eksisteerib väga palju tuvastusalgoritme on tehisnärvivõrgud ühed vanimatest ja võimsamatest lähenemistest, mille potensiaali on alles hiljuti õpitud kasutama. Samuti tasub siinkohal välja tuua, et tehisnärvivõrgud on võimelised lahendama ka teistsuguseid probleeme kui tuvastamine, kuid me fokuseerime siin tuvastamisele selle laiaulatusliku kasutuse tõttu praktilistes probleemides.
 
Keerulise sõna “tehisnärvivõrk” või teisisõnu “neurovõrk” taga on peidus lihtne mõte: kogum neuroneid millest igaüks saab teistelt neuronitelt sisendid, viib täide arvutuse ja annab seejärel väljundi. Igal ühendusel neuronite vahel on kaal, millest sõltub, kui palju ühe neuroni väljund teise neuroni väljundit mõjutada saab. Need neuronid kategoriseeritake kihtidesse.

Kõige esimene kiht võrgust kannab nime sisendkiht, sest siia sisestatakse andmed. Pärast sisendkihti on peidetud kihid, mis võivad olla omavahel keeruliselt ühendatud kuigi enamasti kasutatakse täielikult ühendatud võrku. Täielikult ühendatud, tähendab, et kihis olevad neuronid omavad ühendusi kõigi järgmise kihi neuronitega. Viimane kiht kannab nime väljundkiht, see annab meile informatsiooni, mida me soovisime teada sisendandmete kohta. Kõik kihid sisendkihi ja väljundkihi vahel liigituvad peidetud kihtideks. Kogu struktuur üheskoos võib olla väga keerukas, aga ehitusplokid on alati samad: neuronid ja ühendused nende vahel.

Lihtne närvivõrk (Joonatan Samuel)

See, kuidas tehisnärvivõrk sisendkihti antud andmetest vastuse saab ei ole midagi müstilist, vaid üksteise järel kindlas järjekorras teostatud tehted. Iga neuron võtab kõik enda sisendid ja leiab nende summa. Seejärel kasutab ta saadud summa peal aktivatsiooni funktsiooni, mis suurendab neurovõrgu võimekust lahendada probleemi. Täpne funktsioon oleneb võrgu suurusest ja lahendatavast probleemist kuid tihti kasutatakse näiteks sigmoid funktsiooni. Väljastades seejärel enda arvutuse tulemus korrutatakse see läbi neuronite vahelise kaaluga. Siin hakkab protsess aga otsast peale järgmises neuronis ja seda kuni jõutakse väljundkihti. Seal ei ole vastust kuhugi edasi saata ja vastuseks jääbki viimase aktivatsiooni funktsiooni vastus.

Sigmoid funktsioon (Joonatan Samuel)

Sellist süsteemi päriselulisele probleemile rakendades on meil vajalik märgendatud näidete andmestik. See tähendab, et mõningate sisendandmete jaoks on märgitud silt millele konkreetne andmepunkt vastab. Näiteks võib meil olla andmestik koerte ja kasside piltidest, milles iga foto juurde on märgitud kas tegemist on kassi või koeraga. Sellist andmestikku kasutades on võimalik sõnastada tuvastamisprobleem niimoodi, et väljundkihis on kaks neuronit; Esimese neuroni väärtus peaks olema 1 ja teise neuroni väärtus 0 parajasti siis, kui sisendis on kassi pilt, ning esimese neuroni väärtus 0 ja teise neuroni väärtus 1 vastasel juhul. “Tark” tehisnärvivõrk on võimeline meile näitama meile väljundit mida me eeldame; “Naiivne” neurovõrk aga ei suuda. Ainuke asi mis on erinev naiivse ja targa võrgu puhul on neuronite vahelised kaalud. Muutes kaale on võimalik saada naiivsest võrgust tark võrk. Kaalude muutmise protsessi eesmärgiga saada naiivsest võrgust tark nimetatakse õppimiseks.
 
Mõistmaks õppimise ideed sügavamalt on tarvis defineerida kaofunktsioon, mis on teisisõnu veamõõt. Antud neuronite vahelised kaalud on meil võimalik arvutada sisendandmete peal tehisnärvivõrgu väljundid, kaofunktsioon võttab selle ja oodatud vastuse ning annab väljundiks vea oodatud ja saadud vastuste vahel. Õppimisprotsessi võib näha kui kaofunktsiooni miinimumi otsimist. Teisisõnu on õppimisprotsess püüdlus vähendada viga.

Vea vähendamiseks kasutatakse optimeerimisalgoritmi. Kuigi tänapäeval on mitmeid edukaid lähenemisi, põhinevad nad kõik gradient-meetodil (inglise k. gradient descent) mille põhimõte on üsnagi triviaalne. Igal õppimisiteratsioonil muudame me igat neuronite vahelist kaalu vähesel määral selles suunas mis viga vähendab. Kui jõuame kohta, kus mõlemale poole liikudes viga suureneb oleme jõudnud optimumi. Optimumis võime öelda, et meie neurovõrk on nii tark, kui olla saab. Võib juhtuda, et see optimum ei ole parim. Tavaliselt proovitakse õppimisprotsessi mitu korda ja valitakse parim optimum kuid see ja ka teised seda probleemi käsitlevad optimeerimisalgoritmid on ressursimahukad.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.