Diferențiere Automată cu Autograd (requires_grad, backward) în PyTorch & Deep Learning Practic

Tensori, Hardware & Autograd Nivel: intermediar

Mecanismul intern autograd din PyTorch: construirea grafului computațional (DAG), propagarea înapoi cu loss.backward() și proprietatea tensor.grad.

Sintaxă & invocare Python
# Activarea urmăririi derivatelor pe un tensor:
x = torch.tensor([3.0], requires_grad=True)
y = x ** 2 + 2 * x + 1   # y = 3^2 + 2*3 + 1 = 16

# Calculul automat al derivatei dy/dx prin backpropagation:
y.backward()
print(x.grad)             # dy/dx = 2*x + 2 = 2*3 + 2 = 8.0!

Descriere & Utilizare

Inima care face posibilă învățarea profundă în PyTorch este motorul Autograd (Automatic Differentiation). În loc să calculezi manual formule complicate de analiză matematică pentru zeci de milioane de parametri, PyTorch construiește în culise un graf aciclic direcționat (DAG) al fiecărei operațiuni matematice efectuate.

Când un tensor are atributul requires_grad=True (setat automat pe toate greutățile oricărui nn.Linear sau nn.Module), fiecare adunare, înmulțire sau funcție neliniară este înregistrată cu funcția sa inversă de derivare (accesibilă în tensor.grad_fn).

La apelarea metodei loss.backward(), PyTorch parcurge graful în sens invers folosind regula lanțului (Chain Rule) și stochează derivatele parțiale ale pierderii direct în atributul .grad al fiecărui parametru, gata pentru optimizator.

Cum să o reții ușor

💡 Ca firul Ariadnei: pe măsură ce pășești înainte prin labirint (Forward Pass), lași în urmă un fir roșu legat de fiecare nod. Când ajungi la final și afli cât de departe ești de ieșire (Loss), tragi de fir înapoi (Backward Pass) pentru a vedea exact ce cotitură te-a abătut.

Opțiuni și parametri tehnici

  • requires_grad=True: indică motorului Autograd să înceapă înregistrarea operațiunilor pe acest tensor.
  • loss.backward(): inițiază calculul gradienților pornind de la un scalar (valoarea pierderii).
  • tensor.grad: tensorul care acumulează gradienții după apelul .backward().
  • retain_graph=True: parametru opțional în .backward() dacă vrei să apelezi backward de mai multe ori pe același graf (în mod normal, graful se eliberează imediat din memorie pentru eficiență).

Exemple practice și cazuri de utilizare

  • Detașarea unui tensor din graf (fără derivate): x_detasat = x.detach().
  • Resetarea manuală a gradienților: x.grad.zero_().
  • Inspectarea funcției de gradient: print(y.grad_fn) (ex: <AddBackward0 object>).

Sfaturi de configurare & capcane

Gradienții în PyTorch sunt acumulativi: dacă apelezi loss.backward() într-o buclă fără să apelezi optimizer.zero_grad(), gradienții noi se adună peste cei vechi, ducând la divergența antrenării!

Comenzi și ghiduri înrudite