고급 선형 대수 Lecture 6: 특잇값 분해 SVD의 원리와 기하학

전체 목차 · 이전: Lecture 5 · 고급 선형 대수 글 목록

책과 강의

구분 출처와 범위
교재 Gilbert Strang, Linear Algebra and Learning from Data, 2019. Part I — Highlights of Linear Algebra, I.8 — Singular Values and Singular Vectors in the SVD, pp. 56–70
강의 MIT 18.065, Spring 2018. Lecture 6 — Singular Value Decomposition (SVD)
지정 문제 I.8의 1, 6번, p. 68. 강의 페이지와 전체 문제집 참조
교재의 확장 내용 I.8 후반의 Rayleigh quotient, 블록 대칭행렬, 미분·적분과 유한차분, 극분해도 별도 절로 정리합니다.

쪽수는 인쇄쪽수입니다. 해당 절은 제공된 스캔본의 PDF 36–43번째 페이지에 걸쳐 있습니다. 본문에서는 실수 행렬을 다루며, 복소수에서는 전치를 켤레전치로 바꾸면 대응하는 SVD를 얻습니다.

고유값 분해는 입력과 출력에 같은 기저를 사용합니다. 그러나 직사각형 행렬의 입력과 출력은 아예 서로 다른 공간에 있습니다. SVD는 두 공간에 각각 정규직교 기저를 골라, 행렬의 작용을 방향별 배율로 표현합니다.

1. Ax = λx 대신 Av = σu

A∈Rm×nA\in\mathbb R^{m\times n}의 랭크를 rr이라 하겠습니다. SVD는 입력의 단위벡터 vi∈Rnv_i\in\mathbb R^n와 출력의 단위벡터 ui∈Rmu_i\in\mathbb R^m를 연결합니다.

Avi=σiui,σ1≥σ2≥⋯≥σr>0.Av_i=\sigma_i u_i,\qquad \sigma_1\ge\sigma_2\ge\cdots\ge\sigma_r>0.

σi\sigma_i는 특잇값, viv_i는 오른쪽 특이벡터, uiu_i는 왼쪽 특이벡터입니다. 이 글에서는 기저 벡터를 뜻하는 singular vector를 특이벡터로 표기합니다.

벡터 viv_i와 uiu_i는 같은 방향일 필요가 없고 크기조차 서로 다를 수 있습니다. 대신 각각의 집합 안에서 정규직교입니다.

viTvj=δij,uiTuj=δij.v_i^Tv_j=\delta_{ij},\qquad u_i^Tu_j=\delta_{ij}.

영공간의 나머지 입력 기저 vr+1,…,vnv_{r+1},\ldots,v_n는 Avi=0Av_i=0으로 사라집니다. 양의 특잇값의 개수는 정확히 랭크 rr입니다.

2. 완전 SVD와 랭크 r 축약 SVD

기저를 전체 공간으로 확장하여

U=[u1 ⋯ um],V=[v1 ⋯ vn]U=[u_1\ \cdots\ u_m],\qquad V=[v_1\ \cdots\ v_n]

로 놓으면 U,VU,V는 정사각 직교행렬입니다. AV=UΣAV=U\Sigma를 오른쪽에서 VTV^T와 곱해

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

를 얻습니다. Σ\Sigma는 m×nm\times n이며 대각선의 첫 rr개 성분만 양수입니다.

실제로 기여하는 rr개 방향만 남기면

A=UrΣrVrT.\boxed{A=U_r\Sigma_rV_r^T}.

형태 U Σ Vᵀ
완전 SVD m×mm\times m m×nm\times n n×nn\times n
랭크 rr 축약 SVD m×rm\times r r×rr\times r r×nr\times n

축약형에서는 UrTUr=VrTVr=IrU_r^TU_r=V_r^TV_r=I_r이지만 UrUrTU_rU_r^T와 VrVrTV_rV_r^T는 일반적으로 단위행렬이 아닙니다. Lecture 3에서 다룬 정사영입니다.

