SVD and the Pseudoinverse
Imagine you are handed a machine G that takes a model
m — a subsurface density, a blurred-away image, a hidden temperature
field — and produces data d = Gm. You only get to see
d. Your job is to run the machine backwards and recover
m. Sometimes this is easy; sometimes it is a catastrophe where a
whisper of measurement noise erupts into a reconstruction that looks like television static. What
decides which? The answer is hidden inside a single factorization, and once you see it, the whole
subject of inverse problems snaps into focus.
That factorization is the
singular value decomposition,
the master tool of inverse theory. It is a kind of X-ray: it looks straight through the operator
and shows you, direction by direction, exactly how much G stretches or
squashes the world — and therefore exactly where and why your reconstruction will break. Every
forward operator factors as
G = U\Sigma V^{\mathsf T} = \sum_{i} \sigma_i\, u_i v_i^{\mathsf T},
with orthonormal model directions v_i, orthonormal data directions
u_i, and singular values
\sigma_1 \ge \sigma_2 \ge \dots \ge 0. Read it as a three-step recipe:
the map takes each model direction v_i, stretches it by
the number \sigma_i, and lands it on data direction
u_i. Nothing more complicated is going on — every linear operator, no
matter how tangled it looks, is secretly just "rotate, stretch along axes, rotate again."
The pseudoinverse just divides by σ
If the forward map stretches by \sigma_i, then undoing it must
divide by \sigma_i. Reverse the three steps — rotate back with
U^{\mathsf T}, divide by each singular value, rotate into model space
with V — and you have the pseudoinverse:
G^{+} = V\Sigma^{+}U^{\mathsf T} = \sum_{\sigma_i > 0} \frac{1}{\sigma_i}\, v_i u_i^{\mathsf T}, \qquad \hat m = G^{+}d = \sum_{\sigma_i>0}\frac{u_i^{\mathsf T}d}{\sigma_i}\,v_i.
Inverting the diagonal matrix \Sigma means the almost-too-simple rule
\sigma_i \mapsto 1/\sigma_i — with the one careful exception that a
zero stays zero (you cannot divide by nothing, so those directions are simply left
out). This one formula explains everything ahead:
-
Directions with zero singular values are dropped — they are the model
null space, invisible to the data. The forward map flattened them to nothing, so
the data carries no memory of them, and no honest inverse can conjure them back. This is the root
of non-uniqueness.
-
Directions with a tiny singular value get divided by a tiny number, so the term
(u_i^{\mathsf T}d)/\sigma_i explodes. Any noise in
d that happens to point along u_i is
magnified by the huge factor 1/\sigma_i. This is the engine of
instability.
Hold onto that second bullet — it is the whole reason ill-posed problems are hard, and taming those
1/\sigma_i factors is precisely what regularization does.
Worked example: build a pseudoinverse by hand
Take a deliberately simple operator whose SVD is already staring at you — a diagonal matrix, so
U = V = I and the diagonal entries are the singular values:
G = \begin{pmatrix} 4 & 0 \\ 0 & 0.5 \end{pmatrix}, \qquad \sigma_1 = 4,\ \sigma_2 = 0.5.
The pseudoinverse just flips each singular value to its reciprocal,
\sigma_i \mapsto 1/\sigma_i:
G^{+} = \begin{pmatrix} 1/4 & 0 \\ 0 & 1/0.5 \end{pmatrix} = \begin{pmatrix} 0.25 & 0 \\ 0 & 2 \end{pmatrix}.
Notice the asymmetry already: the strong direction (\sigma_1 = 4) shrinks
gently to 0.25, while the weak direction
(\sigma_2 = 0.5) gets amplified to 2.
Small singular value, large reciprocal — every time.
Worked example: watch a small σ turn into a big 1/σ
Now let the second singular value keep shrinking and tabulate what the pseudoinverse does with it:
\begin{array}{c|c}
\sigma_2 & 1/\sigma_2 \\ \hline
0.5 & 2 \\
0.1 & 10 \\
0.01 & 100 \\
0.001 & 1000
\end{array}
Suppose your data has a modest 1\% of noise sitting along
u_2. When \sigma_2 = 0.001, that
0.01 of noise becomes
0.01 \times 1000 = 10 in the recovered model — a tiny wobble in the data
becomes an enormous spike in the answer. The forward map whispered along that direction
(multiplying by 0.001); the pseudoinverse screams back along it
(multiplying by 1000). Drag \sigma_2 toward
zero in the figure below and watch 1/\sigma_2 run away.
When a singular value shrinks
The forward map sends the unit circle to an ellipse with semi-axes
\sigma_1, \sigma_2. Shrink \sigma_2 toward
zero and the ellipse collapses to a sliver — that model direction barely registers in the data.
Watch the readout: as \sigma_2 \to 0, the inverse factor
1/\sigma_2 blows up. Recovering that direction means dividing the data
(noise and all) by something tiny.
- G = U\Sigma V^{\mathsf T}; G^{+} = V\Sigma^{+}U^{\mathsf T} with \sigma_i \mapsto 1/\sigma_i (and 0 \mapsto 0).
- Zero singular values → model null space → non-uniqueness.
- Tiny singular values → factor 1/\sigma_i amplifies noise → instability.
Effective rank: how many σ actually matter
In exact arithmetic a matrix either has a singular value equal to zero or it does not. In the real
world of noisy data, that clean distinction dissolves. What matters instead is the
effective rank: how many singular values are large enough to rise above the
noise. Line the singular values up in decreasing order and you typically see them plunge —
10,\ 6,\ 3,\ 0.8,\ 0.05,\ 0.002,\ \dots The first few carry genuine,
recoverable information. The tail, buried under the noise level, carries nothing you can trust; the
pseudoinverse's 1/\sigma_i would only turn them into amplified garbage.
So the SVD hands you not just a formula but a diagnosis: count the singular values above
the noise floor and you know how many independent things your experiment can actually resolve —
before you spend a single hour on reconstruction. Deciding exactly where the trustworthy singular
values end and the noise-dominated ones begin is the whole story of the Picard condition and
truncated methods coming up next.
The pseudoinverse formula G^{+} = V\Sigma^{+}U^{\mathsf T} is
mathematically flawless — and that is exactly the trap. It faithfully inverts
every singular direction, including the ones with vanishingly small
\sigma_i that are dominated by noise. People sometimes assume "the
pseudoinverse is the best possible inverse, so it must give the best possible answer." Not for an
ill-posed problem. Because it dutifully divides the noisy tail by tiny numbers, the plain
pseudoinverse produces a wildly amplified, useless reconstruction — its very faithfulness is what
dooms it.
The fix is not a better inverse formula; it is to deliberately refuse to
invert the untrustworthy directions — either by dropping the small-\sigma
terms entirely (the
truncated SVD)
or by softly damping them (
Tikhonov regularization).
That is what regularization is: a principled way of handling the
1/\sigma_i factors that the raw pseudoinverse handles recklessly.
Ask a numerical analyst for their desert-island matrix factorization and a great many will say the
SVD. The same three-line idea you just used to build a pseudoinverse is the beating heart of an
astonishing range of technology:
-
Image compression — keep only the largest few singular values of an image matrix
and you throw away most of the storage while the picture still looks fine (the small
\sigma's were the least important detail).
-
Principal component analysis — the directions of largest variance in a dataset
are exactly its top singular vectors.
-
The original Netflix Prize recommender — factoring the giant
users-by-movies rating matrix with an SVD-style low-rank model was the backbone of the winning
approaches.
-
Google's early PageRank and countless other ranking and latent-semantic methods
lean on the same spectral machinery.
In inverse problems the SVD plays a slightly different role: it is the X-ray that shows you, in
advance and in precise detail, where and why your reconstruction is going to
break. Same decomposition, a hundred different superpowers.