In ultimele 12-24 de lunii, subiectul de deep learning a capatat o amplorare deosebita, fiind tinta a numeroase grupuri de cercetare, a startup-urilor, dar si a marilor companii, de la Google la Oracle la Amazon sau Adobe. Interesul este facilitat de migragrea dinspre nisele de cercetare catre zona mainstream a knowledge-ului si a codului (biblioteci open source ca Torch/Facebook, TensorFlow/Google, MXNet/Amazon, DeepLearning4j), dar si de ieftinirea hardware-ului necesar pentru calculele numerice voluminoase din spatele masinilor care ”invata” si care de multe ori se bazeaza pe GPU-uri pentru a reduce timpul de invatare. Un catalizator important al acestei tranzitii a pietei o reprezinta si valul de stiri spectaculoase despre inteligenta artificiala (spre exemplu, mediatizata victorie a lui AlphaGo împotriva lui Lee Sedol), care de multe ori prezinta realizarile din domeniu cu optimism exagerat si cu simplism fortat.

Realitatea este ca momentul in care computerele vor face toata munca urmand ca noi sa beneficiem de venitul garantat din productivitatea abundenta este inca dupa linia orizontului.

In ciuda unor rezultate spectaculoase si a unui flux crescand de investitii, industria deep learning are inca multe provocari de infruntat.

Garbage in, garbage out

Inteligenta artificiala nu este un oracol in care introduci orice fel de date si din care poti obtine orice fel de informatii doresti. Nu putem scrie un algoritm care sa prezica preturile de la bursa de maine tinand cont doar de istoricul preturilor, intrucat datele nu sunt bine corelate si depind si de factori pe care nu-i includem in model. Desigur, un calculator are potentialul de a executa sarcini mai repede si pe volume mai mari de date fata de un operator uman, dar, in principiu, trebuie sa presupunem ca un algoritm de deep learning nu poate executa operatii care nu sunt calculabile, macar in principiu, de operatori umani. Trebuie sa evitam tentatia de a presupune ca incarcam intr-un algoritm de deep learning datele disponibile si obtinem invariabil datele dorite.

Pentru a fi fezabil, datele de intrare intr-un algoritm de inteligenta artificiala trebuie sa fie structurate, relevante, in intervale cunoscute, in mod consistent masurate.

In multe feluri, acuratetea unui algoritm de deep learning e limitata de calitatea metodelor de preprocesare si de curatare a datelor. De prea mult ori, organizatiile isi doresc sa inceapa proiecte de predictie, data mining, deep learning inainte sa aiba maturitatea organizarii datelor intr-un format consistent si structurat.

Fundamentele

Algoritmii de invatare automata se bazeaza pe multa matematica si statistica. Desigur, putem refolosi ce au implementat altii in open source, dar nu ne putem astepta ca o unealta sa ne rezolve problema fara sa intelegem, macar in principiu, felurile in care poate functiona. Pentru asta, trebuie sa incepem cu niste fundamente din statistica si matematica.

• Ce este o problema de optimizare si o functie obiectiv?
• Ce e o derivata partiala?
• Ce reprezinta si cum arata o functie de distributie a probabilitatii?
• Ce inseamna probabilitate conditionata?
• Cum functioneaza o metoda de gradient descent? Ce dezavantaje are? Ce alternative avem pentru a evita problema minimizari locale?
• Care e diferenta dintre invatare supervizata si nesupervizata?
• Ce inseamna un test statistic si cum ne ajuta sa evaluam calitatea/acuratetea unui algoritm de deep learning? Ce inseamna abaterea standard si ce ne spune aceasta despre probabilitatea ca o estimare sa fie gresita?
• Care e diferenta dintre un algoritm paralel si unul distribuit?
• Cat de mult ar trebui sa ne bucure ca avem un algoritm care prezice azi cu acuratete 72 la suta daca maine va ploua sau nu? (Hint: predictia ”maine va fi la fel ca azi” are acuratete 71%)

Deep learning e un domeniu vast, complex, in care intuitia uzuala din lumea noastra cauzala si tridimensionala nu e mereu utila. Pentru a naviga acest Vest Salbatic avem nevoie de niste referinte fixe din stiinte mai pure, in speta matematica si statistica.

Managementul datelor

Datele de antrenare reprezinta universul in care se dezvolta un algoritm de deep learning. Niste date de relevanta scazuta, de calitate inferioara sau de consistenta limitata nu vor produce rezultatele dorite.