일부 소프트웨어의 경제형 SVD는 rr 대신 k=min⁡(m,n)k=\min(m,n)개 방향을 반환하며, 랭크가 부족하면 0에 해당하는 특잇값도 포함합니다. 수학적 랭크 축약형과 옵션 이름만으로 동일시하지 않아야 합니다.

3. AᵀA에서 SVD를 구성한다

Lecture 5에서 보았듯 ATAA^TA는 대칭 PSD입니다. 따라서 정규직교 고유기저를 가지며 고유값은 비음수입니다.

ATAvi=σi2vi.A^TAv_i=\sigma_i^2v_i.

양의 고유값에 대해 σi=λi\sigma_i=\sqrt{\lambda_i}로 놓고

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

로 정의합니다. 이때

uiTuj=viTATAvjσiσj=σj2σiσjviTvj=δij.u_i^Tu_j =\frac{v_i^TA^TAv_j}{\sigma_i\sigma_j} =\frac{\sigma_j^2}{\sigma_i\sigma_j}v_i^Tv_j =\delta_{ij}.

즉 출력의 벡터들도 자동으로 정규직교가 됩니다. 또한

AATui=σi2ui,ATui=σivi.AA^Tu_i=\sigma_i^2u_i,\qquad A^Tu_i=\sigma_i v_i.

ATAA^TA의 0 고유값에 해당하는 벡터에는

0=vTATAv=∥Av∥220=v^TA^TAv=\|Av\|_2^2

이므로 Av=0Av=0입니다. 이 방향에는 Av/σAv/\sigma를 계산하지 않습니다. 나머지 uu들은 N(AT)\mathcal N(A^T)의 정규직교 기저로 채웁니다. 이로써 직사각형, 특이행렬을 포함한 모든 실수 행렬의 SVD를 구성했습니다.

U와 V를 별도로 고유값 분해해서 아무 부호로 조합하면 안 됩니다. 반드시 Avi=σiuiAv_i=\sigma_i u_i가 성립하도록 짝을 맞춰야 합니다. 중복 특잇값에서는 같은 고유공간 안의 기저 선택도 맞춰야 합니다.

4. 네 기본 부분공간이 한꺼번에 보인다

부분공간 SVD가 제공하는 정규직교 기저
행공간 C(AT)\mathcal C(A^T) v1,…,vrv_1,\ldots,v_r
영공간 N(A)\mathcal N(A) vr+1,…,vnv_{r+1},\ldots,v_n
열공간 C(A)\mathcal C(A) u1,…,uru_1,\ldots,u_r
왼쪽 영공간 N(AT)\mathcal N(A^T) ur+1,…,umu_{r+1},\ldots,u_m

입력 x=∑i=1ncivix=\sum_{i=1}^n c_iv_i에 대한 출력은

Ax=∑i=1rσiciui.Ax=\sum_{i=1}^r\sigma_i c_i u_i.

영공간 성분은 없어지고, 행공간의 ii번째 좌표는 σi\sigma_i배 되어 대응하는 열공간 방향으로 이동합니다.

여기서 ATAA^TA와 AATAA^T의 양의 고유값 목록은 σ12,…,σr2\sigma_1^2,\ldots,\sigma_r^2로 같습니다. 그러나 0 고유값은 각각 n−rn-r, m−rm-r개로 서로 다를 수 있습니다.

5. 지정 문제 6번으로 SVD를 끝까지 계산하기

교재 I.8의 6번 행렬은

A=[3405].A=\begin{bmatrix}3&4\\0&5\end{bmatrix}.

책 본문의 아래 삼각행렬 예제를 전치한 형태입니다. 계산 순서를 따라가겠습니다.

5.1 오른쪽 특이벡터와 특잇값

ATA=[9121241].A^TA=\begin{bmatrix}9&12\\12&41\end{bmatrix}.

특성다항식은

λ2−50λ+225=(λ−45)(λ−5).\lambda^2-50\lambda+225=(\lambda-45)(\lambda-5).

