-
Notifications
You must be signed in to change notification settings - Fork 3
Py@Codette #4 Introducere în Machine Learning
La Py@Codette v4, vom discuta despre Inteligență Artificială. Mai specific, partea de Game Programming (adăugare de inteligență în jocuri) și o parte de Clasificare (ce ține de zona de Învățare Automată, sau Machine Learning). De aceea este important să înțelegem câteva lucruri generale de terminologie și concepte în ceea ce privește Învățarea Automată. Sperăm noi, echipa Py@Codette că această pagină de wiki va fi edificatoare în acest sens.
Dacă vă zic că:
Învățarea Automată se referă la tehnicile necesare pentru a lucra într-un mod inteligent cu o mare cantitate de date, prin dezvoltarea unor algoritmi utili în a trage niște concluzii despre aceste date.
... s-ar putea să vă uitați câș. Dar hai să începem în același mod în care Kunal Jain și-a început experimentulde a învăța un grup de oameni complet străini de acest domeniu, cam cu ce s-ar mânca el:
Ce se întâmplă când căutăm pe Google?
Cum știe Google să ne dea chestii apropiate de ce am vrea noi să găsim, conform căutării și intereselor noastre?
Cât de multe căutări credeți că servește Google zilnic?
Credeți că sunt oameni care stau acolo și analizează ce ne place nouă să vedem și ne redirecționează click-urile? Nu. Ăsta e un task imposibil de realizat de un utilizator uman. Aici intervine partea de ML și explicația de mai sus.
O definiție foarte bună, găsim într-un articol de-al lui Jason Brownlee:
Învățarea Autmată este similară grădinăritului: algoritmii sunt ca niște semințe, datele sunt nutrienții, voi sunteți grădinarii, iar programele sunt plantele care răsar.
Și dacă vrem să avem imaginea unei diferențe între programarea clasică și cea cu Machine Learning, ne putem uita la reprezentarea de mai jos.
Mulți oameni se înșală crezând că Învățarea Automată și Inteligența Artificială sunt termeni sinonimi. Mai există și confuzii legate de diferențele dintre Machine Learning și Statistică, sau Deep Learning. Ei bine, dacă tot suntem astăzi la acest capitol, și luăm lucrurile de la zero, haideți să clarificăm puțin situația aici.
Prin urmare.. întrebarea zilei (ummm... subcapitolului): Cum este Învățarea Automată diferită de...
-
... Inteligența Artificială?
- Inteligența Artificială se traduce prin programarea rațiunii (sau baza de la care pornește luarea de decizii) într-un sistem. Nu vorbim de o formă autentică de inteligență aici. Vorbim de seturi de reguli și de analiza unor posibilități, de cele mai multe ori. Învățarea Automată este un subdomeniu al Inteligenței Artificiale, unde se învață din experiențele anterioare. Iar aceste experiențe sunt reprezentate de datele pe care le pot strânge pentru programul meu. Apoi combinăm aceste rezultate cu algoritmi precum Naive Bayes, Logistic Regression sau SVM, ca să ajungem la rezultatele finale. Aceste rezultate finale se referă la construirea unui model, de cele mai multe ori specializat în realizarea unui task. De pildă, modelul meu va avea drept scop să diferențieze câinii de pisici în imagini.
-
... Statistică?
- Într-un domeniu așa complex cum este cel al Învățării Automate, este, desigur loc și pentru teoria probabilităților și alte discipline ce trimit către partea de statistică. Vezi în exemplul diferențierii email-urilor spam vs regular. Aici diferența vine din ideologia și scopurile în care sunt folosite cele două științe. Statistică dă mai mult spre partea de matematică, pe când zona de Machine Learning (Învățare Automată), a avut întotdeauna partea ei de fraternizare cu domeniul Computer Science-ului.
-
... Deep Learning?
- Când spunem Deep Learning, mergem câțiva pași înaintea a ceea ce face Învățarea Automată. Mai concret,vorbim despre o părticică din zona de Machine Learning: ANNs (Artificial Neural Networks). Aici ne ducem un pic către conceptele de funcționare ale creierului uman, ca să facilităm explicarea unor funcții matematice implicate în modelarea rețelei. Un subiect atât de vast își va primi meritatul workshop, în toamnă. Momentan o să rămână focusul pe AI și ML.
-
... Data Mining?
- Haideți să luăm un exemplu mai vizual. Folosim Machine Learning ca să învățăm un robot diferența dintre un câine și o pisică și să le recunoască în imagini. Zicem că am făcut Data Mining atunci când am "pus" un program să ne colecteze de pe net imagini cu câini și imagini cu pisici și începem să ne "jucăm" cu aceste imagini ca și simple adunături de pixeli, fără a ne stresa să le înțelegem neapărat. Ne uităm mai degrabă la calitatea imaginilor, rezoluție, culori, poate căutăm să uniformizăm și să le aducem pe toate la format alb-negru sau la aceleași dimensiuni, să vedem dacă avem duplicate și să le eliminăm, etc.
- Kunal Jain o spune foarte bine:
-
Teaching someone how to dance is Machine Learning. And using someone to find best dance centers in the city is Data Mining.
Relația dintre Inteligență Artificială, Învățare Automată și Rețele Neurale, o vedem și în imaginea de mai jos.
Câțiva pași mai mari, mai generali, și valabili în realizarea Învățării Automate, putem să-i observăm cum se succed în diagrama de mai jos.
Nu o să insistăm foarte mult pe acești pași, pentru că suntem abia la basics cu acest workshop. Dar vor veni vremuri când ne vom vedea nevoiți să punem mult accent pe fiecare dintre acestea.
O să zicem așa: datele par a fi o parte destul de boring în toată treaba cu ML, și indeed, poate că de multe ori nu o să vedem prea mult excitement aici. Dar adevărul este că înțelegerea datelor pe care le avem la dispoziție, reprezintă primul mare pas către un rezultat corect, fie că vorbim despre clasificare de imagini, de text, sunet, etc. Când ceva merge prost, o să ne vedem nevoiți să ne întoarcem la date, pentru că, de obicei, ele au răspunsurile.
De exemplu ajungem într-un punct când modelul pe care l-am construit, nu are performanța dorită. Să zicem că are o acuratețe foarte slabă. Asta poate să însemne că datele pe care le avem nu sunt suficiente. Sau pur și simplu că nu am adnotat corespunzător datele și am derutat modelul. Dacă acesta, de pildă, trebuia să facă diferența între două clase, și nu face asta corect, deși are extrem de multe sample-uri în setul de date, s-ar putea ca aceste sample-uri să fie adnotate greșit. Cauze aici ar putea fi multiple. Se poate ca o bună parte din date să fi fost adnotate de cineva care nu era suficient de familiar cu task-ul sau care era foarte obosit și a uitat de regulile de adnotare stabilite. S-ar putea ca un singur om să fi făcut adnotarea. Iar asta, în unele cazuri, este extrem de greșit.
Abstractizarea datelor Formatul pe care îl dăm datelor trebuie să fie unul cât mai simplu de procesat și de înțeles prin fazele de training, pentru a se realiza cu succes scopul clasificării noastre. De exemplu, dacă vreau ca pe baza unor caracteristici, precum: vârstă, sex, venit anual, cazier, etc, etc. să determin dacă cineva este eligibil de a primi un credit, trebuie ca unele date să le pun în format numeric, ca să pot face niște calcule asupra lor (mai târziu).
Generalizarea Vrem să tragem niște concluzii și să fim capabili să facem predicții și pe date pe care nu le-am văzut până acum. De aceea, in faza de test, ne pasă de capacitatea de generalizare a modelului nostru.
Există câțiva pași comuni în orice task de Machine Learning:
- Colectarea datelor Aici trebuie să fim atenți la sursele de unde ne luăm datele: cu cât mai variate, cu atât mai bine. Volumul de date este foarte important. În funcție de task-ul de îndeplinit, s-ar putea ca setul de date să trebuiască să fie tot mai mare, pentru a ajunge la rezultate satisfăcătoare.
-
Pregătirea datelor
Acest pas implică determinarea calității datelor colectate și, de cele mai multe ori, fixarea unor issues comune precum:
- Date care lipsesc
- Outliers - date cu proprietăți cu mult în afara celor obișnuite pentru categoria din care fac parte.
-
Antrenarea unui model - implică alegerea unui algoritm corespunzător, în funcție de problema de rezolvat. La asta de adaugă reprezentarea datelor intr-o formă corespunzătoare modelului.
Pentru asta se împart datele în doua submulțimi: training și test. Proporția în care facem împărțeala depinde si de cât de mare este setul de date, și de alți factori ce țin de algoritm, sau observații pe care le-am făcut în faza anterioară asupra setului de date:
- Datele de antrenare, se folosesc pentru a dezvolta modelul, pe baza lor acesta învață cum să distingă diverse categorii.
- Datele din mulțimea de test le folosim ca referință, să vedem cât de bine se descurcă modelul construit.
- Evaluarea modelului - este pasul la care vrem să vedem cam ce acuratețe dă modelul nostru pe date pe care nu le-a mai văzut până acum. O altă modalitate de determinare a puterii de generalizare a modelului, poate fi prin testarea acestuia pe date dintr-o categorie care pur și simplu nu a fost folosită deloc la training. De exemplu vreau să determin review-uri negative de filme. Și iau date din setul de date pus la dispozitie de imdb. Dar fac antrenarea pe orice mai puțin review-urile filmelor de acțiune. Apoi testez pe acestea.
- Îmbunătățirea performanței - etapă în care se ajunge la niște concluzii. S-ar putea ca acuratețea obținută să nu fie ce ne dorim. Ce facem? Am putea să alegem alt algoritm sau să venim cu mai multe date. Poate datele nu au fost “curățate” și pregătite corespunzător.. Etc.
În funcție de natura datelor pe care le avem la dispoziție și de natura problemei de rezolvat folosind Machine Learning, vom întâlni următoarele tipuri de învățare, pe măsură ce vom experimenta tot mai mult cu Învățarea Automată:
-
Supervizată Știm și output-ul pe care trebuie să îl livreze modelul ideal pentru fiecare sample din setul de date. De pildă, știm pt sample-ul x dinsetul de date ce o să vrem să vedem la final, dacă modelul nostru a învățat într-adevăr ce trebuia. Noi pe acest tip de învățare ne vom concentra aici, din moment ce suntem la faza de beginners și acesta este cel mai simplu și mai matur și îndelung studiat tip de învățare.
Modelele pentru acest tip de învățare sunt predictive. Cu alte cuvinte, acestora le dăm de la început toate guideline-urile despre ceea ce trebuie să învețe. Adică vor avea niste date etichetate (cel mai probabil "de mână" de către utilizatori umani), și vor ști exact, de pildă în clasificarea de imagini, ce este "câine" si ce este "pisică". Mai ramâne doar să învețe caracteristici distinctive pentru fiecare, să-și răspundă întrebării “De ce ar fi considerat cel care a făcut adnotarea datelor că in imaginea asta e un câine și nu o pisică?”. Adică să determine niște feature-uri specifice. În cazul imaginilor aceste atribute (features) sunt pixelii, formațiunile de pixeli. În cazul clasificării de text sunt cuvintele și ansamblurile de cuvinte, etc. Ca și algortimi posibili, avem:
- Decision Trees
- Naive Bayes
- Regression
-
Nesupervizată - în datele de training nu avem deloc exemple de outputs dorite. Aici vedem cam cum acționează modelele descriptive și care e scopul lor:
- Nu avem un target fix setat
- Nu avem features mai importante decât celelalte
- Putem folosi acest tip de învățare, de pildă, în zona de retailing, când vrem să aflăm care sunt categoriile de produse pe care tind clienții să le cumpere mai des.
- Algoritmi posibili: K-means
-
Reinforcement Learning - este cel mai ambițios tip de învățare și poartă acest nume deoarece există o recompensă posibilă în urma unei secvențe de acțiuni.
În cazul acestui tip de învățare, algoritmul nostru va lua niște decizii bazându-se pe anumite cerințe specifice task-ului de rezolvat (fie acesta un joc sau ceva orientat către zona de business). Singurul scop al algoritmului în luarea acestor decizii va fi maximizarea unei utilități. Aici vorbim de un agent care acționează într-un mediu la care este expus și în care se antrenează constant. Pe măsură ce își îmbunătățește cunoștințele și capătă mai multă experiență, el devine tot mai capabil în rezolvarea problemelor pentru care se află acolo.
Gândiți-vă la un joc de x&0 sau șah. Aici nu ne mai trebuie prea multă implicare din partea utilizatorului uman pentru adnotare de date sau ghidarea agentului, căci acesta învață din expriență. În plus, se poate porni chiar și de la o stare random, dacă știm ce vrem să îmbunătățim, până la urmă se va ajunge la genul ăla de cunoaștere a task-ului din partea agentului.
O utilizare comună pentru reinforcement learning se poate studia în mașinile autonome care circulă deja de ceva vreme.
- Banking & Financial Services - pe baza unor răspunsuri standardizate, se poate construi un model care să prezică ce clienți au o probabilitate mai mare de a-și plăti datoriile și facturile.
- Medicină - diagnosticarea cancerului sau altor boli greu de vindecat, bazat pe simptomele pacienților.
- Retail - identificarea rapidă a produselor care se vând mai frecvent de acelea mai putin populare. Ajută retailerii să decidă ce să păstreze pe stoc.
- Web search - ranking page bazat pe ceea ce ai o probabilitate mai mare să dai click.
- Explorarea Spațiului - space probes and radio astronomy.
- Robotică - handle-uirea nesiguranței în medii noi. Autonomous. Self-driving car.
- Extragere de Informații - Interogarea bazelor de date ale internetului.
- Rețele de Socializare - Date despre relații și preferințe. Folosim Machine Learning ca să extragem valoarea acestor date.
Basic Concepts in Machine Learning
Please Stop Saying Artificial Intelligence is Something Different From Machine Learning