TSM - Machine Learning și cariera clasică în dezvoltarea software

Lucian Cristea - Team Lead Machine Learning @ Centrul de Inginerie Bosch Cluj


Vă începeți ziua verificându-vă notificările pe Facebook unde primiți recomandări generate automat prin metode Machine Learning despre produsele pe care ați vrea să le cumpărați sau despre oamenii pe care poate îi cunoașteți, toate special customizate pentru voi. Ieșind din casă, faceți o poză unei flori proaspăt înflorite, în timp ce algoritmii Deep Learning de la Apple augmentează floarea cu culori mai vii și cu contraste de lumină mai bine decât o poate face camera fizică a telefonului vostru. Apoi, vă urcați în mașină, unde sistemele Deep Learning de conducere automată dezvoltate de Bosch vă țin în siguranță în timp ce conduceți și vă grăbiți la birou.

Nu există niciun dubiu. Machine Learning a cucerit lumea tehnologiei încet, dar sigur. A reușit însă să cucerească și domeniul dezvoltării software?

Cum diferă dezvoltarea unei soluții bazate pe Machine Learning de dezvoltarea unei soluții software clasice? Este necesar ca fiecare programator să fie concomitent și programator Machine Learning? Poate orice programator să devină programator Machine Learning dacă își dorește?

Haideți să aflăm împreună.

Profilul programatorului "clasic"

Dezvoltarea software, fie că vorbim de C/C++ pentru sisteme embedded, Java/JavaScript pentru aplicații web, C# pentru aplicații și jocuri sau altele necesită câteva abilități și activități cheie. Un programator experimentat știe:

Accentul cade pe scrierea corectă de cod (modular, extensibil, curat) care să se potrivească în sistemul curent de cod și care să respecte toate standardele, aspecte pentru care este nevoie de foarte multă experiență. Un punct esențial este ca scopul funcțional al codului să fie cunoscut de la început (adică ce face codul din punct de vedere logic sau funcțional). De exemplu, trebuie să scriem cod pentru a crea un site web care să afișeze niște știri. Logic, pare destul de evident ce este de făcut. Ai un text (scris de cineva) și trebuie să îl afișezi pe ecran astfel încât să fie navigabil, de exemplu un articol după altul. Chiar și o persoană care nu este programator poate înțelege acest lucru, dar nu va putea să îl transpună în cod. De fapt, această nouă funcționalitate (care trebuie transpusă în cod) este o cerință a clientului care nu are de obicei cunoștințe tehnice complexe pentru a înțelege sistemul logic și funcțional.

Astfel, programatorul software este preocupat să scrie cod potrivit care să poată îndeplini o funcție cunoscută sau o acțiune cunoscută.

Profilul programatorului Machine Learning

Pe de altă parte, pentru programatorul Machine Learning, accentul este cu totul diferit de la bun început, deoarece programatorul nu cunoaște funcția sau acțiunea pe care codul trebuie să le îndeplinească. Prin urmare, accentul cade pe modul în care este gândită și formalizată funcția sau acțiunea pe care codul trebuie le efectueze. Iată un exemplu. Să presupunem că vrem să construim un sistem care să învețe să identifice vehiculele dintr-o imagine, marcând vehiculul cu un chenar. Neluând în calcul implementarea efectivă a codului, cum am putea face acest lucru în mod logic? Cum poți determina un calculator "să înțeleagă" care pixeli din imagine reprezintă o mașină și care reprezintă alte entități precum drumul, pietonii, semaforul și altele? Cum poți scrie cod pentru acest lucru dacă nu știi ce ar trebui să facă acel cod? Nu este la fel de banal sau logic precum construirea unui site web pentru știri.

Aici intervine Machine Learning. Pe scurt, Machine Learning (și ramura sa celebră "Deep Learning") descrie cum se implementează un algoritm care estimează o funcție necunoscută, în cazul exemplului nostru fiind vorba de cum putem transforma o listă de pixeli într-o imagine și de cum putem încadra vehiculele identificate.

Astfel, programatorul ML este preocupat să dezvolte algoritmul potrivit prin care să efectueze o funcție sau o acțiune, ca ulterior să o transpună pe aceasta în cod.

Transpunerea efectivă în cod este la fel de provocatoare precum scrierea de cod a unui programator clasic, deoarece se aplică aceleași principii de calitate și integritate. Dezvoltarea algoritmului (ceea ce codul ar trebui să facă funcțional) adaugă un nivel suplimentar de complexitate care nu există în dezvoltarea clasică de software. În plus, manipularea unor seturi mari de date (găzduire, pre-procesare, filtrare, generarea statisticilor, identificarea tendințelor, pe scurt "big data") necesare pentru antrenarea algoritmilor adaugă încă un nivel de complexitate la cele menționate deja.

Prin urmare, programatorul ML are nevoie de abilități suplimentare în completarea celor deținute de un programator clasic. Acesta trebuie:

Intersecții și colaborări între domenii

În acest punct, ar trebui deja să fie evident unde se întâlnesc cele două domenii. Ambele domenii (dezvoltare software clasică și dezvoltare Machine Learning) necesită abilități excelente de scriere de cod pentru a transforma o funcție știută sau neștiută (pentru care trebuie implementat un algoritm) în cod propriu-zis. Statistic vorbind, programatorii clasici vor fi mai abili în această privință, deoarece acesta este obiectivul lor principal. Cu toate acestea, le vor lipsi experiența și informația necesare pentru a implementa soluții Machine Learning care nu sunt specificate funcțional (pas cu pas).

Pentru a progresa în carieră și a ieși din zona de confort, este de așteptat ca:

Lucrul în echipă între un programator clasic și unul specializat în Machine Learning este soluția cea mai bună, deoarece pot învăța unul de la altul, dobândind experiență în fiecare domeniu. În cele din urmă, totul se rezumă la dorința de a învăța și la capacitățile fiecărui individ.

În concluzie și în perspectivă

Dezvoltarea clasică de software este asimilată din ce în ce mai mult în cadrul domeniului Machine Learning, așteptarea fiind ca din ce în ce mai mulți programatori să se orienteze spre Machine Learning. Identificarea codului potrivit va fi direct legată de identificarea algoritmului de Machine Learning potrivit pentru a atinge un obiectiv specific.