따라서

σ1=35,σ2=5,\sigma_1=3\sqrt5,\qquad \sigma_2=\sqrt5,

v1=110[13],v2=110[−31].v_1=\frac1{\sqrt{10}}\begin{bmatrix}1\\3\end{bmatrix},\qquad v_2=\frac1{\sqrt{10}}\begin{bmatrix}-3\\1\end{bmatrix}.

5.2 Av를 계산해서 왼쪽 특이벡터 구하기

Av1=110[1515],Av2=110[−55].Av_1=\frac1{\sqrt{10}}\begin{bmatrix}15\\15\end{bmatrix},\qquad Av_2=\frac1{\sqrt{10}}\begin{bmatrix}-5\\5\end{bmatrix}.

각각 353\sqrt5, 5\sqrt5로 나누면

u1=12[11],u2=12[−11].u_1=\frac1{\sqrt2}\begin{bmatrix}1\\1\end{bmatrix},\qquad u_2=\frac1{\sqrt2}\begin{bmatrix}-1\\1\end{bmatrix}.

따라서 완성된 분해는

U=12[1−111],Σ=[35005],V=110[1−331].U=\frac1{\sqrt2}\begin{bmatrix}1&-1\\1&1\end{bmatrix},\quad \Sigma=\begin{bmatrix}3\sqrt5&0\\0&\sqrt5\end{bmatrix},\quad V=\frac1{\sqrt{10}}\begin{bmatrix}1&-3\\3&1\end{bmatrix}.

AAT=[25202025]AA^T=\begin{bmatrix}25&20\\20&25\end{bmatrix}에도 u1,u2u_1,u_2가 각각 고유값 45, 5의 고유벡터임을 확인할 수 있습니다.

5.3 외적의 합으로 재구성하기

σ1u1v1T=32[1313],σ2u2v2T=12[3−1−31].\sigma_1u_1v_1^T=\frac32\begin{bmatrix}1&3\\1&3\end{bmatrix},\qquad \sigma_2u_2v_2^T=\frac12\begin{bmatrix}3&-1\\-3&1\end{bmatrix}.

두 조각을 더하면 정확히 [3405]\begin{bmatrix}3&4\\0&5\end{bmatrix}로 돌아옵니다. 원래 행렬의 고유값은 3, 5이지만 특잇값은 35,53\sqrt5,\sqrt5입니다. 고유값과 특잇값은 일반적으로 다릅니다.

6. 기하학: 좌표 변경, 축별 늘이기, 좌표 복원

x →VT 입력 특이벡터 좌표 →Σ 축별 배율 적용 →U Ax.x\ \xrightarrow{V^T}\ \text{입력 특이벡터 좌표} \ \xrightarrow{\Sigma}\ \text{축별 배율 적용} \ \xrightarrow{U}\ Ax.

정사각 가역 2차원 행렬에서는 단위원이 타원으로 이동합니다. 직교행렬 VT,UV^T,U는 회전 또는 반사를 담당하고, Σ\Sigma가 각 축을 σ1,σ2\sigma_1,\sigma_2배 합니다. 타원의 반축 방향은 u1,u2u_1,u_2, 반축 길이는 σ1,σ2\sigma_1,\sigma_2입니다.

랭크가 1이면 원이 선분으로 눌립니다. 일반 직사각형 행렬에서는 입력의 단위공을 열공간 안의 타원체로 보낼 수 있으며, 영공간 방향은 사라집니다.

직교행렬의 행렬식은 ±1\pm1이므로 정사각행렬에서 정확한 공식은

∣det⁡A∣=∏i=1nσi.\boxed{|\det A|=\prod_{i=1}^n\sigma_i}.

절댓값을 빼면 반사를 포함한 행렬에서 틀립니다. 위 예제는 det⁡A=15>0\det A=15>0이므로 특잇값의 곱도 15입니다.

7. 가장 많이 늘어나는 방향과 Rayleigh quotient

정규직교성으로

