Inteligența artificială, machine learning, deep learning sunt în ultima perioadă termeni omniprezenți în mediul IT, la conferințe sau întâlniri tehnice. Fiecare proiect pare să aibă în zilele noastre o componentă legată de AI, de la simplele aplicații mobile până la sistemele complexe din mediul economic.
Manifestându-se pregnant în ultimii 4-5 ani, preocuparea pentru predicții în dezvoltarea de aplicații are în spate un istoric al ei. Microsoft ne oferea sub SQL Server Anlysis Services 2000, acum aproape douăzeci de ani, o serie de nouă algoritmi predictivi, care puteau fi folosiți în Data Mining, termenul folosit atunci pentru aplicațiile predictive. Regăseam acolo algoritmii de regresie, decision tree, time series și chiar și mult mai pretențioasele rețele neuronale. Însă preocuparea pentru acest domeniu era extrem de redusă comparativ cu ceea ce se întâmplă azi.
Schimbarea s-a manifestat la nivelul a doi factori majori:
Primul se referă la creșterea exponențială a puterii de calcul. Problema minării de date de acum 10-20 de ani era că rularea algoritmilor predictivi pe cantități de date mari necesita timpi extrem de mari pentru a scoate rezultate decente. Această stare de fapt se datora în primul rând vitezelor reduse ale hard-diskurilor și a cantității insuficiente de memorie. Astăzi, suntem aproape tentați să ignorăm aceste limitări. Cu noile cluster-computing frameworks, procesarea datelor se face la viteze de memorie, generând o preocupare mai degrabă pentru costuri decât pentru capacitățile tehnice ale sistemelor de calcul.
Al doilea factor este fără doar și poate explozia IoT. Boomul aplicațiilor bazate pe senzori în aproape toate domeniile vieții a făcut posibilă monitorizarea a milioane de asseturi în toate domeniile economice. De aici, generarea unor cantități imense de date. Brusc, aplicabilitatea algoritmilor predictivi a înregistrat și ea o creștere foarte mare datorită faptului că, prin folosirea senzorilor, mentenanța predictivă sau detecția anomaliilor a căpătat o altă dimensiune.
Din păcate, dezvoltarea de aplicații de tip Machine Learning nu este o întreprindere la îndemâna oricui, deoarece e nevoie de specialiști în domenii destul de diferite. În primul rând, e vorba de data scientist, expertul în statistică, probabilități și modele matematice. Apoi e nevoie de cunoștințe serioase în domeniul bazelor de date sau al sistemelor de tip big data pentru a explora eficient datele. Nu în ultimul rând, este vorba de cunoștințele de programare pentru a scrie pipeline-rile de Machine Learning. Cazurile când un specialist reunește toate aceste cunoștințe la un nivel înalt sunt destul de rare.
Pentru exemplificare vom parcurge pașii dezvoltării unui modul de Machine Learning pentru mentenanță predictivă.
Primul care intra în scenă este rolul de data scientist. Acest rol este, probabil, și cel mai important, deoarece presupune o serie de pași care vor defini funcționarea modelului:
Procesarea datelor unde datele se vor normaliza/standardiza, elimina/interpola. Se va stabili tratamentul valorilor extreme și a seriilor de timp, se va reduce dimensiunea setului de date, etc.
Explorarea datelor (Analiza exploratorie) presupune analizarea corelațiilor dintre variabile pentru a evidenția relațiile dintre ele, statistici descriptive, distribuția valorilor (histograma).
Alegerea algoritmului. Se va alege între supervised learning și unspervised learning. Fiind vorba de mentenanță predictivă, cel mai bine vor funcționa algoritmii de regresie sau arborii de decizie din grupul supervised learning.
Antrenarea și optimizarea modelului va însemna împărțirea sursei de date în trei seturi: pentru antrenare, pentru validare și pentru test. Primele două seturi sunt folosite efectiv în construirea modelului.
Pentru a fi cât mai eficace, recomandăm folosirea unui tool cu facilități vizuale, cum ar fi Azure Machine Learning Studio sau JupyterLab, unde se poate lucra foarte ușor pe bază de drag-and-drop și minime ingerințe de cod. Având în vedere că librăriile pentru Machine Learning oferă o gamă destul de bogată de versiuni de algoritmi, e de presupus că ultimii trei pași vor fi parcurși de mai multe ori, iar în funcție de rezultatele evaluărilor, se va alege algoritmul optim.
Odată ce această etapă se termină, își intră în rol expertul în baze de date. La acest nivel este nevoie de o implementare riguroasă a mecanismelor de ETL (Extract Transform Load) deoarece este, practic, nodul cel mai sensibil al aplicației. Datele trebuie extrase din sursă, aplicate toate transformările descrise de către data scientist în primii doi pași și încărcate în tabelele care vor fi surse de date pentru antrenare/predicție. Având în vedere că modulul de ETL va lucra cu cantități foarte mari de date, arhitectura, va trebui ca designul și implementarea să fie orientate spre performanța încărcării de date și minimizarea degradării performanței în timp. Planul de execuție pentru o cerere de date (fie el pe baze de date tradiționale sau dintr-un sistem Big Data) are o importanță covârșitoare și poate determina ca timpul să fie de câteva secunde sau de câteva ore.
În ultima fază, vom scrie codul pentru implementarea modelului, iar acest lucru deschide o dezbatere destul de complicată. Cum anume alegem modalitatea de dezvoltare? Prin alegerea librăriei ML se va determina limbajul de programare în care se va dezvolta modulul sau, viceversa, alegem limbajul de programare și acest lucru va determina lista din care se va alege librăria ML. Cele mai populare limbaje de programare printre specialiștii in Machine Learning sunt Python, Scala și Java. Dintre librăriile cele mai folosite sunt:
Pyton: TensorFlow - Keras, Numpy, Scipy ;
Scala: Breeze, Saddle;
Trebuie să observăm că din acest peisaj lipsește unul dintre cele mai populare limbaje de programare, C#. Microsoft pare că a luat startul mai târziu în această zonă prin lansarea în luna mai a acestui an a pachetului ML.NET. Ajuns în acest moment la versiunea 1.3 și cu o versiune beta a unui Model Builder capabil să genereze codul C# al pipeline-urilor, ML.NET poate însă să recupereze terenul pierdut până acum.
Dezvoltarea codului va urma îndeaproape definirea modelului făcută la primul pas de către data scientist, rezultatul putând fi integrat cu orice aplicație sau sistem, fie prin API calls, fie prin integrare directă ca librărie.
Cu toate că cei trei sunt prezentați într-o ordine succesivă și distinctă, ei fac parte integrantă a aceluiași flow de dezvoltare, în care toți cei implicați sunt interconectați într-o singură echipă. Acest lucru este o provocare în plus, date fiind diversitatea specializărilor și gradul ridicat de calificare al specialiștilor.
În rândurile de mai sus am atins doar puțin posibilitățile și capacitățile de dezvoltare în domeniul Machine Learning. În funcție de natura predicției sau de domeniul în care se dorește a se aplica, complexitatea modelelor și modul de implementare poate crește semnificativ. Analiza se poate extinde spre Deep Learning și modelele de rețele neuronale, pătrunzând cu adevărat în zona de inteligență artificială, cu aplicabilitate în computer vision, speech recognition sau robotică.