course
Fiecare model de învățare automată pe care îl antrenați rezolvă o problemă de optimizare - iar ceea ce încercați de fapt să optimizați se numește funcție obiectiv.
Pe scurt, este o funcție matematică ce măsoară cât de „bună” este o soluție. Primește un set de intrări și returnează un singur scor. Obiectivul este întotdeauna să găsiți valorile care maximizează sau minimizează acel scor. Veți întâlni funcții obiectiv la baza tuturor, de la programarea liniară la învățarea profundă. Este genul de concept pe care îl veți vedea peste tot după ce înțelegeți cum funcționează.
În acest articol, voi explica ce sunt funcțiile obiectiv, cum diferă de funcțiile de pierdere și de cost și cum sunt utilizate în învățarea automată și optimizare.
Căutați o prezentare aprofundată a învățării profunde care să fie relevantă și în 2026? Înscrieți-vă la cursul nostru Deep Learning in Python pentru a vă construi un portofoliu în PyTorch.
Ce este o funcție obiectiv?
O funcție obiectiv este o funcție matematică ce evaluează cât de bună este o soluție.
Îi furnizați un set de intrări - parametri de model, variabile de decizie - iar ea returnează un singur număr. Acest număr vă spune cât de bine performează soluția curentă. Cu cât numărul este mai mare (sau mai mic), cu atât soluția este mai bună (sau mai slabă).
De vreme ce suntem la subiect, să discutăm pe scurt despre optimizare în general.
Este procesul de a găsi intrările care împing acel număr în direcția dorită. Dacă minimizați, doriți cea mai mică valoare posibilă. Dacă maximizați, doriți cea mai mare. În orice caz, funcția obiectiv este reperul după care măsurați.
Pe înțelesul tuturor, gândiți-vă la ea ca la un sistem de notare. Fiecare soluție candidată primește un scor, iar sarcina dumneavoastră este să o găsiți pe cea cu scorul cel mai bun.
Funcție obiectiv vs. funcție de pierdere vs. funcție de cost
Acești trei termeni sunt folosiți interschimbabil tot timpul - dar nu înseamnă exact același lucru.
Funcția obiectiv este termenul cel mai larg. Este orice funcție pe care încercați să o maximizați sau să o minimizați. Nu trebuie să implice deloc eroare sau predicții - doar definește ce înseamnă „mai bine” pentru problema dumneavoastră.
O funcție de pierdere măsoară eroarea pentru un singur exemplu de antrenare - cât de departe este predicția modelului de valoarea reală. Eroarea pătratică medie pentru un punct de date, de pildă, este o funcție de pierdere.
O funcție de cost agregă pierderea pe întregul set de date, de obicei prin mediere. Așadar, funcția de cost este ceea ce minimizați efectiv în timpul antrenării - ea rezumă performanța modelului pe toate exemplele, nu doar pe unul.
În practică, majoritatea bibliotecilor și articolelor ML folosesc acești termeni în mod lejer. Veți vedea „pierdere” acolo unde „cost” ar fi mai precis, iar „obiectiv” folosit cu sensul tuturor celor trei.
Distincțiile contează când citiți articole științifice. Contextul vă spune la care dintre ele se referă de fapt autorul.
Pentru o comparație mai concretă, vedeți tabelul de mai jos:

Tabel de comparație funcție obiectiv/pierdere/cost
Funcții obiectiv în optimizare
Fiecare problemă de optimizare are un scop și un set de limite.
Funcția obiectiv definește scopul - ce încercați să maximizați sau să minimizați. Constrângerile definesc limitele - granițele în interiorul cărora soluția trebuie să se încadreze. Împreună, acestea încadrează problema.
Să luăm un exemplu simplu de alocare a resurselor.
Presupuneți că administrați o fabrică ce produce două produse și doriți să maximizați profitul. Funcția obiectiv surprinde profitul total ca funcție de câte unități din fiecare produs fabricați. Constrângerile surprind limitele - materii prime disponibile, ore de funcționare a utilajelor, capacitate de muncă. Funcția obiectiv vă spune ce să optimizați, iar constrângerile vă spun cu ce resurse lucrați.
Programarea liniară este unul dintre cele mai comune contexte în care se aplică acest lucru. Este o metodă de optimizare a unei funcții obiectiv liniare sub constrângeri liniare. Este folosită peste tot, de la logistică, programare, lanț de aprovizionare, până la finanțe. Matematica este bine înțeleasă, iar solverele pot gestiona probleme cu mii de variabile.
Este important de subliniat că funcția obiectiv nu schimbă ce constrângeri există - doar îi spune solverului ce să urmărească. Dacă schimbați funcția obiectiv, veți obține o soluție complet diferită, chiar și cu aceleași constrângeri.
Funcții obiectiv în învățarea automată
În învățarea automată, funcția obiectiv definește ce învață efectiv modelul să facă.
De fiecare dată când antrenați un model, rulați un algoritm de optimizare (gândiți-vă la gradient descent, Adam, RMSProp) care ajustează parametrii modelului pentru a minimiza sau maximiza funcția obiectiv. Modelul nu știe nimic despre problema dumneavoastră. Știe doar scorul pe care i-l dă funcția obiectiv și încearcă să îmbunătățească acel scor la fiecare actualizare.
Asta înseamnă că alegerea funcției obiectiv modelează rezultatul. Este o idee bună să încercați câteva pentru a vedea care funcționează cel mai bine în cazul dumneavoastră.
Eroarea pătratică medie (regresie)
Mean Squared Error (MSE) este funcția obiectiv implicită pentru problemele de regresie. Măsoară diferența pătratică medie dintre predicțiile modelului și valorile reale țintă.

Formula MSE
Ridicarea la pătrat a diferențelor face ca toate erorile să fie pozitive și penalizează erorile mari mai mult decât pe cele mici. O predicție greșită cu 10 contribuie cu 100 la sumă - nu doar cu 10. Acest lucru face ca MSE să fie sensibil la valori extreme, ceea ce trebuie avut în vedere în date reale neordonate.
import numpy as np
y_true = np.array([3.0, 5.0, 2.5, 7.0])
y_pred = np.array([2.8, 5.2, 2.0, 6.5])
mse = np.mean((y_true - y_pred) ** 2)
print(f"MSE: {mse:.4f}")

Rezultat MSE
Pierdere entropie încrucișată (clasificare)
Cross-Entropy Loss este funcția obiectiv standard pentru problemele de clasificare. Măsoară cât de departe este distribuția de probabilitate prezisă de model față de distribuția clasei adevărate.

Funcția de pierdere cu entropie încrucișată
Dacă modelul atribuie o probabilitate mare clasei corecte, pierderea este mică. Dacă este foarte sigur, dar greșește, pierderea este mare și penalizează acest lucru. Asta împinge modelul să prezică clasa corectă și să fie sigur pe ea.
import numpy as np
# True labels (one-hot encoded)
y_true = np.array([1, 0, 0])
# Model's predicted probabilities
y_pred = np.array([0.7, 0.2, 0.1])
cross_entropy = -np.sum(y_true * np.log(y_pred))
print(f"Cross-Entropy Loss: {cross_entropy:.4f}")

Rezultat entropie încrucișată
Verosimilitate logaritmică
Log-verosimilitatea este frecventă în modelele probabilistice și statistice. Funcția maximizează probabilitatea ca parametrii modelului să fi generat datele observate.