∥Ax∥22=∑i=1rσi2ci2,∥x∥22=∑i=1nci2.\|Ax\|_2^2=\sum_{i=1}^r\sigma_i^2c_i^2, \qquad \|x\|_2^2=\sum_{i=1}^n c_i^2.

따라서

max⁡x≠0∥Ax∥2∥x∥2=σ1.\max_{x\ne0}\frac{\|Ax\|_2}{\|x\|_2}=\sigma_1.

최대값은 x=v1x=v_1에서 얻고, 이것이 행렬의 스펙트럴 노름 ∥A∥2\|A\|_2입니다. 비율을 제곱하면

xTATAxxTx\frac{x^TA^TAx}{x^Tx}

라는 Rayleigh quotient가 됩니다. 단위벡터 제약 아래 xTATAxx^TA^TAx를 최대로 하는 문제에 Lagrange 승수를 적용하면 ATAx=λxA^TAx=\lambda x가 나옵니다.

다음 특이벡터는 앞선 v1v_1과 직교한다는 제약을 추가하여 찾습니다. 이를 반복하면 앞선 모든 특이벡터에 직교하면서 가장 많이 늘어나는 방향을 순서대로 얻습니다.

정사각행렬의 고유값에는 ∣λ∣≤σ1|\lambda|\le\sigma_1이 성립합니다. Ax=λxAx=\lambda x이면 ∥Ax∥2=∣λ∣∥x∥2\|Ax\|_2=|\lambda|\|x\|_2이기 때문입니다. 그러나 고유값의 절댓값들이 각각 같은 순서의 특잇값과 일치하는 것은 아닙니다.

8. 중요도 순서가 있는 랭크 1 조각

외적의 합은

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

입니다. Lecture 2의 일반적인 외적 합과 달리, 여기에는 서로 직교하는 입력·출력 방향과 크기 순서가 함께 들어 있습니다.

앞의 k<rk<r개 조각만 남기면

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

Eckart–Young 정리에 의해 AkA_k는 랭크가 kk 이하인 행렬 중 스펙트럴 노름과 Frobenius 노름에서 최적 근사입니다. 오차는

∥A−Ak∥2=σk+1,∥A−Ak∥F=∑i>kσi2.\|A-A_k\|_2=\sigma_{k+1},\qquad \|A-A_k\|_F=\sqrt{\sum_{i>k}\sigma_i^2}.

위의 2차원 예제에서 첫 조각만 남기면 두 노름의 오차가 모두 5\sqrt5입니다. 일반적으로 두 노름의 오차는 서로 다릅니다. 이 정리의 증명과 PCA 연결은 교재 I.9와 Lecture 7 원강의로 이어집니다.

9. 특별한 행렬에서 SVD는 어떻게 보이는가?

행렬 SVD에서 보이는 성질
대칭 PSD S=QΛQTS=Q\Lambda Q^T 순서를 맞추면 U=V=QU=V=Q, Σ=Λ\Sigma=\Lambda로 선택 가능
음의 고유값도 있는 대칭행렬 특잇값은 고유값의 절댓값. 음의 부호는 대응하는 한쪽 특이벡터에 반영
정사각 직교행렬 Q 모든 특잇값이 1. Q=Q I ITQ=Q\,I\,I^T도 하나의 SVD
랭크 1 행렬 abTab^T a,b≠0a,b\ne0이면 양의 특잇값은 ∥a∥2∥b∥2\|a\|_2\|b\|_2 하나

랭크 1의 축약 SVD는 직접

abT=a∥a∥2(∥a∥2∥b∥2)bT∥b∥2ab^T=\frac{a}{\|a\|_2} \bigl(\|a\|_2\|b\|_2\bigr) \frac{b^T}{\|b\|_2}

로 쓸 수 있습니다. 정사각 가역행렬에서는 A−1=VΣ−1UTA^{-1}=V\Sigma^{-1}U^T이며, 역행렬의 특잇값을 내림차순으로 정렬하면 원래 순서가 뒤집힙니다.

