Forward Propagation
Forward propagation is the computation a neural network runs to turn an input into a prediction: each layer multiplies the incoming values by its weights, adds a bias, and applies a nonlinearity, passing the result left to right until the output layer reports a score for every possible answer. It is inference — the network's only job once training ends.
Think of each layer as a panel of judges. Every judge reads all the evidence coming in, but each has a fixed scoring sheet — the weights — that says how much each piece of evidence counts, and in which direction. The judges never confer; they just total their sheets and pass their verdicts to the next panel. The network here recognizes handwritten digits: 784 pixel brightnesses go in, ten digit scores come out, and the largest score is the guess.
How Forward Propagation Works
The architecture is 784 → 25 → 25 → 10: the flattened 28×28 image, two hidden panels of 25 judges each, and a final panel of 10 — one per digit.
Every judge performs the same two-part computation, and the animation insists
on showing the parts separately because conflating them is where intuition
goes wrong. First the weighted sum, the pre-activation z = w·a + b:
multiply each input by its weight, add everything up, add a bias. Nothing
stops z from coming out negative — a judge can be actively repelled by what
it sees. Then the ReLU nonlinearity, max(0, z): negative verdicts are
clamped to zero and the judge goes silent; positive ones pass through
unchanged. A weight is the strength of one connection — positive weights
(drawn green) excite the next judge, negative weights (drawn magenta) inhibit
it.
The output panel skips ReLU. Its ten raw scores — the logits — go through
softmax, pᵢ = exp(zᵢ) / Σⱼ exp(zⱼ), which exponentiates every score and
normalizes so the results sum to 1. The exponential is aggressive: a logit
gap becomes a probability ratio of e^gap, so a large lead concentrates nearly all the
probability. The prediction is the
argmax — whichever digit holds the most probability.
One number worth holding onto: the whole pass costs about
784·25 + 25·25 + 25·10 = 20,475 multiply-adds, one per connection, in a single layer-by-layer sweep. This counts connections, excluding bias additions and activation/softmax work; the implementation still uses loops or matrix operations. And it is the
weights' values, not their count, that make this work — random values in the same 20,475 connections would not provide the learned digit recognition; chance-level accuracy is a baseline, not a guarantee for every draw. The count is
capacity; training fills it. (The 19,600 connections into the first hidden
layer are too dense to draw, so the canvas shows a representative subset
between the later layers — a drawing constraint, not a property of the
network.)
Forward Propagation Step by Step
The default input is a real MNIST test image of a handwritten 7, run through a real trained network — every number on screen is a genuine forward pass.
- Input. The 28×28 image flattens into 784 pixel values. Ink is high, background near zero.
- Layer 1 — weighted sum. Each of the 25 judges computes
z₁ = x·W₁ + b₁over all 784 pixels. Ten of the 25 come out negative (drawn blue); the rest positive (dark). - Layer 1 — ReLU.
max(0, z₁)silences the ten negative judges — they fade to empty — while the positive ones keep their values as the activationsa₁. - Layer 2 — weighted sum. The drawn connections light up and each
layer-2 judge shows
z₂ = a₁·W₂ + b₂. Nine of 25 are negative this time. - Layer 2 — ReLU. Negatives zeroed again, giving
a₂. - Output — logits. Ten raw scores
z₃ = a₂·W₃ + b₃appear. The judge for 7 posts about 19.0; the runner-up, digit 2, manages roughly 1.2; most of the rest are negative. - Predict. Softmax exponentiates that 17.9-point gap until almost all of the probability mass lands on one digit. The network predicts 7 at ~100%.
The visual grammar to read as it plays: blue means a negative pre-activation, and the ReLU beats are where blue cells fade to empty — the two-step rhythm of "raw sum, then nonlinearity" repeats twice in the hidden layers and once more as "logits, then softmax" at the output. Same shape, three times.
Why a Confident Network Can Still Be Wrong
Softmax confidence measures decisiveness, not truth. The exponential rewards whichever logit leads, however the lead was earned — and the judges' scoring sheets are frozen, so an unusual image that happens to excite the wrong judges produces a confidently wrong verdict by the same honest arithmetic that nailed the 7.
The lesson ships this failure as a first-class input. The Misclassified variant loads, for each digit, the test image this exact network gets wrong with the highest confidence — real images, predictions above 90% on the wrong answer. The seven beats are identical; only the input changed. The Ambiguous variant sits in between: correctly classified, but at ~75%, so softmax leaves a visible runner-up. Run all three for one digit and you get the lesson's real takeaway — the network never changes, so where the probability lands is a property of the input-network pair. This network gets about 3.7% of the MNIST test set wrong, and some of those wrong answers are highly confident.
Where the scoring sheets came from is the next lesson: Gradient Descent shows the update rule and Backpropagation shows how every weight learns its share of the blame.
Edge Cases
- Dead-quiet judges. ReLU outputs exactly zero whenever a weighted sum is negative, so many hidden neurons stay dark for any given image. Normal, not a bug — different images wake different subsets.
- Saturated vs split softmax. A clean digit collapses the distribution to ~100% on one class; an ambiguous one leaves real mass on a runner-up. Both are correct forward passes — only the logit gap differs.
- The all-zero input. With no ink, the first layer’s weighted sums reduce to its biases; later layers also receive the activations those biases produce. the network still produces a full probability distribution. It always answers, even when there is no question.
Common Mistakes
- Confusing logits with probabilities. Logits are unbounded raw scores — 19.0 is not "1900% sure". Only after softmax do the numbers form a distribution you may read as confidence.
- Reading meaning into hidden neurons. Individual hidden judges rarely correspond to anything a human would name — "loop detector" stories are mostly retrofitted. Only the output layer has assigned meanings.
- Dropping the nonlinearity. Without ReLU between them, two linear layers multiply out to one linear layer — the hidden panels would buy you nothing.
- Treating confidence as accuracy. The Misclassified variant exists precisely because >90% softmax on a wrong answer is not an anomaly; it is what the exponential does to any decisive logit gap, deserved or not.
Keep exploring
A few lessons that share the same technique or lead into the next idea.
Found a mistake or something unclear? Leave feedback.