The backward pass calculates how much each part of the model contributed to the error. This helps the model learn by adjusting itself to make better predictions.
Backward pass (loss.backward) in PyTorch
loss.backward()
This function computes gradients of the loss with respect to model parameters.
It must be called after computing the loss and before updating weights.
loss = criterion(output, target) loss.backward()
loss = torch.nn.functional.mse_loss(predictions, labels) loss.backward()
This code shows a simple linear model learning to fit points. It calculates loss, calls loss.backward() to get gradients, prints them, updates weights, and shows loss improvement.
import torch import torch.nn as nn import torch.optim as optim # Simple linear model model = nn.Linear(1, 1) # Sample input and target x = torch.tensor([[1.0], [2.0], [3.0]]) y = torch.tensor([[2.0], [4.0], [6.0]]) # Mean squared error loss criterion = nn.MSELoss() # Optimizer optimizer = optim.SGD(model.parameters(), lr=0.1) # Forward pass output = model(x) # Compute loss loss = criterion(output, y) print(f"Loss before backward: {loss.item():.4f}") # Backward pass to compute gradients loss.backward() # Print gradients of model parameters for name, param in model.named_parameters(): print(f"Gradients for {name}: {param.grad}") # Update weights optimizer.step() # Forward pass after update output2 = model(x) loss2 = criterion(output2, y) print(f"Loss after one update: {loss2.item():.4f}")
Always zero gradients before backward pass if running multiple iterations: optimizer.zero_grad().
Calling loss.backward() accumulates gradients, so clear them to avoid mixing.
Backward pass computes gradients needed to update model weights.
Call loss.backward() after computing loss.
Use gradients with an optimizer to improve model predictions.
Practice
loss.backward() function do in PyTorch?Solution
Step 1: Understand the role of
This function computes gradients needed for updating model weights by backpropagation.loss.backward()Step 2: Differentiate from other functions
Updating weights is done by the optimizer, notloss.backward(). Calculating loss or initializing parameters are separate steps.Final Answer:
It computes gradients of the loss with respect to model parameters. -> Option AQuick Check:
Backward pass = compute gradients [OK]
- Confusing backward() with optimizer step
- Thinking backward() calculates loss value
- Assuming backward() initializes parameters
loss in PyTorch?Solution
Step 1: Recall PyTorch syntax for backward pass
The correct method to compute gradients isloss.backward().Step 2: Identify incorrect method names
Other options are invalid method names and will cause errors.Final Answer:
loss.backward() -> Option BQuick Check:
Correct method name = backward() [OK]
- Adding extra letters or suffixes to backward
- Using plural form backwards
- Confusing method name with optimizer step
import torch x = torch.tensor(2.0, requires_grad=True) y = x ** 3 loss = y loss.backward() print(x.grad)
What will be the output of
print(x.grad)?Solution
Step 1: Compute the derivative of y = x^3 at x=2
The derivative dy/dx = 3 * x^2. At x=2, this is 3 * 4 = 12.Step 2: Understand backward() computes this gradient
Callingloss.backward()computes and stores this gradient inx.grad.Final Answer:
tensor(12.) -> Option DQuick Check:
Derivative of x^3 at 2 = 12 [OK]
- Calculating derivative incorrectly as 8 or 6
- Forgetting to set requires_grad=True
- Not calling loss.backward() before accessing grad
import torch x = torch.tensor(3.0, requires_grad=True) y = x * 2 loss = y # Missing backward call print(x.grad)
Solution
Step 1: Identify missing backward() call
The code does not callloss.backward(), so gradients are not computed.Step 2: Understand gradient attribute behavior
Without backward(),x.gradremains None, not zero or error.Final Answer:
x.grad will be None because backward() was not called. -> Option CQuick Check:
No backward() means no gradients [OK]
- Expecting zero tensor instead of None
- Thinking missing backward() causes syntax error
- Assuming RuntimeError for non-scalar loss here
loss.backward() twice in a row without zeroing gradients in between. What will happen to the gradients stored in the parameters?Solution
Step 1: Understand gradient accumulation in PyTorch
By default, gradients accumulate in the .grad attribute when backward() is called multiple times.Step 2: Effect of calling backward() twice without zeroing
Calling backward() twice adds gradients twice, effectively doubling them.Final Answer:
Gradients will accumulate, doubling the values from one backward call. -> Option AQuick Check:
Multiple backward calls add gradients [OK]
- Assuming gradients reset automatically
- Expecting an error on second backward call
- Thinking gradients overwrite instead of accumulate
Ready to prove it?
Pass the test and this pattern moves unknown
