Backpropagation

Tracing error backward to split blame across the network

Key points
  • Backpropagation is the procedure that scans the final error backward and hands each step its own share of the blame.
  • The share it hands out is the value's gradient. It tells you which way, and by how much, to adjust that value.
  • One pass forward makes the answer, one pass backward splits the blame. That round trip is a single step of training.
  • 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. That efficiency is why models with very deep stacks of layers can be trained at all.
Contents

1The 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.

2In 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 contributed to it and passes the remaining share to the layer before it. 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 the main reason 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's the only reason 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.

3More 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 — the reason training needs so much more memory than inference.

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. And a car wash relies on a person's eye to spot a streak, while training measures error by a rule fixed in advance. One more gap: the car only makes one pass through the wash, but a model runs the forward and backward legs over and over, thousands of times, refining the same values a little further with every round trip.

4Try it yourself

5Common 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 sends the data backward, 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.

7One-line summary

In shortBackpropagation 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 updated2026-09-02