What is the purpose of the backward pass in PyTorch?
The backward pass computes gradients of the loss with respect to model parameters. It helps the model learn by showing how to adjust weights to reduce errors.
Click to reveal answer
beginner
What does the method loss.backward() do in PyTorch?
It calculates the gradients of the loss tensor with respect to all tensors that have requires_grad=True. These gradients are stored in the .grad attribute of each tensor.
Click to reveal answer
intermediate
Why do we need to call optimizer.zero_grad() before loss.backward()?
Because PyTorch accumulates gradients by default, calling optimizer.zero_grad() clears old gradients. This prevents mixing gradients from multiple backward passes.
Click to reveal answer
beginner
What happens if you forget to call loss.backward() during training?
No gradients will be computed, so the optimizer cannot update the model weights. The model will not learn or improve.
Click to reveal answer
intermediate
How does PyTorch know which operations to track for gradient computation?
PyTorch builds a computation graph dynamically during the forward pass. It tracks operations on tensors with requires_grad=True to compute gradients during the backward pass.
Click to reveal answer
What does loss.backward() compute?
AThe optimizer step
BGradients of loss with respect to model parameters
CThe updated model weights
DThe loss value itself
✗ Incorrect
loss.backward() calculates gradients needed for updating model weights.
Before calling loss.backward(), why do we call optimizer.zero_grad()?
ATo clear old gradients so they don't accumulate
BTo compute the loss value
CTo update the model weights
DTo save the model
✗ Incorrect
Gradients accumulate by default, so clearing them prevents mixing updates.
If a tensor has requires_grad=False, what happens during loss.backward()?
AGradient is computed normally
BThe tensor is updated automatically
CAn error occurs
DNo gradient is computed for that tensor
✗ Incorrect
Only tensors with requires_grad=True get gradients computed.
What is stored in the .grad attribute after loss.backward()?
AThe updated tensor value
BThe loss value
CThe gradient of the loss with respect to the tensor
DThe optimizer state
✗ Incorrect
.grad holds the computed gradients for each parameter.
What does PyTorch use to track operations for gradient calculation?
AA dynamic computation graph
BA static computation graph
CA database
DA configuration file
✗ Incorrect
PyTorch builds a dynamic graph during the forward pass to track operations.
Explain in your own words what happens during the backward pass when you call loss.backward() in PyTorch.
Think about how PyTorch figures out how to change weights to reduce loss.
You got /4 concepts.
Why is it important to call optimizer.zero_grad() before loss.backward() in a training loop?
Consider what happens if gradients from previous steps mix with current ones.
You got /3 concepts.
Practice
(1/5)
1. What does the loss.backward() function do in PyTorch?
easy
A. It computes gradients of the loss with respect to model parameters.
B. It updates the model weights directly.
C. It calculates the loss value from predictions and targets.
D. It initializes the model parameters.
Solution
Step 1: Understand the role of loss.backward()
This function computes gradients needed for updating model weights by backpropagation.
Step 2: Differentiate from other functions
Updating weights is done by the optimizer, not loss.backward(). Calculating loss or initializing parameters are separate steps.
Final Answer:
It computes gradients of the loss with respect to model parameters. -> Option A
2. Which of the following is the correct way to call the backward pass on a loss tensor named loss in PyTorch?
easy
A. loss.backwards()
B. loss.backward()
C. loss.backwarded()
D. loss.backward_pass()
Solution
Step 1: Recall PyTorch syntax for backward pass
The correct method to compute gradients is loss.backward().
Step 2: Identify incorrect method names
Other options are invalid method names and will cause errors.
Final Answer:
loss.backward() -> Option B
Quick Check:
Correct method name = backward() [OK]
Hint: Use exact method name: backward() with no extra letters [OK]
Common Mistakes:
Adding extra letters or suffixes to backward
Using plural form backwards
Confusing method name with optimizer step
3. Consider the following PyTorch code snippet:
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)?
medium
A. tensor(0.)
B. tensor(8.)
C. tensor(6.)
D. tensor(12.)
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
Calling loss.backward() computes and stores this gradient in x.grad.
Final Answer:
tensor(12.) -> Option D
Quick Check:
Derivative of x^3 at 2 = 12 [OK]
Hint: Derivative of x^3 is 3x^2; plug in x=2 [OK]
Common Mistakes:
Calculating derivative incorrectly as 8 or 6
Forgetting to set requires_grad=True
Not calling loss.backward() before accessing grad
4. What is the error in the following PyTorch code snippet?
import torch
x = torch.tensor(3.0, requires_grad=True)
y = x * 2
loss = y
# Missing backward call
print(x.grad)
medium
A. x.grad will be zero tensor automatically.
B. SyntaxError because backward() is missing.
C. x.grad will be None because backward() was not called.
D. RuntimeError because loss is not scalar.
Solution
Step 1: Identify missing backward() call
The code does not call loss.backward(), so gradients are not computed.
Step 2: Understand gradient attribute behavior
Without backward(), x.grad remains None, not zero or error.
Final Answer:
x.grad will be None because backward() was not called. -> Option C
Quick Check:
No backward() means no gradients [OK]
Hint: Always call loss.backward() before checking .grad [OK]
Common Mistakes:
Expecting zero tensor instead of None
Thinking missing backward() causes syntax error
Assuming RuntimeError for non-scalar loss here
5. You have a model with parameters and a loss computed. You call loss.backward() twice in a row without zeroing gradients in between. What will happen to the gradients stored in the parameters?
hard
A. Gradients will accumulate, doubling the values from one backward call.
B. Gradients will reset to zero before the second backward call.
C. An error will be raised because backward() cannot be called twice.
D. Gradients will be overwritten by the second backward call.
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