MZ
The Null Hypothesis
← Back to articles

Linear Algebra

A Deep Reading of SVD

From matrix composition to geometry, proof, low-rank structure, and PCA.

Keywords: singular value decomposition · SVD · linear algebra · low-rank approximation · PCA · matrix factorization

A matrix is factored into singular vectors and values, alongside its transformation of a unit circle into an ellipse.
In this essay

The Summit

Talking about SVD in linear algebra can feel like jumping straight to the top of a mountain. Why begin at the highest point of the theory before we know the path that leads there?

Do not worry. We are not going to memorize the summit or disappear into a maze of proofs. We will stand there for a moment, then take it apart until we can see what the mountain is made of.

From to

Since the story is about decomposition, begin in the opposite direction: composition.

Put three in front of us, AA, BB, and CC. Their dimensions fit, so we can connect them:

W=ABC.W=ABC.

That is composition in its simplest form: we know the pieces, we combine them, and a new object appears. If a xx enters the chain, the action begins on the right:

Wx=ABCx=A(B(Cx)),Wx=ABCx=A(B(Cx)),

so

x→CCx→BBCx→AABCx.x\xrightarrow{C}Cx\xrightarrow{B}BCx\xrightarrow{A}ABCx.

Take a small numerical example:

A=[1201],B=[20012],C=[0−110].A= \begin{bmatrix} 1&2\\ 0&1 \end{bmatrix}, \qquad B= \begin{bmatrix} 2&0\\ 0&\tfrac12 \end{bmatrix}, \qquad C= \begin{bmatrix} 0&-1\\ 1&0 \end{bmatrix}.

Together they become

W=ABC=[1−2120].W=ABC= \begin{bmatrix} 1&-2\\ \tfrac12&0 \end{bmatrix}.
Transformation chainx → Cx → BCx → ABCx
x₁x₂(1, 1)
Current vector · Input[1, 1]

Figure 1: Matrix Composition as Sequential Transformations. The product ABC acts on x from right to left: C transforms the input first, followed by B and A.

Composition in Python

python

This is the forward direction: known pieces produce a final matrix.

Here you can touch composition instead of merely reading its definition. Change xx, press the matrices, and watch the vector move through CC, then BB, then AA.

Now reverse the question.

Instead of giving you the pieces, I place one matrix DD in front of you. We can inspect its rows and columns, calculate its , and measure everything visible from the outside. Then I say: open it. Show me the structure hiding inside.

Without a method, we could guess until the stars burn out. That is precisely why linear algebra developed decompositions: we do not want arbitrary factors; we want pieces with structure and jobs we can name.

The pieces may be , as in LU; directions plus triangular coefficients, as in QR; or one triangular factor mirrored by its , as in Cholesky. Sometimes we change the viewpoint itself, as in spectral decomposition and Schur. Sometimes we separate rotation from stretching, as in the polar decomposition. Then we reach SVD, which takes the stage from here.

The Decomposition Atlas

There are many names, but one instinct connects them: do not fight the matrix in the form in which it arrived. Find a representation in which each piece has a clear job.

In the interactive atlas below, choose LU, QR, Cholesky, Spectral, or SVD. Open the factors, then rebuild the original matrix. Do not memorize five formulas; watch the same move repeat.

LU turns Gaussian elimination into reusable matrix factors.

Original matrix
43
63
10
1.51
43
0-1.5
Factor role · L

Lower triangular: it stores the elimination multipliers.

Figure 2: Matrix Factorization Methods. Five factorizations represent the same matrix through different structures, with each set of factors providing a route to reconstruct A.

A Small Decomposition Atlas in Python

python

With SciPy:

python

From here, SVD no longer feels like a jump into a different chapter. It is simply the decomposition we are about to examine more closely than the others.


The Essence, Nothing More

For any real matrix

A∈Rm×n,A\in\mathbb R^{m\times n},

we can write

A=UΣVT.\boxed{A=U\Sigma V^T}.

In the full picture, UU is an m×mm\times m matrix, VV is an n×nn\times n orthogonal matrix, and Σ\Sigma is an m×nm\times n matrix.

On the diagonal of Σ\Sigma sit the :

σ1≥σ2≥⋯≥0.\sigma_1\ge\sigma_2\ge\cdots\ge0.

The columns of VV are the right singular vectors; the columns of UU are the left singular vectors. For complex matrices, TT is replaced by the ∗^*.

Input vector

Current vector · Input x(1, 0.25)

Choose a vector to transform.

Figure 3: Vector Transformation under the SVD. The factorization separates a vector transformation into an orthogonal change of coordinates by Vᵀ, scaling by Σ, and reorientation by U.

That is the formula. The meaning appears when each factor gets a job.

Compute and Check an SVD

python

For a rectangular matrix, use

python

for the compact/economy form when that is all you need.


The Story Begins on the Right

Feed in a vector xx:

Ax=UΣVTx.Ax=U\Sigma V^Tx.

Begin with VTV^T. It asks how much of xx lies along each special direction viv_i. If

V=[v1 v2 ⋯ vn],V=[v_1\ v_2\ \cdots\ v_n],

then

VTx=[v1Txv2Tx⋮].V^Tx= \begin{bmatrix} v_1^Tx\\ v_2^Tx\\ \vdots \end{bmatrix}.

So VTV^T rewrites the input in coordinates designed specifically for this matrix.

Then Σ\Sigma acts. Nothing complicated is mixed together anymore; each coordinate is multiplied by one number:

Σ[a1a2⋮]=[σ1a1σ2a2⋮].\Sigma \begin{bmatrix} a_1\\a_2\\\vdots \end{bmatrix} = \begin{bmatrix} \sigma_1a_1\\ \sigma_2a_2\\ \vdots \end{bmatrix}.

This is the quiet center of SVD: in the right coordinates, a complicated transformation becomes independent stretching or shrinking along separate axes.

Finally, UU places those scaled components into their output directions.

Remember the story rather than the letters:

Vᵀ: analyze the input → Σ: stretch or shrink → U: orient the output

And one equation carries the whole idea:

Avi=σiui.\boxed{Av_i=\sigma_i u_i.}

Send in the special direction viv_i, and AA sends it out along uiu_i, scaled by σi\sigma_i.


The Secret Behind the Beauty

language is naturally square:

Av=λvAv=\lambda v

requires AvAv and vv to live in the same vector space.

If A:Rn→RmA:\mathbb R^n\rightarrow\mathbb R^m with m≠nm\neq n, that is not true in general.

SVD avoids the problem by using two different orthonormal coordinate systems:

Here VV belongs to the input space Rn\mathbb R^n, while UU belongs to the output space Rm\mathbb R^m.

The viv_i lives where the input lives.

The uiu_i lives where the output lives.

They are connected by the equation

Avi=σiui.\boxed{Av_i=\sigma_i u_i.}

This equation is the heart of SVD.

Read it literally:

