Funcții de Pierdere în PyTorch (Loss Functions) în PyTorch & Deep Learning Practic

Antrenare, Optimizare & Stare Nivel: începător

Calculul erorii dintre predicția modelului și realitate: nn.CrossEntropyLoss pentru clasificare și limbaj, nn.MSELoss pentru regresie și nn.BCEWithLogitsLoss.

Sintaxă & invocare Python
import torch.nn as nn

# Clasificare multi-clasă sau predicție următor token în LLM:
criteriu_ce = nn.CrossEntropyLoss()
pierdere = criteriu_ce(logits, etichete_reale)

# Regresie (estimare valori continue):
criteriu_mse = nn.MSELoss()
pierdere = criteriu_mse(predicții, valori_reale)

Descriere & Utilizare

O rețea neuronală învață exclusiv prin încercare și eroare. Funcția de pierdere (Loss Function sau Criterion) este busola matematică a modelului: cuantifică într-un singur număr scalar cât de greșite sunt predicțiile curente ale rețelei față de realitate.

În 90% din proiectele moderne de AI vei întâlni trei funcții majore:

1) nn.CrossEntropyLoss: folosită pentru clasificare multi-clasă și la antrenarea oricărui model mare de limbaj (LLM) pentru predicția următorului token. Primește scorurile brute ne-normalizate (logits) și calculează intern LogSoftmax + NLLLoss. 2) nn.BCEWithLogitsLoss: pentru clasificare binară (0 sau 1) sau clasificare multi-etichetă independentă. 3) nn.MSELoss: măsoară eroarea medie pătratică, standardul în sarcini de regresie numerică continuă.

Cum să o reții ușor

💡 Dacă modelul este un trăgător la țintă, Loss-ul este distanța în milimetri de la glonț până la centrul cercului roșu. Cu cât numărul este mai mic, cu atât trăgătorul este mai precis.

Opțiuni și parametri tehnici

  • weight (CrossEntropyLoss): tensor cu ponderi per clasă, salvator în seturi de date puternic dezechilibrate.
  • ignore_index: indexul de etichetă care este ignorat complet la calculul pierderii (ex: tokenii de padding sau -100).
  • reduction="mean": specifică dacă pierderile din tot batch-ul sunt mediate ("mean") sau însumate ("sum").

Exemple practice și cazuri de utilizare

  • Ignorarea tokenilor de instrucțiune la fine-tuning LLM: setează etichetele de prompt la -100 și folosește nn.CrossEntropyLoss(ignore_index=-100).
  • Clasificare binară de sentiment (pozitiv/negativ): loss_fn = nn.BCEWithLogitsLoss(); loss = loss_fn(logit.squeeze(), target.float()).
  • Extragerea valorii numerice pure pentru afișare: loss.item() (convertește tensorul 0D într-un float Python obișnuit).

Sfaturi de configurare & capcane

Nu trece niciodată ieșirile printr-un strat nn.Softmax() înainte de nn.CrossEntropyLoss()! Trecerea unor probabilități deja normalizate prin CrossEntropyLoss va strica complet stabilitatea numerică a gradienților.

Comenzi și ghiduri înrudite