Backpropagation

Tracing error backward to split blame across the network

  • Basics
  • 5 min read
  • 3 diagrams

Key points

  • Backpropagation is the procedure that scans the final error backward and hands each step its own share of the blame.
  • That share is the value's gradient. It isn't a slice cut out of the error; it shows how much the error changes when that value is nudged slightly. It tells you which way to adjust the value to shrink the error, and the learning rate and optimizer decide how far to actually move it.
  • One pass forward makes the answer, one pass backward splits the blame. Once that round trip has produced the shares and the values have moved once, a single step of training is done.
  • It starts from the back because an earlier stage's fault only shows up in the result by passing through every later stage.
  • One backward pass hands out shares for every value at once. Thanks to that efficiency, even a model with hundreds of millions of values can have its shares worked out in a manageable amount of time.

The analogy

Push a car into an automatic car wash and it rolls through water jets, soap, rinse, and dry before coming out the other side. But there's a streak left on the back window. Figuring out which stage caused it is the only way to fix the next car.

The inspection works backward from the last stage. Check first whether the dryer's air missed that spot; if not, check the rinse jets; if still not, check whether the soap didn't quite reach. An earlier stage's mistake only shows up as a streak after passing through every stage that follows, so you have to know the later share before you can size up the earlier one.

Work all the way back like that and every stage ends up with a number: "here's your share of this streak." Adjust each stage's settings by that amount, and the next car comes out a little cleaner.

In detail

Forward once, backward once

One step of training is a round trip. Data goes in first and passes through the layers in order to produce an answer — that's pushing the car into the wash. The answer gets compared to the correct one and the error gets measured.

Then comes the backward leg. The error is handed to the last layer, which works out how much its own values affect it, then computes a fresh share for the layer before it to use and passes that along. That handoff continues all the way to the first layer. Once both legs finish once, every value in the model carries a note: "move this way, by this much."

The in-between results produced on the forward pass have to be kept, not thrown away — the backward pass needs them again. That's one of the big reasons training eats far more memory than just running a finished model.

Why start from the back

You could imagine checking from the front instead: tweak one value slightly and measure how much the result changes. But every time one value changes, the whole car wash has to run again. With hundreds of millions of values, that's hundreds of millions of runs.

Working backward eliminates that waste. Once you know the later stage's share, the earlier stage's share falls out in a handful of multiplications. One sweep from back to front produces every value's share at the same time. That ordering is why training time stays manageable no matter how many layers get stacked.

Blame first, then move

Backpropagation's job ends at splitting the blame. Actually moving the values based on that blame belongs to gradient descent. How far to move comes from the learning rate; the style of moving comes from the optimizer. The roles are split up this cleanly.

The blame gets recalculated fresh every time a batch of data is checked. The same value might get told to go up this time and down the next, depending on what data it saw. That's why training doesn't react hard to any single share — it only moves a little at a time.

The blame fades the further back it travels

Working backward multiplies a value at every layer it passes through. If that multiplier is smaller than one, the share shrinks with every layer, and by the time it reaches the first layer it's nearly zero. That's how the vanishing gradient happens — the front layers stop learning and stall out.

If the multiplier is large instead, the share balloons the further back it goes, and values blow up. That's why shortcuts that skip past layers, and devices that rescale values at every layer, are so widely used.

Deep models went unlearnable for years because of exactly this problem. The backward procedure itself had been known for a long time — it just took devices that could keep the blame alive all the way to the front before layers could be stacked freely.

More precisely

Backpropagation applies the chain rule for differentiating composed functions, layer by layer, in order. Each layer multiplies the share it receives from behind by its own layer's derivative, passes that along, and at the same time pulls out the gradient with respect to its own values. The intermediate results needed for this get stored during the forward pass and pulled back out on the backward pass — one reason training needs so much more memory than inference. The gradients and the values the optimizer holds also take up their own space, only during training.

The comparison breaks down in places too. Car wash stages are visible and clearly separate, but a model's layers are a blend of values flowing together, so there's no single stage you can point to and call "the culprit." What backpropagation hands back isn't a verdict of blame — it's a number for how much the error would change if a value nudged just slightly. So adding up all the shares doesn't give you the error. And a car wash relies on a person's eye to spot a streak, while training measures error by a rule fixed in advance.

Try it yourself

Common misconceptions

  • It's easy to think backpropagation is training itself, but actually it only says which way to move a value; gradient descent and the optimizer are what actually move it.

  • It's easy to think backpropagation feeds the input data in reverse to run the model once more, but actually what flows backward is the error's share, never the data. Data only ever flows forward.

  • It's easy to think deeper layers make backpropagation work better, but actually the deeper it goes, the more the share tends to fade or balloon, which needs separate fixes to manage.

One-line summary

In short

Backpropagation is training's backward path: it scans the result's error from the last step to the first, handing every value its own share of the blame.

Spotted an error or have a better analogy? Suggest an edit · Last updated 2026-10-17