Paper Breakdowns  /  Muon
Paper 64~11 min read2024worked math + runnable code
Paper Breakdown

Muon,
explained.

Adam has been the default optimizer for a decade, and it treats a weight matrix as a pile of unrelated numbers, tuning each one on its own. Muon takes the opposite view: a layer's weights are a matrix, and its update should be treated as one. It orthogonalizes the update — flattening its singular-value spectrum so every direction gets an equal push — using a trick that needs only matrix multiplies. The payoff is faster, more efficient training, and it helped train some of the largest recent models. Here's the geometry, and the iteration that makes it cheap.

Video breakdown
The animated walkthrough is in production.
Read the full breakdown below in the meantime ↓
01

Adam is element-wise

Adam, and most optimizers before it, are element-wise: they look at each weight independently, keep per-weight running statistics, and scale each weight's step by its own history. It works, but it ignores something real — a layer's weights aren't independent scalars, they form a matrix, and that matrix has geometric structure. Some directions in weight space the gradient has explored a lot; others barely at all.

You can see this structure through the singular values of the update. A momentum matrix with a few large singular values and many tiny ones means the update is dominated by a handful of directions — the step mostly moves along those, and the rest of the space is under-served. Element-wise scaling can't fix this, because the imbalance is a property of the matrix as a whole, not of individual entries. Muon's premise is that treating the update as a matrix, and rebalancing it, uses each step better.

The one-sentence version

Instead of scaling each weight on its own, orthogonalize the whole update matrix so every direction gets an equal-sized step — no direction dominates, none is starved.

02

Orthogonalize the update

Muon's core operation is to orthogonalize the momentum matrix before stepping. Concretely, if the momentum G has singular value decomposition G = U S Vᵀ, the orthogonalized update replaces the diagonal of singular values S with all ones — giving U Vᵀ, the nearest orthogonal matrix to G (its polar factor):

G = U S Vᵀ  →  update = U Vᵀ (every singular value → 1)  ·  then UᵀU = I

Keeping the directions (U, V) but flattening the magnitudes to 1 means the update pushes equally along every direction the gradient identified, instead of letting the largest singular values swamp the rest. Geometrically it's a rotation/reflection — an orthogonal transform — so it never inflates or collapses the update's scale, only re-balances it. The runnable version below shows a skewed spectrum (ratio 3:1) flattened to 1:1.

03

Newton-Schulz, no SVD

There's a problem: computing an SVD every optimizer step, for every weight matrix, is far too expensive — SVD is slow and awkward on accelerators. Muon sidesteps it entirely with Newton-Schulz iteration, which approximates the orthogonalization using only matrix multiplications. A short polynomial recurrence, applied a handful of times, drives the matrix's singular values toward 1 without ever forming an SVD:

X ← 1.5·X − 0.5·X·Xᵀ·X   (repeat a few times)

Each singular value σ gets mapped by the scalar function 1.5σ − 0.5σ³, which has a stable fixed point at σ = 1 — so iterating pulls every singular value to 1 while leaving the directions untouched. Because it's just matmuls (with the matrix pre-scaled so the singular values start in the convergence range), it runs fast on GPUs and TPUs, cheap enough to do every step. That's the engineering that makes an idea from numerical linear algebra practical for training billion-parameter models.

04

Muon + Adam

Muon's orthogonalization only makes sense for things that are matrices — the hidden linear layers, which are the vast majority of a transformer's parameters. Other parameters have no matrix structure to orthogonalize:

Which optimizer for which parameter
Muon2D weight matrices (attention & MLP linears) — orthogonalize the momentum.
Adam1D parameters — embeddings, biases, norm gains — element-wise as usual.
Why splitOrthogonalization needs a matrix; 1D params don't have one, so Adam is the right tool.

So a Muon setup is really a hybrid: Muon for the matrices, Adam for the rest. Since the matrices dominate the parameter count, Muon governs most of the training dynamics while Adam handles the odds and ends it isn't suited to. It's a clean division of labor along the shape of each parameter.

RUN IT YOURSELF

Flatten the singular-value spectrum

Muon's heart is orthogonalization, and Newton-Schulz does it per singular value with the map 1.5σ − 0.5σ³. This confirms an orthogonal (rotation) matrix satisfies RᵀR = I, that one Newton-Schulz step moves a small singular value (0.5 → 0.6875) toward 1, that iterating converges any singular value in range to 1, and — the point — that a skewed spectrum with a 3:1 ratio between its largest and smallest singular value comes out 1:1 after orthogonalization. That equalization is what makes the update push equally in all directions. Change the singular values and watch them converge.

CPython · WebAssembly
05

Why it helps

Muon's practical case is efficiency: it reaches a given loss in fewer steps or less compute than Adam on the matrix parameters, and it scales:

PropertyEffect
Better step utilizationEqual push in all directions means the update isn't wasted moving mostly along a few dominant ones.
Compute-efficientReported to reach target loss with meaningfully less training compute than Adam in several settings.
Cheap per stepNewton-Schulz is a few matmuls — small overhead next to the layer's own math.
Scales to large modelsWith stabilizations (e.g. MuonClip), it was used to train very large models like Kimi K2 without loss spikes.

The scaling result is notable because new optimizers often work at small scale and fall apart at large. Muon's adoption in a trillion-parameter training run — paired with clipping tricks to keep it stable — is real evidence that treating updates as matrices, not scalar bags, holds up where it matters.

06

Its place

Muon is part of a renewed interest in optimizers that respect a network's structure rather than treating parameters as an undifferentiated vector. The line of thought — Shampoo and other matrix/second-order-flavored methods, and now Muon — asks whether the geometry of weight matrices should shape the update, and answers yes, if you can compute it cheaply enough. Newton-Schulz is what made "cheaply enough" true for orthogonalization.

Its broader lesson echoes Adam's: a well-chosen transformation of the raw gradient can matter as much as the gradient itself. Adam's was per-parameter normalization; Muon's is per-matrix orthogonalization. Both take the noisy, imbalanced signal that backprop produces and reshape it into something the model can step along more effectively — a reminder that how you use the gradient is a frontier as live as what the gradient is.

Worth knowing

MuonClip, the variant used at scale, adds a clipping step (on the attention logits, via QK-clip) to prevent the rare instabilities that can arise when orthogonalized updates meet very large activations — the stability patch that let Muon run a trillion-parameter model spike-free.

Frequently asked

Quick answers

What does Muon do?

Orthogonalizes a weight matrix's momentum update — pushing every singular value to 1 — so the step moves equally in all directions instead of a few dominant ones.

Muon vs Adam?

Adam scales each weight element-wise; Muon treats the update as a matrix and orthogonalizes it. Muon is for 2D matrices; Adam handles 1D params.

What is Newton-Schulz for?

It approximates the orthogonalization with only matrix multiplications (no SVD), driving singular values to 1 in a few cheap iterations per step.

Does it scale?

Yes — with stabilizations like MuonClip it trained very large models (e.g. Kimi K2) efficiently and without loss spikes.

Muon: An Optimizer for the Hidden Layers of Neural Networks · Jordan, Jin, Boza, You, Cesista, Newhouse, Bernstein · 2024 · read a scaling study on arXiv → · Vibe Engines · 2026
Finished this one? 0 / 101 Paper Breakdowns done

Explore the topic

See this alongside everything else on the same subject — handbooks, system designs, challenges and tools, in one place.

More Paper Breakdowns