Introduction
Backpropagation gives gradients. A training loop decides what to do with them.
A loop is not a new model. It is the repeated procedure that turns one model into a better model: choose data, run a forward pass, compute loss, run the backward pass, update parameters, and check whether the change helped.
This chapter keeps the loop small enough to inspect. We will use scalar and NumPy-style examples, not a framework. That makes the roles visible before a later framework chapter compresses them into shorter code.
By the end, you should be able to read a tiny training loop and say what each line is responsible for.