Pogled na strojno učenje iz očiju full-stack developera

Machine learning, deep learning i artificial intelligence su buzzwordi koji se pojavljuju svuda oko nas, čitamo li stručne članke i literaturu ili pak index.hr. Znamo li uistinu što je to i prepoznati je li nešto pametno ili „prevara“? Zašto bi developer trebao biti upoznat barem sa osnovama strojnog učenja i može li osoba koja se ne bavi ovim područjem na neki način „zaroniti“ u njega?  

Umjetna inteligencija (engl. artificial intelligence) počela se razvijati sredinom 20. stoljeća pojavom Turingovog stroja. Ovim pojmom opisujemo sposobnost računala da bude „inteligentno“ i da posjeduje sposobnost učenja i zaključivanja. Strojno učenje (engl. machine learning) je oruđe pomoću kojeg umjetna inteligencija nastaje. Ono omogućuje računalu da postane inteligentno bez eksplicitnog programiranja istog tog računala. Računalo uči temeljem dobivenih podataka i nekog od algoritama strojnog učenja. Duboko učenje (engl. deep learning) je pristup strojnom učenju gdje za model koristimo neuronsku mrežu. Neuronska mreža je model koji pomoću međusobno povezanih neurona imitira građu i strukturu ljudskog mozga.  

 

Osnovni pojmovi i koraci algoritma strojnog učenja

 

Postoje tri vrste strojnog učenja – nadzirano (engl. supervised), nenadzirano (engl. unsupervised) i podržano (engl. reinforcement). Nadzirano strojno učenje je vrsta učenja u kojoj znamo ono što želimo predvidjeti, odnosno ulazni podaci su označeni. Primjerice, ako imamo skup transakcija koje su klasificirane kao validne ili prevara, želimo za neku neviđenu transakciju temeljem njenih svojstava odrediti je li ona validna ili nije. Vrsta nadziranog strojnog učenja koja je upravo opisana naziva se klasifikacija (engl. classification) – pridjeljivanje klase nekom primjeru, dok je druga vrsta nadziranog strojnog učenja regresija (engl. regression). Kod regresije zadatak je predvidjeti brojčanu vrijednost, primjerice, cijena kvadratnog metra stana u Zagrebu 2030. godine. Sljedeća vrsta strojnog učenja je nenadzirano strojno učenje. Od nadziranog strojnog učenja ga razlikujemo po tome što ulazni podaci nisu označeni te nam nije unaprijed poznat izlaz algoritma. Najčešće se poistovjećuje sa klasteriranjem (engl. clustering) gdje pokušavamo pronaći uzorak i pravilnost unutar podataka kako bismo ih svrstali u grupe (klastere). Podržano učenje se od prethodne dvije vrste strojnog učenja razlikuje prema tome što izlaz iz algoritma nije jedan podatak već niz akcija. Ova vrsta učenja često se koristi u izradi računalnih igara gdje do pobjede ne vodi samo jedan potez, već kombinacija i redoslijed nekoliko poteza.  

Proces strojnog učenja može se podijeliti u nekoliko koraka od kojih se kao najbitniji pojavljuju: prikupljanje i priprema podataka, odabir modela, učenje modela, vrednovanje modela te na kraju sama instalacija, tj. deployment modela.

Prikupljanje podataka je prvi korak koji je potrebno napraviti kako bi uopće imali podatke kao ulaz samog algoritma. Ukoliko želimo predvidjeti cijenu kvadratnog metra stana 2030. godine, vjerojatno ćemo prikupiti podatke o cijeni unatrag dvadeset godina, stopi inflacije, kamatnim stopama, dodatnim državnim potporama, broj novoizgrađenih stanova i slično. Prikupljanje podataka je zapravo korak gdje se podaci koji još nisu obrađeni i u kojima ne znamo što nam sve treba pohranjujemo na jedno mjesto. Sljedeći korak je priprema podataka koja se sastoji od pretvorbe i pohrane podataka u ispravan oblik. Osim pretvorbe i pohrane podataka u najčešće CSV ili JSON, obavlja se i manipulacija nad podacima – statistička analiza, uklanjanje redundantnih podataka, redukcija dimenzionalnosti, normalizacija i ostalo.