Feed the special input direction viv_i into AA. The matrix does not throw it into some arbitrary mess. It sends it exactly into the special output direction uiu_i, scaled by σi\sigma_i.

There is a companion equation

ATui=σivi\boxed{A^Tu_i=\sigma_i v_i}

for real matrices, or

A∗ui=σiviA^*u_i=\sigma_i v_i

for complex matrices.


When the Circle Changes Shape

Take the unit sphere in the input space.

The first orthogonal factor VTV^T cannot deform it; rotations and reflections preserve a sphere.

Then Σ\Sigma stretches the sphere by different amounts along orthogonal axes. The sphere becomes an ellipsoid.

Finally UU rotates or reflects that ellipsoid into its final orientation in the output space.

The lengths of the principal semiaxes of the ellipsoid are the singular values.

That is why a large σi\sigma_i means that the corresponding direction has a strong effect, while a tiny σi\sigma_i means that direction barely survives the transformation.

The companion code can still generate static checkpoints of these stages, but the interactive version is more faithful to the idea: move through the stages and watch the same object change rather than comparing four disconnected pictures.

x₁x₂

Unit circleEvery direction starts with the same unit length.

Figure 4: Geometric Action of the SVD. Vᵀ re-expresses the unit circle in a new orthogonal basis, Σ stretches it into an ellipse, and U sets its final orientation; the singular values determine the axis lengths.

Let the Geometry Move

python

For teaching, it is even better to plot circle, after_vt, after_sigma, and after_u in separate figures so that the transformation can be watched one stage at a time.


Where Do These Pieces Come From?

The formula is beautiful, but we should not accept mysterious matrices that appear from smoke.

The first doorway is

ATA.A^TA.

For any real AA, the matrix ATAA^TA is square and symmetric:

(ATA)T=ATA.(A^TA)^T=A^TA.

It is also positive semidefinite because for every vector xx,

xTATAx=(Ax)T(Ax)=∥Ax∥2≥0.x^TA^TAx=(Ax)^T(Ax)=\|Ax\|^2\ge0.

Therefore its eigenvalues are real and nonnegative, and it has an orthonormal eigen.

Suppose

A=UΣVT.A=U\Sigma V^T.

Then

ATA=(UΣVT)T(UΣVT).A^TA =(U\Sigma V^T)^T(U\Sigma V^T).

So

ATA=VΣTUTUΣVT.A^TA =V\Sigma^T U^TU\Sigma V^T.

Since UTU=IU^TU=I,

ATA=V(ΣTΣ)VT.\boxed{ A^TA=V(\Sigma^T\Sigma)V^T. }

But ΣTΣ\Sigma^T\Sigma is diagonal, with entries

σ12,σ22,….\sigma_1^2,\sigma_2^2,\ldots.

Therefore:

eigenvectors of ATA=right singular vectors of A\boxed{ \text{eigenvectors of }A^TA =\text{right singular vectors of }A }

and

λi(ATA)=σi2.\boxed{ \lambda_i(A^TA)=\sigma_i^2. }

So

σi=λi(ATA).\boxed{ \sigma_i=\sqrt{\lambda_i(A^TA)}. }

Similarly,

AAT=U(ΣΣT)UT,AA^T=U(\Sigma\Sigma^T)U^T,

so the left singular vectors are of AATAA^T.

This is the computational bridge that makes SVD feel less magical.


First Clue: ATAA^TA

For a real matrix, an educational construction is easier to remember as a journey than as a recipe list. Begin with ATAA^TA. Its orthonormal eigenvectors give the directions viv_i, and its nonnegative eigenvalues λi\lambda_i reveal the scales through

σi=λi.\sigma_i=\sqrt{\lambda_i}.

Whenever σi≠0\sigma_i\neq0, send viv_i through AA and normalize the result:

ui=Aviσi.u_i=\frac{Av_i}{\sigma_i}.

So the three parts are not pulled from a hat: ATAA^TA chooses the important input directions, the eigenvalues determine how strongly they are stretched, and AA itself shows us where those directions land. Then Avi=σiuiAv_i=\sigma_i u_i.

Why are the uiu_i unit vectors?

∥ui∥2=∥Avi∥2σi2=viTATAviσi2=viT(σi2vi)σi2=1.\|u_i\|^2 = \frac{\|Av_i\|^2}{\sigma_i^2} = \frac{v_i^TA^TAv_i}{\sigma_i^2} = \frac{v_i^T(\sigma_i^2v_i)}{\sigma_i^2} =1.

Why are different uiu_i perpendicular?

For i≠ji\neq j,

uiTuj=viTATAvjσiσj=viT(σj2vj)σiσj=0,u_i^Tu_j = \frac{v_i^TA^TAv_j}{\sigma_i\sigma_j} = \frac{v_i^T(\sigma_j^2v_j)}{\sigma_i\sigma_j} =0,

because vi⊥vjv_i\perp v_j.

So the nonzero singular directions already give orthonormal columns in both spaces.

This route is extremely useful for understanding and for hand calculations.

For the full existence proof, we now use the block construction from the study notes. It looks like a trick at first; in a moment, it will feel inevitable.

Build SVD from ATAA^TA

This is useful for understanding the theory. For numerical production work, prefer np.linalg.svd.

python

The Existence Proof

What Are We Actually Trying to Prove?

Let

A∈Cm×nA\in\mathbb C^{m\times n}

have rank

r=rank⁡(A).r=\operatorname{rank}(A).

We want to prove the existence of a condensed SVD

A=XΣrY∗,\boxed{A=X\Sigma_rY^*},

where

X∈Cm×r,Y∈Cn×r,X\in\mathbb C^{m\times r}, \qquad Y\in\mathbb C^{n\times r},

have orthonormal columns,

X∗X=Ir,Y∗Y=Ir,X^*X=I_r, \qquad Y^*Y=I_r,

and

Σr=diag⁡(σ1,…,σr),σ1≥⋯≥σr>0.\Sigma_r= \operatorname{diag}(\sigma_1,\ldots,\sigma_r), \qquad \sigma_1\ge\cdots\ge\sigma_r>0.

For real matrices, replace ∗^* with T^T.

The proof has one main trick:

turn a rectangular-matrix problem into a Hermitian eigenvalue problem.

The Tool Behind the Door

A matrix WW is Hermitian if

W=W∗.W=W^*.

The says that a Hermitian matrix has an orthonormal basis of eigenvectors and real eigenvalues. Equivalently,

W=ZΛZ∗,W=Z\Lambda Z^*,

where ZZ is and Λ\Lambda is real diagonal.

This theorem is the engine of the proof.

But AA may be rectangular, so AA itself may not even possess an ordinary eigendecomposition.

We need to build a square Hermitian matrix from it.


The Trick That Opens the Door

Define

W=[0AA∗0].\boxed{ W= \begin{bmatrix} 0&A\\ A^*&0 \end{bmatrix}. }
A∈Cm×nA \in \mathbb{C}^{m \times n}

