본문 바로가기
AI 수학/선형대수

특이값 분해(SVD)의 증명

by 깊은대학 2020. 7. 23.

어떤 m×n 실수 행렬(real matrix) A와 그 전치 행렬 AT의 행렬곱 AATATA는 대칭행렬이며 준정정 행렬(positive semi-definite matrix)이다. 먼저 대칭행렬인지 확인해 보자. 행렬곱을 전치한 다음에 원래 행렬과 같은 지 확인하면 된다.

 

(AAT)T=AAT,   (ATA)T=ATA

 

그렇다면 AAT이 준정정 행렬인지 확인해 보자. 어떤 벡터 x에 대해서 다음 부등식을 만족하는지 확인하면 된다.

 

xT(AAT)x=(ATx)T(ATx)0

 

이번에는 ATA이 준정정 행렬인지 확인해 보자. 어떤 벡터 y에 대해서 다음 부등식을 만족하는지 확인하면 된다.

 

yT(ATA)y=(Ay)T(Ay)0

 

따라서 AATATA는 대칭행렬이며 준정정 행렬이다.

 

 

실수 대칭행렬의 고유값과 고유벡터는 모두 실수값이이며 고유벡터는 서로 직각이다. 따라서 AATATA의 고유값과 고유벡터는 모두 실수값이이며 고유벡터는 서로 직각이다.

 

2020/07/18 - [선형대수] - 실수 대칭행렬의 고유값과 고유벡터


정정(positive-definite) 행렬의 고유값은 모두 0보다 크다. 그렇다면 준정정(semi-positive definite) 행렬의 고유값은 어떨까. 정정과 준정정 행렬의 경계는 0을 포함하느냐 포함하지 않느냐에 있다. 준정정 행렬의 고유값은 0을 포함한다. 그렇다면 준정정 행렬에는 몇 개의 0인 고유값이 있을까.

p×p 인 준정정 행렬 M이 있다고 하자. 고유값 0에 대응하는 고유벡터가 v라고 할 때 다음 식이 성립한다.

 

Mv=0v=0

 

따라서 고유값 0에 대응하는 고유벡터는 행렬 M의 영공간(null space)에 있는 벡터다. 영공간의 차원은 p와 행렬 M의 랭크(rank)의 차이이므로 고유값 0에 대응하는 서로 독립인 고유벡터는 (prank(M))개다. 또한 0이 아닌 고유값에 대응하는 고유벡터의 개수는 rank(M)이다.

준정정 행렬의 고유값은 모두 0보다 크거나 같다. 따라서 AATATA의 고유값은 모두 0보다 크거나 같다. 그리고 0이 아닌 고유값에 대응하는 고유벡터 개수는 rank(A)다.

그러면 m×n 실수 행렬(real matrix) A의 랭크가 r일 때, 행렬곱 ATA의 0이 아닌 고유값과 고유벡터는 다음과 같이 쓸 수 있다.

 

(1)ATAvi=σi2vi,   i=1,,r

 

여기서 σi2은 0이 아닌 고유값이며(따라서 0보다 큰 실수값), vi는 그에 대응하는 고유벡터다. 고유벡터는 크기가 1이며 서로 직각인 단위 직각 벡터다.

 

viTvj={1,i=j0,ij

 

따라서 식 (1)의 양변에 viT를 곱하면,

 

viTATAvi=σi2viTvi(Avi)TAvi=σi2

 

가 되어서 벡터 Avi의 크기는 σi가 된다.

이제 새로운 단위 벡터 ui를 다음과 같이 정의한다.

 

(2)ui=Aviσi

 

그리고 식 (1)의 양변에 A를 곱하면,

 

AATAvi=σi2Avi(3)AATui=σi2ui

 

가 된다. 식 (3)에 의하면 단위 벡터 ui는 행렬 AAT의 고유값 σi2에 대응하는 고유벡터가 되는 것을 알 수 있다.

그럼 벡터 ui는 서로 직각일까. 계산해 보자.

 

uiTuj=viTATAvjσiσj=viTσj2vjσiσj={1,i=j0,ij

 

따라서 고유벡터 ui는 단위 직각 벡터다.

식 (2)를 r개의 벡터에 대해서 쓰면 다음과 같다.

 

(4)AVr=UrΣr

 

여기서

 

(5)Vr=[v1v2vr]Ur=[u1u2ur]Σr=[σ1σ2σr]

 

이다. Vrn×r 행렬이고 Urm×r 행렬이며 Σr은 대각 성분이 행렬 A의 특이값인 r×r 대각 행렬이다. 특이값은 큰 수에서 작은 수의 순서로 정렬되어 있다.

 

σ1σ2σr>0

 

이제 행렬 Vr에 고유벡터 vi뿐 만 아니라 서로 간에도 직각인 n×1 단위 벡터 (nr)개를 행렬 A의 영공간에서 선정하여 추가한다.

 

(6)V=[Vr  Vnr]

 

여기서 Vnr=[vr+1vr+2vn]인 행렬이며 Vn×n 인 단위 직교행렬이다. 즉, V1=VT이다.

행렬 Ur에도 같은 과정을 거쳐서 m×m 인 단위 직교행렬 U를 만든다.

 

(7)U=[Ur  Umr]

 

여기서 Umr=[ur+1ur+2um]이며 U1=UT이다.

행렬 Σr에도 0 행렬을 추가하여 m×n 행렬 Σ를 만든다.

 

(8)Σ=[Σr000]

 

그러면 식 (4)를 다음과 같이 쓸 수 있다.

 

(9)AV=UΣ

또는

(10)A=UΣVT

 

식 (10)은 어떤 m×n 실수 행렬 A를 3개의 행렬의 곱으로 분해한 것으로 특이값 분해(svd)라고 한다.

 

특이값 분해

 

특이값의 특징을 정리하면 다음과 같다.
σ12, σ22, , σr2은 행렬 AATATA의 0이 아닌 고유값이다.
행렬 UrVr을 구성하는 열벡터는 행렬 AATATA의 고유값에 대응하는 고유벡터다.