SVD는 유일한 벡터 목록을 보장하지 않습니다. ui,viu_i,v_i의 부호를 동시에 바꾸어도 같은 행렬입니다. 중복 특잇값에서는 대응하는 두 기저를 함께 회전할 수 있습니다.

10. 교재의 확장: 전치, 블록 행렬, 부분행렬

전치는 입력과 출력을 바꾼다

AT=VΣTUTA^T=V\Sigma^TU^T이므로 양의 특잇값은 변하지 않고 왼쪽·오른쪽 특이벡터가 교환됩니다. 따라서 ∥AT∥2=∥A∥2\|A^T\|_2=\|A\|_2입니다.

더 일반적으로 ABx=λxABx=\lambda x, λ≠0\lambda\ne0이면 Bx≠0Bx\ne0이고 BA(Bx)=λBxBA(Bx)=\lambda Bx입니다. 이 관계는 크기가 다른 AB,BAAB,BA의 영이 아닌 고유값이 대응하는 이유를 설명합니다.

하나의 대칭행렬로 두 방향을 모은다

H=[0AAT0]H=\begin{bmatrix}0&A\\A^T&0\end{bmatrix}

에 대해

H12[uivi]=σi12[uivi],H12[ui−vi]=−σi12[ui−vi].H\frac1{\sqrt2}\begin{bmatrix}u_i\\v_i\end{bmatrix} =\sigma_i\frac1{\sqrt2}\begin{bmatrix}u_i\\v_i\end{bmatrix},\qquad H\frac1{\sqrt2}\begin{bmatrix}u_i\\-v_i\end{bmatrix} =-\sigma_i\frac1{\sqrt2}\begin{bmatrix}u_i\\-v_i\end{bmatrix}.

특잇값 하나가 이 대칭행렬의 고유값 +σi,−σi+\sigma_i,-\sigma_i 한 쌍으로 나타납니다. 나머지 m+n−2rm+n-2r개의 고유값은 0입니다.

행과 열을 제거하면 최대 특잇값은 커지지 않는다

부분행렬 BB에 들어갈 입력을 원래 크기의 벡터에 0으로 채우고, 출력에서 필요한 성분만 선택한다고 생각하면

∥B∥2≤∥A∥2\|B\|_2\le\|A\|_2

를 얻습니다. 0을 채우는 과정은 입력 길이를 유지하고, 출력 성분을 버리는 과정은 길이를 늘리지 않기 때문입니다.

11. 교재의 확장: 미분·적분과 유한차분

벡터의 내적을 함수의 적분 내적으로 바꾸어도 직교 방향별 배율이라는 생각은 유용합니다. 교재는 [0,2π][0,2\pi]에서 상수항을 제외한 주기적 cosine·sine 모드의 예를 듭니다. k≥1k\ge1에 대해

∫0scos⁡(kt) dt=1ksin⁡(ks),ddssin⁡(ks)=kcos⁡(ks).\int_0^s\cos(kt)\,dt=\frac1k\sin(ks),\qquad \frac{d}{ds}\sin(ks)=k\cos(ks).

정규화한 cosine 입력과 sine 출력 사이에서 적분은 1/k1/k, 미분은 kk라는 배율을 갖습니다. 적분은 높은 주파수를 작게 만들고 미분은 크게 만듭니다. 여기서는 경계·주기 조건과 함수공간을 정한 모드에 대한 설명이며, 상수까지 포함한 모든 함수에서 미분과 적분이 양쪽 역연산이라는 뜻은 아닙니다.

이산화한 차분 행렬의 예는

D=[100−1100−1100−1],DTD=[2−10−12−10−12].D=\begin{bmatrix}1&0&0\\-1&1&0\\0&-1&1\\0&0&-1\end{bmatrix},\quad D^TD=\begin{bmatrix}2&-1&0\\-1&2&-1\\0&-1&2\end{bmatrix}.