A may be rectangular, so direct eigendecomposition is not available.

Figure 5: Existence of the Singular Value Decomposition. A rectangular matrix is embedded in a larger Hermitian matrix; the spectral theorem then yields the orthogonal singular-vector pairs that form its SVD.

Check the Block-Matrix Proof Numerically

python

This numerical experiment displays exactly what the proof predicts:

spec⁡(W)={−σi,0,+σi}.\operatorname{spec}(W) = \{-\sigma_i,0,+\sigma_i\}.

The upper-left zero block is m×mm\times m.

The lower-right zero block is n×nn\times n.

Therefore

W∈C(m+n)×(m+n),W\in\mathbb C^{(m+n)\times(m+n)},

so WW is square.

Now take the conjugate transpose:

W∗=[0AA∗0]∗=[0AA∗0]=W.W^* = \begin{bmatrix} 0&A\\ A^*&0 \end{bmatrix}^* = \begin{bmatrix} 0&A\\ A^*&0 \end{bmatrix} =W.

Thus

W=W∗.\boxed{W=W^*.}

So WW is Hermitian, and the spectral theorem applies.

That single construction is the door through which the SVD enters.


Split the Hidden Vector

Take an eigenvector zz of WW with eigenvalue σ\sigma:

Wz=σz.Wz=\sigma z.

Because z∈Cm+nz\in\mathbb C^{m+n}, write it in two blocks:

z=[xy],\boxed{ z= \begin{bmatrix} x\\y \end{bmatrix}},

with

x∈Cm,y∈Cn.x\in\mathbb C^m, \qquad y\in\mathbb C^n.

Substitute:

[0AA∗0][xy]=σ[xy].\begin{bmatrix} 0&A\\ A^*&0 \end{bmatrix} \begin{bmatrix} x\\y \end{bmatrix} = \sigma \begin{bmatrix} x\\y \end{bmatrix}.

Block multiplication gives

[AyA∗x]=[σxσy].\begin{bmatrix} Ay\\ A^*x \end{bmatrix} = \begin{bmatrix} \sigma x\\ \sigma y \end{bmatrix}.

Therefore

Ay=σx\boxed{Ay=\sigma x}

and

A∗x=σy.\boxed{A^*x=\sigma y.}

Stop here for a moment.

This is already the SVD relationship.

Compare

Ay=σxAy=\sigma x

with

Avi=σiui.Av_i=\sigma_i u_i.

So the upper block xx behaves like a left singular vector, the lower block yy behaves like a right singular vector, and the eigenvalue σ\sigma behaves like a singular value.

The singular structure of AA was hiding inside the eigenstructure of WW.


Why the Values Come in Pairs

Suppose

[xy]\begin{bmatrix}x\\y\end{bmatrix}

has eigenvalue +σ+\sigma. Then

Ay=σx,A∗x=σy.Ay=\sigma x, \qquad A^*x=\sigma y.

Now consider

[x−y].\begin{bmatrix}x\\-y\end{bmatrix}.

Applying WW,

W[x−y]=[−AyA∗x]=[−σxσy]=−σ[x−y].W \begin{bmatrix}x\\-y\end{bmatrix} = \begin{bmatrix}-Ay\\A^*x\end{bmatrix} = \begin{bmatrix}-\sigma x\\\sigma y\end{bmatrix} = -\sigma \begin{bmatrix}x\\-y\end{bmatrix}.

Hence

σ eigenvalue⟹−σ eigenvalue.\boxed{ \sigma\text{ eigenvalue} \quad\Longrightarrow\quad -\sigma\text{ eigenvalue}. }

The nonzero eigenvalues of WW therefore occur in opposite pairs.

If r=rank⁡(A)r=\operatorname{rank}(A), the nonzero part is organized as

σ1,…,σr,−σ1,…,−σr.\sigma_1,\ldots,\sigma_r, -\sigma_1,\ldots,-\sigma_r.

The remaining eigenvalues are zero.


Give the Pieces Unit Length

For a positive eigenvalue σ\sigma, use the pair

z+=[xy],z−=[x−y].z_+=\begin{bmatrix}x\\y\end{bmatrix}, \qquad z_-=\begin{bmatrix}x\\-y\end{bmatrix}.

Because WW is Hermitian and +σ≠−σ+\sigma\neq-\sigma when σ>0\sigma>0, the eigenvectors belonging to those distinct eigenvalues are orthogonal:

z+∗z−=0.z_+^*z_-=0.

Expanding,

x∗x−y∗y=0.x^*x-y^*y=0.

So

∥x∥2=∥y∥2.\|x\|^2=\|y\|^2.

Choose the block vector so that

∥z+∥2=2.\|z_+\|^2=2.

Then

∥x∥2+∥y∥2=2.\|x\|^2+\|y\|^2=2.

Together with equality of the two norms,

∥x∥=∥y∥=1.\boxed{\|x\|=\|y\|=1.}

So each candidate singular vector has unit length.


Collect the Pieces

For the positive values

σ1≥⋯≥σr>0,\sigma_1\ge\cdots\ge\sigma_r>0,

obtain vectors

x1,…,xrx_1,\ldots,x_r

and

y1,…,yry_1,\ldots,y_r

such that

Ayi=σixi,A∗xi=σiyi.Ay_i=\sigma_i x_i, \qquad A^*x_i=\sigma_i y_i.

Define

X=[x1 ⋯ xr],X=[x_1\ \cdots\ x_r],
Y=[y1 ⋯ yr],Y=[y_1\ \cdots\ y_r],

and

Σr=diag⁡(σ1,…,σr).\Sigma_r=\operatorname{diag}(\sigma_1,\ldots,\sigma_r).

The associated normalized eigenvectors of WW can be arranged as

Z~=12[XXY−Y],\widetilde Z = \frac1{\sqrt2} \begin{bmatrix} X&X\\ Y&-Y \end{bmatrix},

and their eigenvalues as

Λ~=[Σr00−Σr].\widetilde\Lambda = \begin{bmatrix} \Sigma_r&0\\ 0&-\Sigma_r \end{bmatrix}.

The zero-eigenvalue eigenvectors do not contribute to W=ZΛZ∗W=Z\Lambda Z^*, because their entries in Λ\Lambda are zero.

Therefore the nonzero part alone gives

W=Z~Λ~Z~∗.W=\widetilde Z\widetilde\Lambda\widetilde Z^*.

Put the Matrix Back Together

Substitute the block matrices:

W=12[XXY−Y][Σr00−Σr][X∗Y∗X∗−Y∗].W = \frac12 \begin{bmatrix} X&X\\ Y&-Y \end{bmatrix} \begin{bmatrix} \Sigma_r&0\\ 0&-\Sigma_r \end{bmatrix} \begin{bmatrix} X^*&Y^*\\ X^*&-Y^* \end{bmatrix}.

The first two factors give