Nakon što smo podatke prikupili i pripremili slijedi najbitniji korak algoritma strojnog učenja koji se zove odabir modela. Prije samog odabira modela potrebno je identificirati cilj našeg procesa i što zapravo želimo dobiti kao izlaz – radimo li primjerice klasifikaciju transakcija ili predviđamo neku brojčanu vrijednost. Osim odabira klasifikacije ili regresije (ako se fokusiramo na nadzirano strojno učenje), potrebno je odabrati i hiperparametre modela. Hiperparametri modela, najjednostavnije rečeno, opisuju jačinu, brzinu i složenost modela. Neki od hiperparametara koje možemo odabrati su stopa učenja, broj iteracija koji želimo da se koristi u optimizacijskom postupku i slično. Budući da je ovo korak koji (uobičajeno) radi čovjek, u ovom dijelu algoritma je najbitnije poznavanje i razumijevanje teorije strojnog učenja.

Sljedeći korak koji slijedi prepuštamo računalo te se on naziva učenje modela. Učenje modela pomoću ulaznih podataka i hiperparametara koje smo izabrali pokušava izgraditi model koji će moći predvidjeti vrijednosti za neke nove neviđene primjere.

Jedan od posljednjih koraka je vrednovanje modela gdje se koriste različite mjere točnosti kako bi vidjeli može li model dobro generalizirati.

Nakon samog vrednovanja modela može se dogoditi da je potrebno ponoviti cijeli proces jer se dogodila pogreška u nekom od prethodnih koraka. Potom slijedi deployment modela.  

 

Use cases

 

Svima su poznati chatbotovi, autonomna vozila i ostalo – strojno učenje i umjetna inteligencija nalaze se svuda oko nas. Osim takve, moglo bi se reći, danas sveprisutne upotrebe, postoji i ona manje poznata – upotreba „humane“ naravi koja može podići kvalitetu života osoba sa oštećenjem osjetila. Zamislimo da naši pametni uređaji osim Siri, Google Assistanta i sličnih alata posjeduju i alat koji bi pretvarao pisani tekst u zvuk, zvuk u pisani tekst ili prevodio znakovni jezik real-time. Ovakav način upotrebe zasigurno bi olakšao komunikaciju s obje strane. Sljedeća upotreba koje će se ovaj blog dotaknuti je upotreba u medicini koja također nije zaživjela u potpunosti. Što se tiče upotrebe unutar Europske unije pruža se veliki otpor pri korištenju umjetne inteligencije kod „liječnika chatbota“, kirurga i slično, ali se s druge strane koristi u polju radiološke dijagnostike. Primjena u polju radiološke dijagnostike već je sveprisutna u svijetu, ali pitanje na kojem će se uvijek „lomiti koplja“ je pitanje tko je kriv u slučaju pogrešne dijagnostike? Je li kriv liječnik koji je „vjerovao“ algoritmu ili pak inženjer koji je osmislio algoritam? Posljednja upotreba koje ćemo se dotaknuti je upotreba koja se dogodila upravo unutar Ekobita – developerske agencije. Proizvod na kojem se pojavila potreba za upotrebom ML-a je proizvod koji koristi live stream na kojem se pojavljuju osobe, a sam stream služi u svrhu edukacije drugih korisnika. Zbog GDPR-a, a i lakšeg korištenja snimki kasnije, pojavila se potreba za anonimizacijom lica. Razvojni tim odlučio je koristiti već implementirani algoritam detekcije i anonimizacije lica. Upravo je ovaj use case dobar primjer kada ne treba komplicirati i „izmišljati toplu vodu“ već koristiti nešto što već postoji i dokazano je da radi ispravno.  

 

AutoML and what did Microsoft do?

 

Kako skoro svaki developer koji radi u C#-u ili Javi nije sklon Pythonu i grozi se Python koda (čast izuzecima!) Microsoft je 2018. godine predstavio ML.NET – open source tehnologiju koja služi za implementaciju modela strojnog učenja. U ML.NET-u postoje dvije opcije korištenja strojnog učenja – klasična (školska) gdje trebamo provesti sve korake algoritma i drugu – ML.NET Model Builder koji koristi automated machine learning (AutoML).  

