< eelmine | 2. OSA sisukord | järgmine > |
2.2 Juhendatud masinõpe autorid: Mari-Liis Allikivi ja Ardi Tampuu
Nüüdseks teame, et andmestikke kujutatakse tabelitena, et on kategoorilisi ja arvulisi tunnuseid ja et tunnuste väärtused tuleb arvulisele kujule viia, kui tahame nendel andmetel hakata masinõppega tegelema. Lisaks oleme maininud, et on olemas selline uurimisvaldkond ja meetodite kogum nagu juhendatud õpe (ingl supervised learning), mis võimaldab märgendatud näidete (st. tunnused+märgend paaride) põhjal õppida igasuguseid keerulisi ülesandeid lahendama. Aga me ei ole veel täpsemalt seletanud, mida õppimine selles kontekstis üldse tähendab. Samuti peame defineerima, mida tähendab masinõppe mudel.
Seletame seda näiteprobleemi abil.
Kokk loob uut supiretsepti, kasutades eelnevalt valitud koostisosi. Ta üritab leida õiget tasakaalu erinevate maitseainete ja koostisosade hulkade vahel. Keetes teatud koostisega supi, saab ta seda oma restorani klientidele maitsta anda ning saab tagasisidena skoori, kui kõrgelt kliendid keskmiselt seda suppi hindasid. Erinevatest koostistest ja skooridest loob ta andmestiku, kus read on supid, tunnusteks on koostisosad, tunnuste väärtusteks kasutatud kogused ning märgendiks klientide hinnang. Juhendatud masinõppe abil saame selle andmestiku põhjal õppida mudeli, mis võimaldab juba enne supi valmiskeetmist ennustada, millise hinnangu supp saab.
Siinkohal toomegi sisse masinõppe mudeli mõiste. Masinõppe mudel (edaspidi ka lihtsalt mudel) on matemaatiliste sammude (tehete, võrdluste) loetelu, mille abil saab ennustada tunnuste väärtuste põhjal märgendi väärtust. Kindlaks määratud matemaatiliste sammude loetelu kutsutakse algoritmiks ja selle põhjal saab luua arvutiprogrammi. Masinõppe mudelid on üks algoritmi alamliik. Mudeli põhjal loodud arvutiprogramm, saades sisendiks ükskõik millised (tunnuste) väärtused, teeb need arvutuslikud sammud läbi ja tagastab mudeli ennustuse (mudeli pakkumise, mis võiks olla märgendi väärtus). Supi näites on mudeliks programm, mis koostisosade ükskõik millise kaalukombinatsiooni põhjal pakub, kui palju see klientidele meeldib.
Vahemärkus: Mudeli mõiste
Loodusõpetuse õpik: Mudel on keha või nähtuse lihtsustatud kirjeldus.
EKI seletav sõnaraamat: Mudel on originaalobjektiga kindlas vastavuses olev tehisobjekt, ka skeem, seoste matemaatiline kirjeldus vms.
Enn Pärtel. Füüsika mõisted gümnaasiumile: Mudel on keha või nähtuse koopia, milles on esile toodud antud uurimise seisukohast olulised omadused ja seosed ning välja on jäetud teisejärgulised omadused ja seosed.
Eesti Entsüklopeedia: Mudel on objekt, mis on kindlas vastavuses mingi teise objektiga (originaaliga) ja asendab seda tunnetusprotsessis. Mudeleid kasutatakse juhul, kui originaali otsene uurimine on raske või võimatu.
Kuidas sobitub masinõppe mudel, nii nagu me selle defineerisime, nende kirjelduste alla? Antud juhul on nähtus, mida me mudeldame, see peidetud ja keeruline reaaleluline protsess, mis seob omavahel tunnuseid ja märgendit. Supiretsepte muudab pärismaailmas hinnanguteks maitsejate maitsemeel, elukogemused, ootused ja eelistused. Masinõppe lähenemises me lihtsustame probleemi ja unustame kogu maitsete tundmise füsioloogia ja psühholoogia. Meie mudelid püüavad lihtsalt leida matemaatilise seose tunnuste ja märgendite vahel, nii täpselt, kui see on tunnustes sisalduva info põhjal võimalik.
Siinkohal kasutame termineid "mudel ennustab" või "mudel pakub", sest mudel võib olla väga halb ja kalkulatsioonide tulemusena tagastada väärtusi, mis ei ole absoluutselt sarnased tegelike märgenditega. Aga fakt, et me oleme mudeli matemaatiliselt kirja pannud, annab meile võimaluse mudeli eksimusi analüüsida. Me saame võrrelda mudeli ennustusi ja tegelikke hinnanguid, mille kliendid erinevatele suppidele andsid, ning proovida oma mudelit muuta viisil, et ennustused läheksid täpsemaks. Seda mudeli muutmist eesmärgiga muuta ennustusi täpsemaks kutsutakse mudeli optimeerimiseks ehk mudeli õpetamiseks (Joonis 12). Mudel õpib võrreldes oma ennustusi tegelike märgenditega ja muutes siis ennast nii, et viga (ennustatu ja tegeliku vahe) väheneks. Mudeli viis ennast muuta sõltub mudeli tüübist – milliseid matemaatilisi samme mudel sisaldab. Neid samme saab kas muuta, juurde lisada või eemaldada. Otsustamaks, mida, kuidas ja millises järjekorras mudelis muuta, on omakorda eraldi matemaatilised reeglid – õppimisalgoritmid. Nagu mudelitüüpe, on ka erinevaid õppimisalgoritme palju.
Õppimise tulemusena saame me mudeli, mis ennustab märgendit täpsemini kui enne õppimist. Sõltuvalt mudelist ja õppimiseks kasutatud reeglitest, võib juhtuda, et ka pärast õppimist on mudeli ennustused üsna halvad. See võib tähendada, et on kasutatud valet mudelitüüpi või õppimisalgoritmi või ongi lihtsalt reaalselt võimatu antud tunnustest märgendit ennustada. Seevastu mõnikord võib juhtuda, et pärast õppimist suudab mudel kõikide näidete puhul täpselt tunnustest märgendi ennustada.
Hiljem toome ka näite ühe teatud mudelitüübi õppimisprotsessist. Siinkohal aga lõpetame oma supikeetmise näite. Oleme saanud teada, et:
- mudel on arvutuste (matemaatiliste sammude) jada, mis muudab tunnused ennustuseks;
- mudelid teevad vigu, ennustused pole alati täpsed. Kui teame õiget vastust, saab vigadest õppida ja mudelit paremaks muuta;
- on erinevaid mudeleid, mis koosnevad erineval hulgal ja erinevat tüüpi arvutustest. Kuidas täpselt õppimine toimub, sõltub mudelitüübist ja õppimiseks kasutatavatest reeglitest (õppimisalgoritmist).
Kui meil tõesti õnnestub luua täpne ja kasulik supi-headuse mudel, siis on meil võimalik sisestada sellesse erinevaid koostisosade kombinatsioone ja saada teada, ilma klientide peal eksperimenteerimata, kui väga see inimestele meeldiks. Nii saab läbi proovida lõputu hulga erinevaid retsepte ja leida parim, mis üldse neist koostisosadest teha saab.
Regressioon ja klassifikatsioon
Nagu meil tunnuste puhul juttu oli, võivad ka märgendid olla kas arvulised või kategoorilised. Kui ennustame arvulisi väärtusi, on lihtne mõõta, kui hea on meie mudel ning proovida seda paremaks muuta. Võrdleme lihtsalt ennustust (näiteks: korter maksab 80 000 eurot) õige vastusega (92 500 eurot) ja saame teada vea suuruse (12 500). Kui meil õnnestub muuta mudelit nii, et ennustus on 85 000 eurot (ehk viga väheneb), siis oleme oma mudelit (vähemalt selle näite jaoks) paremaks teinud. Muutes mudelit nii, et keskmiselt kõigi näidete puhul ennustusvead vähenevad, saamegi täpsema mudeli. Arvuliste märgendite ennustamist kutsutakse regressiooniks.
Seevastu tekitab kategooriline märgend väikese probleemi, kui tahame mõõta ennustusvigu. Nimelt on iga ennustus-märgend paar lihtsalt kas identne või erinev. Ennustus on kas lihtsalt õige või lihtsalt vale – mingit “valeduse” mõõtu ei ole võimalik anda. Seega iga näite jaoks on mudel kas ideaalne või täiesti vale. Küll aga saab vaadata, mitu protsenti kõikidest näidetest õigesti pakuti, ja see väärtus muutub järk-järgult, mitte hüppega 0%-lt 100 %le. Lisaks väljastavad tegelikult paljud mudelit mitte lihtsalt ennustuse, vaid ka kui kindlalt nad sellesse usuvad – näiteks “olen 85% kindel, et see isik ei käi tööl”. Sellisel juhul on ka individuaalse näite puhul võimalik mudeli õigsust mõõta – kui mudel ennustab õiget vastust suurema kindlusega, on mudel parem. Kategooriliste märgendite ennustamist kutsutakse klassifitseerimiseks. Klassifitseerimine oleks näiteks, kui ennustaksime “Kas korter müüakse esimese kuue kuu jooksul?”. Vastus on “ei” või “jah”, ehk kategooriline.
Regressiooni ja klassifikatsiooni puhul kasutatakse veidi erinevaid mudeleid ja õppimisalgoritme, aga üldine idee on sarnane – proovime minimeerida vigu. Näide, mida kohe koos läbi hakkame tegema, demonstreerib ühe klassifitseerimisülesande lahendamist.
Näide ühe mudelitüübi õppimisprotsessist
Mainisime, et mudeleid on erinevat tüüpi. Nad erinevad selle poolest, kui palju ja milliseid matemaatilisi samme nad sisaldada saavad. Loetleme siin mõned tuntud mudelitüübid: lineaarne mudel, logistiline regressioon, otsustuspuu, otsustusmets, tugivektormasin ja tehisnärvivõrgud. Igaühel neist võib olla teistest erinev õppimisloogika. Teatud õppimisalgoritmid on kasutatavad väga paljude mudelitüüpide puhul (näiteks evolutsiooniline algoritm, gradientlaskumise algoritm), mõned ainult teatud mudelite puhul. Et mudelite ja õppimise keerulisest maailmast rohkem teada, soovitame ka tulla õppima Tartu Ülikooli ja võtta arvutiteaduse instituudi aineid Tehisintellekt, Masinõpe, Tehisnärvivõrgud.
Käesolevas aines ei saa me tutvustada kõiki mudeleid ja kõiki algoritme. Et anda teile aimu, kuidas masinõppe algoritmid täpsemalt töötavad, teeme läbi ühe juhendatud õppe näite kasutades ühte mudelitüüpi ja etendades ise õppimisalgoritmi. Loodetavasti aitab see mõista masinõppe mudeli õppimise põhilisi samme.
Valime oma näite jaoks mudelitüübiks otsustuspuu (ingl decision tree), sest see on ilmselt üks kõige intuitiivsemaid mudeleid. Otsustuspuu, nagu nimigi ütleb, on järjestikustest otsustest koosnev “puu”. Teisiti öeldes koosnevad need järjestikest küsimustest, mida on vaja iga näite kohta küsida, et jõuda vastuseni. Küsimustele vastamist nimetatakse otsustamiseks. Need puud koosnevad hargnemispunktidest (teaduslikus keeles sõlmedest) ja okstest (teaduslikus keeles harudest). Hargnemispunktid vastavad “otsustele”, ehk “Kas” küsimustele. Igast hargnemispunktist väljub kaks oksa - “jah” oks ja “ei” oks.
Enne kui hakkame ise looma otsustuspuud ühel väiksel näiteandmestikul, vaatame ühte juba olemasolevat otsustuspuud. See puu võimaldab klassifitseerida intensiivravile võetud patsiendid kõrge riskiga (kõrge suremusega) ja madala riskiga patsientideks. See puu on loodud märgendatud andmestikul, küsimused on valitud just nii, et need võimaldaks eristada eri riskitasemega patsiente. Vastates teatud patsiendi kohta teatud küsimustele, alustades ülemisest hargnemispunktist, jõuame lõpuks vastuseni, mis on tema risk (Joonis 13).
Nüüd loome ise ühe otsustuspuu. Alustame ülesande kirjeldamisest, mis omakorda käib käsikäes andmetega. Meile on antud 10 inimese andmed, mis sisaldavad tunnuseid “vanus”, “kas õpib?”, “kas on väikelapse vanem?” ja “kas käib tööl?”. Viimane tunnus on ka meie märgend, ehk siis tahame õppimise, vanuse ja väikelapse vanemaks olemise põhjal õppida mudeli, mis ennustaks võimalikult täpselt, kas inimene käib tööl või ei.
Ilmselt juba elukogemusest on lugejal teatavad eelaimdused, milliste tunnustega inimesed käivad/ei käi tööl, aga algoritm on matemaatiline objekt ja sel ei ole kontekstist mingit arusaama. See üritab õppida lihtsalt andmeid vaadates. Siiski, ka meie peaks kõigepealt oma andmeid vaatama. Kasutame hästi väheste näidetega väljamõeldud andmestikku (Joonis 14), et saaksime lihtsasti arvutuskäike kaasa teha ning üldisest ideest aru saada.
Igal real on üks näide ehk üks isik. Viimases veerus olev tunnus on meie märgend. Tuletame ka meelde, et arvuti näeb EI ja JAH asemel 0 ja 1 väärtuseid nagu eelmises peatükis selgitasime. Siin aga, mõnusama lugemise tarbeks, jätame need väärtused tekstilisteks. Nagu ennist vihjasime – selles näites etendame meie ise õppimisalgoritmi rolli, seega on hea, kui meil on lihtne tabelit lugeda.
Otsustuspuud luues üritame leida küsimused, mille tulemusena vastataks erinevate märgenditega andmetele erinevalt. Meie ülesanne ongi hakata andmetest neid häid küsimusi (ehk otsuseid) otsima (tavaliselt teeks seda õppimisalgoritm). Kõigepealt vaatame ükshaaval kõiki tunnuseid ning üritame leida, milline küsimus millise tunnuse kohta eristaks kõige paremini töötavaid ja mittetöötavaid inimesi. Teeme siin selle sammhaaval läbi.
Alustame esimesest tunnusest, “kas õpib?”. Vaatame tabelis eraldi neid näiteid (ridu), kus “kas õpib?” on EI, ja neid, kus see on JAH (Joonis 15)
Näeme, et inimestest, kes ei õpi, käivad pooled tööl ja pooled mitte. Seega lihtsalt teadmine, et inimene ei õpi, pole eriti informatiivne, arvamaks midagi tema tööl käimise kohta. Samas näeme, et kui inimene õpib, siis ta enamasti tööl ei käi, aga ka see pole kindel. Seega küsides hargnemispunktis “Kas inimene õpib?” ei ole ei JAH haru ega EI haru selline, kus oleks ainult töötavad või ainult mitte-töötavad inimesed.
Peame proovima, kas mõni teine tunnus võimaldab küsida küsimuse, mis eristaks klasse paremini. Teeme nüüd samasugused tabelid tunnuse “kas on väikelapse vanem?” põhjal. Näeme, et kui inimesel ei ole väikelast, siis taaskord pooltel juhtudel ta käib tööl ja pooltel mitte, mis on jällegi mitteinformatiivne. Kuid kui inimesel on väikelaps, siis antud andmestiku põhjal keegi neist tööl ei käi (Joonis 16). Seega aitaks see küsimus eristada kaks tööl mitte käijat ülejäänud inimestest.
Vaatame ka viimast tunnust - vanust. Kuna vanus on arvuline tunnus, siis selle põhjal võib küsida väga palju erinevaid “kas inimene on vanem kui …” küsimusi, muutes küsitavat vanust. Me peaksime kaaluma kõiki võimalikke piirvanuseid ja valima neist parima (selle, mis klasse paremini eristab). Kui me kasutaksime õppimisalgoritmi, siis just seda teeks ka algoritm. Et mitte teha suurt hulka tabeleid, proovime valida mingisuguse vanusepiiri vaatluse teel. Võime järjestada tabeli vanuse põhjal ja vaadata, kuhu selle piiri tõmmata võiks.
Näeme, et mõlemad üle 60-aastased isikud ei tööta ja saame piiri tõmmata just sinna, eraldades nii kaks mittetöötavat inimest.
Nüüd oleme läbi vaadanud kõik tunnused ja parimad otsustusküsimused, mis nende puhul küsida saaks. Milline neist esimeseks otsuseks valida? Meie hindasime hetkel erinevate otsustusküsimuste headust lihtsalt visuaalselt ja loogiliselt, aga masinõppe programmil on selleks kindlad meetodid. Kuna hetkel ei ole meie põhieesmärk tegelikult kasutavate algoritmide arvutustest aru saada (ning need arvutused nii või naa üritavad jäljendada ka inimlikult tajutavat parima otsuse valikut), siis teeme meie otsuse oma loogika põhjal. Kuna “kas on väikelapse vanem?” ja “kas vanus > 60?” eraldasid mõlemad kaks mittetöötavat inimest, siis ei olegi hetkel vahet, kumba neist kasutame (Joonis 18).
Võtame lihtsalt suvaliselt ühe, näiteks “kas vanus > 60?”. Nüüd võime mõtteliselt eemaldada andmestikust kaks üle 60-aastast inimest ja töötada edasi vasakpoolsesse oksa (harusse) jäänud kaheksa inimese töötajateks ja mitte-töötajateks jagamisega. See käib täpselt samamoodi nagu varem, nüüd on meil 10 inimese asemel alles 8 ja üritame leida järgmise kõige parema otsustuskriteeriumi, mis töötajaid ja mitte-töötajaid eraldaks. Allolevas tabelis (Joonis 19) on järelejäänud 8 inimest, järjestatud parema loetavuse eesmärgil vanuse järgi.
Käime uuesti tunnused läbi, otsides küsimust, mis järelejäänud isikuid hästi eristaks. Tunnuse “kas õpib?” puhul on nii õppijate kui mitteõppijate hulgas töötajaid ja mittetöötajaid. Vanuse põhjal saaksime eraldada kaks töölkäijat (vanus > 45). Samamoodi saaksime eraldada kaks tööl mittekäijat tunnuse “kas on väikelapse vanem?” põhjal. NB! Võid paberil või mõttes joonistada nüüd välja samasugused pisikesed tabelid nagu enne, et kontrollida, et tõesti nii on. Seega valime jällegi eelmainitud kahe variandi hulgast ühe, kuna mõlemad eraldavad kaks inimest.
Valime seekord küsimuse “kas on väikelapse vanem?”. Seega on meie otsustuspuu muutunud suuremaks (Joonis 20).
Nüüd on meil tabelis alles 6 inimest. Lisaks võime eemaldada tunnuse “kas on väikelapse vanem?”, sest sinna on jäänud ainult kõik EI väärtused, mis ei ole enam otsustamise mõttes informatiivne (Joonis 21).
Jätkame täpselt samamoodi. Näeme, et tunnus “kas õpib?” suudab eraldada kolm töölkäijat (kes ei õpi) ning ka vanuse põhjal paremini ei saa. Kasutame siis seekord tunnust “kas õpib?” ja täiendame veelkord oma otsustuspuud (Joonis 22).
Tunnusele “kas õpib?” jäid alles ainult JAH vastajad, mistõttu seda enam eristamiseks kasutada ei saa. Eraldamata on jäänud järgmised andmed (Joonis 23).
Kui tahaksime ehitada puu, mis suudaks lõpuni iga töötava ja mittetöötava inimese eraldada, oleks meil siin variant veel kaks korda tunnust vanus kasutada. Hetkel loogiliselt mõeldes (NB! Seda masinõppe programm teha ei suuda!) ei ole see aga mõistlik. Ilmselt selles väikeses vanusevahemikus eal ja töölkäimisel enam mingisugust selget reaalelulist seost pole. See, et meie andmestikku juhtusid just sellised inimesed, on juhuslik.
Õppida juhuslikke ilminguid klassifitseerub üleõppimiseks (masinõppe terminoloogias ülesobitamiseks, ingl overfitting, millest räägime järgmises alapeatükis) – meie mudel hakkab uskuma, et see, kas inimene on 20- või 21-aastane ongi oluline põhjuslik erinevus, mis võimaldab töötamist ennustada. Kui mudel tehakse liiga spetsiifiline ja väikese andmestiku põhjal, on oht ajada segamini juhuslikud efektid ja tegelikud põhjused. Selle tulemusena ei ennustaks mudel uute andmete peal hästi. Otsustuspuude puhul ongi võimalik jätta mõned oksad nii-öelda poolikuks, näiteks kui andmeid jääb mingisse oksa väga vähe alles. See tähendab, et mingist hetkest alates me enam uusi reegleid ei otsi ja lepime sellega, et teatud “lehtedesse” (lõplikesse, tupik-harudesse) jääb erinevatest klassidest näiteid. Sellist teatud hetkel peatumist oskavad ka õppimisalgoritmid – algoritm saab sisaldada reeglit, et kui alles on näiteks vähem kui 4 näidet, siis ära enam sellesse harusse otsuseid lisa). Kui lehte jääb erineva märgendiga näiteid, siis ennustusena antakse see väärtus, mida on antud lehes rohkem.
Võtame nüüd kokku, mida me just tegime ja kuidas seda mudelit edaspidi kasutada saaks. Me kasutasime just otsustuspuu mudelit ja imiteerisime ise õppimisalgoritmi, et ehitada etteantud näiteandmete põhjal otsustuspuu masinõppe mudel (Joonis 24). Meie mudel ongi seesama joonis, mis ütleb, milliseid küsimusi küsida ja mida siis teha. Arvutis on see kirjas lihtsalt otsustena (valikulausetena ehk tingimuslausetena, mille kontseptsiooniga saab tutvuda siin), aga inimesel on seda mõnusam visuaalselt mõista.
Meie mudel sisaldab väga intuitiivselt arusaadavat informatsiooni. Kui inimene ei ole enam esimeses ega teises nooruses, siis ta ei tööta, kui ta on lapsehoolduspuhkusel, siis ta ei tööta, kui ta õpib, siis ta ka ilmselt ei tööta (aga vahel töötab ka – vaesed tudengid!). Muudel juhtudel inimene ilmselt töötab. Kindlasti ei sisalda see mudel kõiki nüansse, aga üldine loogika tundub olemas olevat (NB! Seda peatükki kirjutades valisime teadlikult sellise näite, et tulemus oleks lugeja jaoks loogiline). Masinatel pole elukogemust, aga kui andmed kirjeldavad tegelikkust hästi ning sisaldavad sisulist informatsiooni märgendi kohta, suudab ka masinõppe õppimisalgoritm sealt kõige olulisema üles leida.
Oma mudelit saame nüüd edaspidi kasutada uute inimeste puhul nende töötamise või mittetöötamise ennustamiseks. Näiteks kui meil on 31-aastane inimene, kes ei ole väikelapse vanem ja kes ei õpi, siis mudelis esimene otsus viib meid vasakule EI harusse, teine otsus järgmisesse EI harusse ja ka kolmas otsus kolmandasse EI harusse ja saamegi ennustuseks, et antud inimene töötab. Täida mudeli põhjal ära ka järgmised kaks lahtrit! (Joonisel 25)
Vaata lahenduskäiku siit ja täidetud tabelit siit.
Nagu alguses mainitud sai, on otsustuspuu vaid üks võimalik masinõppe mudel. Teiste mudelite puhul ei pruugi “arvutuslikud sammud”, millest mudel koosneb, seisneda väärtuste võrdlemises. Need arvutuslikud sammud võivad seisneda ka väärtuste omavahel või mingi teatud arvuga liitmises, lahutamises, korrutamises ja jagamises. Kõiki neid matemaatilisi samme saab läbi viia ka arvuti, nii et mudelit kasutades uute näidete põhjal ennustuste tegemine on automatiseeritav.
< eelmine | 2. OSA sisukord | järgmine > |