[XΣr−XΣrYΣrYΣr].\begin{bmatrix} X\Sigma_r&-X\Sigma_r\\ Y\Sigma_r&Y\Sigma_r \end{bmatrix}.

Multiplying the final block matrix gives

W=[0XΣrY∗YΣrX∗0].W = \begin{bmatrix} 0&X\Sigma_rY^*\\ Y\Sigma_rX^*&0 \end{bmatrix}.

But by definition

W=[0AA∗0].W= \begin{bmatrix} 0&A\\ A^*&0 \end{bmatrix}.

Corresponding blocks must be equal. Hence

A=XΣrY∗.\boxed{A=X\Sigma_rY^*.}

We have recovered the formula.


Why the Directions Stay Clean

Unit length has already been established.

We still need different columns to be perpendicular.

For two indices i≠ji\neq j, choose the positive-eigenvalue block vectors orthogonally:

[xiyi]∗[xjyj]=0.\begin{bmatrix}x_i\\y_i\end{bmatrix}^* \begin{bmatrix}x_j\\y_j\end{bmatrix}=0.

Thus

xi∗xj+yi∗yj=0.x_i^*x_j+y_i^*y_j=0.

Also compare the positive vector for index ii with the negative partner of index jj:

[xiyi]∗[xj−yj]=0,\begin{bmatrix}x_i\\y_i\end{bmatrix}^* \begin{bmatrix}x_j\\-y_j\end{bmatrix}=0,

which gives

xi∗xj−yi∗yj=0.x_i^*x_j-y_i^*y_j=0.

Add the equations:

2xi∗xj=0,2x_i^*x_j=0,

so

xi∗xj=0.x_i^*x_j=0.

Subtract them:

2yi∗yj=0,2y_i^*y_j=0,

so

yi∗yj=0.y_i^*y_j=0.

Therefore

X∗X=Ir\boxed{X^*X=I_r}

and

Y∗Y=Ir.\boxed{Y^*Y=I_r.}

All requirements of the condensed SVD are satisfied.

Thus every matrix possesses a singular value decomposition.


The Proof in One Breath

If the details begin to blur, remember the argument. Start with AA and place it inside the Hermitian block matrix

W=[0AA∗0].W=\begin{bmatrix}0&A\\A^*&0\end{bmatrix}.

The spectral theorem gives WW an orthonormal eigenbasis. Split each eigenvector into two parts, xix_i and yiy_i; the eigenvalue equations then give

Ayi=σixi,A∗xi=σiyi.Ay_i=\sigma_i x_i, \qquad A^*x_i=\sigma_i y_i.

Collect the xix_i and yiy_i as columns of XX and YY, and place the singular values in Σr\Sigma_r. Together, these pieces recover

A=XΣrY∗.\boxed{A=X\Sigma_rY^*.}

The proof does not invent singular vectors from nothing. It finds them inside the eigenvectors of a carefully constructed Hermitian matrix.


From Product to Layers

Now comes a second interpretation of SVD, and for data science this one is just as important as the geometric picture.

Write

U=[u1 u2 ⋯ ],V=[v1 v2 ⋯ ].U=[u_1\ u_2\ \cdots], \qquad V=[v_1\ v_2\ \cdots].

Because Σ\Sigma is diagonal,

A=∑i=1min⁡(m,n)σiuiviT.\boxed{ A= \sum_{i=1}^{\min(m,n)} \sigma_i u_i v_i^T. }

Each uiviTu_i v_i^T has rank 1.

Why?

Every column of uiviTu_iv_i^T is a scalar multiple of uiu_i. So its contains only one independent direction.

Therefore SVD says:

A matrix is an ordered stack of rank-1 layers.

The number σi\sigma_i tells us how strong layer ii is.

Large singular value: strong layer.

Small singular value: weak layer.

Zero singular value: no layer at all.

Hence

rank⁡(A)=number of nonzero singular values.\boxed{ \operatorname{rank}(A) = \text{number of nonzero singular values}. }

The companion visualization script extracts the first rank-1 layers separately:

Selected layer · R1
R1=9.35 u1v1TR_{1} = 9.35\,u_{1}v_{1}^T
Left direction u
0.680.680.240.08
Right direction vᵀ
0.680.680.240.08
4.384.381.530.484.384.381.530.481.531.530.540.170.480.480.170.05
Current layer sum · 2 in sumFrobenius error: 1.33
4.494.491.06-0.054.494.491.06-0.051.061.062.542.43-0.05-0.052.432.6

Figure 6: A Matrix as a Sum of Rank-One Terms. The matrix A is expressed as a sum of rank-one terms σᵢuᵢvᵢᵀ. Adding terms successively improves the reconstruction and reduces the residual.

Looking at a Matrix

A very simple matrix heatmap is often enough to make structure visible:

python

Use the same visualization as a sequence: begin with the original matrix AA, isolate one rank-1 layer, rebuild a truncated approximation AkA_k, and finally inspect the residual A−AkA-A_k. That makes matrix decomposition feel like an object being opened rather than four unrelated pictures.

Pull Out the Rank-1 Layers

python

Each layer_i has rank at most 1.

To visualize a layer:

python

How Many Pieces Do We Need?

This connects SVD with the deeper meaning of matrix rank.

If rank⁡(A)=r\operatorname{rank}(A)=r, then AA can be written as a sum of rr rank-1 matrices:

A=R1+⋯+Rr.A=R_1+\cdots+R_r.

SVD provides one such representation:

A=σ1u1v1T+⋯+σrurvrT.A=\sigma_1u_1v_1^T+\cdots+\sigma_ru_rv_r^T.

Why can we not do it with fewer than rr rank-1 pieces?

Because rank is subadditive:

rank⁡(B+C)≤rank⁡(B)+rank⁡(C).\operatorname{rank}(B+C) \le \operatorname{rank}(B)+\operatorname{rank}(C).

If AA were a sum of only r−1r-1 rank-1 matrices, then rank⁡(A)≤r−1\operatorname{rank}(A)\le r-1, contradicting rank⁡(A)=r\operatorname{rank}(A)=r.

Therefore

rank⁡(A)=minimum number of rank-1 pieces required to build A.\boxed{ \operatorname{rank}(A) =\text{minimum number of rank-1 pieces required to build }A. }

This is one of the cleanest bridges from abstract rank to something you can almost touch.


Rank Factorization Meets SVD

A rank-rr matrix also admits a rank factorization

A=YZT,A=YZ^T,

with

Y∈Rm×r,Z∈Rn×r.Y\in\mathbb R^{m\times r}, \qquad Z\in\mathbb R^{n\times r}.

The columns of YY provide basic directions, while rows of ZTZ^T provide coefficients for mixing them.

The inner dimension cannot be smaller than rr. If

A=Y′Z′TA=Y'Z'^T

with only r′<rr'<r inner columns, then every column of AA would lie in the span of the r′r' columns of Y′Y', implying

rank⁡(A)≤r′<r,\operatorname{rank}(A)\le r'<r,

which is impossible.

