====== Componente Cheie ====== În exemplul nostru cu cuvântul de trezire, am descris un set de date constând din fragmente audio și etichete binare, și am oferit o idee vagă despre cum am putea antrena un model pentru a aproxima o mapare de la fragmente la clasificări. Acest tip de problemă, în care încercăm să prezicem o etichetă necunoscută desemnată pe baza unor intrări cunoscute, având un set de date constând din exemple pentru care etichetele sunt cunoscute, se numește //învățare supravegheată//. Aceasta este doar una dintre multele tipuri de probleme de machine learning. Înainte de a explora alte varietăți, am dori să aruncăm mai multă lumină asupra unor componente de bază care ne vor urmări, indiferent de ce tip de problemă de machine learning abordăm: - //Datele// din care putem învăța. - Un //model// despre cum să transformăm datele. - O //funcție obiectiv// care cuantifică cât de bine (sau rău) se descurcă modelul. - Un //algoritm// pentru a ajusta parametrii modelului pentru a optimiza funcția obiectiv. ==== Date ==== S-ar putea să fie de la sine înțeles că nu puteți face știința datelor fără date. Am putea pierde sute de pagini meditând la ce sunt cu precizie datele //în sine//, dar pentru moment, ne vom concentra pe proprietățile cheie ale seturilor de date de care vom fi preocupați. În general, suntem preocupați de o colecție de exemple. Pentru a lucra util cu datele, de obicei trebuie să venim cu o reprezentare numerică adecvată. Fiecare //exemplu// (sau //punct de date//, //instanță de date//, //eșantion//) constă de obicei dintr-un set de atribute numite //caracteristici// (uneori numite //covariate// sau //intrări//), pe baza cărora modelul trebuie să facă predicții. În problemele de învățare supravegheată, scopul nostru este să prezicem valoarea unui atribut special, numit //etichetă// (sau //țintă//), care nu face parte din intrarea modelului. Dacă am lucra cu date de imagine, fiecare exemplu ar putea consta dintr-o fotografie individuală (caracteristicile) și un număr care indică categoria căreia îi aparține fotografia (eticheta). Fotografia ar fi reprezentată numeric ca trei grile de valori numerice reprezentând luminozitatea luminii roșii, verzi și albastre la fiecare locație a pixelului. De exemplu, o fotografie color de $200\times 200$ pixeli ar consta din $200\times200\times3=120000$ valori numerice. Alternativ, am putea lucra cu date din dosarele electronice de sănătate și să abordăm sarcina de a prezice probabilitatea ca un anumit pacient să supraviețuiască în următoarele 30 de zile. Aici, caracteristicile noastre ar putea consta dintr-o colecție de atribute ușor disponibile și măsurători înregistrate frecvent, inclusiv vârsta, semnele vitale, comorbiditățile, medicamentele curente și procedurile recente. Eticheta disponibilă pentru antrenament ar fi o valoare binară indicând dacă fiecare pacient din datele istorice a supraviețuit în fereastra de 30 de zile. În astfel de cazuri, când fiecare exemplu este caracterizat de același număr de caracteristici numerice, spunem că intrările sunt vectori de lungime fixă și numim lungimea (constantă) a vectorilor //dimensionalitatea// datelor. După cum vă puteți imagina, intrările de lungime fixă pot fi convenabile, oferindu-ne o complicație mai puțin de care să ne facem griji. Totuși, nu toate datele pot fi ușor reprezentate ca vectori de //lungime fixă//. Deși ne-am putea aștepta ca imaginile de la microscop să provină de la echipamente standard, nu ne putem aștepta ca imaginile minate de pe Internet să aibă toate aceeași rezoluție sau formă. Pentru imagini, am putea lua în considerare decuparea lor la o dimensiune standard, dar acea strategie ne duce doar până la un punct. Riscăm să pierdem informații în porțiunile decupate. Mai mult, datele text rezistă reprezentărilor de lungime fixă și mai încăpățânat. Luați în considerare recenziile clienților lăsate pe site-uri de comerț electronic precum Amazon, IMDb și TripAdvisor. Unele sunt scurte: „e nasol!”. Altele divaghează pagini întregi. Un avantaj major al deep learning față de metodele tradiționale este grația comparativă cu care modelele moderne pot gestiona date de //lungime variabilă//. În general, cu cât avem mai multe date, cu atât munca noastră devine mai ușoară. Când avem mai multe date, putem antrena modele mai puternice și ne putem baza mai puțin pe ipoteze preconcepute. Schimbarea de regim de la (comparativ) date puține la big data este un contribuitor major la succesul deep learning-ului modern. Pentru a sublinia ideea, multe dintre cele mai interesante modele din deep learning nu funcționează fără seturi mari de date. Unele altele ar putea funcționa în regimul datelor puține, dar nu sunt mai bune decât abordările tradiționale. În cele din urmă, nu este suficient să avem multe date și să le procesăm inteligent. Avem nevoie de datele //potrivite//. Dacă datele sunt pline de greșeli, sau dacă caracteristicile alese nu sunt predictive pentru cantitatea țintă de interes, învățarea va eșua. Situația este surprinsă bine de clișeul: //gunoi intră, gunoi iese//. Mai mult, performanța predictivă slabă nu este singura consecință potențială. În aplicațiile sensibile ale machine learning, cum ar fi poliția predictivă, verificarea CV-urilor și modelele de risc utilizate pentru creditare, trebuie să fim deosebit de atenți la consecințele datelor de proastă calitate. Un mod de eșec frecvent întâlnit privește seturile de date în care unele grupuri de oameni nu sunt reprezentate în datele de antrenament. Imaginați-vă aplicarea unui sistem de recunoaștere a cancerului de piele care nu a văzut niciodată piele neagră înainte. Eșecul poate apărea și atunci când datele nu doar subreprezintă unele grupuri, ci reflectă prejudecăți societale. De exemplu, dacă deciziile de angajare din trecut sunt utilizate pentru a antrena un model predictiv care va fi folosit pentru a verifica CV-urile, atunci modelele de machine learning ar putea captura și automatiza involuntar nedreptățile istorice. Rețineți că toate acestea se pot întâmpla fără ca omul de știință al datelor să conspire activ sau chiar să fie conștient. ==== Modele ==== Majoritatea machine learning-ului implică transformarea datelor într-un anumit sens. Am putea dori să construim un sistem care ingerează fotografii și prezice zâmbete. Alternativ, am putea dori să ingerăm un set de citiri ale senzorilor și să prezicem cât de normale vs. anormale sunt citirile. Prin //model//, denotăm mașinăria computațională pentru ingerarea datelor de un tip și scuiparea predicțiilor de un tip posibil diferit. În special, suntem interesați de //modele statistice// care pot fi estimate din date. Deși modelele simple sunt perfect capabile să abordeze probleme adecvat de simple, problemele pe care ne concentrăm în această carte întind limitele metodelor clasice. Deep learning se diferențiază de abordările clasice în principal prin setul de modele puternice pe care se concentrează. Aceste modele constau din multe transformări succesive ale datelor care sunt înlănțuite de sus în jos, de unde și numele //deep learning// (învățare profundă). În drumul nostru spre discutarea modelelor deep, vom discuta și câteva metode mai tradiționale. ==== Funcții Obiectiv ==== Mai devreme, am introdus machine learning ca învățare din experiență. Prin //învățare// aici, înțelegem îmbunătățirea la o anumită sarcină în timp. Dar cine poate spune ce constituie o îmbunătățire? V-ați putea imagina că am putea propune actualizarea modelului nostru, și unii oameni ar putea să nu fie de acord dacă propunerea noastră a constituit o îmbunătățire sau nu. Pentru a dezvolta un sistem matematic formal de mașini care învață, trebuie să avem măsuri formale despre cât de bune (sau rele) sunt modelele noastre. În machine learning, și în optimizare mai general, numim acestea //funcții obiectiv//. Prin convenție, definim de obicei funcțiile obiectiv astfel încât mai mic să fie mai bine. Aceasta este doar o convenție. Puteți lua orice funcție pentru care mai mare este mai bine și să o transformați într-o nouă funcție care este calitativ identică, dar pentru care mai mic este mai bine, inversând semnul. Deoarece alegem ca mai mic să fie mai bine, aceste funcții sunt uneori numite //funcții de pierdere// (loss functions). Când încercăm să prezicem valori numerice, cea mai comună funcție de pierdere este //eroarea pătratică//, adică pătratul diferenței dintre predicție și ținta reală (ground truth). Pentru clasificare, cel mai comun obiectiv este minimizarea ratei de eroare, adică fracția de exemple pe care predicțiile noastre nu sunt de acord cu adevărul real. Unele obiective (de exemplu, eroarea pătratică) sunt ușor de optimizat, în timp ce altele (de exemplu, rata de eroare) sunt dificil de optimizat direct, din cauza nediferențiabilității sau altor complicații. În aceste cazuri, este comun să optimizăm în schimb un //obiectiv surogat//. În timpul optimizării, ne gândim la pierdere ca la o funcție a parametrilor modelului și tratăm setul de date de antrenament ca o constantă. Învățăm cele mai bune valori ale parametrilor modelului nostru minimizând pierderea suferită pe un set constând dintr-un număr de exemple colectate pentru antrenament. Totuși, a face bine pe datele de antrenament nu garantează că vom face bine pe date nevăzute. Așa că, de obicei, vom dori să împărțim datele disponibile în două partiții: //setul de date de antrenament// (sau //setul de antrenament//), pentru învățarea parametrilor modelului; și //setul de date de testare// (sau //setul de testare//), care este păstrat pentru evaluare. La sfârșitul zilei, raportăm de obicei modul în care modelele noastre performează pe ambele partiții. V-ați putea gândi la performanța de antrenament ca fiind analogă cu scorurile pe care un student le obține la examenele de practică utilizate pentru a se pregăti pentru un examen final real. Chiar dacă rezultatele sunt încurajatoare, asta nu garantează succesul la examenul final. Pe parcursul studiului, studentul ar putea începe să memoreze întrebările de practică, părând să stăpânească subiectul, dar clătinându-se atunci când se confruntă cu întrebări nevăzute anterior la examenul final actual. Când un model performează bine pe setul de antrenament, dar nu reușește să generalizeze la date nevăzute, spunem că face //overfitting// (supra-ajustare) la datele de antrenament. ==== Algoritmi de Optimizare ==== Odată ce avem o sursă de date și o reprezentare, un model și o funcție obiectiv bine definită, avem nevoie de un algoritm capabil să caute cei mai buni parametri posibili pentru minimizarea funcției de pierdere. Algoritmii populari de optimizare pentru deep learning se bazează pe o abordare numită //gradient descent// (coborârea pe gradient). Pe scurt, la fiecare pas, această metodă verifică să vadă, pentru fiecare parametru, cum s-ar schimba pierderea setului de antrenament dacă ați perturba acel parametru doar cu o cantitate mică. Apoi ar actualiza parametrul în direcția care scade pierderea. ===== Tipuri de Probleme de Machine Learning ===== Problema cuvântului de trezire din exemplul nostru motivant este doar una dintre multele pe care machine learning le poate aborda. Pentru a motiva cititorul mai departe și a ne oferi un limbaj comun care ne va urmări pe tot parcursul cărții, oferim acum o privire de ansamblu largă asupra peisajului problemelor de machine learning. ==== Învățare Supravegheată ==== Învățarea supravegheată descrie sarcini în care ni se oferă un set de date care conține atât caracteristici cât și etichete și ni se cere să producem un model care prezice etichetele atunci când i se dau caracteristici de intrare. Fiecare pereche caracteristică-etichetă se numește exemplu. Uneori, când contextul este clar, putem folosi termenul //exemple// pentru a ne referi la o colecție de intrări, chiar și atunci când etichetele corespunzătoare sunt necunoscute. Supravegherea intră în joc deoarece, pentru alegerea parametrilor, noi (supraveghetorii) oferim modelului un set de date constând din exemple etichetate. În termeni probabilistici, suntem de obicei interesați de estimarea probabilității condiționate a unei etichete date fiind caracteristicile de intrare. Deși este doar una dintre mai multe paradigme, învățarea supravegheată reprezintă majoritatea aplicațiilor de succes ale machine learning în industrie. Parțial, asta se datorează faptului că multe sarcini importante pot fi descrise clar ca estimând probabilitatea a ceva necunoscut dat fiind un set particular de date disponibile: * Prezice cancer vs. non-cancer, dată fiind o imagine de tomografie computerizată. * Prezice traducerea corectă în franceză, dată fiind o propoziție în engleză. * Prezice prețul unei acțiuni luna viitoare pe baza datelor de raportare financiară din această lună. Deși toate problemele de învățare supravegheată sunt surprinse de descrierea simplă „prezicerea etichetelor date fiind caracteristicile de intrare”, învățarea supravegheată în sine poate lua diverse forme și necesită tone de decizii de modelare, în funcție de (printre alte considerente) tipul, dimensiunea și cantitatea intrărilor și ieșirilor. De exemplu, folosim modele diferite pentru procesarea secvențelor de lungimi arbitrare și reprezentări vectoriale de lungime fixă. Vom vizita multe dintre aceste probleme în profunzime pe parcursul acestei cărți. Informal, procesul de învățare arată cam așa. Mai întâi, luați o colecție mare de exemple pentru care caracteristicile sunt cunoscute și selectați din ele un subset aleatoriu, achiziționând etichetele adevărate (ground truth) pentru fiecare. Uneori, aceste etichete ar putea fi date disponibile care au fost deja colectate (de exemplu, a murit un pacient în anul următor?) și alteori s-ar putea să avem nevoie să angajăm adnotatori umani pentru a eticheta datele, (de exemplu, atribuirea imaginilor unor categorii). Împreună, aceste intrări și etichetele corespunzătoare cuprind setul de antrenament. Introducem setul de date de antrenament într-un algoritm de învățare supravegheată, o funcție care ia ca intrare un set de date și scoate o altă funcție: modelul învățat. În cele din urmă, putem introduce intrări nevăzute anterior în modelul învățat, folosind ieșirile sale ca predicții ale etichetei corespunzătoare. Procesul complet este desenat în . {{:wiki:img:supervised-learning.svg|Învățare supravegheată.}} === Regresie === Poate cea mai simplă sarcină de învățare supravegheată de înțeles este //regresia//. Luați în considerare, de exemplu, un set de date recoltate dintr-o bază de date de vânzări de case. Am putea construi un tabel, în care fiecare rând corespunde unei case diferite, și fiecare coloană corespunde unui atribut relevant, cum ar fi suprafața casei, numărul de dormitoare, numărul de băi și numărul de minute (de mers pe jos) până în centrul orașului. În acest set de date, fiecare exemplu ar fi o casă specifică, iar vectorul de caracteristici corespunzător ar fi un rând în tabel. Dacă locuiți în New York sau San Francisco, și nu sunteți CEO-ul Amazon, Google, Microsoft sau Facebook, vectorul de caracteristici (suprafață, nr. dormitoare, nr. băi, distanță de mers pe jos) pentru casa dumneavoastră ar putea arăta cam așa: $[600, 1, 1, 60]$. Totuși, dacă locuiți în Pittsburgh, ar putea arăta mai mult ca $[3000, 4, 3, 10]$. Vectorii de caracteristici de lungime fixă ca acesta sunt esențiali pentru majoritatea algoritmilor clasici de machine learning. Ceea ce face ca o problemă să fie o regresie este de fapt forma țintei. Spuneți că sunteți pe piață pentru o casă nouă. S-ar putea să doriți să estimați valoarea justă de piață a unei case, date fiind unele caracteristici ca mai sus. Datele de aici ar putea consta din listări istorice de case și etichetele ar putea fi prețurile de vânzare observate. Când etichetele iau valori numerice arbitrare (chiar și într-un anumit interval), numim aceasta o problemă de //regresie//. Scopul este de a produce un model ale cărui predicții aproximează îndeaproape valorile reale ale etichetelor. Multe probleme practice sunt ușor descrise ca probleme de regresie. Prezicerea ratingului pe care un utilizator îl va atribui unui film poate fi gândită ca o problemă de regresie și dacă ați fi proiectat un algoritm grozav pentru a realiza această performanță în 2009, s-ar putea să fi câștigat [[https://en.wikipedia.org/wiki/Netflix_Prize|premiul Netflix de 1 milion de dolari]]. Prezicerea duratei de ședere a pacienților în spital este, de asemenea, o problemă de regresie. O regulă bună de bază este că orice problemă de tipul //cât de mult?// sau //câți?// este probabil să fie o regresie. De exemplu: * Câte ore va dura această operație? * Cât de mult va ploua în acest oraș în următoarele șase ore? Chiar dacă nu ați mai lucrat cu machine learning înainte, probabil ați lucrat printr-o problemă de regresie informal. Imaginați-vă, de exemplu, că vi s-au reparat scurgerile și că antreprenorul dumneavoastră a petrecut 3 ore scoțând mizeria din conductele de canalizare. Apoi v-au trimis o factură de 350 de dolari. Acum imaginați-vă că prietenul dumneavoastră a angajat același antreprenor pentru 2 ore și a primit o factură de 250 de dolari. Dacă cineva v-ar întreba apoi cât să se aștepte pe factura lor viitoare de îndepărtare a mizeriei, ați putea face niște presupuneri rezonabile, cum ar fi că mai multe ore lucrate costă mai mulți dolari. Ați putea presupune, de asemenea, că există o taxă de bază și că antreprenorul taxează apoi pe oră. Dacă aceste ipoteze s-ar dovedi adevărate, atunci date fiind aceste două exemple de date, ați putea deja identifica structura de preț a antreprenorului: 100 de dolari pe oră plus 50 de dolari pentru a se prezenta la casa dumneavoastră. Dacă ați urmărit atât de mult, atunci înțelegeți deja ideea de nivel înalt din spatele regresiei //liniare//. În acest caz, am putea produce parametrii care s-ar potrivi exact cu prețurile antreprenorului. Uneori acest lucru nu este posibil, de exemplu, dacă o parte din variație provine din factori dincolo de cele două caracteristici ale dumneavoastră. În aceste cazuri, vom încerca să învățăm modele care minimizează distanța dintre predicțiile noastre și valorile observate. În majoritatea capitolelor noastre, ne vom concentra pe minimizarea funcției de pierdere a erorii pătratice. Așa cum vom vedea mai târziu, această pierdere corespunde ipotezei că datele noastre au fost corupte de zgomot Gaussian. === Clasificare === În timp ce modelele de regresie sunt grozave pentru a aborda întrebări de tipul //câți?//, multe probleme nu se potrivesc confortabil în acest șablon. Luați în considerare, de exemplu, o bancă care dorește să dezvolte o funcție de scanare a cecurilor pentru aplicația sa mobilă. Ideal, clientul ar face pur și simplu o fotografie a unui cec și aplicația ar recunoaște automat textul din imagine. Presupunând că am avut o anumită capacitate de a segmenta patch-uri de imagine corespunzătoare fiecărui caracter scris de mână, atunci sarcina principală rămasă ar fi să determinăm care caracter dintr-un set cunoscut este descris în fiecare patch de imagine. Aceste tipuri de probleme //care dintre ele?// se numesc //clasificare// și necesită un set diferit de instrumente față de cele utilizate pentru regresie, deși multe tehnici se vor transfera. În //clasificare//, dorim ca modelul nostru să privească caracteristicile, de exemplu, valorile pixelilor dintr-o imagine, și apoi să prezică cărei //categorii// (uneori numită //clasă//) dintr-un set discret de opțiuni, îi aparține un exemplu. Pentru cifre scrise de mână, am putea avea zece clase, corespunzătoare cifrelor de la 0 la 9. Cea mai simplă formă de clasificare este atunci când există doar două clase, o problemă pe care o numim //clasificare binară//. De exemplu, setul nostru de date ar putea consta din imagini cu animale și etichetele noastre ar putea fi clasele $\textrm{\{pisică, câine\}}$. În timp ce în regresie căutam un regressor pentru a scoate o valoare numerică, în clasificare căutăm un clasificator, a cărui ieșire este atribuirea clasei prezise. Din motive în care vom intra pe măsură ce cartea devine mai tehnică, poate fi dificil să optimizăm un model care poate scoate doar o atribuire categorică //fermă//, de exemplu, fie „pisică”, fie „câine”. În aceste cazuri, este de obicei mult mai ușor să exprimăm modelul nostru în limbajul probabilităților. Date fiind caracteristicile unui exemplu, modelul nostru atribuie o probabilitate fiecărei clase posibile. Revenind la exemplul nostru de clasificare a animalelor unde clasele sunt $\textrm{\{pisică, câine\}}$, un clasificator ar putea vedea o imagine și ar putea scoate probabilitatea ca imaginea să fie o pisică drept 0.9. Putem interpreta acest număr spunând că clasificatorul este 90% sigur că imaginea descrie o pisică. Magnitudinea probabilității pentru clasa prezisă transmite o noțiune de incertitudine. Nu este singura disponibilă și vom discuta altele în capitolele care tratează subiecte mai avansate. Când avem mai mult de două clase posibile, numim problema //clasificare multiclasă//. Exemple comune includ recunoașterea caracterelor scrise de mână $\textrm{\{0, 1, 2, ... 9, a, b, c, ...\}}$. În timp ce am atacat problemele de regresie încercând să minimizăm funcția de pierdere a erorii pătratice, funcția de pierdere comună pentru problemele de clasificare se numește //cross-entropy// (entropie încrucișată), al cărei nume va fi demistificat când vom introduce teoria informației în capitolele ulterioare. Rețineți că cea mai probabilă clasă nu este neapărat cea pe care o veți folosi pentru decizia dumneavoastră. Presupuneți că găsiți o ciupercă frumoasă în curtea din spate, așa cum se arată în . {{:wiki:img:death-cap.jpg|Buretele viperei—nu mâncați!}} Acum, presupuneți că ați construit un clasificator și l-ați antrenat să prezică dacă o ciupercă este otrăvitoare pe baza unei fotografii. Spuneți că clasificatorul nostru de detectare a otrăvii scoate că probabilitatea ca să arate un burete al viperei este 0.2. Cu alte cuvinte, clasificatorul este 80% sigur că ciuperca noastră nu este un burete al viperei. Totuși, ar trebui să fiți un prost să o mâncați. Asta pentru că beneficiul cert al unei cine delicioase nu merită un risc de 20% de a muri din cauza ei. Cu alte cuvinte, efectul riscului incert depășește beneficiul de departe. Astfel, pentru a lua o decizie dacă să mâncăm ciuperca, trebuie să calculăm detrimentul așteptat asociat fiecărei acțiuni, care depinde atât de rezultatele probabile, cât și de beneficiile sau daunele asociate fiecăreia. În acest caz, detrimentul suferit prin mâncarea ciupercii ar putea fi $0.2 \times \infty + 0.8 \times 0 = \infty$, în timp ce pierderea aruncării ei este $0.2 \times 0 + 0.8 \times 1 = 0.8$. Prudența noastră a fost justificată: așa cum ne-ar spune orice micolog, ciuperca din este de fapt un burete al viperei. Clasificarea poate deveni mult mai complicată decât simpla clasificare binară sau multiclasă. De exemplu, există unele variante de clasificare care abordează clase structurate ierarhic. În astfel de cazuri, nu toate erorile sunt egale—dacă trebuie să greșim, am putea prefera să clasificăm greșit într-o clasă înrudită mai degrabă decât într-o clasă îndepărtată. De obicei, acest lucru este denumit //clasificare ierarhică//. Pentru inspirație, v-ați putea gândi la [[https://en.wikipedia.org/wiki/Carl_Linnaeus|Linnaeus]], care a organizat fauna într-o ierarhie. În cazul clasificării animalelor, s-ar putea să nu fie atât de rău să confundați un pudel cu un schnauzer, dar modelul nostru ar plăti o penalizare uriașă dacă ar confunda un pudel cu un dinozaur. Care ierarhie este relevantă ar putea depinde de modul în care intenționați să utilizați modelul. De exemplu, șerpii cu clopoței și șerpii de grădină ar putea fi apropiați în arborele filogenetic, dar confundarea unui șarpe cu clopoței cu unul de grădină ar putea avea consecințe fatale. === Etichetare === Unele probleme de clasificare se potrivesc perfect în setările de clasificare binară sau multiclasă. De exemplu, am putea antrena un clasificator binar normal pentru a distinge pisicile de câini. Având în vedere starea actuală a viziunii computerizate, putem face acest lucru cu ușurință, cu instrumente disponibile (off-the-shelf). Cu toate acestea, indiferent cât de precis devine modelul nostru, ne-am putea trezi în probleme când clasificatorul întâlnește o imagine cu //Muzicanții din Bremen//, un basm german popular cu patru animale (). {{:wiki:img:stackedanimals.png|Un măgar, un câine, o pisică și un cocoș.}} Așa cum puteți vedea, fotografia prezintă o pisică, un cocoș, un câine și un măgar, cu niște copaci în fundal. Dacă anticipăm întâlnirea unor astfel de imagini, clasificarea multiclasă ar putea să nu fie formularea corectă a problemei. În schimb, am putea dori să oferim modelului opțiunea de a spune că imaginea descrie o pisică, un câine, un măgar, //și// un cocoș. Problema învățării de a prezice clase care nu se exclud reciproc se numește //clasificare multi-etichetă//. Problemele de auto-etichetare sunt de obicei cel mai bine descrise în termeni de clasificare multi-etichetă. Gândiți-vă la etichetele pe care oamenii le-ar putea aplica postărilor de pe un blog tehnic, de exemplu, „machine learning”, „tehnologie”, „gadgeturi”, „limbaje de programare”, „Linux”, „cloud computing”, „AWS”. Un articol tipic ar putea avea 5–10 etichete aplicate. De obicei, etichetele vor prezenta o anumită structură de corelație. Postările despre „cloud computing” sunt susceptibile să menționeze „AWS” și postările despre „machine learning” sunt susceptibile să menționeze „GPU-uri”. Uneori, astfel de probleme de etichetare se bazează pe seturi enorme de etichete. Biblioteca Națională de Medicină angajează mulți adnotatori profesioniști care asociază fiecare articol care urmează să fie indexat în PubMed cu un set de etichete extrase din ontologia Medical Subject Headings (MeSH), o colecție de aproximativ 28.000 de etichete. Etichetarea corectă a articolelor este importantă deoarece permite cercetătorilor să efectueze revizuiri exhaustive ale literaturii. Acesta este un proces consumator de timp și, de obicei, există un decalaj de un an între arhivare și etichetare. Machine learning poate oferi etichete provizorii până când fiecare articol are o revizuire manuală adecvată. Într-adevăr, timp de câțiva ani, organizația BioASQ a [[http://bioasq.org/|găzduit competiții]] pentru această sarcină. === Căutare === În domeniul regăsirii informațiilor, impunem adesea ranguri pe seturi de elemente. Luați căutarea web, de exemplu. Scopul este mai puțin de a determina //dacă// o anumită pagină este relevantă pentru o interogare, ci mai degrabă care dintre un set de rezultate relevante ar trebui să fie afișată cel mai proeminent unui anumit utilizator. Un mod de a face acest lucru ar putea fi mai întâi atribuirea unui scor fiecărui element din set și apoi recuperarea elementelor cu cel mai mare rating. [[https://en.wikipedia.org/wiki/PageRank|PageRank]], sosul secret original din spatele motorului de căutare Google, a fost un exemplu timpuriu de un astfel de sistem de scorare. În mod ciudat, scorarea oferită de PageRank nu depindea de interogarea reală. În schimb, s-au bazat pe un filtru simplu de relevanță pentru a identifica setul de candidați relevanți și apoi au folosit PageRank pentru a prioritiza paginile mai autoritare. În zilele noastre, motoarele de căutare folosesc machine learning și modele comportamentale pentru a obține scoruri de relevanță dependente de interogare. Există conferințe academice întregi dedicate acestui subiect. === Sisteme de Recomandare === Sistemele de recomandare sunt un alt context de problemă care este legat de căutare și clasament. Problemele sunt similare în măsura în care scopul este de a afișa un set de elemente relevante pentru utilizator. Principala diferență este accentul pe //personalizare// pentru utilizatori specifici în contextul sistemelor de recomandare. De exemplu, pentru recomandările de filme, pagina de rezultate pentru un fan science fiction și pagina de rezultate pentru un cunoscător al comediilor lui Peter Sellers ar putea diferi semnificativ. Probleme similare apar în alte setări de recomandare, de exemplu, pentru produse de retail, muzică și recomandări de știri. În unele cazuri, clienții oferă feedback explicit, comunicând cât de mult le-a plăcut un anumit produs (de exemplu, evaluările produselor și recenziile pe Amazon, IMDb sau Goodreads). În alte cazuri, ei oferă feedback implicit, de exemplu, prin omiterea titlurilor dintr-o listă de redare, ceea ce ar putea indica nemulțumire sau poate doar indica faptul că melodia a fost nepotrivită în context. În cele mai simple formulări, aceste sisteme sunt antrenate să estimeze un scor, cum ar fi un rating de stele așteptat sau probabilitatea ca un anumit utilizator să cumpere un anumit articol. Dat fiind un astfel de model, pentru orice utilizator dat, am putea recupera setul de obiecte cu cele mai mari scoruri, care ar putea fi apoi recomandate utilizatorului. Sistemele de producție sunt considerabil mai avansate și iau în considerare activitatea detaliată a utilizatorului și caracteristicile elementelor atunci când calculează astfel de scoruri. afișează cărțile de deep learning recomandate de Amazon pe baza algoritmilor de personalizare ajustați pentru a surprinde preferințele lui Aston. {{:wiki:img:deeplearning-amazon.jpg|Cărți de deep learning recomandate de Amazon.}} În ciuda valorii lor economice enorme, sistemele de recomandare construite naiv pe baza modelelor predictive suferă de unele defecte conceptuale grave. Pentru început, observăm doar //feedback cenzurat//: utilizatorii evaluează preferențial filmele despre care au sentimente puternice. De exemplu, pe o scară de cinci puncte, s-ar putea să observați că elementele primesc multe evaluări de una și cinci stele, dar că există vizibil puține evaluări de trei stele. Mai mult, obiceiurile actuale de cumpărare sunt adesea rezultatul algoritmului de recomandare existent în prezent, dar algoritmii de învățare nu iau întotdeauna acest detaliu în considerare. Astfel, este posibil să se formeze bucle de feedback unde un sistem de recomandare împinge preferențial un element care este apoi considerat a fi mai bun (datorită achizițiilor mai mari) și, la rândul său, este recomandat și mai frecvent. Multe dintre aceste probleme—despre cum să tratăm cenzura, stimulentele și buclele de feedback—sunt întrebări de cercetare deschise importante. === Învățare Secvențială === Până acum, ne-am uitat la probleme în care avem un număr fix de intrări și producem un număr fix de ieșiri. De exemplu, am considerat prezicerea prețurilor caselor date fiind un set fix de caracteristici: suprafață, număr de dormitoare, număr de băi și timpul de tranzit spre centru. Am discutat, de asemenea, maparea de la o imagine (de dimensiune fixă) la probabilitățile prezise că aparține fiecăreia dintre un număr fix de clase și prezicerea ratingurilor de stele asociate cu achizițiile pe baza ID-ului utilizatorului și ID-ului produsului. În aceste cazuri, odată ce modelul nostru este antrenat, după ce fiecare exemplu de testare este introdus în modelul nostru, acesta este uitat imediat. Am presupus că observațiile succesive au fost independente și, prin urmare, nu a fost nevoie să păstrăm acest context. Dar cum ar trebui să procedăm cu fragmentele video? În acest caz, fiecare fragment ar putea consta dintr-un număr diferit de cadre. Și ghicirea noastră despre ce se întâmplă în fiecare cadru ar putea fi mult mai puternică dacă luăm în considerare cadrele anterioare sau următoare. Același lucru este valabil și pentru limbaj. De exemplu, o problemă populară de deep learning este traducerea automată: sarcina de a ingera propoziții într-o anumită limbă sursă și de a prezice traducerile lor într-o altă limbă. Astfel de probleme apar și în medicină. Am putea dori ca un model să monitorizeze pacienții din unitatea de terapie intensivă și să declanșeze alerte ori de câte ori riscul lor de a muri în următoarele 24 de ore depășește un anumit prag. Aici, nu am arunca tot ce știm despre istoricul pacientului în fiecare oră, deoarece s-ar putea să nu dorim să facem predicții bazate doar pe cele mai recente măsurători. Întrebări ca acestea sunt printre cele mai interesante aplicații ale machine learning și sunt instanțe de //învățare secvențială//. Ele necesită un model fie pentru a ingera secvențe de intrări, fie pentru a emite secvențe de ieșiri (sau ambele). Mai exact, //sequence-to-sequence learning// (învățarea secvență-la-secvență) ia în considerare probleme în care atât intrările, cât și ieșirile constau din secvențe de lungime variabilă. Exemplele includ traducerea automată și transcrierea vorbire-în-text. Deși este imposibil să luăm în considerare toate tipurile de transformări secvențiale, următoarele cazuri speciale merită menționate. **Etichetare și Analiză Sintactică**. Aceasta implică adnotarea unei secvențe de text cu atribute. Aici, intrările și ieșirile sunt //aliniate//, adică sunt în același număr și apar într-o ordine corespunzătoare. De exemplu, în //etichetarea părților de vorbire (PoS)//, adnotăm fiecare cuvânt dintr-o propoziție cu partea de vorbire corespunzătoare, adică „substantiv” sau „obiect direct”. Alternativ, am putea dori să știm care grupuri de cuvinte contigue se referă la entități numite, cum ar fi //oameni//, //locuri// sau //organizații//. În exemplul simplu de mai jos, am putea dori doar să indicăm dacă vreun cuvânt din propoziție face parte dintr-o entitate numită (etichetată ca „Ent”). Tom has dinner in Washington with Sally Ent - - - Ent - Ent **Recunoaștere Automată a Vorbirii**. Cu recunoașterea vorbirii, secvența de intrare este o înregistrare audio a unui vorbitor (), iar ieșirea este o transcriere a ceea ce a spus vorbitorul. Provocarea este că există mult mai multe cadre audio (sunetul este de obicei eșantionat la 8kHz sau 16kHz) decât text, adică nu există o corespondență 1:1 între audio și text, deoarece mii de eșantioane pot corespunde unui singur cuvânt rostit. Acestea sunt probleme de învățare secvență-la-secvență, unde ieșirea este mult mai scurtă decât intrarea. Deși oamenii sunt remarcabil de buni la recunoașterea vorbirii, chiar și din audio de calitate scăzută, determinarea computerelor să realizeze aceeași performanță este o provocare formidabilă. {{:wiki:img:speech.png|''%%-D-e-e-p- L-ea-r-ni-ng-%%'' într-o înregistrare audio.}} **Text-în-Vorbire**. Acesta este inversul recunoașterii automate a vorbirii. Aici, intrarea este text și ieșirea este un fișier audio. În acest caz, ieșirea este mult mai lungă decât intrarea. **Traducere Automată**. Spre deosebire de cazul recunoașterii vorbirii, unde intrările și ieșirile corespunzătoare apar în aceeași ordine, în traducerea automată, datele nealiniate reprezintă o nouă provocare. Aici secvențele de intrare și ieșire pot avea lungimi diferite, iar regiunile corespunzătoare ale secvențelor respective pot apărea într-o ordine diferită. Luați în considerare următorul exemplu ilustrativ al tendinței particulare a germanilor de a plasa verbele la sfârșitul propozițiilor: Germană: Haben Sie sich schon dieses grossartige Lehrwerk angeschaut? Engleză: Have you already looked at this excellent textbook? Aliniere greșită: Have you yourself already this excellent textbook looked at? Multe probleme conexe apar în alte sarcini de învățare. De exemplu, determinarea ordinii în care un utilizator citește o pagină web este o problemă de analiză a aspectului bidimensional. Problemele de dialog prezintă tot felul de complicații suplimentare, unde determinarea a ceea ce trebuie spus în continuare necesită luarea în considerare a cunoștințelor din lumea reală și a stării anterioare a conversației pe distanțe temporale lungi. Astfel de subiecte sunt domenii active de cercetare. ==== Învățare Nesupravegheată și Auto-Supravegheată ==== Exemplele anterioare s-au concentrat pe învățarea supravegheată, unde alimentăm modelul cu un set de date uriaș care conține atât caracteristicile, cât și valorile etichetelor corespunzătoare. Ați putea să vă gândiți la cursantul supravegheat ca având o slujbă extrem de specializată și un șef extrem de dictatorial. Șeful stă peste umărul cursantului și îi spune exact ce să facă în fiecare situație până când învață să mapeze de la situații la acțiuni. A lucra pentru un astfel de șef sună destul de plictisitor. Pe de altă parte, a-i face pe plac unui astfel de șef este destul de ușor. Doar recunoașteți modelul cât mai repede posibil și imitați acțiunile șefului. Considerând situația opusă, ar putea fi frustrant să lucrezi pentru un șef care nu are nicio idee despre ce vrea să faci. Totuși, dacă intenționați să fiți un om de știință al datelor, mai bine v-ați obișnui cu asta. Șeful v-ar putea da doar o grămadă uriașă de date și să vă spună să //faceți niște știință a datelor cu ele!// Asta sună vag pentru că este vag. Numim această clasă de probleme //învățare nesupravegheată//, iar tipul și numărul de întrebări pe care le putem pune este limitat doar de creativitatea noastră. Vom aborda tehnicile de învățare nesupravegheată în capitolele ulterioare. Pentru a vă stârni apetitul pentru moment, descriem câteva dintre următoarele întrebări pe care le-ați putea pune. * Putem găsi un număr mic de prototipuri care rezumă cu acuratețe datele? Dat fiind un set de fotografii, le putem grupa în fotografii de peisaj, poze cu câini, bebeluși, pisici și vârfuri de munte? De asemenea, dată fiind o colecție de activități de navigare ale utilizatorilor, îi putem grupa în utilizatori cu comportament similar? Această problemă este cunoscută de obicei sub numele de //clustering// (grupare). * Putem găsi un număr mic de parametri care capturează cu acuratețe proprietățile relevante ale datelor? Traiectoriile unei mingi sunt bine descrise de viteză, diametru și masa mingii. Croitorii au dezvoltat un număr mic de parametri care descriu forma corpului uman destul de precis în scopul potrivirii hainelor. Aceste probleme sunt denumite //estimare a subspațiului//. Dacă dependența este liniară, se numește //analiză a componentelor principale//. * Există o reprezentare a obiectelor (arbitrar structurate) în spațiul Euclidian astfel încât proprietățile simbolice să poată fi bine potrivite? Aceasta poate fi folosită pentru a descrie entități și relațiile lor, cum ar fi „Roma” $-$ „Italia” $+$ „Franța” $=$ „Paris”. * Există o descriere a cauzelor fundamentale ale multor date pe care le observăm? De exemplu, dacă avem date demografice despre prețurile caselor, poluare, criminalitate, locație, educație și salarii, putem descoperi cum sunt legate simplu pe baza datelor empirice? Domeniile preocupate de //cauzalitate// și //modele grafice probabilistice// abordează astfel de întrebări. * O altă dezvoltare recentă importantă și interesantă în învățarea nesupravegheată este apariția //modelelor generative profunde//. Aceste modele estimează densitatea datelor, fie explicit, fie //implicit//. Odată antrenate, putem folosi un model generativ fie pentru a scora exemple în funcție de cât de probabile sunt, fie pentru a eșantiona exemple sintetice din distribuția învățată. Descoperiri timpurii de deep learning în modelarea generativă au venit odată cu invenția //autoencoderelor variaționale// ((Kingma.Welling.2014,rezende2014stochastic)) și au continuat cu dezvoltarea //rețelelor generative adversariale// ((Goodfellow.Pouget-Abadie.Mirza.ea.2014)). Progrese mai recente includ fluxuri de normalizare ((dinh2014nice,dinh2017density)) și modele de difuzie ((sohl2015deep,song2019generative,ho2020denoising,song2021score)). O dezvoltare ulterioară în învățarea nesupravegheată a fost creșterea //învățării auto-supravegheate//, tehnici care folosesc un anumit aspect al datelor neetichetate pentru a oferi supraveghere. Pentru text, putem antrena modele să „completeze spațiile libere” prezicând cuvinte mascate aleatoriu folosind cuvintele lor înconjurătoare (contextul) în corpusuri mari fără niciun efort de etichetare ((Devlin.Chang.Lee.ea.2018))! Pentru imagini, putem antrena modele să spună poziția relativă dintre două regiuni decupate ale aceleiași imagini ((Doersch.Gupta.Efros.2015)), să prezică o parte ocluzată a unei imagini pe baza porțiunilor rămase ale imaginii, sau să prezică dacă două exemple sunt versiuni perturbate ale aceleiași imagini subiacente. Modelele auto-supravegheate învață adesea reprezentări care sunt ulterior valorificate prin ajustarea fină (fine-tuning) a modelelor rezultate pe o anumită sarcină din aval de interes. ==== Interacțiunea cu un Mediu ==== Până acum, nu am discutat de unde provin de fapt datele sau ce se întâmplă de fapt când un model de machine learning generează o ieșire. Asta pentru că învățarea supravegheată și învățarea nesupravegheată nu abordează aceste probleme într-un mod foarte sofisticat. În fiecare caz, luăm o grămadă mare de date înainte, apoi punem mașinile noastre de recunoaștere a modelelor în mișcare fără a interacționa vreodată din nou cu mediul. Deoarece toată învățarea are loc după ce algoritmul este deconectat de mediu, aceasta este uneori numită //învățare offline//. De exemplu, învățarea supravegheată presupune modelul simplu de interacțiune descris în . {{:wiki:img:data-collection.svg|Colectarea datelor pentru învățare supravegheată dintr-un mediu.}} Această simplitate a învățării offline are farmecul ei. Avantajul este că ne putem face griji cu privire la recunoașterea modelelor în izolare, fără nicio preocupare cu privire la complicațiile care decurg din interacțiunile cu un mediu dinamic. Dar această formulare a problemei este limitativă. Dacă ați crescut citind romanele cu roboți ale lui Asimov, atunci probabil că vă imaginați agenți inteligenți artificial capabili nu numai să facă predicții, ci și să ia acțiuni în lume. Vrem să ne gândim la //agenți// inteligenți, nu doar la modele predictive. Asta înseamnă că trebuie să ne gândim la alegerea //acțiunilor//, nu doar la realizarea predicțiilor. Spre deosebire de simplele predicții, acțiunile afectează de fapt mediul. Dacă vrem să antrenăm un agent inteligent, trebuie să ținem cont de modul în care acțiunile sale ar putea afecta observațiile viitoare ale agentului, și deci învățarea offline este nepotrivită. Considerarea interacțiunii cu un mediu deschide un întreg set de noi întrebări de modelare. Următoarele sunt doar câteva exemple. * Mediul își amintește ce am făcut anterior? * Mediul vrea să ne ajute, de exemplu, un utilizator care citește text într-un dispozitiv de recunoaștere a vorbirii? * Mediul vrea să ne învingă, de exemplu, spammerii care își adaptează e-mailurile pentru a evita filtrele de spam? * Mediul are o dinamică schimbătoare? De exemplu, datele viitoare ar semăna întotdeauna cu trecutul sau modelele s-ar schimba în timp, fie natural, fie ca răspuns la instrumentele noastre automate? Aceste întrebări ridică problema //schimbării de distribuție// (distribution shift), unde datele de antrenament și de testare sunt diferite. Un exemplu în acest sens, pe care mulți dintre noi l-am fi întâlnit, este atunci când dăm examene scrise de un lector, în timp ce temele au fost compuse de asistenții lor de predare. În continuare, descriem pe scurt învățarea prin consolidare, un cadru bogat pentru formularea problemelor de învățare în care un agent interacționează cu un mediu. ==== Învățare prin Consolidare ==== Dacă sunteți interesat să utilizați machine learning pentru a dezvolta un agent care interacționează cu un mediu și ia acțiuni, atunci probabil că veți ajunge să vă concentrați pe //învățarea prin consolidare// (reinforcement learning). Aceasta ar putea include aplicații în robotică, în sisteme de dialog și chiar în dezvoltarea inteligenței artificiale (AI) pentru jocuri video. //Deep reinforcement learning//, care aplică deep learning la problemele de învățare prin consolidare, a crescut în popularitate. Rețeaua deep Q-network revoluționară, care a învins oamenii la jocurile Atari folosind doar intrarea vizuală ((mnih2015human)), și programul AlphaGo, care l-a detronat pe campionul mondial la jocul de masă Go ((Silver.Huang.Maddison.ea.2016)), sunt două exemple proeminente. Învățarea prin consolidare oferă o declarație foarte generală a unei probleme în care un agent interacționează cu un mediu pe o serie de pași de timp. La fiecare pas de timp, agentul primește o //observație// din mediu și trebuie să aleagă o //acțiune// care este transmisă ulterior înapoi mediului printr-un mecanism (uneori numit //actuator//), când, după fiecare buclă, agentul primește o recompensă din mediu. Acest proces este ilustrat în . Agentul primește apoi o observație ulterioară, și alege o acțiune ulterioară, și așa mai departe. Comportamentul unui agent de învățare prin consolidare este guvernat de o //politică//. Pe scurt, o //politică// este doar o funcție care mapează observațiile mediului la acțiuni. Scopul învățării prin consolidare este de a produce politici bune. {{:wiki:img:rl-environment.svg|Interacțiunea dintre învățarea prin consolidare și un mediu.}} Este greu de exagerat generalitatea cadrului de învățare prin consolidare. De exemplu, învățarea supravegheată poate fi reformată ca învățare prin consolidare. Să spunem că am avut o problemă de clasificare. Am putea crea un agent de învățare prin consolidare cu o acțiune corespunzătoare fiecărei clase. Am putea crea apoi un mediu care a dat o recompensă care a fost exact egală cu funcția de pierdere din problema originală de învățare supravegheată. Mai mult, învățarea prin consolidare poate aborda și multe probleme pe care învățarea supravegheată nu le poate. De exemplu, în învățarea supravegheată, ne așteptăm întotdeauna ca intrarea de antrenament să vină asociată cu eticheta corectă. Dar în învățarea prin consolidare, nu presupunem asta, pentru fiecare observație mediul ne spune acțiunea optimă. În general, primim doar o recompensă. Mai mult, mediul s-ar putea să nu ne spună nici măcar ce acțiuni au dus la recompensă. Luați în considerare jocul de șah. Singurul semnal real de recompensă vine la sfârșitul jocului când fie câștigăm, câștigând o recompensă de, să zicem, $1$, fie când pierdem, primind o recompensă de, să zicem, $-1$. Deci cursanții prin consolidare trebuie să se ocupe de problema //atribuirii creditului//: determinarea acțiunilor de creditat sau blamat pentru un rezultat. Același lucru este valabil pentru un angajat care primește o promovare pe 11 octombrie. Acea promovare reflectă probabil un număr de acțiuni bine alese în anul precedent. A fi promovat în viitor necesită să vă dați seama ce acțiuni pe parcurs au dus la promoțiile anterioare. Cursanții prin consolidare pot avea, de asemenea, de-a face cu problema observabilității parțiale. Adică, observația curentă s-ar putea să nu vă spună totul despre starea dumneavoastră curentă. Să zicem că robotul dumneavoastră de curățenie s-a trezit prins într-unul dintre multele dulapuri identice din casa dumneavoastră. Salvarea robotului implică deducerea locației sale precise, ceea ce ar putea necesita luarea în considerare a observațiilor anterioare înainte de a intra în dulap. În cele din urmă, în orice moment dat, cursanții prin consolidare ar putea ști de o politică bună, dar ar putea exista multe alte politici mai bune pe care agentul nu le-a încercat niciodată. Cursantul prin consolidare trebuie să aleagă constant dacă să //exploateze// cea mai bună strategie (curent) cunoscută ca politică, sau să //exploreze// spațiul strategiilor, renunțând potențial la o anumită recompensă pe termen scurt în schimbul cunoștințelor. Problema generală de învățare prin consolidare are o setare foarte generală. Acțiunile afectează observațiile ulterioare. Recompensele sunt observate doar atunci când corespund acțiunilor alese. Mediul poate fi fie complet, fie parțial observat. Contabilizarea a toată această complexitate dintr-o dată poate fi prea mult de cerut. Mai mult, nu orice problemă practică prezintă toată această complexitate. Ca rezultat, cercetătorii au studiat un număr de cazuri speciale de probleme de învățare prin consolidare. Când mediul este complet observat, numim problema învățării prin consolidare un //proces decizional Markov//. Când starea nu depinde de acțiunile anterioare, o numim o //problemă contextuală bandit//. Când nu există stare, doar un set de acțiuni disponibile cu recompense inițial necunoscute, avem clasica //problemă multi-armed bandit//. ===== Rădăcini ===== Am revizuit doar un mic subset de probleme pe care machine learning le poate aborda. Pentru un set divers de probleme de machine learning, deep learning oferă instrumente puternice pentru soluționarea lor. Deși multe metode de deep learning sunt invenții recente, ideile de bază din spatele învățării din date au fost studiate de secole. De fapt, oamenii au avut dorința de a analiza date și de a prezice rezultate viitoare de secole, și tocmai această dorință este la baza multor științe naturale și matematici. Două exemple sunt distribuția Bernoulli, numită după [[https://en.wikipedia.org/wiki/Jacob_Bernoulli|Jacob Bernoulli (1655–1705)]], și distribuția Gaussiană descoperită de [[https://en.wikipedia.org/wiki/Carl_Friedrich_Gauss|Carl Friedrich Gauss (1777–1855)]]. Gauss a inventat, de exemplu, algoritmul celor mai mici pătrate medii, care este încă folosit astăzi pentru o multitudine de probleme, de la calcule de asigurări la diagnostice medicale. Astfel de instrumente au îmbunătățit abordarea experimentală în științele naturale—de exemplu, legea lui Ohm care leagă curentul și tensiunea într-un rezistor este perfect descrisă de un model liniar. Chiar și în evul mediu, matematicienii aveau o intuiție ascuțită a estimărilor. De exemplu, cartea de geometrie a lui [[https://www.maa.org/press/periodicals/convergence/mathematical-treasures-jacob-kobels-geometry|Jacob Köbel (1460–1533)]] ilustrează medierea lungimii picioarelor a 16 bărbați adulți pentru a estima lungimea tipică a piciorului în populație (). {{:wiki:img:koebel.jpg|Estimarea lungimii unui picior.}} Pe măsură ce un grup de indivizi ieșea dintr-o biserică, 16 bărbați adulți au fost rugați să se alinieze într-un rând și să li se măsoare picioarele. Suma acestor măsurători a fost apoi împărțită la 16 pentru a obține o estimare pentru ceea ce acum se numește un picior (unitate de măsură). Acest „algoritm” a fost ulterior îmbunătățit pentru a face față picioarelor deformate; Cei doi bărbați cu picioarele cele mai scurte și cele mai lungi au fost trimiși, făcându-se media doar peste restul. Acesta este printre cele mai timpurii exemple ale unei estimări medii ajustate (trimmed mean estimate). Statistica a decolat cu adevărat odată cu disponibilitatea și colectarea datelor. Unul dintre pionierii săi, [[https://en.wikipedia.org/wiki/Ronald_Fisher|Ronald Fisher (1890–1962)]], a contribuit semnificativ la teoria sa și, de asemenea, la aplicațiile sale în genetică. Mulți dintre algoritmii săi (cum ar fi analiza discriminantă liniară) și conceptele sale (cum ar fi matricea de informații Fisher) ocupă încă un loc proeminent în fundamentele statisticii moderne. Chiar și resursele sale de date au avut un impact de durată. Setul de date Iris pe care Fisher l-a lansat în 1936 este încă folosit uneori pentru a demonstra algoritmi de machine learning. Fisher a fost, de asemenea, un susținător al eugeniei, ceea ce ar trebui să ne amintească faptul că utilizarea moral dubioasă a științei datelor are o istorie la fel de lungă și durabilă ca și utilizarea sa productivă în industrie și științele naturale. Alte influențe pentru machine learning au venit din teoria informației a lui [[https://en.wikipedia.org/wiki/Claude_Shannon|Claude Shannon (1916–2001)]] și teoria calculului propusă de [[https://en.wikipedia.org/wiki/Alan_Turing|Alan Turing (1912–1954)]]. Turing a pus întrebarea „pot mașinile să gândească?” în faimoasa sa lucrare //Computing Machinery and Intelligence// ((Turing.1950)). Descriind ceea ce este acum cunoscut sub numele de testul Turing, el a propus că o mașină poate fi considerată //inteligentă// dacă este dificil pentru un evaluator uman să facă distincția între răspunsurile unei mașini și cele ale unui om, bazate pur pe interacțiuni textuale. Alte influențe au venit din neuroștiință și psihologie. La urma urmei, oamenii prezintă în mod clar un comportament inteligent. Mulți cercetători s-au întrebat dacă s-ar putea explica și eventual face inginerie inversă acestei capacități. Unul dintre primii algoritmi inspirați biologic a fost formulat de [[https://en.wikipedia.org/wiki/Donald_O._Hebb|Donald Hebb (1904–1985)]]. În cartea sa revoluționară //The Organization of Behavior// ((Hebb.1949)), a postulat că neuronii învață prin întărire pozitivă. Aceasta a devenit cunoscută sub numele de regula de învățare Hebbiană. Aceste idei au inspirat lucrări ulterioare, cum ar fi algoritmul de învățare perceptron al lui Rosenblatt, și au pus bazele multor algoritmi de coborâre stochastică pe gradient care stau la baza deep learning-ului de astăzi: întărește comportamentul dezirabil și diminuează comportamentul indezirabil pentru a obține setări bune ale parametrilor într-o rețea neuronală. Inspirația biologică este ceea ce a dat //rețelelor neuronale// numele lor. Timp de peste un secol (datând de la modelele lui Alexander Bain, 1873 și James Sherrington, 1890), cercetătorii au încercat să asambleze circuite computaționale care seamănă cu rețelele de neuroni care interacționează. De-a lungul timpului, interpretarea biologiei a devenit mai puțin literală, dar numele a rămas. În inima sa se află câteva principii cheie care pot fi găsite în majoritatea rețelelor de astăzi: * Alternanța unităților de procesare liniare și neliniare, adesea denumite //straturi//. * Utilizarea regulii lanțului (cunoscută și sub numele de //backpropagation//) pentru ajustarea parametrilor în întreaga rețea simultan. După un progres rapid inițial, cercetarea în rețelele neuronale a lâncezit din jurul anului 1995 până în 2005. Acest lucru s-a datorat în principal a două motive. În primul rând, antrenarea unei rețele este foarte costisitoare din punct de vedere computațional. Deși memoria cu acces aleatoriu era abundentă la sfârșitul secolului trecut, puterea de calcul era rară. În al doilea rând, seturile de date erau relativ mici. De fapt, setul de date Iris al lui Fisher din 1936 era încă un instrument popular pentru testarea eficacității algoritmilor. Setul de date MNIST cu cele 60.000 de cifre scrise de mână era considerat imens. Având în vedere raritatea datelor și a calculului, instrumentele statistice puternice, cum ar fi metodele kernel, arborii de decizie și modelele grafice, s-au dovedit empiric superioare în multe aplicații. Mai mult, spre deosebire de rețelele neuronale, acestea nu necesitau săptămâni pentru a se antrena și ofereau rezultate previzibile cu garanții teoretice puternice. ===== The Road to Deep Learning ===== Multe dintre acestea s-au schimbat odată cu disponibilitatea unor cantități masive de date, datorită World Wide Web, apariției companiilor care servesc sute de milioane de utilizatori online, diseminării senzorilor de înaltă calitate și cu costuri reduse, stocării ieftine a datelor (legea lui Kryder) și calculului ieftin (legea lui Moore). În special, peisajul calculului în deep learning a fost revoluționat de progresele în GPU-uri care au fost concepute inițial pentru jocurile pe calculator. Brusc, algoritmii și modelele care păreau imposibil de realizat din punct de vedere computațional au devenit accesibile. Acest lucru este cel mai bine ilustrat în . Set de date vs. memoria computerului și puterea de calcul ^Deceniu ^Set de date ^Memorie ^Calcul în virgulă mobilă pe secundă ^ |1970 |100 (Iris) |1 KB |100 KF (Intel 8080) | |1980 |1 K (prețurile caselor din Boston) |100 KB |1 MF (Intel 80186) | |1990 |10 K (recunoașterea optică a caracterelor) |10 MB |10 MF (Intel 80486) | |2000 |10 M (pagini web) |100 MB |1 GF (Intel Core) | |2010 |10 G (publicitate) |1 GB |1 TF (NVIDIA C2050) | |2020 |1 T (rețele sociale) |100 GB |1 PF (NVIDIA DGX-2) | Rețineți că memoria cu acces aleatoriu nu a ținut pasul cu creșterea datelor. În același timp, creșterile puterii de calcul au depășit creșterea seturilor de date. Aceasta înseamnă că modelele statistice trebuie să devină mai eficiente din punct de vedere al memoriei, și astfel sunt libere să cheltuiască mai multe cicluri computerizate optimizând parametrii, datorită bugetului de calcul crescut. În consecință, punctul forte în machine learning și statistică s-a mutat de la modelele liniare (generalizate) și metodele kernel la rețelele neuronale profunde. Acesta este, de asemenea, unul dintre motivele pentru care mulți dintre pilonii deep learning, cum ar fi perceptronii multistrat ((McCulloch.Pitts.1943)), rețelele neuronale convoluționale ((LeCun.Bottou.Bengio.ea.1998)), memoria pe termen scurt și lung ((Hochreiter.Schmidhuber.1997)) și Q-Learning ((Watkins.Dayan.1992)), au fost în esență "redescoperiți" în ultimul deceniu, după ce au stat relativ inactivi pentru o perioadă considerabilă de timp. Progresul recent în modele statistice, aplicații și algoritmi a fost uneori comparat cu explozia Cambriană: un moment de progres rapid în evoluția speciilor. Într-adevăr, stadiul actual al artei nu este doar o simplă consecință a resurselor disponibile aplicate algoritmilor vechi de zeci de ani. Rețineți că lista de idei de mai jos abia zgârie suprafața a ceea ce a ajutat cercetătorii să obțină un progres extraordinar în ultimul deceniu. * Metode noi pentru controlul capacității, cum ar fi //dropout// ((Srivastava.Hinton.Krizhevsky.ea.2014)), au ajutat la atenuarea supraadaptării (overfitting). Aici, zgomotul este injectat ((Bishop.1995)) în întreaga rețea neuronală în timpul antrenamentului. * //Mecanismele de atenție// au rezolvat o a doua problemă care a afectat statistica timp de peste un secol: cum să crească memoria și complexitatea unui sistem fără a crește numărul de parametri învățabili. Cercetătorii au găsit o soluție elegantă folosind ceea ce poate fi vizualizat doar ca o //structură de pointer învățabilă// ((Bahdanau.Cho.Bengio.2014)). În loc să fie nevoie să-și amintească o întreagă secvență de text, de exemplu, pentru traducerea automată într-o reprezentare cu dimensiune fixă, tot ce trebuia stocat era un pointer către starea intermediară a procesului de traducere. Acest lucru a permis o creștere semnificativă a preciziei pentru secvențele lungi, deoarece modelul nu mai trebuia să-și amintească întreaga secvență înainte de a începe generarea uneia noi. * Construită exclusiv pe mecanisme de atenție, arhitectura //Transformer// ((Vaswani.Shazeer.Parmar.ea.2017)) a demonstrat un comportament de //scalare// superior: funcționează mai bine odată cu creșterea dimensiunii setului de date, a dimensiunii modelului și a cantității de calcul pentru antrenament ((kaplan2020scaling)). Această arhitectură a demonstrat un succes convingător într-o gamă largă de domenii, cum ar fi procesarea limbajului natural ((Devlin.Chang.Lee.ea.2018,brown2020language)), viziunea computerizată ((Dosovitskiy.Beyer.Kolesnikov.ea.2021,liu2021swin)), recunoașterea vorbirii ((gulati2020conformer)), învățarea prin consolidare ((chen2021decision)) și rețelele neuronale grafice ((dwivedi2020generalization)). De exemplu, un singur Transformer pre-antrenat pe modalități la fel de diverse precum text, imagini, cupluri articulare și apăsări de butoane poate juca Atari, poate genera subtitrări pentru imagini, poate conversa și poate controla un robot ((reed2022generalist)). * Modelând probabilitățile secvențelor de text, //modelele de limbaj// pot prezice text dat fiind alt text. Scalarea datelor, modelului și calculului a deblocat un număr tot mai mare de capacități ale modelelor de limbaj de a îndeplini sarcinile dorite prin generarea de text asemănător cu cel uman bazat pe textul de intrare ((brown2020language,rae2021scaling,hoffmann2022training,chowdhery2022palm,openai2023gpt4,anil2023palm,touvron2023llama,touvron2023llama2)). De exemplu, aliniind modelele de limbaj cu intenția umană ((ouyang2022training)), [[https://chat.openai.com/|ChatGPT]] de la OpenAI permite utilizatorilor să interacționeze cu acesta într-un mod conversațional pentru a rezolva probleme, cum ar fi depanarea codului și scrierea creativă. * Proiectele cu mai multe etape, de exemplu, prin intermediul rețelelor de memorie ((Sukhbaatar.Weston.Fergus.ea.2015)) și programatorul-interpret neuronal ((Reed.De-Freitas.2015)) au permis modelatorilor statistici să descrie abordări iterative ale raționamentului. Aceste instrumente permit modificarea repetată a unei stări interne a rețelei neuronale profunde, realizând astfel pașii următori dintr-un lanț de raționament, la fel cum un procesor poate modifica memoria pentru un calcul. * O dezvoltare cheie în //modelarea generativă profundă// a fost invenția //rețelelor generative adversariale// ((Goodfellow.Pouget-Abadie.Mirza.ea.2014)). În mod tradițional, metodele statistice pentru estimarea densității și modelele generative s-au concentrat pe găsirea distribuțiilor de probabilitate adecvate și a algoritmilor (adesea aproximativi) pentru eșantionarea din acestea. Ca rezultat, acești algoritmi au fost în mare parte limitați de lipsa de flexibilitate inerentă modelelor statistice. Inovația crucială în rețelele generative adversariale a fost înlocuirea eșantionatorului cu un algoritm arbitrar cu parametri diferențiabili. Aceștia sunt apoi ajustați astfel încât discriminatorul (efectiv un test cu două eșantioane) să nu poată distinge datele false de cele reale. Prin capacitatea de a utiliza algoritmi arbitrari pentru a genera date, estimarea densității a fost deschisă unei game largi de tehnici. Exemplele de zebre galopante ((Zhu.Park.Isola.ea.2017)) și de fețe false ale celebrităților ((Karras.Aila.Laine.ea.2017)) sunt fiecare o mărturie a acestui progres. Chiar și desenatorii amatori pot produce imagini fotorealiste bazate doar pe schițe care descriu aspectul unei scene ((Park.Liu.Wang.ea.2019)). * Mai mult, în timp ce procesul de difuzie adaugă treptat zgomot aleatoriu la eșantioanele de date, //modelele de difuzie// ((sohl2015deep,ho2020denoising)) învață procesul de eliminare a zgomotului pentru a construi treptat eșantioane de date din zgomot aleatoriu, inversând procesul de difuzie. Ele au început să înlocuiască rețelele generative adversariale în modele generative profunde mai recente, cum ar fi în DALL-E 2 ((ramesh2022hierarchical)) și Imagen ((saharia2022photorealistic)) pentru artă creativă și generare de imagini bazate pe descrieri textuale. * În multe cazuri, un singur GPU este insuficient pentru procesarea cantităților mari de date disponibile pentru antrenament. În ultimul deceniu, capacitatea de a construi algoritmi de antrenament paraleli și distribuiți s-a îmbunătățit semnificativ. Una dintre provocările cheie în proiectarea algoritmilor scalabili este că "calul de povară" al optimizării deep learning, coborârea stochastică pe gradient, se bazează pe procesarea unor loturi mici (minibatch-uri) de date. În același timp, loturile mici limitează eficiența GPU-urilor. Prin urmare, antrenarea pe 1.024 GPU-uri cu o dimensiune a minibatch-ului de, să zicem, 32 de imagini per lot echivalează cu un minibatch agregat de aproximativ 32.000 de imagini. Munca, mai întâi a lui ((Li.2017)) și ulterior a lui ((You.Gitman.Ginsburg.2017)) și ((Jia.Song.He.ea.2018)), a împins dimensiunea până la 64.000 de observații, reducând timpul de antrenament pentru modelul ResNet-50 pe setul de date ImageNet la mai puțin de 7 minute. Prin comparație, timpii de antrenament erau inițial de ordinul zilelor. * Capacitatea de a paraleliza calculul a contribuit, de asemenea, la progresul în //învățarea prin consolidare//. Acest lucru a dus la progrese semnificative în atingerea performanțelor supraomenești de către computere în sarcini precum Go, jocuri Atari, Starcraft și în simulări fizice (de exemplu, folosind MuJoCo) unde sunt disponibili simulatori de mediu. Vezi, de exemplu, ((Silver.Huang.Maddison.ea.2016)) pentru o descriere a unor astfel de realizări în AlphaGo. Pe scurt, învățarea prin consolidare funcționează cel mai bine dacă sunt disponibile o mulțime de tuple (stare, acțiune, recompensă). Simularea oferă o astfel de cale. * Cadrele de deep learning au jucat un rol crucial în diseminarea ideilor. Prima generație de cadre open-source pentru modelarea rețelelor neuronale a constat din [[https://github.com/BVLC/caffe|Caffe]], [[https://github.com/torch|Torch]] și [[https://github.com/Theano/Theano|Theano]]. Multe lucrări seminale au fost scrise folosind aceste instrumente. Acestea au fost acum înlocuite de [[https://github.com/tensorflow/tensorflow|TensorFlow]] (folosit adesea prin intermediul API-ului său de nivel înalt [[https://github.com/keras-team/keras|Keras]]), [[https://github.com/Microsoft/CNTK|CNTK]], [[https://github.com/caffe2/caffe2|Caffe 2]] și [[https://github.com/apache/incubator-mxnet|Apache MXNet]]. A treia generație de cadre constă din instrumente așa-numite //imperative// pentru deep learning, o tendință care a fost probabil declanșată de [[https://github.com/chainer/chainer|Chainer]], care a folosit o sintaxă similară cu Python NumPy pentru a descrie modele. Această idee a fost adoptată atât de [[https://github.com/pytorch/pytorch|PyTorch]], [[https://github.com/apache/incubator-mxnet|Gluon API]] al MXNet, cât și de [[https://github.com/google/jax|JAX]]. Diviziunea muncii între cercetătorii de sisteme care construiesc instrumente mai bune și modelatorii statistici care construiesc rețele neuronale mai bune a simplificat mult lucrurile. De exemplu, antrenarea unui model liniar de regresie logistică obișnuia să fie o problemă netrivială de temă, demnă de a fi dată noilor studenți doctoranzi în machine learning de la Universitatea Carnegie Mellon în 2014. Până acum, această sarcină poate fi îndeplinită cu mai puțin de 10 linii de cod, punând-o ferm la îndemâna oricărui programator. ===== Povești de Succes ===== Inteligența artificială are o lungă istorie în a furniza rezultate care ar fi dificil de realizat altfel. De exemplu, sistemele de sortare a corespondenței folosind recunoașterea optică a caracterelor au fost implementate încă din anii 1990. Aceasta este, la urma urmei, sursa faimosului set de date MNIST de cifre scrise de mână. Același lucru este valabil și pentru citirea cecurilor pentru depozite bancare și evaluarea solvabilității solicitanților. Tranzacțiile financiare sunt verificate automat pentru fraude. Aceasta formează coloana vertebrală a multor sisteme de plată e-commerce, cum ar fi PayPal, Stripe, AliPay, WeChat, Apple, Visa și MasterCard. Programele de calculator pentru șah au fost competitive de zeci de ani. Machine learning alimentează căutarea, recomandarea, personalizarea și clasificarea pe Internet. Cu alte cuvinte, machine learning este omniprezent, deși adesea ascuns vederii. Abia recent AI a ajuns în lumina reflectoarelor, mai ales datorită soluțiilor la probleme care erau considerate anterior intractabile și care sunt direct legate de consumatori. Multe dintre aceste progrese sunt atribuite deep learning-ului. * Asistenții inteligenți, precum Siri de la Apple, Alexa de la Amazon și asistentul Google, sunt capabili să răspundă la cereri vocale cu un grad rezonabil de precizie. Aceasta include treburi mărunte, cum ar fi aprinderea întrerupătoarelor de lumină, și sarcini mai complexe, cum ar fi aranjarea programărilor la frizer și oferirea de dialoguri de asistență telefonică. Acesta este probabil cel mai vizibil semn că AI ne afectează viața. * Un ingredient cheie în asistenții digitali este capacitatea lor de a recunoaște vorbirea cu precizie. Precizia unor astfel de sisteme a crescut treptat până la punctul de a atinge paritatea cu oamenii pentru anumite aplicații ((Xiong.Wu.Alleva.ea.2018)). * Recunoașterea obiectelor a parcurs, de asemenea, un drum lung. Identificarea obiectului dintr-o imagine a fost o sarcină destul de provocatoare în 2010. Pe benchmark-ul ImageNet, cercetătorii de la NEC Labs și Universitatea din Illinois la Urbana-Champaign au atins o rată de eroare top-cinci de 28% ((Lin.Lv.Zhu.ea.2010)). Până în 2017, această rată de eroare a fost redusă la 2,25% ((Hu.Shen.Sun.2018)). În mod similar, s-au obținut rezultate uimitoare pentru identificarea cântecului păsărilor și pentru diagnosticarea cancerului de piele. * Măiestria în jocuri obișnuia să ofere un etalon pentru capacitatea umană. Începând de la TD-Gammon, un program pentru jocul de table folosind învățarea prin consolidare cu diferență temporală, progresul algoritmic și computațional a dus la algoritmi pentru o gamă largă de aplicații. Comparativ cu tablele, șahul are un spațiu de stări și un set de acțiuni mult mai complexe. DeepBlue l-a învins pe Garry Kasparov folosind paralelism masiv, hardware cu scop special și căutare eficientă prin arborele jocului ((Campbell.Hoane-Jr.Hsu.2002)). Go este și mai dificil, datorită spațiului său imens de stări. AlphaGo a atins paritatea cu oamenii în 2015, folosind deep learning combinat cu eșantionarea arborelui Monte Carlo ((Silver.Huang.Maddison.ea.2016)). Provocarea în Poker a fost că spațiul de stări este mare și doar parțial observat (nu știm cărțile adversarilor). Libratus a depășit performanța umană în Poker folosind strategii structurate eficient ((Brown.Sandholm.2017)). * Un alt indiciu al progresului în AI este apariția vehiculelor autonome. Deși autonomia completă nu este încă la îndemână, s-au făcut progrese excelente în această direcție, companii precum Tesla, NVIDIA și Waymo livrând produse care permit autonomia parțială. Ceea ce face autonomia completă atât de dificilă este că o conducere adecvată necesită capacitatea de a percepe, de a raționa și de a încorpora reguli într-un sistem. În prezent, deep learning-ul este utilizat în principal în aspectul vizual al acestor probleme. Restul este puternic ajustat de ingineri. Aceasta abia zgârie suprafața aplicațiilor semnificative ale machine learning. De exemplu, robotica, logistica, biologia computațională, fizica particulelor și astronomia datorează unele dintre cele mai impresionante progrese recente cel puțin în parte machine learning-ului, care devine astfel un instrument omniprezent pentru ingineri și oameni de știință. Frecvent, în articolele non-tehnice au fost ridicate întrebări despre o viitoare apocalipsă AI și plauzibilitatea unei //singularități//. Teama este că, într-un fel, sistemele de machine learning vor deveni simțitoare și vor lua decizii, independent de programatorii lor, care afectează direct viața oamenilor. Într-o oarecare măsură, AI afectează deja traiul oamenilor în moduri directe: solvabilitatea este evaluată automat, piloții automați navighează în mare parte vehiculele, deciziile privind acordarea cauțiunii folosesc date statistice ca intrare. Mai frivol, îi putem cere Alexei să pornească mașina de cafea. Din fericire, suntem departe de un sistem AI simțitor care și-ar putea manipula deliberat creatorii umani. În primul rând, sitemele AI sunt proiectate, antrenate și implementate într-un mod specific, orientat spre scop. Deși comportamentul lor ar putea da iluzia inteligenței generale, este o combinație de reguli, euristici și modele statistice care stau la baza designului. În al doilea rând, în prezent, nu există pur și simplu instrumente pentru //inteligența generală artificială// care să fie capabile să se îmbunătățească singure, să raționeze despre ele însele și care să fie capabile să-și modifice, extindă și îmbunătățească propria arhitectură în timp ce încearcă să rezolve sarcini generale. O preocupare mult mai presantă este modul în care AI este utilizată în viața noastră de zi cu zi. Este probabil ca multe sarcini de rutină, îndeplinite în prezent de oameni, să poată fi și să fie automatizate. Roboții agricoli vor reduce probabil costurile pentru fermierii organici, dar vor automatiza și operațiunile de recoltare. Această fază a revoluției industriale poate avea consecințe profunde pentru mari părți ale societății, deoarece muncile mărunte oferă multe locuri de muncă în multe țări. Mai mult, modelele statistice, atunci când sunt aplicate fără grijă, pot duce la prejudecăți rasiale, de gen sau de vârstă și pot ridica îngrijorări rezonabile cu privire la corectitudinea procedurală dacă sunt automatizate pentru a conduce decizii importante. Este important să ne asigurăm că acești algoritmi sunt utilizați cu grijă. Cu ceea ce știm astăzi, acest lucru ne pare o preocupare mult mai presantă decât potențialul unei superinteligențe malefice de a distruge umanitatea. ===== Esența Deep Learning ===== Până acum, am vorbit în termeni generali despre machine learning. Deep learning este subsetul machine learning preocupat de modele bazate pe rețele neuronale cu mai multe straturi. Este //profund// tocmai în sensul că modelele sale învață multe //straturi// de transformări. Deși acest lucru ar putea suna îngust, deep learning a dat naștere unei game amețitoare de modele, tehnici, formulări de probleme și aplicații. Multe intuiții au fost dezvoltate pentru a explica beneficiile profunzimii. Discutabil, tot machine learning-ul are multe straturi de calcul, primul constând din pași de procesare a caracteristicilor. Ceea ce diferențiază deep learning este faptul că operațiile învățate la fiecare dintre multele straturi de reprezentări sunt învățate împreună din date. Problemele pe care le-am discutat până acum, cum ar fi învățarea din semnalul audio brut, valorile brute ale pixelilor imaginilor sau maparea între propoziții de lungimi arbitrare și omologii lor în limbi străine, sunt cele în care deep learning excelează și metodele tradiționale șovăie. Se pare că aceste modele cu mai multe straturi sunt capabile să abordeze datele perceptuale de nivel scăzut într-un mod în care instrumentele anterioare nu puteau. Discutabil, cea mai semnificativă trăsătură comună în metodele de deep learning este //antrenarea end-to-end//. Adică, mai degrabă decât asamblarea unui sistem bazat pe componente care sunt ajustate individual, se construiește sistemul și apoi se ajustează performanța lor împreună. De exemplu, în viziunea computerizată, oamenii de știință obișnuiau să separe procesul de //inginerie a caracteristicilor// de procesul de construire a modelelor de machine learning. Detectorul de margini Canny ((Canny.1987)) și extractorul de caracteristici SIFT al lui Lowe ((Lowe.2004)) au domnit suprem de peste un deceniu ca algoritmi pentru maparea imaginilor în vectori de caracteristici. În zilele trecute, partea crucială a aplicării machine learning la aceste probleme a constat în găsirea unor modalități manuale de transformare a datelor într-o formă accesibilă modelelor superficiale. Din păcate, oamenii pot realiza doar atât de mult prin ingeniozitate în comparație cu o evaluare consistentă a milioane de opțiuni efectuată automat de un algoritm. Când deep learning a preluat controlul, acești extractorii de caracteristici au fost înlocuiți de filtre ajustate automat care au produs o precizie superioară. Astfel, un avantaj cheie al deep learning este că înlocuiește nu numai modelele superficiale de la sfârșitul conductelor tradiționale de învățare, ci și procesul intensiv de muncă al ingineriei caracteristicilor. Mai mult, prin înlocuirea unei mari părți a preprocesării specifice domeniului, deep learning a eliminat multe dintre granițele care separau anterior viziunea computerizată, recunoașterea vorbirii, procesarea limbajului natural, informatica medicală și alte domenii de aplicare, oferind astfel un set unificat de instrumente pentru abordarea diverselor probleme. Dincolo de antrenarea end-to-end, experimentăm o tranziție de la descrieri statistice parametrice la modele complet neparametrice. Când datele sunt rare, trebuie să ne bazăm pe ipoteze simplificatoare despre realitate pentru a obține modele utile. Când datele sunt abundente, acestea pot fi înlocuite cu modele neparametrice care se potrivesc mai bine datelor. Într-o oarecare măsură, acest lucru reflectă progresul pe care l-a experimentat fizica la mijlocul secolului trecut odată cu disponibilitatea calculatoarelor. În loc să rezolve manual aproximări parametrice ale modului în care se comportă electronii, se poate recurge acum la simulări numerice ale ecuațiilor cu derivate parțiale asociate. Acest lucru a dus la modele mult mai precise, deși adesea în detrimentul interpretării. O altă diferență față de lucrările anterioare este acceptarea soluțiilor suboptime, tratarea problemelor de optimizare neliniară neconvexă și dorința de a încerca lucruri înainte de a le demonstra. Acest nou empirism în tratarea problemelor statistice, combinat cu un aflux rapid de talent, a dus la progrese rapide în dezvoltarea algoritmilor practici, deși în multe cazuri cu prețul modificării și reinventării instrumentelor care existau de zeci de ani. În cele din urmă, comunitatea de deep learning se mândrește cu partajarea instrumentelor peste granițele academice și corporative, lansând multe biblioteci excelente, modele statistice și rețele antrenate ca sursă deschisă. În acest spirit, caietele care formează această carte sunt disponibile gratuit pentru distribuție și utilizare. Am muncit din greu pentru a reduce barierele de acces pentru oricine dorește să învețe despre deep learning și sperăm că cititorii noștri vor beneficia de acest lucru. ===== Rezumat ===== Machine learning studiază modul în care sistemele informatice pot valorifica experiența (adesea datele) pentru a îmbunătăți performanța la sarcini specifice. Combină idei din statistică, data mining și optimizare. Adesea, este folosit ca mijloc de implementare a soluțiilor AI. Ca o clasă de machine learning, învățarea reprezentațională se concentrează pe modul de a găsi automat modalitatea adecvată de a reprezenta datele. Considerată ca învățare a reprezentării pe mai multe niveluri prin învățarea multor straturi de transformări, deep learning înlocuiește nu numai modelele superficiale de la sfârșitul conductelor tradiționale de machine learning, ci și procesul intensiv de muncă al ingineriei caracteristicilor. O mare parte din progresul recent în deep learning a fost declanșat de o abundență de date provenite de la senzori ieftini și aplicații la scară Internet și de progrese semnificative în calcul, mai ales prin GPU-uri. Mai mult, disponibilitatea cadrelor eficiente de deep learning a făcut proiectarea și implementarea optimizării întregului sistem semnificativ mai ușoară, iar acesta este o componentă cheie în obținerea unei performanțe ridicate. ===== Exerciții ===== - Care părți ale codului pe care îl scrieți în prezent ar putea fi „învățate”, adică îmbunătățite prin învățare și determinarea automată a alegerilor de design care se fac în codul dumneavoastră? Codul dumneavoastră include alegeri de design euristice? De ce date ați putea avea nevoie pentru a învăța comportamentul dorit? - Ce probleme întâmpinați care au multe exemple pentru soluționarea lor, dar nicio modalitate specifică de automatizare a acestora? Acestea pot fi candidați principali pentru utilizarea deep learning. - Descrieți relațiile dintre algoritmi, date și calcul. Cum influențează caracteristicile datelor și resursele de calcul disponibile în prezent adecvarea diferiților algoritmi? - Numiți câteva setări în care antrenarea end-to-end nu este în prezent abordarea implicită, dar unde ar putea fi utilă. [[https://discuss.d2l.ai/t/22|Discuții]]