Sa presupunem ca dorim sa clasificam persoanele dupa grupa de varsta din care fac parte. Daca vrem sa folosim mai multe seturi de date, trebuie sa ne asiguram ca limitele grupelor de varsta sunt aceleasi, intrucat e posibil ca in setul 1 grupa 3 sa reprezinte intervalul (8,10) ani iar in setul doi grupa 3 sa reprezinte intervalul [12,18] ani. Trebuie sa le aducem la un numitor comun, ceea ce probabil ar insemna sa luam mediana intervalelor si sa aplicam un algoritm de regresie, care primeste ca input varsta numerica, in locul unui algoritm de clasificare, care primeste indexul clasei (grupei de varsta).

Daca vorbim despre imagini sau semnale, probabil ca vrem sa facem un pas de normalizare a contrastului si a luminozitatii, asa incat informatia utila sa foloseasca bine tot spatiul de culori In general, trebuie sa ne asiguram ca datele numerice sunt normalizate intr-un interval relevant.

Nu toate imaginile vor avea aceeasi dimensiune, asa ca trebuie sa gasim o metoda de a izola zona de interes din imagine si a o scala la dimensiunea dorita.
Nu in ultimul rand trebuie sa ne asiguram ca testarea algoritmului antrenat se face pe un alt set de date decat cel pe care s-a facut antrenarea. In acest fel, testam si robustetea algorimului - calitatea de a-si pastra acuratetea si in situatii pe care nu le-a ”vazut” in timpul antrenamentului.
Daca un alt set de date nu este disponibil, vom fi nevoiti sa spargem setul de date disponibil in doua: sa spunem ca folosim 80% din exemple pentru antrenament si 20% pentru evaluare.

Avantajul gigantilor

Ca un tip de automatizare de generatie superioara, inteligenta artificiala aduce un avantaj semnificativ sporit de resursele si scara la care are acces un jucator. Google, Microsoft, Amazon, Apple sunt cei care au resursele necesare pentru a atrage talentul, avengura care sa le permita accesul la use case-uri variate si volume mari de date, precum si la capacitati hardware superioare cantitativ (numar de GPU-uri implicate in antrenarea unei retele) si calitativ (Google foloseste hardware specializat pentru recunoasterea vocala). Terenul competitiei e inclinat semnificativ in favoarea celor mari. Acesta, desigur, nu e un motiv care sa justifice a nu incerca dezvoltarea unui proiect in domeniul AI/deep learning. Mai degrada este o motivatie suplimentara pentru a gasi o nisa suficient de ingusta pentru a fi nerentabila pentru giganti, dar suficient de atractiva din punct de vedere comercial pentru a nu fi izolata de piata.

Altfel spus, va fi mai mult loc pentru companiile mici care aplica deep learning in domenii specifice, cu aplicatii particulare (spre exemplu, industria hotelurilor sau inchirierea masinilor) si verticalizate decat pentru cele care aplica deep learning in domenii generice (recunoastere vocala, faciala).

Limitari cunoscute

In majoritatea retelelor neurale, procesul de invatare inseamna modificarea graduala a parametrilor definitorii ai neuronilor (in speta, ponderile fiecarei sinapse) asa incat rezultatul obtinut la propagarea inputului prin retea sa se apropie cat mai mult de rezultatul asteptat. Aceasta modificare gradula se face prin gradient descent (sau metode similare: AdaGrad, AdaDelta, ADAM) care presupun modificarea parametrilor in acea directie care produce reducerea erorii.

Un dezavantaj al acestei metode este ca nu garanteaza globalitatea optimului. Astfel, nu se garanteaza ca respectiva configuratie care are in vecinatate doar alte configurantii de eroare mai mare este intr-adevar un minim global pentru eroare. E la fel cum ai spune ca aflandu-te in cel mai jos punct al unei depresiuni te afli cu siguranta in cel mai de jos punct de pe Pamant. Adevarul e ca exista multe depresiuni, dar o singura Groapa a Marianelor.

Pentru a evita aceasta limitare, se pot incerca antrenari multiple pornind din configuratii initiale diferite, alegandu-se configuratia castigatoare dintre cele ”finaliste”. Alternativ, se poate incerca optimizarea prin algorimi genetici (incrucisare si mutatie) a configuratiilor finaliste. Desigur, aceste masuri suplimentare necesita efort suplimentar de integrare, testare, dezvoltare si putere de calcul suplimentara pentru antrenare. Vestea buna este ca problema localizarii optimelor apare cu mai putina precadere în spatiile hiper-dimensionale.

O alta ciudatenie a lumii deep learning este blestemul dimensionalitatii mari (”curse of dimensionality”). In general, asta inseamna ca presupunerile si intuitiile umane care provin din lumea 2D sau 3D nu mai au neaparat sens in spatii cu sute de dimensiuni, comune atat printre output-urile, dar mai ales printre input-urile retelelor neurale. In particular, aceasta problema se manifesta prin aceea ca, fiind data o multime de numerele aleatorii, diferenta intre distanta maxima si distanta minima, raportata la distanta minima tinde spre zero atunci cand numarul dimensiunilor tinde la infinit.

