Machine learning – terminas, kurį šiandien girdi kone kiekviename IT renginyje, straipsnyje ar net reklamoje. Bet jei paklaustum dešimties žmonių, kas tai iš tikrųjų yra, greičiausiai gautum dešimt skirtingų atsakymų. Vieni sakys, kad tai dirbtinis intelektas, kiti – kad tai tiesiog statistika su gražesniu pavadinimu. Tiesa, kaip visada, kažkur per vidurį. Pabandykime išsiaiškinti, kas čia iš tikrųjų vyksta, be marketinginio triukšmo.
Kas tai iš tikrųjų yra, jei atmesime buzzwordus
Machine learning – tai būdas priversti kompiuterį atpažinti dėsningumus duomenyse, nerašant konkrečių taisyklių ranka. Klasikinis programavimas veikia taip: tu parašai taisykles, kompiuteris jas vykdo. Machine learning veikia atvirkščiai – tu duodi kompiuteriui daug pavyzdžių ir rezultatų, o jis pats „susimeta“, kokia logika tuos rezultatus sieja.
Įsivaizduok, kad nori atpažinti, ar el. laiškas yra šlamštas. Klasikiniu būdu rašytum: jei žodis „nemokamai“ pasikartoja daugiau nei tris kartus, žymėk kaip spam. Bet spamerai greitai išmoktų apeiti tokias taisykles. Machine learning modelis vietoj to pažiūri į tūkstančius jau pažymėtų laiškų ir pats atranda, kokie požymiai (ne tik žodžiai, bet ir siuntėjo adresas, laiko juosta, nuorodų kiekis) koreliuoja su šlamštu. Toks modelis prisitaiko, kai atsiranda naujos gudrybės.
Trys pagrindiniai mokymo tipai, be kurių niekur
Kai pradedi domėtis šia sritimi, greitai atsitrenki į tris terminus: supervised, unsupervised ir reinforcement learning. Skamba baisiai, bet iš tiesų idėja gana paprasta.
Prižiūrimas mokymasis (supervised learning) – tu turi duomenis su „teisingais atsakymais“. Pavyzdžiui, nuotraukas su etiketėmis „katė“ arba „šuo“. Modelis mokosi iš šių pavyzdžių ir vėliau bando teisingai klasifikuoti naujas, nematytas nuotraukas. Dauguma realaus pasaulio verslo taikymų (kreditingumo vertinimas, kainų prognozės, sukčiavimo aptikimas) naudoja būtent šį principą.
Neprižiūrimas mokymasis (unsupervised learning) – čia atsakymų niekas nežino iš anksto. Modeliui tiesiog duodi krūvą duomenų ir prašai rasti struktūrą – pavyzdžiui, suskirstyti klientus į grupes pagal pirkimo įpročius. Niekas iš anksto nepasakė, kokios tos grupės turi būti, algoritmas pats jas atranda.
Sustiprintas mokymasis (reinforcement learning) – tai jau kitokia žaidybinė istorija. Algoritmas mokosi iš bandymų ir klaidų, gaudamas „apdovanojimus“ už teisingus veiksmus. Būtent taip treniruojami botai, žaidžiantys šachmatais ar Go, arba robotai, mokantys vaikščioti.
Duomenys – tikrasis kuras, be kurio nieko neveiks
Galima turėti geriausią algoritmą pasaulyje, bet jei duomenys prasti – rezultatas irgi bus prastas. Šioje srityje yra posakis „garbage in, garbage out“, ir jis nusako viską. Praktikoje 70-80% viso darbo, dirbant su machine learning projektu, sudaro ne modelio kūrimas, o duomenų tvarkymas: trūkstamų reikšmių pildymas, dublikatų šalinimas, duomenų normalizavimas, netinkamų įrašų filtravimas.
Daugelis pradedančiųjų mano, kad viskas prasideda nuo algoritmo pasirinkimo. Iš tikrųjų viskas prasideda nuo klausimo: ar mano duomenys iš viso atspindi tikrovę, kurią bandau modeliuoti? Jei duomenys surinkti su šališkumu (pavyzdžiui, istoriniai paskolų sprendimai, kuriuose jau buvo diskriminacija tam tikrų grupių atžvilgiu), modelis tą šališkumą tiesiog perims ir automatizuos dar didesniu mastu.
Todėl praktinis patarimas – prieš imantis bet kokio algoritmo, praleisk laiką tiesiog žiūrėdamas į duomenis. Pasidaryk paprastus grafikus, patikrink pasiskirstymus, ieškok anomalijų. Tai nuobodu, bet būtent čia dažniausiai slypi problemos, kurios vėliau kainuoja savaites derinimo.
Kaip iš tikrųjų atrodo darbas su modeliu
Nusimesk įsivaizdavimą, kad machine learning inžinierius sėdi ir kažkokiu magišku būdu „treniruoja dirbtinį intelektą“. Realybėje procesas atrodo maždaug taip:
- Duomenų surinkimas ir valymas (kaip minėta, ilgiausia dalis)
- Duomenų padalinimas į mokymo, validacijos ir testavimo aibes
- Paprasto bazinio modelio (baseline) sukūrimas – dažnai net paprasta logistinė regresija
- Modelio treniravimas ir jo tikslumo vertinimas
- Hiperparametrų derinimas – tarsi virtuvinių prieskonių balansavimas
- Testavimas su duomenimis, kurių modelis niekada nematė
- Diegimas į gamybinę aplinką ir stebėjimas, kaip modelis elgiasi realiame pasaulyje
Paskutinis punktas dažnai pamirštamas, bet jis vienas iš svarbiausių. Modeliai laikui bėgant „genda“ – šis reiškinys vadinamas model drift. Pasaulis keičiasi, žmonių elgesys keičiasi, o modelis, treniruotas ant senų duomenų, pamažu praranda tikslumą. Todėl geras machine learning projektas niekada nesibaigia diegimu – jis reikalauja nuolatinės priežiūros, panašiai kaip sodas, kurį reikia laistyti.
Įrankiai, su kuriais verta pradėti
Jei nori realiai pabandyti, o ne tik skaityti apie tai, geriausia pradėti nuo Python kalbos. Ji tapo neoficialiu šios srities standartu dėl bibliotekų gausos:
scikit-learn – puikus pradžiai, čia rasi visus klasikinius algoritmus (sprendimų medžius, regresijas, klasterizavimo metodus) su aiškia ir logiška sąsaja. Jei tik pradedi, pirmus tris mėnesius praleisi būtent čia.
pandas – ne pats machine learning įrankis, bet be jo neišgyvensi. Tai biblioteka duomenų tvarkymui, lentelių filtravimui, grupavimui, transformavimui.
TensorFlow ir PyTorch – kai pereisi prie giliojo mokymosi (neuroninių tinklų), šie du karaliai valdo lauką. PyTorch pastaruoju metu tapo populiaresnis tarp tyrėjų dėl lankstumo, TensorFlow vis dar stiprus gamybinėse aplinkose.
Praktinis patarimas: nepradėk nuo neuroninių tinklų, net jei jie skamba įdomiausiai. Pradėk nuo paprastų dalykų – linijinės regresijos, sprendimų medžių. Suprasi pagrindus daug greičiau, o svarbiausia – suprasi, KODĖL sudėtingesni modeliai kartais net nereikalingi. Daugybė realių verslo problemų puikiausiai išsprendžiamos su paprastu algoritmu, jei duomenys geri.
Dažniausios klaidos, kurias daro pradedantieji
Peržiūrėjus dešimtis pradedančiųjų projektų, matosi tam tikri pasikartojantys dalykai.
Pirma – overfitting, arba modelio „iškalimas atmintinai“. Modelis puikiai atpažįsta mokymo duomenis, bet visiškai sugriūna su naujais. Tai tarsi mokinys, kuris išmoko atsakymus konkrečiam testui, o ne patį dalyką – pakeitus klausimus, jis pasimeta.
Antra – duomenų nutekėjimas (data leakage), kai informacija iš testavimo aibės netyčia patenka į mokymo procesą. Rezultatas – modelis rodo nerealiai gerus rezultatus laboratorijoje, bet realybėje veikia prastai.
Trečia – per didelis pasitikėjimas tikslumo (accuracy) metrika. Jei bandai atpažinti retą ligą, kuri pasitaiko 1 iš 1000 atvejų, modelis, kuris visada sako „sveikas“, turės 99.9% tikslumą, bet bus visiškai bevertis. Čia į pagalbą ateina kitos metrikos – precision, recall, F1 balas, kurios geriau atspindi realią situaciją nesubalansuotuose duomenyse.
Vietoj banalios pabaigos – ką iš tikrųjų reikia įsidėmėti
Jei iš viso šito teksto liktų prisiminti tik kelis dalykus, štai jie. Machine learning nėra magija – tai statistika, apvilkta programavimo apranga, ir jos sėkmė 90% priklauso nuo duomenų kokybės, ne nuo algoritmo egzotiškumo. Nereikia iš karto pulti prie sudėtingiausių neuroninių tinklų architektūrų – pradžioje paprasti modeliai duoda geresnį supratimą, o dažnai ir geresnius rezultatus praktikoje.
Jei nusprendei rimtai imtis šios srities, štai realus planas: pirmiausia išmok Python pagrindus, tada pandas duomenų tvarkymui, po to scikit-learn su klasikiniais algoritmais. Padaryk bent tris-keturis mažus projektus su realiais viešais duomenų rinkiniais (Kaggle svetainė – geras startas). Tik tada, kai jausiesi patogiai su pagrindais, judėk link giliojo mokymosi ir sudėtingesnių temų.
Ir dar vienas dalykas, kurio dažnai nesako mokymo kursuose – didžioji dalis darbo šioje srityje yra nuobodi. Duomenų valymas, dokumentacijos skaitymas, klaidų ieškojimas kode. Romantiška „dirbtinio intelekto kūrimo“ vizija realybėje virsta valandomis, praleistomis su pandas lentelėmis ir grafikais, ieškant, kodėl viena eilutė duomenų sugadina visą modelį. Bet būtent tas kruopštus, kartais nuobodus darbas ir atskiria veikiančius sprendimus nuo gražiai atrodančių prezentacijų, kurios niekada nepasieks gamybinės aplinkos.






