2. OSA. Masinõpe autor: Ardi Tampuu
Sissejuhatus
Inimestena oskame me hästi lahendada mitmeid ülesandeid, mis tunduvad meie jaoks lihtsad ning mida me teeme iga päev sadu kordi ilma ise märkamata. Näiteks on meie jaoks lihtne tuvastada oma nägemismeele abil ekraanile kuvatud objekte. Looma liiki suudame hinnata ka siis, kui pole seda isendit või tõugu kunagi näinud, kasutades mingeid eelnevast kogemusest üldistatud reegleid. Samuti tunneme sõbra ära ka siis, kui ta on uue soengu saanud, kaalus juurde võtnud või kui me pole teda 10 aastat näinud. Me saame pingutuseta aru teise inimese kõnest, isegi mürarikkas keskkonnas, kus on tegelikult ka palju teisi helisid, mida kuulda võiks. Me langetame liigeldes ja igapäevaseid toimetusi tehes tohutul hulgal keerulisi otsuseid, et vältida objektidega ja teiste inimestega kokkupõrkamist.
Kuigi need ülesanded ei valmista meie jaoks igapäevaselt mingit probleemi, on meil peaaegu et võimatu formaalselt või algoritmiliselt (matemaatiliste või loogiliste sammudena) kirjeldada, kuidas me seda teeme. Tuvastamaks, et pildil on koer, mitte kass, millised arutlus-sammud toimuvad sinu peas? Kui me suudaks need sammud kirja panna, suudaksime ka luua tehissüsteemi, mis kasse ja koeri eristaks. Samuti, kui autojuht suudaks kirja panna kogu oma otsustusprotsessi absoluutselt kõigis liiklussituatsioonides, suudaks me selle põhjal luua isejuhtiva masina. Praktikas näeme aga, et need protsessid (või mingid nende alamosad, näiteks liiklusolukorra tõlgendamine) toimuvad meie ajus liiga varjatult (vt. ka Joonis 1). Me ei tea, kuidas see juhtub ja seega me ei suuda neid samm-sammult kirja panna ja arvutisse programmeerida.
Masinõpe on väga oluline tehisintellekti alamvaldkond, mis võimaldab arvuteid automaatselt ülesandeid täitma õpetada ilma neid otseselt programmeerimata. See tähendab, et inimene ei pea arvutile andma detailseid juhiseid, mida ja mis järjekorras programm või algoritm peab tegema. Piisab sellest, kui me näitame masinõppe algoritmidele näiteid, mille põhjal need saaksid õppida. Masinõppe algoritmid on seega õppimise algoritmid, nad erinevadki üksteisest selle poolest, kuidas nad õpivad ja milliseid detaile õppida suudavad. Erinevad algoritmid võivad samadel näidetel õppides jõuda väga erinevatele tulemustele – see võib tuleneda sellest, et üks algoritm on lihtsalt teisest parem, aga ka sellest, et üritatakse optimeerida erinevaid asju. Näiteks võib masinõppe süsteemi luues valida, kas püüame eksida võimalikult harva, võimalikult vähesel määral või, sõltuvalt ülesandest, püüame saavutada hoopis midagi muud. Ennustades ilma, pole paari kraadi võrra eksimine tõenäoliselt väga suur probleem, ent ennustus võiks alati olla enam-vähem täpne. Ühe täielikult vale ennustusega võib inimese usalduse kaotada. Seega võib eksida tihti, aga teha tohib ainult väikseid vigu. Seevastu ennustades jalgpallimängude võitjaid ja panustades neile raha, pole vahet, kui suure skooriga keegi võidab või kaotab. Oluline on ainult, kes võidab. Seega tuleb täpselt arvata võimalikult palju kordi, aga paratamatult juhtuvate eksimuste suurus pole oluline. Alati on võimalik valida, millist tulemust me maksimeerida või minimeerida tahame. Andmeteadlase üks tööülesandeid ongi algoritme ja nende parameetrite väärtusi valides defineerida, mida ja kuidas õppida.
Selles moodulis tutvustame me esmalt, millised on need näited (andmed), mille põhjal masinõppe algoritmid õppida suudavad. Seejärel räägime masinõppe kahest peamisest suunast: juhendatud ja juhendamata õppest. Arutleme ka, mis on kriteeriumid hindamiseks, kas masinõppemudel on hea (kasulik) või mitte. Seletuste illustreerimiseks kasutame ka koodinäidet, mis on kirjutatud Google Colaboratory virtuaalses vihikus. Selle kursuse raames õppurilt koodi kirjutamise (ega lugemise) oskust ei eeldata, küll aga peab õppur tähele panema, mis koodivihikutes üldjoontes tehakse ja miks. Seega on tegu pigem praktilise näite kui praktilise ülesandega.