SVD is a special, highly structured rank factorization. In condensed form,

A=UrΣrVrT.A=U_r\Sigma_rV_r^T.

One can group the first two factors:

Y=UrΣr,Z=Vr,Y=U_r\Sigma_r, \qquad Z=V_r,

so

A=YZT.A=YZ^T.

What SVD adds is orthonormality and a natural ordering by importance.


When We Agree to Lose a Little

Exact decomposition is not always the goal.

Suppose

A=σ1u1v1T+σ2u2v2T+σ3u3v3T+⋯A= \sigma_1u_1v_1^T +\sigma_2u_2v_2^T +\sigma_3u_3v_3^T +\cdots

with

σ1≥σ2≥σ3≥⋯ .\sigma_1\ge\sigma_2\ge\sigma_3\ge\cdots.

If the later singular values are small, their layers contribute little.

So keep only the first kk layers:

Ak=∑i=1kσiuiviT.\boxed{ A_k= \sum_{i=1}^k \sigma_i u_i v_i^T. }

Equivalently,

Ak=UkΣkVkT.\boxed{ A_k=U_k\Sigma_kV_k^T. }

This is the truncated SVD.

Its rank is at most kk, and when σk>0\sigma_k>0, its rank is exactly kk.

Instead of storing all mnmn entries of an m×nm\times n matrix, the factors require roughly

k(m+n)+kk(m+n)+k

numbers, depending on how the singular values are stored.

When

k≪m,n,k\ll m,n,

that can be an enormous reduction.

A1=∑i=11σiuiviTA_{1} = \sum_{i=1}^{1} \sigma_i u_i v_i^T
Original A
5410
4510
1132
0023
Approximation Aₖ
4.384.381.530.48
4.384.381.530.48
1.531.530.540.17
0.480.480.170.05
Residual A − Aₖ
0.62-0.38-0.53-0.48
-0.380.62-0.53-0.48
-0.53-0.532.461.83
-0.48-0.481.832.95
Shared color scale
−50+5
∣A−Ak∣F\\|A-A_k\\|_F4.96

Figure 7: Low-Rank Reconstruction. The original matrix A, its rank-k approximation Aₖ, and the residual A − Aₖ share one color scale. Increasing k improves the approximation and reduces the Frobenius error.

python

The two numbers agree up to numerical precision.


How Much Did We Lose?

The most common matrix analogue of Euclidean distance is the :

∥M∥F=∑i,j∣mij∣2.\boxed{ \|M\|_F = \sqrt{\sum_{i,j}|m_{ij}|^2}. }

For an approximation BB to AA, the error is

∥A−B∥F.\boxed{\|A-B\|_F.}

Because the rank-1 SVD layers are mutually orthogonal under the Frobenius inner product, the truncated error has a beautiful formula:

∥A−Ak∥F2=∑i>kσi2.\boxed{ \|A-A_k\|_F^2 = \sum_{i>k}\sigma_i^2. }

So the singular values do not merely order components; they tell us exactly how much Frobenius energy remains after truncation.

RetainedDiscarded
05.2410.479.3514.782130.874k = 2Component index iSingular value σᵢ
Energy retained98.4%
Frobenius error1.33
∥A−Ak∥F=∑i>kσi2\|A-A_k\|_F = \sqrt{\sum_{i>k}\sigma_i^2}

Figure 8: Singular Spectrum and Rank Selection. The ordered singular values show dominant components followed by a sharp decline. Retained energy and Frobenius reconstruction error vary with the selected rank k.

Singular Values and Approximation Error

python

Optimal rank-kk Frobenius error:

python

Why the First Pieces Are the Best

Here is the stronger statement.

For every matrix BB with

rank⁡(B)≤k,\operatorname{rank}(B)\le k,

the truncated SVD satisfies

∥A−Ak∥F≤∥A−B∥F.\boxed{ \|A-A_k\|_F \le \|A-B\|_F. }

So AkA_k is not merely convenient.

It is the best possible rank-k approximation in Frobenius norm.

No clever alternative rank-kk matrix can produce a smaller Frobenius error.

That is the Eckart–Young–Mirsky theorem in the Frobenius case.

Now let us prove it carefully.


Why That Claim Is True

Assume

A=UΣVTA=U\Sigma V^T

with singular values

σ1≥σ2≥⋯≥0.\sigma_1\ge\sigma_2\ge\cdots\ge0.

Take any matrix BB with rank at most kk.

First move — project onto the row space of BB

Let PP be the orthogonal projector onto the row space of BB.

Because that row space has dimension at most kk,

rank⁡(P)≤k.\operatorname{rank}(P)\le k.

Every row of BB already lies in that subspace, so

B=BP.B=BP.

Now split the approximation error:

A−B=A(I−P)+(AP−B).A-B =A(I-P)+(AP-B).

The first part lives in the orthogonal complement of the projector; the second part lives inside the projector subspace. Those two pieces are Frobenius-orthogonal.

Therefore, by Pythagoras,

∥A−B∥F2=∥A(I−P)∥F2+∥AP−B∥F2.\|A-B\|_F^2 = \|A(I-P)\|_F^2 + \|AP-B\|_F^2.

Hence

∥A−B∥F2≥∥A(I−P)∥F2.\boxed{ \|A-B\|_F^2 \ge \|A(I-P)\|_F^2. }

So any rank-kk approximation must at least pay the error of discarding whatever AA places outside some kk-dimensional row subspace.

Second move — rewrite the retained energy

Since PP and I−PI-P are orthogonal complementary projectors,

∥A∥F2=∥AP∥F2+∥A(I−P)∥F2.\|A\|_F^2 = \|AP\|_F^2+\|A(I-P)\|_F^2.

Thus minimizing the discarded energy is equivalent to maximizing

∥AP∥F2.\|AP\|_F^2.

Now use the right singular vectors viv_i, which form an orthonormal basis. Since

ATAvi=σi2vi,A^TA v_i=\sigma_i^2v_i,

we can write

∥AP∥F2=tr⁡(PATAP).\|AP\|_F^2 = \operatorname{tr}(PA^TAP).

Because P2=PP^2=P and trace is cyclic,

∥AP∥F2=tr⁡(PATA).\|AP\|_F^2 = \operatorname{tr}(PA^TA).

Expand in the eigenbasis viv_i:

∥AP∥F2=∑iσi2 ∥Pvi∥2.\|AP\|_F^2 = \sum_i \sigma_i^2\,\|Pv_i\|^2.

Define

αi=∥Pvi∥2.\alpha_i=\|Pv_i\|^2.

For an orthogonal projector,

0≤αi≤1,0\le\alpha_i\le1,

and

∑iαi=rank⁡(P)≤k.\sum_i\alpha_i=\operatorname{rank}(P)\le k.

So we are distributing at most kk units of weight among descending numbers

σ12≥σ22≥⋯ .\sigma_1^2\ge\sigma_2^2\ge\cdots.