Automated machine learning (AutoML) automates the process of applying machine learning to data. Given a dataset, you can run an AutoML experiment to iterate over different data featurizations, machine learning algorithms, and hyperparameters to select the best model. 

Microsoft, 2021. 

Dakle, poanta opcije izgradnje modela s Model Builderom je ta da korisniku nije potrebno predznanje teorije strojnog učenja kako bi isprobao kako radi algoritam strojnog učenja. Potrebni su mu samo podaci i problem koji želi riješiti. Nakon toga nastupa ML.NET koji sam odabire adekvatan algoritam, hiperparametre modela, trenira model te nakon toga izgenerira potreban kod i doda ga u .NET aplikaciju.  

Have you ever wondered if the object was chihuahua or a blueberry muffin? 

 

Machine learning Maja Benkus Ekobit

 

Vječno pitanje – je li na slici muffin od borovnice ili chihuahua? Budući da se nisam susrela sa image recognition-om, odlučila sam vidjeti može li mi ML.NET pomoći i izgraditi dovoljno dobar model bez nekakvog posebnog predznanja?  

Što se tiče podataka – korišten je javno dostupan set podataka sa slikama chihuahue i muffina. Nakon kreiranja novog projekta, u Solution Exploreru desnim klikom možemo na jednostavan način dodati Machine Learning model. Nakon dodavanja modela u projekt, otvara nam se jednostavan „wizard“ koji nas vodi kroz sve korake izgradnje modela.  

 

Solution Explorer Machine Learning Maja Benkus Ekobit

 

U ovom slučaju odabran je Image classification scenarij te se model trenirao lokalno na računalu (CPU). Moguće je odabrati i lokalno treniranje sa GPU ili pak treniranje u Azure-u. Sam „wizard“ navodi u kojem formatu podaci trebaju biti i na koji način moraju biti strukturirani unutar direktorija. Nakon uploada podataka – sve je na AutoML-u, a mi možemo sjesti i odmoriti. Nakon pokoju minutu, AutoML je završio i bio je spreman za testiranje sa točnošću od čak 100%. Što se tiče samog algoritma – AutoML je koristio DNN (deep neural network) i ResNet50, gdje su oba algoritma zapravo neuronske mreže. AutoML osim samog modela izgenerira i kod gdje možemo odabrati želimo li model koristiti u konzolnoj aplikaciji ili WebAPI. Osim pružanja osnovnih informacija o modelu i generiranja programskog koda, možemo model i evaluirati tako da mu damo neviđene primjere i provjerimo predikciju, a i sposobnost generalizacije.  

 

Zašto i kada ipak Python i „školski“ način?

 

Lijepo je zamisliti da je osmišljen alat koji će moći izgraditi model za svaki problem koji želimo riješiti upotrebom strojnog učenja. Je li to idealan svijet ili nam je ipak potrebno znanje teorije i stručnjaka? U slučaju kada želimo riješiti nešto već viđeno, kao spomenuta anonimizacija lica, korisno je upotrijebiti gotova rješenja te se ne zamarati s teoretskom pozadinom istih. Ponekad problem koji želimo riješiti nije takav – podaci nisu dobrog oblika, potrebna je njihova statistička obrada, ispravljanje vrijednosti i slično. U ML.NET-u isprobala sam primjer gdje klase nisu bile balansirane – velik broj primjera klase 0, a veoma mali broj primjera klase 1. Model se izgradio, ali nije bio u mogućnosti dati predikciju za neki neviđeni primjer. Je li bio problem u nebalansiranosti klasa ili u tome što su podaci maskirano? Nažalost, AutoML nam ne može dati odgovor na ova pitanja kao što bi ga mogli pronaći u Pythonu da smo krenuli školskim putem. U svakom slučaju, ako želite isprobati strojno učenje bez da ulazite u samu teoriju, predlažem vam da dodatno istražite ML.NET te ga počnete koristiti in everyday-job.