Formula log-verosimilității
Se lucrează cu logaritmul verosimilității mai degrabă decât cu verosimilitatea însăși deoarece transformă un produs de probabilități într-o sumă, ceea ce este mult mai ușor de calculat și de optimizat.
În practică, majoritatea cadrelor minimizează log-verosimilitatea negativă (NLL) în loc să maximizeze log-verosimilitatea. Este același lucru - doar inversat pentru ca gradient descent să poată funcționa cu ea.
import numpy as np
from scipy.stats import norm
# Observed data
data = np.array([1.2, 2.3, 1.8, 2.1, 1.9])
# Assumed model parameters
mu, sigma = 2.0, 0.5
# Compute negative log-likelihood
nll = -np.sum(norm.logpdf(data, loc=mu, scale=sigma))
print(f"Negative Log-Likelihood: {nll:.4f}")

Rezultat log-verosimilitate
Antrenarea este, în esență, doar optimizare. Fiecare trecere înainte calculează valoarea funcției obiectiv. Fiecare trecere înapoi calculează gradientele. Iar fiecare actualizare a parametrilor mișcă modelul în direcția care îmbunătățește scorul.
Funcții obiectiv convexe vs. neconvexe
Nu toate funcțiile obiectiv sunt la fel. Forma lor determină cât de greu sunt de optimizat și dacă puteți avea încredere în soluția găsită.
Funcții obiectiv liniare
O funcție obiectiv liniară oferă o relație liniară între intrări și ieșire. Când modificați orice intrare cu o valoare fixă, ieșirea se schimbă cu o valoare fixă.
Funcțiile liniare sunt folosite în programarea liniară, unde atât obiectivul, cât și constrângerile sunt liniare. Acest lucru le face cea mai ușoară clasă de funcții obiectiv de optimizat, deoarece solverele pot găsi în mod fiabil optimul global, chiar și pentru probleme mari.
Funcții obiectiv neliniare
O funcție obiectiv neliniară are o relație mai complexă între intrări și ieșire. Majoritatea problemelor din lumea reală - și aproape toate modelele de învățare automată - se încadrează în această categorie.
MSE este neliniară. Entropia încrucișată este neliniară. Suprafațele de pierdere ale rețelelor neuronale sunt neliniare. Complexitatea suplimentară permite acestor funcții să surprindă relații complexe în date, dar face și optimizarea mai dificilă.
Funcții convexe versus neconvexe
Aici devine interesant.
O funcție convexă are o formă de castron. Orice segment de dreaptă tras între două puncte de pe curbă se află deasupra sau pe curbă. Acest lucru garantează că orice minim local este și minimul global - adică dacă optimizatorul găsește un fund, acela este fundul real.
O funcție neconvexă are o formă mai neregulată - mai multe văi, platouri și puncte de șa. Optimizatorii se pot bloca într-un minim local, o vale care pare a fi baza, dar nu este. Rețelele neuronale profunde au suprafețe de pierdere puternic neconvexe, motiv pentru care antrenarea lor necesită reglarea atentă a ratelor de învățare, a optimizatorilor și a inițializării.
Problemele convexe se rezolvă exact, iar cele neconvexe se rezolvă aproximativ. Calitatea soluției depinde de strategia de optimizare.
Pentru cei care gândesc vizual, iată o comparație între funcții obiectiv liniare, neliniare, convexe și neconvexe:

Comparație tipuri de funcții obiectiv
Cum sunt optimizate funcțiile obiectiv
Odată ce aveți o funcție obiectiv, aveți nevoie de o modalitate de a o minimiza sau maximiza. Aici intervin algoritmii de optimizare.
Abordarea cea mai comună este gradient descent. Ideea este să calculați gradientul funcției obiectiv în raport cu parametrii modelului, apoi să faceți un pas mic în direcția care reduce valoarea. De acolo, repetați până când valoarea nu se mai îmbunătățește.
Gradientul este doar derivata funcției obiectiv.
El vă spune panta în poziția curentă și în ce direcție este „în sus”. Pentru a minimiza funcția, vă deplasați în direcția opusă. Pentru a o maximiza, vă deplasați în aceeași direcție.
Acest proces este iterativ, ceea ce înseamnă că pentru a ajunge la soluție faceți o serie de actualizări mici, fiecare apropiind parametrii de optim. Mărimea fiecărui pas este controlată de rata de învățare. O valoare prea mare înseamnă că puteți depăși optimul, iar una prea mică înseamnă că antrenarea durează mai mult.
În practică, majoritatea cadrelor ML folosesc variante ale gradient descent care sunt mai rapide și mai stabile decât versiunea de bază:
- Stochastic Gradient Descent (SGD) calculează gradientul pe un singur exemplu aleator pe pas în locul întregului set de date
- Gradient descent pe mini-loturi folosește un lot mic de exemple pe pas - o cale de mijloc între SGD și lotul complet
- Adam adaptează rata de învățare pentru fiecare parametru, ceea ce îl face mai ușor de reglat
Funcția obiectiv trebuie să fie derivabilă, sau cel puțin în mare parte derivabilă, pentru ca metodele bazate pe gradient să funcționeze. Fără derivată nu există gradient, ceea ce înseamnă că optimizatorul nu are ce urma. Acesta este un aspect esențial de reținut.
Exemplu de funcție obiectiv
Să concretizăm cu o problemă simplă de regresie liniară.
Să presupunem că preziceți prețurile locuințelor în funcție de suprafața utilă. Aveți un set de date cu locuințe și prețuri cunoscute și doriți să potriviți o linie prin date care să minimizeze eroarea de predicție. Funcția dumneavoastră obiectiv este Mean Squared Error (MSE) pentru care cunoașteți deja formula.
Intrările sunt parametrii modelului - panta și interceptul dreptei. Ieșirea este un singur număr - eroarea pătratică medie pe toate predicțiile. În acest caz, mai mic înseamnă mai bun.
Iată cum ar putea arăta o posibilă implementare în Python:
import numpy as np
np.random.seed(42)
# Generate some fake housing data
square_footage = np.random.uniform(500, 3000, 100)
true_price = 150 * square_footage + 50000 + np.random.normal(0, 15000, 100)
def predict(x, slope, intercept):
return slope * x + intercept
def mse(y_true, y_pred):
return np.mean((y_true - y_pred) ** 2)
# Try two different parameter sets
slope_a, intercept_a = 150, 50000 # good fit
slope_b, intercept_b = 80, 100000 # bad fit
pred_a = predict(square_footage, slope_a, intercept_a)
pred_b = predict(square_footage, slope_b, intercept_b)
print(f"MSE (good fit): {mse(true_price, pred_a):,.2f}")
print(f"MSE (poor fit): {mse(true_price, pred_b):,.2f}")

MSE potrivire bună versus slabă
Primul set de parametri produce un MSE mult mai mic, ceea ce înseamnă că se potrivește mai bine datelor. Exact asta folosește optimizatorul pentru a decide încotro să se deplaseze.
Pentru cei vizuali, luați în considerare următoarea imagine:

Exemplu MSE
Puteți vedea ambele potriviri față de date și, de asemenea, suprafața MSE pe un interval de valori ale pantei pentru a observa însăși funcția obiectiv.
Graficul din stânga arată cum cele două seturi de parametri se potrivesc datelor. Graficul din dreapta arată suprafața MSE pe valori ale pantei - funcția obiectiv ca o curbă, cu un minim clar pe care optimizatorul încearcă să îl găsească. Fiecare pas al gradient descent se deplasează de-a lungul acestei curbe către acel minim.
Constrângeri și funcții obiectiv
O funcție obiectiv vă spune ce să optimizați. Constrângerile vă spun ce aveți voie să faceți.
În majoritatea problemelor reale, nu puteți maximiza sau minimiza după bunul plac. Lucrați în interiorul unor limite, cum ar fi un buget, o fereastră de timp sau o capacitate fizică. Aceste limite se numesc constrângeri și definesc setul de soluții valide din care poate alege optimizatorul.
Să luăm un exemplu de producție.
Să zicem că doriți să maximizați profitul pe două linii de produse. Fără constrângeri, răspunsul este să produceți cât mai mult posibil. Dar aveți 500 de ore de timp de utilaj și 1.000 de unități de materie primă disponibile. Acestea sunt constrângerile. Funcția obiectiv rămâne aceeași (maximizarea profitului), dar optimizatorul poate căuta doar în regiunea permisă de acele constrângeri.
Când schimbați constrângerile, se schimbă și soluția optimă, chiar dacă funcția obiectiv rămâne aceeași.
Această structură de funcție obiectiv cu un set de constrângeri este fundamentul optimizării cu constrângeri. Așa funcționează programarea liniară, optimizarea portofoliilor și multe probleme reale de planificare.
Concluzie
Fiecare problemă de optimizare - fie că antrenați o rețea neuronală, alocați resurse sau potriviți un model de regresie - se rezumă la un singur lucru: o funcție pe care încercați să o minimizați sau să o maximizați.
Funcția obiectiv este acea funcție. Ea definește ce înseamnă „mai bine”, ghidează fiecare actualizare de parametri și determină ce învață efectiv modelul. Dacă o alegeți corect, modelul va putea rezolva problema pe care o aveți. Dar dacă o alegeți greșit, va rezolva o cu totul altă problemă - adesea fără un semnal evident de eroare care să vă avertizeze.
Alegerea funcției obiectiv potrivite este o decizie de proiectare în știința datelor, deoarece modelează tot ceea ce urmează. Ca practician, nu ezitați să experimentați - există multe funcții obiectiv dintre care puteți alege.
Nu știți de unde să începeți? Cursurile noastre Model Validation in Python și Hyperparameter Tuning in Python sunt ambele puncte de plecare excelente pentru specialiștii în date de nivel începător spre intermediar.
Întrebări frecvente
Ce este o funcție obiectiv?
O funcție obiectiv este o funcție matematică ce măsoară cât de bună este o soluție. Îi furnizați un set de intrări, precum parametri de model și variabile de decizie, iar ea returnează un singur număr. Scopul este întotdeauna să găsiți intrările care fac acel număr cât mai mare sau cât mai mic posibil.
Care este diferența dintre funcția obiectiv și funcția de pierdere?
O funcție de pierdere este un tip specific de funcție obiectiv folosită în învățarea automată pentru a măsura eroarea de predicție pentru un singur exemplu de antrenare. Funcția obiectiv este termenul mai larg - poate desemna orice funcție pe care o minimizați sau o maximizați, nu doar eroarea de predicție. În practică, cei doi termeni sunt adesea folosiți interschimbabil, dar distincția contează atunci când citiți articole de cercetare.
Unde sunt utilizate funcțiile obiectiv?
Funcțiile obiectiv apar în orice problemă ce implică optimizare - învățare automată, programare liniară, alocare de resurse, finanțe, logistică și multe altele. În învățarea automată, funcția obiectiv definește ce învață modelul în timpul antrenării. În afara ML, ea definește scopul în orice problemă de optimizare cu sau fără constrângeri.
De ce contează alegerea funcției obiectiv în învățarea automată?
Funcția obiectiv determină pentru ce optimizează efectiv modelul în timpul antrenării. Dacă alegeți una greșită, modelul va minimiza ceva greșit - și o va face bine, ceea ce face problema mai greu de depistat. De exemplu, folosirea MSE pentru o problemă de clasificare nu va da doar rezultate slabe, ci rezultate slab-calibrate, cu încredere ridicată - ceea ce e și mai rău.
Poate o funcție obiectiv să aibă minime multiple?
Da - și aceasta este una dintre provocările de bază în antrenarea modelelor de învățare profundă. Funcțiile obiectiv neconvexe au multiple minime locale, ceea ce înseamnă că un optimizator se poate bloca într-o vale care nu este cea mai bună la nivel global. De aceea contează inițializarea ponderilor, programarea ratei de învățare și alegerea optimizatorului - ele influențează dacă optimizatorul găsește în final o soluție bună.