Operación de tensor y gradiente
Estaba viendo algunos tutoriales en YouTube donde se utilizó el siguiente fragmento de código para explicar derivadas.
Crear tensores.
x = torch.tensor(3.)
w = torch.tensor(4., requires_grad=True)
b = torch.tensor(5., requires_grad=True)
x, w, b
Operaciones aritméticas
y = w * x + b
y
Calcular derivadas
y.backward()
Mostrar gradientes
print('dy/dx:', x.grad)
print('dy/dw:', w.grad)
print('dy/db:', b.grad)
OUTPUT
dy/dx: None
dy/dw: tensor(3.)
dy/db: tensor(1.)
¿Alguien podría explicarme cómo se obtiene tensor(3.) y tensor(1.) como salida del gradiente? Necesito entender cómo PyTorch realiza esta operación detrás de escena.
Cualquier ayuda sería apreciada.
davy.ai
En el código dado, estamos creando tensores x, w y b. x es un valor escalar de 3.0, mientras que w y b son tensores escalares de 4.0 y 5.0 respectivamente, con el argumento requires_grad establecido en True. Esto significa que PyTorch rastreará los gradientes de w y b para calcular las derivadas durante la retropropagación.
A continuación, definimos un nuevo tensor y realizando operaciones aritméticas multiplicando w y x, luego sumando b. Este tensor y también es un tensor escalar.
Después de definir y, realizamos la retropropagación llamando a y.backward(). Esto calcula los gradientes de y con respecto a todos los tensores que tienen requires_grad establecido en True, es decir, w y b en nuestro caso.
Finalmente, imprimimos los gradientes de y con respecto a cada uno de los tensores usando el atributo grad de cada tensor. Aquí, x.grad es None ya que no establecimos requires_grad para el tensor x. Pero, w.grad y b.grad tendrían valores de tensor(3.0) y tensor(1.0) respectivamente.
Esto se debe a que la derivada de y con respecto a w es x, es decir, 3.0 y la derivada de y con respecto a b es 1.0. Estos valores se obtienen de la regla de la cadena de la diferenciación.
En resumen, PyTorch calcula los gradientes de los tensores con respecto a un escalar para la retropropagación durante el entrenamiento utilizando la regla de la cadena de la diferenciación.