Spot the error in this description of pre-norm placement and the final norm
Click any words you think contain an error. Click again to unmark.
Pre-norm normalizes the sublayer's INPUT and bypasses the residual; the un-normalized stream needs a single final norm before the LM head. The text inverts both facts.
Think of the residual stream as a conveyor belt. Pre-norm sets up each work station so the worker picks up a snapshot of the belt, cleans the snapshot, processes it, and drops the result back on the belt. The belt itself is never cleaned along the way; only the snapshots are. By the end of the line, the belt has accumulated lots of dust and you need one big cleaning station before packaging. Post-norm would clean the whole belt at every station. The text in the question gets pre-norm and post-norm backwards and then also concludes that no final cleaning is needed, which only follows from the wrong setup.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Pre-norm placement is the kind of detail that separates candidates who copy-pasted a block diagram from candidates who can trace activations through the architecture. The question's two-sentence description gets both the norm placement and the final-norm conclusion wrong; the inversion is consistent (it really is describing post-norm by accident) but it produces an incorrect architectural claim about the absence of a final norm.
Knowing this inversion cold matters because every frontier decoder LLM in 2026 follows the pre-norm template, and the final norm is a one-line element of the model definition that depends entirely on this placement choice.
What pre-norm actually means
Pre-norm names a specific placement of the LayerNorm or RMSNorm inside a transformer block. The full equation, for a block with attention sublayer attn and FFN sublayer ffn, is:
h = x + attn(norm_1(x))
y = h + ffn(norm_2(h))
For each sublayer, the norm is applied to the INPUT of the sublayer. The residual stream (x for the first sublayer, h for the second) flows around the norm and is added to the sublayer's output un-normalized.
The key consequence is that the residual stream itself is never normalized inside the block. Whatever scale the stream has when it enters the block, it carries forward (plus the sublayer contributions) into the next block. Across L blocks, the residual stream accumulates additive updates without any in-block normalization.
Contrast with post-norm:
h = norm_1(x + attn(x))
y = norm_2(h + ffn(h))
Here the norm is on top of the residual add. The residual stream is renormalized at every block. By the time you reach the last block's output, the activations are already in a controlled scale.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
Real products, models, and research that use this idea.
- Llama 3 model definition (Meta, 2024): each block has `RMSNorm` on attention and FFN inputs, plus a top-level `self.norm = RMSNorm(d_model)` right before the LM head.
- Mistral 7B (2023): identical pre-norm + final RMSNorm template, inherited from Llama-class design.
What an interviewer would ask next. Try answering before peeking at the approach.
QWhat happens if you remove Llama's final RMSNorm and retrain?
The LM head's weights have to absorb the depth-dependent scale of the un-normalized residual stream. Training is slower and less stable; final-eval logits sit in a less convenient regime for softmax. The model can converge but you have moved a structural normalization into the optimizer's job.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Memorizing 'pre-norm normalizes before residual add' loosely. Be precise: pre-norm normalizes the sublayer's INPUT, the residual `+` operates on the un-normalized stream.
60 second bullets to scan on the way to the call.
Write the pre-norm equation:
y = x + sublayer(norm(x))Write the post-norm equation:
y = norm(x + sublayer(x))
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.