DTDD^TD의 고유값은 2+2,2,2−22+\sqrt2,2,2-\sqrt2이고, DD의 양의 특잇값은 이들의 제곱근입니다. DDTDD^T는 같은 세 양의 고유값에 0 하나가 추가되며, 상수벡터가 그 영공간을 이룹니다. 대응 기저를 이산 sine·cosine 모드로 표현할 수 있어 신호 처리와 연결됩니다.

12. 교재의 확장: 극분해 A = QS

정사각 실수 행렬의 SVD에서 인수를 다시 묶으면

A=UΣVT=(UVT)(VΣVT)=QS.A=U\Sigma V^T=(UV^T)(V\Sigma V^T)=QS.

Q=UVTQ=UV^T는 직교행렬이고 S=VΣVTS=V\Sigma V^T는 대칭 PSD입니다. 또한

S2=ATA,S=(ATA)1/2.S^2=A^TA,\qquad S=(A^TA)^{1/2}.

이 극분해는 방향을 바꾸는 부분과 대칭적으로 늘이는 부분을 분리합니다. AA가 가역이면 SS는 SPD이고 Q=AS−1Q=AS^{-1}로 유일하게 결정됩니다. 특이행렬에서는 영공간에서의 직교 작용 선택 때문에 QQ가 유일하지 않을 수 있습니다. 반대쪽으로 묶는 A=KQA=KQ, K=UΣUTK=U\Sigma U^T도 가능합니다.

13. 자유도와 데이터 분석으로의 연결

정사각 n×nn\times n 직교행렬은 n2n^2개 성분 중 정규직교 조건 n(n+1)/2n(n+1)/2개를 만족하여 연속 자유도가 n(n−1)/2n(n-1)/2입니다. 예를 들어 2차원 회전은 각도 하나, 3차원 회전은 국소적으로 세 매개변수로 표현할 수 있습니다. 반사의 유무는 별도의 이산 선택입니다.

랭크 rr 축약 SVD에서 UrU_r의 자유도는 mr−r(r+1)/2mr-r(r+1)/2, VrV_r는 nr−r(r+1)/2nr-r(r+1)/2, 양의 특잇값은 rr개입니다. 서로 다른 특잇값을 갖는 일반적인 경우 합은

r(m+n−r)r(m+n-r)

이며, 이는 랭크 rr 행렬의 자유도입니다. 중복 특잇값에서는 SVD 기저 표현의 중복 선택을 따로 고려해야 합니다.

교재가 언급하는 Karhunen–Loève 전개와 PCA도 직교 방향별 분산으로 연결됩니다. 평균이 0인 확률벡터의 공분산 CC를 고유값 분해하면, 해당 기저의 좌표는 서로 무상관입니다. 일반적으로 독립까지 보장하는 것은 아니며, 결합 Gaussian 같은 추가 조건이 필요합니다. 큰 고유값의 방향부터 남기는 것이 평균 제곱 오차를 줄이는 근거가 됩니다.

14. 지정 문제 1번: 고유벡터 좌표의 에너지

대칭행렬 SS의 정규직교 고유벡터를 v1,…,vnv_1,\ldots,v_n, 고유값을 λi\lambda_i라 하고 x=∑icivix=\sum_i c_iv_i로 씁니다. 그러면

xTx=∑i,jcicjviTvj=∑ici2,x^Tx=\sum_{i,j}c_ic_jv_i^Tv_j=\sum_i c_i^2,

xTSx=∑i,jcicjλjviTvj=∑iλici2.x^TSx=\sum_{i,j}c_ic_j\lambda_jv_i^Tv_j=\sum_i\lambda_i c_i^2.

교차항이 사라지는 이유는 정규직교성입니다. S=ATAS=A^TA, λi=σi2\lambda_i=\sigma_i^2로 놓으면 이 풀이가 바로 특잇값의 최대 배율 해석을 줍니다. 지정 문제 6번의 전체 계산은 위 5절에 있습니다.

15. NumPy로 확인하기

import numpy as np