The largest possible weighted sum is achieved by placing full weight on the first kk:

∥AP∥F2≤∑i=1kσi2.\|AP\|_F^2 \le \sum_{i=1}^k\sigma_i^2.

Therefore

∥A(I−P)∥F2=∥A∥F2−∥AP∥F2≥∑i>kσi2.\|A(I-P)\|_F^2 = \|A\|_F^2-\|AP\|_F^2 \ge \sum_{i>k}\sigma_i^2.

Combining with Step 1,

∥A−B∥F2≥∑i>kσi2.\boxed{ \|A-B\|_F^2 \ge \sum_{i>k}\sigma_i^2. }

But for the truncated SVD,

Ak=∑i=1kσiuiviT,A_k=\sum_{i=1}^k\sigma_iu_iv_i^T,

and

∥A−Ak∥F2=∑i>kσi2.\|A-A_k\|_F^2 = \sum_{i>k}\sigma_i^2.

So equality is achieved by AkA_k.

Therefore

Ak is a best rank-k approximation to A.\boxed{ A_k\text{ is a best rank-}k\text{ approximation to }A. }

That is the theorem.

The deepest idea in the proof is not a trick with algebra. It is this:

A rank-kk approximation has room for only kk independent directions. If you can keep only kk, the optimal choice is to keep the directions in which AA carries the most squared magnitude—the directions belonging to the largest singular values.

Where Do We Stop?

Suppose the singular values look like

100, 80, 60, 1, 0.5, 0.1.100,\ 80,\ 60,\ 1,\ 0.5,\ 0.1.

There is a dramatic drop after the third value.

That suggests rank 3 may preserve most of the structure.

The trade-off is

smaller k⇒more compression, less fidelity\boxed{ \text{smaller }k \Rightarrow \text{more compression, less fidelity} }

and

larger k⇒less compression, more fidelity.\boxed{ \text{larger }k \Rightarrow \text{less compression, more fidelity}. }

A singular-value plot—often called a scree plot in related contexts—makes this trade-off visible.


And Then PCA Enters

Analysis can seem like a completely new subject if it is introduced through statistics alone.

But once SVD is understood, PCA is almost a change of costume.

Suppose a data matrix has nn observations arranged as rows and pp features arranged as columns.

Call the centered data matrix

X∈Rn×p.X\in\mathbb R^{n\times p}.

Centered means the mean of each feature column has been subtracted.

The sample is

C=1n−1XTX.\boxed{ C=\frac1{n-1}X^TX. }

PCA finds eigenvectors of CC.

Now apply the SVD

X=UΣVT.X=U\Sigma V^T.

Then

XTX=VΣTUTUΣVT=VΣTΣVT.X^TX =V\Sigma^TU^TU\Sigma V^T =V\Sigma^T\Sigma V^T.

Therefore

C=V(ΣTΣn−1)VT.C = V \left( \frac{\Sigma^T\Sigma}{n-1} \right) V^T.

So the columns of VV are exactly the PCA directions.

And the co eigenvalues are

λi=σi2n−1.\boxed{ \lambda_i = \frac{\sigma_i^2}{n-1}. }

If one works with the unnormalized Gram matrix XTXX^TX instead of the covariance matrix, then simply

λi=σi2.\lambda_i=\sigma_i^2.

That is the precise bridge between PCA and SVD.

PCA Directly from SVD

python

What Direction Is PCA Looking For?

The first principal component direction v1v_1 is the unit direction in feature space along which the centered data has maximum variance.

The second direction v2v_2 captures the maximum remaining variance subject to being perpendicular to v1v_1.

Then v3v_3, and so on.

SVD gives all of these directions at once:

V=[v1 v2 ⋯ ].V=[v_1\ v_2\ \cdots].

The singular values determine how much variation is carried in each direction.

The principal-component scores are

XV.XV.

But from SVD,

XV=UΣVTV=UΣ.XV =U\Sigma V^TV =U\Sigma.

Therefore

PCA scores=UΣ.\boxed{ \text{PCA scores}=U\Sigma. }

This is an extremely useful identity.


Folding the Data into Fewer Directions

Keep only the top kk principal directions:

Vk=[v1 ⋯ vk].V_k=[v_1\ \cdots\ v_k].

Project the centered data into the lower-dimensional coordinate system:

Z=XVk.Z=XV_k.

The matrix Z∈Rn×kZ\in\mathbb R^{n\times k} is the compressed representation.

Reconstruct back into feature space:

X^k=ZVkT.\widehat X_k=ZV_k^T.

Substitute Z=XVkZ=XV_k:

X^k=XVkVkT.\widehat X_k=XV_kV_k^T.

Using SVD,

XVk=UkΣk,XV_k=U_k\Sigma_k,

so

X^k=UkΣkVkT=Xk.\boxed{ \widehat X_k =U_k\Sigma_kV_k^T =X_k. }

Therefore, for centered data, PCA reconstruction using the top kk directions is exactly the truncated SVD reconstruction.

This is the same viewed through statistics rather than matrix factorization.

Original dataProjected
PC₁PC₂
Variance on PC₁99.2%
Selected observation: 1PC₁ score -2.77 · PC₂ residual 0.06

Figure 9: PCA Projection onto the First Principal Component. Observations are projected orthogonally onto PC₁, which explains 99.2% of the variance in this example; perpendicular displacement represents the residual.

Reduce to kk components:

python

Let PCA Move

For two-dimensional data:

python

How Much of the Story Did We Keep?

Because

λi=σi2n−1,\lambda_i=\frac{\sigma_i^2}{n-1},

the explained variance ratio of component ii is

λi∑jλj=σi2∑jσj2.\boxed{ \frac{\lambda_i}{\sum_j\lambda_j} = \frac{\sigma_i^2}{\sum_j\sigma_j^2}. }

Notice the square.

For PCA variance accounting, the natural quantity is σi2\sigma_i^2, not σi\sigma_i itself.

If the first few squared singular values dominate the total, the dataset is approximately low-dimensional even if it has many original features.


SVD and PCA, Side by Side

SVD and PCA are deeply related, but they are not the same concept.

SVD is a general matrix factorization. It can be applied to any matrix and produces left singular vectors, singular values, and right singular vectors.

PCA is a data-analysis procedure. It assumes an interpretation of rows and columns as observations and features, normally begins with mean-centering, and asks for directions of maximal variance.

For a centered data matrix, SVD is one of the cleanest computational routes to PCA.

A good mental summary is:

SVD is the matrix machinery; PCA is one important statistical use of it.

SVD in Images: When Low Rank Becomes Visible

Until now, approximation has looked like symbols moving on paper. An image lets us see the loss.

Original image
Rank-k reconstruction · 1
Image energy retained88.3%
Values stored37 / 32488.6% fewer values
Singular-value layers
σ1
σ2
σ3
σ4

