Context. In 2024 the optimizers that beat AdamW per step, such as Shampoo and SOAP, lost on wall-clock because their matrix inverse roots are expensive and need float32. Muon (Jordan et al., 2024) changed this in the NanoGPT speedrun, where only time counts. Bernstein and Newhouse (2024) and Bernstein's Deriving Muon (2025) derive it as steepest descent under a norm, and the Polar Express (Amsel et al., 2025) makes its polynomial iteration optimal. For a hidden weight matrix, Muon keeps the singular vectors of the momentum and discards its singular values, so the update moves every direction by the same amount. That is steepest descent under a rescaled spectral norm, and five matmul-only polynomial steps in bfloat16 get close enough to for under 1% extra FLOPs.
What Muon does. For each 2-D hidden parameter with stochastic gradient , Muon runs momentum and orthogonalizes the buffer: where is five Newton-Schulz steps approximating , the Frobenius-nearest semi-orthogonal matrix to . The reference code uses Nesterov momentum with and multiplies by ; the scale of the buffer is irrelevant because . Transformer updates are nearly low rank, so a raw step is almost entirely along a few top singular directions; orthogonalizing raises the directions with small singular values to the same scale. The order matters: Orthogonal-SGDM, which orthogonalizes each gradient and then averages, lost to tuned SGD-momentum, and the post finds averaging first better. Which parameters get Muon is part of the method. Scalars and vectors go to AdamW, and so do the embedding and the output head although they are 2-D, the embedding for a reason given below, the head on empirical grounds only. Q, K and V work better orthogonalized separately than as one fused matrix.
Why orthogonalize. Optimizers as steepest descent under a norm. Steepest descent under a norm splits into a direction, the dual map , which depends only on the norm, and a length. With the EMAs off, known optimizers become such methods. Adam with is sign descent, the case: the unit ball is a cube, its vertex most aligned with is , and the dual norm is . Shampoo with accumulation off is , the spectral-norm case, by von Neumann's trace bound with equality at : the dual of the spectral norm is the nuclear norm, and attains it. So Muon is momentum followed by accumulation-free Shampoo, at Newton-Schulz cost. It is the constrained form, minimizing over a spectral ball of radius , which gives the fixed-length step ; the penalized form would scale each step by the nuclear norms of the gradients (our comparison of the two sources). For a linear predictor with square loss averaged over outputs and inputs of norm , the spectral norm is also what bounds the loss: the second-order term is at most , because the bound must hold for every input direction.
Which spectral norm: RMS to RMS, and the width factor. Deriving Muon measures a weight change of a dense layer by how far it can move the output. With on both sides, so an RMS-to-RMS ball of radius is a spectral ball of radius , and the dualized update is . When and the gradient has full rank, is an isometry, so every unit-RMS input has its output moved by exactly whatever the width: a fixed learning rate transfers across width, which is what P (the maximal-update parametrization) achieves, here derived from a norm. The reference factor agrees on a up-projection (both give 2) and differs on the down-projection ( against 1); which scales better is not shown. The same logic explains the embedding: it maps one-hot vectors to dense ones and gets the norm, whose dual step normalizes each token's column separately (our derivation), whereas orthogonalization couples the tokens through shared singular vectors.
def newton_schulz5(G, steps=5):
a, b, c = 3.4445, -4.7750, 2.0315
X = G.bfloat16() / (G.norm() + 1e-7) # all singular values now at most 1
if G.size(0) > G.size(1):
X = X.T # use the smaller Gram matrix X X^T
for _ in range(steps):
A = X @ X.T
B = b * A + c * A @ A
X = a * X + B @ X # each singular value s becomes a s + b s^3 + c s^5
if G.size(0) > G.size(1):
X = X.T
return X After five steps every lies in about , where Kovarik's classical cubic needs just to reach 0.68 (our numpy check). Newton-Schulz, unlike Shampoo's coupled Newton iteration, is stable in bfloat16.The optimal coefficients (Polar Express), and why practical Muon is a spectral method. The worst-case spectral error over matrices with singular values in is the scalar error of the composed polynomial. Rescaling the input preserves odd polynomials, so the only state of the iteration is the ratio of the current interval, and choosing each step greedily as the minimax polynomial on that interval (a small Remez solve, done once offline) is worst-case optimal. Each optimal step maps onto a narrower ; Jordan's fixed quintic cannot shrink its own output interval and stalls at an error of about 0.3. With and , near bfloat16 precision, five steps map every singular value in into about , against for Jordan's five steps, and the bfloat16 safety fixes cost about 0.04 of worst-case error relative to pure greedy (our re-implementation). More precision does not help: in the paper's ablations an exact SVD trains no better than five or six steps, and flipping or zeroing the update on singular directions below changes nothing (below , very little). So practical Muon is a spectral method. It keeps the singular vectors exactly and moves the singular values that matter into a band around 1, and the ablations show that this is enough.
The speedrun evidence and the cost. Muon's introduction (record #3) and first improvements (#4) took the speedrun from 31.4 to 22.3 minutes; the post credits it with a 1.35x speedup, and at 1.5B parameters Muon matched tuned AdamW's final loss with 25% fewer tokens. The benchmark makes this credible: Muon costs more per step, so if AdamW could be tuned to Muon's per-token efficiency, putting it back would set a record, and Muon had survived 12 further records by 7 researchers when the post was written. For an matrix with , Newton-Schulz steps cost at most FLOPs against for the layer's forward and backward pass on tokens, so the overhead is at most : the orthogonalization cost is fixed by the shape while the training cost grows with the batch. That is 0.7% at the speedrun's , and 0.5% at Llama-405B's sizes; the state is one momentum buffer, half of Adam's. Polar Express replaced Newton-Schulz in record #38 (2.483 to 2.476 minutes); the README states about 1 s from 10 fewer steps, with a safety factor of 1.02 and a higher Muon learning rate, and says its author could not reproduce gains as large as the paper's (0.05 to 0.06 in GPT-2 validation loss over Jordan's coefficients at 1B tokens, under 0.01 at 10B).
Consequences and limits. Muon splits optimizer design for hidden matrices into a geometric choice, the norm whose dual map is orthogonalization, and a numerical one, an odd polynomial, which Polar Express makes minimax-optimal with one parameter, the assumed smallest singular value . The norm equivalences hold with the EMAs off, so why momentum must come first is left to the next note; the second-order loss bound covers one linear layer; and the speedups are single-setup measurements on small language models.
Terms
- nearest semi-orthogonal matrix to in Frobenius norm
- Muon step
- , ; Nesterov,
- Newton-Schulz step
- , , which maps to
- odd polynomial applied to singular values; sets how fast small ones grow
- Dual norm
- ; , spectral nuclear
- Accumulation-free Shampoo
- : Muon without momentum
- ; bounds the RMS change of a layer's output
- Dualized Muon step
- : RMS output change , independent of width
- the only state of the iteration; greedy steps maximize it
- Overhead
- Newton-Schulz FLOPs over training FLOPs for a layer; 0.7% at the speedrun's sizes
Quiz
- At fixed width, a run halves its batch size in tokens. What happens to Muon's FLOP overhead bound ?The Newton-Schulz cost depends only on the matrix shape, while the layer's forward and backward cost is proportional to the tokens per step. Halving halves the denominator.
- The post keeps both the embedding and the output head on AdamW. What distinguishes the two cases?An embedding multiplies one-hot vectors, so the dense-to-dense geometry behind orthogonalization does not apply, and the norm fits it instead, whose dual step normalizes each token's column separately. The post says the head's preference for AdamW does not follow from the theory and is driven by experiments.
- Muon with an exact SVD polar factor trains no better than with five or six Polar Express steps, which do not converge fully. What explains this, per the ablations?Zeroing or even flipping the update on singular directions below changes nothing and below very little. Five steps with map singular values above close to 1.
- Polar Express improves on Jordan's fixed quintic most in which respect?A fixed aggressive polynomial cannot shrink its own output interval, so Jordan's iteration plateaus near error 0.3. Re-solving the minimax problem on the current interval keeps shrinking it; five steps give about .
Sources
- Keller Jordan et al. Muon: An optimizer for hidden layers in neural networks. Blog post, 2024.
- Jeremy Bernstein and Laker Newhouse. Old Optimizer, New Norm: An Anthology. OPT 2024: Optimization for Machine Learning workshop, 2024.
- Jeremy Bernstein. Deriving Muon. Blog post, 2025.
- Noah Amsel, David Persson, Christopher Musco, and Robert M. Gower. The Polar Express: Optimal Matrix Sign Methods and Their Application to the Muon Algorithm. ICLR, 2026.
- Keller Jordan et al. modded-nanogpt. GitHub repository, 2024.