Muon
One recurring theme in empirical deep learning is that we want to keep intermediate activations at a healthy size – we don’t want them to blow up or vanish.
This principle has inspired a bunch of design choices that are popular in empirical deep learning today – for example initialization schemes (e.g., Xavier and Kaiming He initialization), layer normalization, and gradient clipping.
Muon[1]Muon: An optimizer for hidden layers in neural networks [link]
Keller Jordan, Yuchen Jin, Vlado Boza, Jiacheng You, Franz Cesista, Laker Newhouse, and Jeremy Bernstein. 2024. is inspired by this same idea, applied to optimization. The goal is to keep activations at every layer reasonably sized (we’ll define “reasonably sized” in a moment); these activations should be reasonably sized not just at initialization, but also throughout training.
Natural norms
We first need to define what we mean when we say that an activation vector is “reasonably sized”.
One standard way to measure the size of a vector is the norm: .
However, this norm is dimension-dependent: for example, a vector with all entries has , which grows with dimension.
The natural norm for vectors: RMS norm
The root mean square (RMS) norm fixes this by averaging over entries instead of summing:
Now a vector has regardless of dimension.
Sanity check with a Gaussian random vector
since each has .
Compare with the Euclidean norm:
which grows with dimension.
Intuitively, the RMS norm measures the scale of a typical entry of , rather than accumulating across all entries like the norm does. This makes it the natural norm for dense vectors1: exactly captures “the entries of are -sized”, independent of dimension.
The natural norm for matrices: RMS-to-RMS operator norm
What does it mean for a weight matrix to be “well-behaved”? It should map reasonably-sized inputs to reasonably-sized outputs: if , then we want .
The natural way to measure this is the RMS-to-RMS operator norm – the worst-case RMS stretch:
This is the natural spectral norm. It relates to the standard spectral norm (largest singular value) by a dimensional factor:
Relating RMS-to-RMS and spectral norm
Taking the max over :
The spectral scaling condition
Let’s recall what we’re trying to achieve. We want every layer’s weight matrix to map reasonably-sized inputs to reasonably-sized outputs – that is, . Using the relationship we derived above, this is equivalent to:
We want this to hold not just at initialization, but throughout training. After a weight update , the change in output for input is . By definition of the operator norm:
So if the input is reasonably sized () and we want the output change to also be reasonably sized (), we need , i.e.:
Together, these two requirements form the spectral scaling condition from Yang et al. [2]A spectral condition for feature learning [link]
Greg Yang, James B. Simon, and Jeremy Bernstein. arXiv preprint. 2024.: both the weights and their updates should have RMS-to-RMS operator norm, or equivalently, spectral norm .
Deriving Muon
We’ve established that should have RMS-to-RMS operator norm. That is, for some constant . Since , this is equivalent to where .
Given this budget, we want to decrease the loss as much as possible. To first order, the change in loss is , where is the entrywise inner product between matrices. So we want to solve:
We can write the gradient in its SVD:
with singular values .
Plugging in the SVD, and using linearity of inner product, we get:
Note that only the projection of onto the singular directions appears in the objective – any orthogonal component doesn’t help decrease the loss, but can only increase . Thus, without loss of generality, we can write .
This is an SVD of with singular values , so , and the optimization reduces to:
Since all , the minimum is achieved by setting for all , giving:
This is the Muon update: take the gradient’s SVD, replace all singular values with 1, and then scale by .
Comparison with gradient descent
What if we had constrained the Frobenius norm instead of the spectral norm? That is, what if we solved:
If we treat as a flat vector of entries, the Frobenius norm is just the norm, and this is asking: which direction decreases the loss most per unit step? That’s the definition of the gradient. So the solution is : gradient descent.
So the key difference between gradient descent and Muon stems from the norm constraint. Gradient descent effectively constrains the Frobenius norm, which treats the weight matrix as an unstructured vector of numbers; Muon effectively constrains the spectral norm, which measures how the matrix acts on inputs.
The spectral norm only constrains the largest singular value of – once you’ve spent your budget on the top singular direction, the remaining directions are free. Muon takes advantage of this by stepping equally in every singular direction. Gradient descent can’t do this: under the Frobenius norm, every direction draws from a shared budget (), so stepping more in one direction means stepping less in another. The optimal allocation sets , concentrating on the largest singular directions at the expense of the smaller ones.
Making it practical: Newton-Schulz
The (ideal) Muon update requires computing from the gradient . Computing the full SVD at every step is too expensive. But we don’t need the full SVD – we just need the map .
Turns out there are some algorithms that do exactly this – Newton-Schulz iterations. The algorithm works iteratively: at each step, it applies an operation to the matrix that acts independently on each singular value while preserving the singular vectors, and the operation is chosen so that all singular values converge to 1. In practice, 5-10 iterations suffice, and each iteration is just a few matrix multiplications – fast on GPUs. See these blog posts[3, 1]Deriving Muon [link]
Jeremy Bernstein. 2025.Muon: An optimizer for hidden layers in neural networks [link]
Keller Jordan, Yuchen Jin, Vlado Boza, Jiacheng You, Franz Cesista, Laker Newhouse, and Jeremy Bernstein. 2024. for more details.
The Muon update rule
Putting it all together, the Muon update for a weight matrix is:
Let’s unpack this:
- approximately orthogonalizes the gradient: . This has spectral norm .
- The factor scales the RMS-to-RMS learning rate to the spectral norm budget: recall .
Note that the factor absorbs the layer dimensions into the update, which helps transfer across weight matrices of different shapes and sizes.
References
References are listed in order of citation.
- Muon: An optimizer for hidden layers in neural networks [link]
Keller Jordan, Yuchen Jin, Vlado Boza, Jiacheng You, Franz Cesista, Laker Newhouse, and Jeremy Bernstein. 2024. - A spectral condition for feature learning [link]
Greg Yang, James B. Simon, and Jeremy Bernstein. arXiv preprint. 2024. - Deriving Muon [link]
Jeremy Bernstein. 2025.
Footnotes
-
A dense vector is one where every entry contributes a comparable amount to the squared norm. By contrast, a sparse vector has only a constant number of non-negligible entries, regardless of dimension – e.g., a one-hot encoding vector. For sparse vectors, the ordinary norm is already dimension-independent (e.g., a one-hot vector has , regardless of dimension), so no correction is needed. The RMS norm is the natural norm specifically for dense vectors. Throughout this note we focus on dense vectors, since hidden activations in a transformer can be thought of as dense; the embedding layer (which maps sparse inputs to dense activations) requires separate treatment. ↩