Figure 10: Low-Rank Image Reconstruction Using the SVD. Rank-k reconstructions recover the image’s broad structure before finer detail. Four nonzero singular values suffice for an exact reconstruction of this 18 × 18 example, while lower ranks require fewer stored values.

A grayscale image with mm rows and nn columns is simply a matrix

A∈Rm×n,A\in\mathbb R^{m\times n},

whose entries are pixel intensities. Once the image is a matrix, the entire SVD story applies:

A=∑i=1rσiuiviT.A=\sum_{i=1}^{r}\sigma_i u_i v_i^T.

Each σiuiviT\sigma_i u_iv_i^T is an image-sized rank-1 pattern. Do not expect the first layer to mean “the eye” and the second to mean “the tree.” These are mathematical separable patterns, not semantic segmentation.

Keep only the first kk layers and we get

Ak=UkΣkVkT.A_k=U_k\Sigma_kV_k^T.

With small kk, broad structure appears first; finer detail returns as kk grows. The retained energy is

Ek=∑i=1kσi2∑i=1rσi2.\boxed{ E_k= \frac{\sum_{i=1}^{k}\sigma_i^2} {\sum_{i=1}^{r}\sigma_i^2}. }

The original image stores mnmn values. A rank-kk representation stores roughly

k(m+n+1)k(m+n+1)

values when we keep UkU_k, Σk\Sigma_k, and VkTV_k^T. That explains the mathematics of compression, but not the full engineering of JPEG or WebP, which also involves quantization, entropy coding, and other design choices.

For an RGB image, the simplest demonstration is to decompose the red, green, and blue channel matrices separately and stack them back together after truncation.

The value of this example is larger than “image compression.” It gives Eckart–Young a face: remove mathematical directions, reconstruct the matrix, and look directly at what disappeared.

Image Compression with SVD

python

Try several values of kk and compare visual quality with the Frobenius error.

SVD Inside Neural Networks

Neural-network compression is a much larger subject, but one bridge is worth opening because the mathematics is exactly the same.

Dense layerTwo-factor layerW ∈ ℝᵐˣⁿW ≈ UₖΣₖVₖᵀInput · n = 96Output · m = 64Input · n = 96k = 12Output · m = 64VₖᵀUₖΣₖ···
Dense weights6,144
Factor weights1,920
Parameter count change68.8% fewer parameters

Figure 11: Low-Rank Factorization of a Neural-Network Layer. A dense weight matrix W is approximated by UₖΣₖVₖᵀ, replacing one large linear transformation with two narrower transformations.

A fully connected layer begins with

y=Wx+b.y=Wx+b.

Ignore the activation for a moment and look only at WW. It is a matrix, so

W=UΣVT.W=U\Sigma V^T.

If the singular values decay quickly, we can use

W≈UkΣkVkT,W\approx U_k\Sigma_kV_k^T,

which turns the layer into

y≈UkΣkVkTx+b.y\approx U_k\Sigma_kV_k^Tx+b.

Instead of one large linear map, think of two smaller ones:

x→VkTa k-dimensional representation→UkΣkthe original output dimension.x \xrightarrow{V_k^T} \text{a }k\text{-dimensional representation} \xrightarrow{U_k\Sigma_k} \text{the original output dimension}.

If W∈Rm×nW\in\mathbb R^{m\times n}, the original layer carries mnmn weights, while the two factors need roughly

k(m+n).k(m+n).

When k≪m,nk\ll m,n, the difference can be large.

One detail matters: if the two factors are replacing one linear map, do not place a nonlinearity between them, or the product is no longer the same rank-kk linear approximation.

This also explains the connection to PCA. PCA asks whether the activations really need all their directions; SVD on the weights asks whether the weight matrix itself needs all of its directions.


Numerical Exploration

The formulas

σi=λi(ATA)\sigma_i=\sqrt{\lambda_i(A^TA)}

and

ui=Aviσiu_i=\frac{Av_i}{\sigma_i}

are excellent for understanding.

But in numerical software, explicitly forming ATAA^TA can worsen conditioning because the condition number is effectively squared. Robust library SVD routines therefore use more stable algorithms rather than literally computing SVD by first forming ATAA^TA.

So keep two questions separate. If you are asking where SVD comes from, ATAA^TA is a beautiful conceptual doorway. If you are asking how to compute SVD in real numerical work, use a trusted routine such as numpy.linalg.svd, scipy.linalg.svd, MATLAB svd, or the corresponding high-quality routine in your environment. Understanding and implementation are related, but they are not identical.


Small Ambiguities, Same Story

The singular values are uniquely determined.

The singular vectors have some freedom.

If

σiuiviT\sigma_i u_i v_i^T

is one SVD layer, then

σi(−ui)(−vi)T=σiuiviT.\sigma_i(-u_i)(-v_i)^T = \sigma_i u_i v_i^T.

So both vectors may flip sign together without changing AA.

If a singular value is repeated, such as

σ1=σ2,\sigma_1=\sigma_2,

then the associated two-dimensional singular subspace is fixed, but the particular orthonormal basis chosen inside that subspace need not be unique.

This is why two software packages may return singular vectors with different signs—or different bases inside a repeated-value subspace—while both answers are mathematically correct.


Four Spaces in One Frame

For a rank-rr matrix

A=UΣVT,A=U\Sigma V^T,

partition the singular vectors into nonzero and zero parts.

The right singular vectors associated with nonzero singular values span the row space:

Row⁡(A)=span⁡(v1,…,vr).\operatorname{Row}(A)=\operatorname{span}(v_1,\ldots,v_r).

The remaining right singular vectors span the :

N(A)=span⁡(vr+1,…,vn).\mathcal N(A)=\operatorname{span}(v_{r+1},\ldots,v_n).

The left singular vectors associated with nonzero singular values span the column space:

Col⁡(A)=span⁡(u1,…,ur).\operatorname{Col}(A)=\operatorname{span}(u_1,\ldots,u_r).

The remaining left singular vectors span the left null space:

N(AT)=span⁡(ur+1,…,um).\mathcal N(A^T)=\operatorname{span}(u_{r+1},\ldots,u_m).

So SVD does not merely factor a matrix. It organizes the four fundamental subspaces into orthonormal bases.

This is one reason SVD feels like a grand finale of linear algebra: rank, row space, column space, null spaces, eigenvectors, orthogonality, approximation, and data analysis all meet in one construction.


What Does One Layer Carry?

The component

σiuiviT\sigma_i u_i v_i^T

can be read from three directions:

Transformation view

vi→Aσiui.v_i\xrightarrow{A}\sigma_i u_i.

Rank-1 layer view

σiuiviT\sigma_i u_iv_i^T

is one rank-1 piece of the matrix.

Data view

Here viv_i is a direction on the feature side, uiσiu_i\sigma_i carries the observation-side scores along that direction, and σi2\sigma_i^2 determines how much variance that component accounts for when SVD is used to perform PCA on centered data.

These are not three separate theories. They are three readings of the same algebra.


The Whole Map