De asemenea, trebuie sa tii cont ca pentru deep learning nu prea exista debugging. Faci design-ul unei retele neurale sau de convolutie, o antrenezi cu niste date si o testezi cu alte date. Asta poate dura ore, zile sau saptamani. Cand e gata, vezi ce distributie de eroare are fata de rezultatele asteptate. Daca nu esti multumit, ai relativ putine indicii legate de ce ar trebui sa faci. Nu e ca si cum ai pune un break-point si a vedea ca variabila pe care o verifici tu in Java nu are valoare asteptata cand se apeleaza metoda ta. Nu poti opri antrenamentul la jumatate pentru a intreba ce merge prost.

Iar pentru cei care vor sa scaleze la volume imense de date, trebuie sa tina cont ca antrenarea retelelor neurale (sau de convolutie) este un algoritm paralelizabil (mai ales pe GPU-uri), dar nu distribuit. Astfel spus, daca am 10 milioane de exemple pe care vreau sa antrenez un model, arareori pot sa impart datele in 10 batch-uri de catre 1 milion pe care sa le procesez independent si in paralel. Din punct de vedere tehnic, inseamna ca am nevoie de share memory intre zona de input, zona intermediara si zona de autoput a retelei. Unul din sfiintele graaluri ale domeniului va fi gasirea unui algoritm echivalent arhitectural cu map-reduce care sa functioneze bine la retele neurale: o metoda de reconciliere (reduce) a concluziilor partiale obtinute independent de masini diferite (map). Din punct de vedere filosofic, ar fi echivalentul gasirii unui metode generale de reconciliere structurala a n creiere partial inteligente intr-un super-creier super-inteligent.

Don’t use a canon to kill a fly

Deep learning nu e o solutie universala. Mai multe decat atat, sunt multe probleme pentru care solutii mult mai simple sunt la fel de eficiente. In probleme cu date exacte sau in probleme care au solutii totodata analitice fit for purpose folosind algoritmi clasici, inteligenta artificiala nu aduce un plus de valoare. In probleme de calcul numeric, de geometrie, de path finding, de sortare, cautare - inteligenta artificiala nu aduce un plus de valoare. Exista totusi tentatia si tendinta de a aplica deep learning pentru orice, doar pentru e la moda, suna bine, trezeste interesul. Ignorand pentru o secunda moralitatea mesajelor de marketing care sustin ca o tehnologie se bazeza pe deep learning atunci cand de fapt ea tehnic face doar un banal algoritm de clustering, trebuie sa zabovim putin pe a raspunde la intrebarea: merita sa folosim o retea neuronala care e dificil de proiectat, de testat, de evaluat pentru o problema care are o solutie programatica clara?

Daca prin folosirea unui algoritm de deep learning se poate arata o imbunatire relevanta pentru business a preciziei, a relevantei sau a calitatii percepute a raspunsului, efortul e justificat. Dar trebuie sa avem grija sa ne alegem solutia tehnica in functie de cerinta comerciala, niciodata invers.

Pentru a privi problema astfel: daca prin algoritmi convetionali, cum ar fi minmax, ajutat de un alpha-beta pruning si de o tabela mare de cautare a mutarilor din jocuri cunoscute, un computer convetional poate infinge in mod consistent marii campioni, mai are sens sa proiectam un joc de sah care sa se bazeze pe invatare? Va veti gandi ca algoritmul din spatele AlphaGo (proiectat de DeepMind) era bazat pe inteligenta artificiala, insa motiv care a facut asta necesar este ca jocurile de Go au un factor de ramificare de 7-10 ori mai mare decat sahul, ceea ce face o abordare analitica a sa netractabila din punct de vedere computational. Ce trebuie sa retinem ca nu toate problemele sunt precum jocul Go; multe sunt precum sahul.

Asteptarile nerezonabile

O sa iau un framework de deep learning de pe net, o sa arunc niste date in el si printr-o magie calculatorul va invata ce trebuie sa faca cu ele. De multe ori, cam astea sunt asteptarile din experior asupra inteligentei artificiale. Realitatea este ca valul de atentie indreptata spre domeniu a cauzat si multe neintelegere, asa incat multi antreprenori, dezvoltatori si firme vor sa foloseasca un algoritm de deep learning doar pentru ca e cool. Iluzia duce pana la propunerea solutiilor bazate pe IA pentru probleme care au solutii analitice clare, exacte. Pe scurt, ca in orice domeniu hyped, si inteligenta artificiala trece printr-o faza de supra-evaluare in care e vazuta drept panaceu, la fel cum s-a intamplat cu big data, cloud, mobile si codurile QR.

