This page assumes nothing. Before you can read the parent derivation, you must be fluent in the little alphabet it speaks. We build every letter here, in order, each one leaning on the one before it.
Picture a row of light bulbs feeding wires into another row of bulbs, feeding into another row, ending in one final bulb whose brightness is the network's "answer."
Each circle is a neuron — a tiny number-holder (its brightness).
Each arrow is a weight — a dial that says "how strongly does this bulb influence that one."
Numbers flow left → right. This left-to-right flow is the forward pass.
Everything below is just names for the parts of this picture.
Picture: the vertical columns in the figure above, numbered left to right.
Why the topic needs it: every quantity (z, a, W, b, δ) lives in a specific row, so we tag it with a superscript (l) to say which row. W(2) means "the dials feeding into row 2."
Picture: each arrow between two bulbs carries one Wji; each destination bulb also has a little "+b" tap.
Why the topic needs it: these are the knobs training adjusts. The entire goal of backprop is to find ∂L/∂W and ∂L/∂b — how to turn each dial.
Why two steps and not one? Without the curved σ, stacking rows would collapse into one big linear map (a line of lines is still a line). The bend is what makes a deep network more powerful than a shallow one. (More in Activation functions and their derivatives.)
Row j's raw score is zj(l)=∑iWji(l)ai(l−1)+bj(l) — "walk across all sources i, multiply dial × brightness, add them up." That summed-products pattern is the dot product, and stacking it for every destination jis matrix multiplication.
Picture: a ruler measuring the distance between the final bulb's brightness and where we wanted it.
Example used by the parent: MSE, L=21(a(L)−y)2. (See Loss functions (MSE, cross-entropy).)
Why the topic needs it:L is the mountain we descend. Every derivative in backprop is "how does L change if I wiggle this?"
Picture: stand on a hillside (the loss surface); the gradient is the arrow pointing straight uphill. To lower loss we step the opposite way — that is Gradient descent.
Suppose L depends on z, which depends on w. How does L respond to w?
When w influences L through several paths (because a neuron fans out to many neurons in the next row), you add up the contributions from every path:
∂w∂L=∑k∂zk∂L⋅∂w∂zk
Why the topic needs it: the entire parent derivation is repeated chain-rule. The sum-over-paths version is exactly the ∑k that produces BP2's transpose.
Picture: two stacks of numbers side by side; multiply each pair, keep the stack the same height.
Why the topic needs it: in BP1/BP2, the incoming blame vector must be "gated" by each neuron's own local slope σ′(z) — a per-neuron multiply, i.e. ⊙, not a matrix product.
Picture: the "blame packet" the parent's Feynman story passes backward from person to person.
Why the topic needs it:δ is the reusable cache. Compute it once per row (back to front) and every weight/bias gradient falls out cheaply — this is the dynamic-programming saving. Chained naively you'd recompute shared paths (linked to Vanishing and exploding gradients behaviour too).