compositiondecompositionrankSVDrank-1 piecestruncated SVDEckart–YoungPCAimagesneural networks
truncated SVD

Truncated SVD keeps the k largest singular values to form a rank-k approximation.

Figure 12: Conceptual Map of SVD and Its Applications. The map connects matrix composition, factorization, rank, truncated SVD, PCA, image reconstruction, and low-rank neural-network layers.

The whole journey can be compressed into one sequence:

Composition→Decomposition→Structured factors\boxed{ \text{Composition} \rightarrow \text{Decomposition} \rightarrow \text{Structured factors} }

then

Rank→rank-1 pieces→A=∑iσiuiviT\boxed{ \text{Rank} \rightarrow \text{rank-1 pieces} \rightarrow A=\sum_i\sigma_i u_iv_i^T }

then

A=UΣVT→Avi=σiui\boxed{ A=U\Sigma V^T \rightarrow Av_i=\sigma_i u_i }

then we keep the strongest directions:

Ak=UkΣkVkT.\boxed{A_k=U_k\Sigma_kV_k^T.}

The Eckart–Young theorem makes this the best rank-k approximation, and the same right singular directions become the PCA directions for centered data.

If One Sentence Survives

If all notation disappears tomorrow, keep this:

SVD finds special orthogonal input directions that a matrix transforms independently into special orthogonal output directions, tells us the strength of each transformation with singular values, and orders those directions so that the strongest ones give the optimal low-rank description of the matrix.

That sentence contains the geometry, the rank-1 decomposition, low-rank approximation, and the bridge to PCA.


The Neighbors We Passed

SVD is one of several useful matrix decompositions; a few close neighbors help place it in context.

LU

A=LUA=LU

with LL lower triangular and UU upper triangular. With pivoting,

PA=LU.PA=LU.

LU is Gaussian elimination stored as a factorization.

QR

A=QR,A=QR,

where QQ has orthonormal columns and RR is upper triangular. It is central to least squares and numerical linear algebra.

Cholesky

For symmetric positive-definite AA,

A=LLT.A=LL^T.

It exploits symmetry and positivity and is widely used in statistics, optimization, and numerical methods.

Spectral Decomposition

For real symmetric AA,

A=QΛQT.A=Q\Lambda Q^T.

This is closely connected to SVD: symmetric positive-semidefinite matrices already possess the orthogonal-diagonal-orthogonal structure with one common eigenbasis.

Jordan

For a square matrix,

A=PJP−1.A=PJP^{-1}.

Jordan form reveals generalized eigenvector structure and is extremely important theoretically, though it is numerically sensitive.

Schur

For a complex square matrix,

A=QTQ∗,A=QTQ^*,

with QQ unitary and TT upper triangular. It is more numerically stable than Jordan form and exposes eigenvalues on the diagonal.

Real Schur

For real matrices,

A=QTQT,A=QTQ^T,

where TT is quasi-upper-triangular and may contain 2×22\times2 blocks representing complex-conjugate eigenvalue pairs.

Polar

A=QH,A=QH,

where QQ is orthogonal/unitary and HH is positive semidefinite.

If

A=UΣVT,A=U\Sigma V^T,

then one polar factorization is

Q=UVT,H=VΣVTQ=UV^T, \qquad H=V\Sigma V^T

in an appropriate square/full-rank setting, with standard extensions for rectangular matrices.

Block LU

For a block matrix

A=[A11A12A21A22],A= \begin{bmatrix} A_{11}&A_{12}\\ A_{21}&A_{22} \end{bmatrix},

one can perform elimination at the level of blocks, introducing the Schur complement

S=A22−A21A11−1A12.S=A_{22}-A_{21}A_{11}^{-1}A_{12}.

This is important in large structured systems and scientific computing.

Interpolative Decomposition

A≈CX,A\approx CX,

where CC contains selected actual columns of AA. Unlike SVD, which constructs mathematically optimal directions that may be mixtures of many columns, interpolative decomposition can offer stronger interpretability because the basis elements are real columns from the data.

Algebraic Polar and Mostow

These are more specialized constructions appearing in advanced matrix analysis and geometry. They continue the same broad theme: separate a complicated matrix into factors with special algebraic or geometric structure.

The recurring question never changes:

Can we choose a representation in which the matrix becomes easier to understand?

From the Summit

Looking from the summit toward the horizon is beautiful. From there, SVD can make everything look as if it arrived at once: clean directions, scaling, rank-1 layers, low-rank approximation, then PCA, images, and even a glimpse of neural networks.

But the summit hides the path that built it. We began with pieces we knew and composed them; then we reversed the question and started decomposing. Layer by layer, the mountain became visible.

Looking from the summit toward the horizon is beautiful, but all we really needed was a leap of faith to look down and see what this mountain was made of.

References

Andrews, H. C., & Patterson, C. L. (1976). Singular value decomposition (SVD) image coding. IEEE Transactions on Communications, 24(4), 425–432. https://doi.org/10.1109/TCOM.1976.1093309

Brain Station Advanced. (n.d.). No one taught SVD (singular value decomposition) like this [Video]. YouTube. https://youtu.be/llisH02KLrE

Denton, E. L., Zaremba, W., Bruna, J., LeCun, Y., & Fergus, R. (2014). Exploiting linear structure within convolutional networks for efficient evaluation. In Advances in neural information processing systems (Vol. 27, pp. 1269–1277). https://proceedings.neurips.cc/paper/2014/hash/1adaeb993eba95859121a43ea61bd858-Abstract.html

Existence of the singular value decomposition (SVD): A very detailed step-by-step explanation. (n.d.). [Unpublished study notes].

Jaderberg, M., Vedaldi, A., & Zisserman, A. (2014). Speeding up convolutional neural networks with low rank expansions. In Proceedings of the British Machine Vision Conference 2014. https://doi.org/10.5244/C.28.88

Matrix decompositions: Cohesive summary. (n.d.). [Unpublished study notes].

MIT OpenCourseWare. (n.d.-a). Singular value decomposition [Video]. YouTube. https://youtu.be/TX_vooSnhm8

MIT OpenCourseWare. (n.d.-b). Singular value decomposition (the SVD) [Video]. YouTube. https://youtu.be/mBcLRGuAFUk

Sainath, T. N., Kingsbury, B., Sindhwani, V., Arisoy, E., & Ramabhadran, B. (2013). Low-rank matrix factorization for deep neural network training with high-dimensional output targets. In 2013 IEEE International Conference on Acoustics, Speech and Signal Processing (pp. 6655–6659). https://doi.org/10.1109/ICASSP.2013.6638949

SVD, matrix rank, low-rank approximation, PCA, and the existence proof: A detailed, intuitive, step-by-step study guide. (n.d.). [Unpublished study notes].

Visual Kernel. (n.d.). SVD visualized, singular value decomposition explained | SEE Matrix, chapter 3 [Video]. YouTube. https://youtu.be/vSczTbgc8Rc

Read more