La fel cum faptul ca ti-ai tiparit codul QR cu adresa site-ului pe cartea de vizita nu ti-a dublat cifra de afaceri, nici faptul ca folosesti inteligenta artificiala pentru a face predictia stocurilor nu va avea performnata mult mai buna decat o regresie liniara multi-dimensionala cu sezonalitate.

Folosirea inteligentei artificiala e un proces laborios de proiectat (nu exista functii de debugging are retelelor neurale), de antrenat (ai nevoie de o gramada de datele relevante din lumea reala) si de testat (trebuie sa te asiguri ca algorimul va functiona bine si in fata variabilitatii din lumea reala, nu doar pe datele din laborator). Daca nu intelegi foarte bine procesul de business, structura datelor, natura si calitatea estimarii pe care vrei s-o obtii, a folosi deep learning probabil ca nu te va ajuta prea mult. Indiferent ca folosesti Torch sau TensorFlow, nu te gandi la deep learning ca la un black box pe care il bagi in priza si invata sa faca bani. Deep learning e mai degraba echivalentul studentului la limita repetentei pe care l-ai luat intr-un internship la firma ta si pe care speri sa-l inveti sa faca o treaba utila pana la capat inainte sa se termine vara.

Masurarea rezultatelor

O functie, o clasa sau un serviciu web sunt relativ usor de testat. Daca trece cinci teste unitare si cateva teste negative, e probabil destul de buna pentru a o pune in productie. Iar asta se intampla pentru ca implementarea se bazeaza pe o gramada de dependente si elemente constitutive care sunt deja reliable: sistemul de operare, limbajul de programare, baza de date, procesorul, memoria si protocolul de comunicatii.

O retea neurala care sa clasifice fotografiile din concediu in functie de cat de mult zambesc subiectii e o problema mai greu de testat. In primul rand, cine spune care e raspunsul corect? Un operator uman? Un grup de operatori umani? Daca raspunsul pe care il consideram corect nu este corect, atat antrenarea cat si evaluarea invatarii autoamte au de suferit.

In al doilea rand, faptul ca testul a fost trecut cu succes nu mai e o optiune binara. Niciun algoritm nu va clasifica corect toate fotografiile, deci trebuie sa alegem ce inseamna eroare acceptabila: 10%, 1%, 0.1%? Raspunsul nu este universal si depinde desigur de domeniu. Pentru o aplicatie destinata consumatorilor o eroare de 1% este acceptabila, insa pentru o aplicatie de interventie rapida sau prim ajutor probabil ca 0.1% va fi o eroare inacceptabila.

In final, orice bias al datelor de antrenare si a datelor de test va scadea performanta algoritmului in lumea reala. Daca, spre exemplu, antrenam clasificatorul nostru de zambete doar cu fotografii DSLR, probabil ca vom avea surprize neplacute cand ii vom oferi spre clasificare poze facute cu un telefon ieftin. Similar, daca avem un set de date o prepoderenta rasiala semnificativa (90% din subiecti sunt de aceeasi rasa), acuratetea va scadea probabil simtitor atunci cand vom testa pe subiecti apartinand unei minoritati.

Intr-un fel, starea actuala a inteligentei artificiale raportata la potentialul ei si la asteptarile pietei este similara cu a primelor calculatoare (EDVAC sau BRLESC) raportata la asteptarilor unui utilizator de laptop din 2017. Asta nu inseamna ca progresul din domeniu nu este semnificativ. Mai degraba, inseamna ca rezultatele pe care le obtinem trebuie testate, validate si nu luate de-a gata. Si orice test cu rezultate pozitive e mai degraba un motiv de a rula mai multe teste pe alte date, in alte conditii decat un motiv de a da un comunicat de presa si de a deschide sampania.

In loc de concluzie

Deep learning este un domeniu promitator, aflat inca la inceput. E cu siguranta o zona in care va exista interes sporit, pentru dezvoltare, cercetare, investitii, achizitii. Dar tocmai ce-l face profitabil il face si riscant: e o piata care inca se defineste, fiind mai degraba Vestul Salbatic decat marea metropola cu ordine, previzibilitate si zgarie nori. E un teritoriu relativ virgin din punct de vedere tehnic, dar marii jucatori fac deja eforturi vadite pentru a-l explora. Ca toate zonele noi, e plin de surprize placute si neplacute si e arareori intuitiv. Iar cea mai buna sansa a celor mici care poate nu au nici o echipa de 50 de oameni, nici o ferma de GPU-uri sau hardware specializat si nici acces la petabiti de date pe care sa antreneze si testeze e sa-si aleaga o nisa profitabila, in care deep learning aduce rezultate vizibile si demonstrabile, pe care s-o deserveasca mai bine decat solutiile generice off-the-shelf.

Sursa foto: Jirsak_Shutterstock