Funcția de cost
Pentru ca un calculator să caute automat cea mai bună regulă, noțiunea vagă de „greșeală” trebuie transformată într-un număr limpede și precis. Alegerea acestui număr pare la prima vedere un simplu detaliu tehnic; în realitate, este chiar locul în care îi transmitem mașinii ce anume prețuim și cum vedem noi lumea.
Termeni: parametri model predicție funcție de cost terenul costului
Cea mai prietenoasă familie de reguli: linia dreaptă
Lecția trecută ne-a lăsat cu două mari curiozități: ce formă alegem pentru regula noastră și cum o ajutăm pe mașină să o găsească fără să orbecăie? Pentru a înțelege mecanismul în toată splendoarea lui simplă, vom alege cea mai intuitivă familie de reguli din lume: o linie dreaptă trasată printre puncte.
Imaginează-ți că notezi într-un jurnal durata mai multor călătorii cu mașina: pe orizontală pui distanța în kilometri, iar pe verticală timpul în minute. În mod firesc, cu cât mergi mai departe, cu atât drumul durează mai mult. Punctele par să se alinieze de-a lungul unei drepte, chiar dacă există mici abateri din cauza semafoarelor sau a vremii.
O linie dreaptă are doar două „butoane” pe care le putem roti: înclinarea (câte minute adaugă fiecare kilometru parcurs) și înălțimea de pornire (câte minute pierzi înainte să pleci, la semafor sau la ieșirea din parcare). În limbajul învățării automate, aceste două butoane reglabile se numesc parametri. Regula echipată cu parametrii săi formează un model, iar timpul estimat de linia noastră pentru o distanță dată este o predicție. Un model este, în esență, o ipoteză despre lume care lasă câteva locuri goale, pe care datele le vor completa.
Punctele din figură sunt generate pe baza unei legături reale dinainte stabilite, peste care s-au adăugat mici întârzieri și fluctuații din viața reală. Legătura adevărată rămâne ascunsă până când găsești cea mai bună potrivire.
Cum măsurăm greșeala: capcana plusurilor și minusurilor
Dacă așezăm o dreaptă oarecare printre puncte, pentru fiecare drum măsurat va exista o nepotrivire: diferența dintre timpul prezis de dreaptă și timpul real de pe ceas. Unele puncte reale se află deasupra liniei (am făcut mai mult decât am prezis), altele dedesubt (am ajuns mai repede).
Dacă am aduna pur și simplu aceste diferențe, s-ar întâmpla ceva periculos: un plus de 10 minute s-ar anula cu un minus de 10 minute. O linie complet strâmbă și inutilă ar putea avea o greșeală totală egală cu zero! Prin urmare, prima decizie obligatorie este să transformăm toate greșelile în valori pozitive.
Cea mai răspândită metodă este ridicarea fiecărei erori la pătrat. Nu este doar un artificiu de calcul, ci o alegere cu trei efecte profunde: în primul rând, orice abatere devine un număr pozitiv; în al doilea rând, abaterile mari sunt pedepsite mult mai sever decât cele mici (o greșeală de 10 minute cântărește de o sută de ori mai greu decât una de un singur minut!); iar în al treilea rând, numărul rezultat variază extrem de lin și continuu când mișcăm butoanele.
Media tuturor acestor erori ridicate la pătrat ne dă un singur număr final, care măsoară cât de „nemulțumită” este dreapta pe toate datele la un loc. Acest scor se numește funcție de cost (sau funcție de pierdere). De acum înainte, întreaga sarcină a învățării automate devine o misiune limpede: să mișcăm butoanele modelului până când acest cost ajunge cât mai mic cu putință.
Terenul costului: o vale înconjurată de dealuri
În panoul din dreapta al figurii putem privi același cost sub o altă lumină — ca o adevărată hartă de relief. Fiecare punct de pe această hartă reprezintă o combinație unică a celor două butoane. Culoarea îți arată cât de mare este greșeala: nuanțele deschise marchează zonele cu cost mic (potrivire excelentă), iar cele închise marchează versanții abrupți cu erori mari. Liniile curbate sunt curbe de nivel, exact ca pe o hartă turistică a unui munte.
Punctul galben ești tu în acest moment; poți apăsa direct oriunde pe hartă pentru a muta instantaneu butoanele în acel loc. Această imagine a terenului costului (sau peisajul pierderii) este busola întregului curs: a învăța înseamnă a coborî spre fundul văii.
Pentru o linie dreaptă și erori la pătrat, acest teren are o formă de vis: seamănă cu un castron perfect neted, cu o singură vale adâncă și fără nicio capcană. Oricare ar fi punctul din care pornești, coborârea te va aduce negreșit în același loc ideal. Când modelele vor deveni mai complicate, terenul va căpăta mii de văi și creste, iar coborârea va deveni o adevărată aventură.
Ce alege costul în locul tău: capcana accidentelor
Apasă pe butonul „Adaugă o măsurătoare aberantă”. Acest buton simulează o zi cu totul neobișnuită: un ambuteiaj masiv pe autostradă sau o eroare la notarea kilometrajului. Privește ce face dreapta ta portocalie: este atrasă puternic în sus de acel punct izolat, stricând potrivirea pe toate celelalte drumuri normale!
De ce se întâmplă asta? Tocmai din cauza ridicării la pătrat: o distanță uriașă până la punctul aberant generează un cost astronomic, iar modelul este forțat să sacrifice precizia tuturor punctelor cuminți pentru a liniști acea singură eroare colosală.
Privește acum linia verde-măslinie din grafic: ea a fost calculată folosind doar abaterile simple, fără a le ridica la pătrat (distanța directă). Această linie abia dacă tresare la apariția punctului extrem! Care dintre ele are dreptate? Niciuna în mod absolut: prima presupune că orice abatere mare semnalează ceva crucial ce nu trebuie ignorat; a doua presupune că abaterile uriașe sunt simple anomalii ce trebuie trecute cu vederea.
Aceasta este o lecție fundamentală: funcția de cost nu este o unealtă neutră, ci locul în care se ascunde viziunea noastră despre ce contează. Algoritmul va optimiza cu o loialitate oarbă exact măsura pe care i-o dăm. Dacă alegem o formulă greșită, calculatorul va învăța impecabil... exact lucrul nepotrivit.
Ce calități trebuie să aibă un cost prietenos?
Pentru a ghida învățarea automată, o funcție de cost bună trebuie să îndeplinească trei condiții prietenoase: să poată fi calculată ușor pentru orice poziție a butoanelor, să scadă fidel pe măsură ce predicțiile se apropie de realitate și — cel mai important — să se schimbe lin, fără hopuri sau salturi bruște, atunci când rotim foarte puțin o manetă.
Această ultimă cerință explică de ce numărul simplu de exemple greșite (pe care l-am folosit în lecția 11) nu ne poate ajuta aici. Dacă numeri doar câte desene sunt greșite, acel număr este un întreg rigid: 3, 4, 5. Când miști un buton cu un milimetru, numărul greșelilor rămâne adesea neschimbat, așa că nu știi dacă te-ai apropiat sau te-ai depărtat de soluție! Este ca și cum ai încerca să cobori un munte format doar din trepte uriașe și terase perfect plate: pe terasă nu simți încotro e panta.
De aceea, în inteligența artificială, scopul final pe care îl dorim (de pildă, „zero greșeli”) și costul pe care îl minimizăm în timpul antrenării sunt două lucruri diferite. Căutăm o funcție suplă și continuă, care ne oferă o pantă la fiecare pas. Dar cum coborâm pe această pantă atunci când nu avem doar două butoane ușor de desenat pe ecran, ci milioane de parametri ascunși în ceață? Acesta este secretul pe care îl vom desluși în lecția următoare.