Introducció

Autograd és una de les característiques més potents de PyTorch. Permet la diferenciació automàtica de tensors, la qual cosa és essencial per a l'entrenament de xarxes neuronals. En aquesta secció, aprendrem com funciona Autograd i com utilitzar-lo per calcular gradients de manera automàtica.

Conceptes Clau

  • Tensor: Una estructura de dades multidimensional similar a un array o matriu.
  • Gradient: La derivada d'una funció respecte a les seves variables d'entrada.
  • Backpropagation: Un algorisme utilitzat per calcular els gradients en xarxes neuronals.

Com Funciona Autograd?

Autograd construeix un gràfic dinàmic de computació, on cada operació en tensors crea un node en aquest gràfic. Quan es calcula la pèrdua, podem utilitzar backward() per calcular els gradients de manera automàtica.

Exemples Pràctics

Exemple 1: Càlcul de Gradients

import torch

# Creem un tensor amb requires_grad=True per habilitar el seguiment de les operacions
x = torch.tensor(2.0, requires_grad=True)

# Definim una funció simple
y = x ** 2

# Calculem el gradient
y.backward()

# El gradient de y respecte a x
print(x.grad)  # Output: tensor(4.0)

Explicació:

  1. Creem un tensor x amb requires_grad=True.
  2. Definim una funció y = x ** 2.
  3. Utilitzem y.backward() per calcular el gradient de y respecte a x.
  4. El gradient es guarda a x.grad.

Exemple 2: Gradients en Funcions Més Complexes

import torch

# Creem tensors amb requires_grad=True
x = torch.tensor(1.0, requires_grad=True)
z = torch.tensor(2.0, requires_grad=True)

# Definim una funció més complexa
y = x * z + z ** 2

# Calculem el gradient
y.backward()

# Gradients de y respecte a x i z
print(x.grad)  # Output: tensor(2.0)
print(z.grad)  # Output: tensor(5.0)

Explicació:

  1. Creem tensors x i z amb requires_grad=True.
  2. Definim una funció y = x * z + z ** 2.
  3. Utilitzem y.backward() per calcular els gradients de y respecte a x i z.
  4. Els gradients es guarden a x.grad i z.grad.

Exercicis Pràctics

Exercici 1: Càlcul de Gradients

Enunciat: Crea un tensor a amb valor inicial 3.0 i requires_grad=True. Defineix una funció b = a ** 3 + 2 * a. Calcula el gradient de b respecte a a.

Solució:

import torch

# Creem el tensor
a = torch.tensor(3.0, requires_grad=True)

# Definim la funció
b = a ** 3 + 2 * a

# Calculem el gradient
b.backward()

# Mostrem el gradient
print(a.grad)  # Output: tensor(29.0)

Exercici 2: Funció Quadràtica

Enunciat: Crea dos tensors x i y amb valors inicials 1.0 i 2.0 respectivament, amb requires_grad=True. Defineix una funció z = x ** 2 + y ** 2 + 2 * x * y. Calcula els gradients de z respecte a x i y.

Solució:

import torch

# Creem els tensors
x = torch.tensor(1.0, requires_grad=True)
y = torch.tensor(2.0, requires_grad=True)

# Definim la funció
z = x ** 2 + y ** 2 + 2 * x * y

# Calculem el gradient
z.backward()

# Mostrem els gradients
print(x.grad)  # Output: tensor(6.0)
print(y.grad)  # Output: tensor(6.0)

Errors Comuns i Consells

  • Oblidar requires_grad=True: Si no s'estableix requires_grad=True en els tensors, PyTorch no seguirà les operacions i no podrà calcular els gradients.
  • No utilitzar backward(): Després de definir la funció, és necessari cridar backward() per calcular els gradients.
  • Gradients acumulats: Els gradients es van acumulant per defecte. Si es volen reiniciar, cal utilitzar zero_grad().

Resum

En aquesta secció, hem après què és Autograd i com utilitzar-lo per calcular gradients de manera automàtica en PyTorch. Hem vist exemples pràctics i hem realitzat exercicis per reforçar els conceptes. Ara estem preparats per avançar cap a la construcció de xarxes neuronals en el següent mòdul.

© Copyright 2024. Tots els drets reservats