A = np.array([[3., 4.], [0., 5.]])
U = np.array([[1., -1.], [1., 1.]]) / np.sqrt(2)
s = np.array([3 * np.sqrt(5), np.sqrt(5)])
V = np.array([[1., -3.], [3., 1.]]) / np.sqrt(10)
assert np.allclose(U.T @ U, np.eye(2))
assert np.allclose(V.T @ V, np.eye(2))
assert np.allclose(A @ V, U @ np.diag(s))
assert np.allclose(A, U @ np.diag(s) @ V.T)
assert np.allclose(np.linalg.eigvalsh(A.T @ A), [5., 45.])
assert np.isclose(abs(np.linalg.det(A)), np.prod(s))

A1 = s[0] * np.outer(U[:, 0], V[:, 0])
assert np.isclose(np.linalg.norm(A - A1, 2), s[1])
assert np.isclose(np.linalg.norm(A - A1, "fro"), s[1])
Q = U @ V.T
S = V @ np.diag(s) @ V.T
assert np.allclose(A, Q @ S)
assert np.allclose(S @ S, A.T @ A)

# NumPy returns V transpose (Vh), not V.
Un, sn, Vh = np.linalg.svd(A, full_matrices=False)
assert np.allclose(A, Un @ np.diag(sn) @ Vh)
assert np.allclose(sn, s)

D = np.array([[1., 0., 0.], [-1., 1., 0.],
[0., -1., 1.], [0., 0., -1.]])
assert np.allclose(np.linalg.eigvalsh(D.T @ D),
[2 - np.sqrt(2), 2, 2 + np.sqrt(2)])
assert np.allclose(D.T @ np.ones(4), 0)

# A rectangular, rank-deficient example distinguishes economy and rank-r SVD.
B = np.outer([1., 2., 3.], [1., -1.])
Ub, sb, Vhb = np.linalg.svd(B, full_matrices=False)
assert Ub.shape == (3, 2) and Vhb.shape == (2, 2)
tol = np.finfo(float).eps * max(B.shape) * sb[0]
r = np.count_nonzero(sb > tol)
assert r == 1
assert np.allclose(B, Ub[:, :r] @ np.diag(sb[:r]) @ Vhb[:r, :])
print("SVD, low-rank approximation, polar, and finite-difference checks passed.")

위 계산에서 ATAA^TA는 SVD를 유도하고 손으로 계산하기 위한 도구입니다. 실제 수치 계산에서는 np.linalg.svd(A)처럼 원래 행렬에 직접 SVD 알고리즘을 적용합니다. ATAA^TA를 먼저 만들면 열이 독립인 경우에도 2-노름 조건수가 제곱되어 작은 특잇값의 상대 정확도에 불리할 수 있습니다. 특이벡터의 부호가 위의 손계산과 달라도 재구성과 정규직교성이 맞으면 올바른 분해일 수 있습니다.

16. 복습 질문

  1. SVD가 직사각형 행렬에도 가능한 이유를 Avi=σiuiAv_i=\sigma_i u_i로 설명할 수 있는가?
  2. σi=0\sigma_i=0일 때 ui=Avi/σiu_i=Av_i/\sigma_i 대신 무엇을 해야 하는가?
  3. ATAA^TA와 AATAA^T의 고유값 중 일치하는 부분과 달라질 수 있는 부분은 무엇인가?
  4. 타원의 축 방향과 반축 길이는 U, V, Σ 중 어디에 들어 있는가?
  5. 랭크 축약형과 NumPy의 경제형 SVD는 언제 크기가 달라지는가?
  6. ∏iσi\prod_i\sigma_i가 det⁡A\det A가 아니라 ∣det⁡A∣|\det A|인 이유는 무엇인가?

다음 Lecture 7은 교재 I.9 — Principal Components and the Best Low Rank Matrix, pp. 71–80으로 이어집니다. 아직 정리 글은 예정 상태이며 Lecture 7 원강의를 먼저 볼 수 있습니다.

참고 자료

이전: Lecture 5 · 전체 목차 · 다음 원강의: Lecture 7