Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기

선형대수

Singular value decomposition (1)

1. 특이값 분해(Singular value decomposition, SVD)

■ 행렬 A가 대각화 가능하지 않은 m×m 정방행렬이거나, 심지어는 m×n 비정방행렬인 경우에도 다음과 같이 크기가 다른 두 개의 직교행렬 UVT 그리고 대각행렬 Σ로 분해하는 것을 특이값 분해라고 부른다. 

A=UΣVT

- 이렇게 특이값 분해를 하기 위한 행렬 A는 어떤 행렬이든 될 수 있다. 

- 고윳값 분해(EVD)는 정방행렬에서만 가능한 행렬 대각화 방법이다. 

 SVD는 고윳값 분해와 비슷하게 보일 수 있다. (실제로 고윳값 분해에 대한 내용은 특이값 분해(SVD)에도 대부분 적용 가능) 

■ 새로운 점은 특이값 분해를 위해서 두 개의 직교행렬이 필요하다는 것이다. 어떤 행렬이든 특이값 분해를 가지고 있으며, 가운데에 대각 행렬이 있다. 

■ 행렬의 특이값 분해는 이미지 압축이나 보정과 같은 이미지 처리 기법, 데이터를 추출하는 통계 기법 등 다양한 분야에서 응용되고 있다.


1.1 SVD의 구조

■ 특이값 분해는 m×n크기를 갖는 비정방행렬 AA=UΣVT로 나타낸다.

A A=UΣVT로 나타냈을 때, 각 행렬에 대한 구조는 다음과 같다.

■ 이렇게 SVD는 고윳값 분해(EVD)와 달리, 정방행렬이 아니어도 분해가 가능하다.

■ 여기서 U는 왼쪽 특이벡터(left singular vector) 행렬, Σ는 특이값 행렬, V는 오른쪽 특이벡터(right singular vector) 행렬이라고 부르며, 행렬 AUΣ 그리고 V의 전치행렬인 VT의 곱으로 분해된다.

■ 이때, 행렬 A가 정방이 아니어도 UV는 모두 정방행렬이다. 

■ 그리고 UV는 직교행렬이므로 UTU=I,VTV=I이다.

■  A의 rank가 r이라면, 특이값 행렬 Σr개의 비영(non-zero) 특이값을 가진다.

(= 0이 아닌 특이값의 개수는 행렬의 계수(rank)와 같다.)

이때,  Σ의 대각 원소에 나타나는 r개의 특이값들은 항상 가장 큰 값(왼쪽 위)부터 가장 작은 값(오른쪽 아래) 순서대로 정렬된다. 그리고 r+1부터 나머지 대각 원소들은 모두 0이다. 

또한, 모든 특이값은 음수가 아닌 실수이다. 행렬에 복소숫값이 포함되어 있더라도 특이값이 복소수나 음수가 될 수 없다.

U의 처음 r개의 열은 행렬 A의 열공간 C(A)에 대한 정규직교기저(벡터), 나머지 mr개의 열은 A의 left nullspace(즉, AT의 nullspace)에 대한 정규직교기저이다.

그러므로 U의 열벡터들이 m차원 공간 전체 Rm을 생성한다고 할 수 있다. 즉, A의 열공간과 left nullspace가 만드는 전체 공간 Rm에서 열공간의 차원이 m이므로 left nullspace의 차원은 0. 즉, left nullspace N(AT)={0}. 즉, left nullspace는 비어 있다.

VT의 처음 r개의 행(= Vr개의 열)은 행공간 C(AT)에 대한 정규직교기저, 나머지 nr개의 행(= V는 열에 해당)은 A의 영공간(nullspace)에 대한 정규직교기저이다.

그러므로 VT의 행벡터들이 n차원 공간 전체 Rn을 생성한다고 할 수 있다.

이 영공간 기저벡터들은 Σ 행렬의 0인 특이값에 대응된다.

A가 비정방행렬일 때, A의 계수가 r=m이면, left nullspace의 공간은 {0}이다. 동일한 논리로 A가 비정방행렬일 때, A의 계수가 r=n이면 영공간은 N(A)={0}. 즉, 영공간(nullspace)는 비어 있다.

■ 특이값 분해(SVD)의 가장 중요한 특징은 행렬의 4개의 부분공간(row space, column space, nullspace, left nullspace)을 모두 나타낸다는 점이다.  

[출처] Gilbert Strang - Introduction   to Linear  Algebra

- A의 열공간은 U의 처음 r개의 열벡터로 생성되며 , A left nullspace는 U 나머지 mr개의 열벡터에 의해 생성된다.

- A의 행공간은 VT의 처음 r개의 행벡터로 생성되며, A의 영공간(nullspace)는 VT으 나머지 nr개의 행벡터에 의해 생성된다. 

- 그리고 A가 비정방행렬일 때, r=m이면 left nullspace의 공간인 N(AT)={0}

-  A가 비정방행렬일 때, r=n이면 영공간(nullspace)의 공간인 N(A)={0}  

■ 이는 Σ 행렬에서 0이 아닌 특이값의 개수인 행렬 A의 계수 r이 영공간과 left nullspace의 차원을 결정하는 것으로 볼 수 있으며,  행렬의 계수 rΣ 행렬에서 0이 아닌 특이값의 수로 결정되는 것으로 볼 수 있다.

■ 그리고 영공간들(nullspace, left nullspace)은 특이값 분해에서 대각 원소로 특이값을 갖는 Σ 행렬의 대각 원소에 0으로 나타난다.

- 특이값 분해에서 행렬 AA=UΣVT로 분해된다. 

- 여기서 1.1에 명시한 것처럼, A의 계수(rank)가 r이라면, 시그마 행렬은 r개의 비영(non-zero) 특이값을 가진다. 그리고 r+1부터 나머지 대각 원소들은 모두 0이다.

- 이때, VT의 마지막 nr개의 행(= V는 열에 해당)은 A의 영공간(nullspace)에 대한 정규직교기저이며, 

- U의 마지막 mr개의 열은 A의 left nullspace(즉, AT의 nullspace)에 대한 정규직교기저이다.

- 특이값 분해에서 영공간(nullspace)와 left nullspace는 대각행렬인 Σ 행렬의 대각선에(특이값을 나타내는 위치에) 0으로 나타난다.  

- 그 이유는 1.2의 두 번째 설명에 명시한 SVD의 성질 Avi=σiui와 영공간의 정의, left nullspace의 정의를 통해 확인할 수 있다. 

--  Avi=σiui에서 viVi 번째 열(= VTi 번째 행)벡터 

-- uiUi 번째 열벡터, σiΣ행려에서 i번째 특이값이다.

- 영공간의 정의는 Ax=0을 만족하는 벡터 x들의 집합이다. 

- 만약, σi=0이라면, Avi=σiuiAvi=0×ui=0이 된다. 즉, vi는 영공간에 속한다.

- 다시 말해, 특이값이 0인 경우, 이에 대응하는 오른쪽 특이벡터 vi는 행렬 A의 영공간에 속한다.

- 즉, 특이값이 0일 때, 행렬 V 내의 i 번째 영공간의 정규직교벡터 vi가 존재하는 것으로 볼 수 있다. 그러므로 영공간(nullspace)은 특이값 분해에서 Σ라는 대각행렬의 대각선에 0으로 나타나는 것이다.

- left nullspace에 대해서도 유사한 논리가 적용된다. ATui=σivi에서 σi=0이면, ui는 left nullspace에 속한다.

- 그러므로 특이값이 0인 경우, 이에 대응하는 왼쪽 특이벡터 ui는 행렬 A의 left nullspace에 속한다. 

- 즉, 특이값이 0일 때, 행렬 U 내의 i 번째 left nullspace의 정규직교벡터 ui가 존재하는 것으로 볼 수 있다. 그러므로 left nullspace는 특이값 분해에서 Σ라는 대각행렬의 대각선에 0으로 나타나는 것이다.


1.2.  UΣVT '직교행렬 대각행렬 직교행렬'의 형태

■ 벡터공간의 표준기저에 대한 선형사상의 행렬표현이 A일 때, Avi=λivi을 만족하도록 벡터공간의 정규직교기저 {v1,,vn}를 잘 선택하는 것이 행렬의 직교대각화라고 생각할 수 있다.

행렬의 대각화가 가능하지 않은 경우나 두 벡터공간의 차원이 다른 경우, 선형사상(선형변환)의 정의역의 정규직교기저 {vi}와 공역의 정규직교기저 {ui}를 다르게 잡아서 Avi=σiui가 성립하도록 할 수 있다. 이것이 특이값 분해이며, 특이값 분해를 통해 얻을 수 있는 결과이다.

예를 들어, 다음 그림처럼 어떤 선형변환을 통해 행공간에 있는 벡터 v1이 어떤 연산을 통해서 열공간에 있는 어떤 벡터 u1으로 이동한다고 하자. 즉,  A를 선형변환의 행렬표현이라고 했을 때 u1=Av1이다.

- 이렇게 행공간에서 열공간으로 선형변환하면 행공간에 있는 다른 벡터들도 열공간으로 이동하게 된다.

■ 이 특이값 분해에서 찾아야 하는 것은 행공간의 직교 기저이다. 1.1.1의 두 번째 설명에 언급한 것처럼, 행공간의 직교기저가 이동하여 열공간의 직교기저로 변환되기 때문이다.

■ 행공간에서 v1과 직각인 벡터를 v2라고 하자. 그렇다면 v1v2는 직교기저이다. 이 직교기저들이 선형변환에 의해 다음과 같이 열공간으로 이동하여 u1,u2라는 열공간의 직교 기저로 이동하게끔 만드는 것이 목표이다. 즉, 열공간의 직교 기저로 이동하는 행공간의 직교 기저를 찾는 것이 목표이다.

■ 즉 특이값 분해는 정의역에 있는 직교 벡터들에 대해, 선형변환했을 때, 벡터의 크기는 변하지만 변환된 공간에서 여전히 직교하는 직교 벡터들이 무엇인지 알려주는 역할을 한다고 생각할 수 있다.

■ 이 행공간에 대한 직교 기저는 행공간의 어떠한 (일반) 기저 하나로 시작해서 그람-슈미트 과정을 통해 찾을 수 있다.

■ 하지만, 아무 직교 기저를 사용한다면, 즉 행공간의 아무 직교 기저를 선형변환의 행렬표현 A에 곱한다고 해서 이것이 열공간에서 직교 기저가 되어야 할 이유는 없다. 

■ 그래서 행공간에 있는 기저 벡터를 사용하여 A와 곱했을 때, 열공간에서 직교 벡터가 되는 특별한 설정을 찾아야 한다.

■ 위의 그림에서 영공간(nullspace)과 left nullspace가 포함되지 않은 것을 볼 수 있다. 왜냐하면 해당 공간들은 아무런 영향을 미치지 않는다. 1.1에 명시한 것처럼, 영공간들(nullspace, left nullspace)은 특이값 분해에서 Σ라는 대각행렬의 대각선에 0으로 나타난다.

A의 행공간의 차원은 A의 계수(rank)이므로 행공간의 기저벡터는 v1,v2,,vr이다. 

A의 행공간에 있는 기저벡터를 정규직교기저(벡터)로 만들어서 A와 곱하면, A[v1,v2,,vr]이며, Av1이 첫 번째 열이 될 것이다.

■ 그리고 v1,v2,,vr은 정규직교기저이므로 단위벡터이다. 벡터에 행렬을 곱하는 것은 벡터에 선형변환을 하는 것과 동일하다. 행렬은 선형변환처럼 벡터를 변환시켜 크기도 방향도 모두 다를 수 있는 벡터를 만들기 때문이다.

그러므로 Av1=σ1u1을 선형변환의 관점에서 보면, 선형변환의 역할을 수행하는 행렬 A와 단위벡터 v1의 곱은 u1σ1을 곱한. 즉, 다음 그림에서 표현된 것과 같은 배수 관계를 갖는다.

- 현재 고윳값 분해가 아니므로 이 배수는 λ가 아니다. 여기서 이 배수는 sigma라고 부른다. (특이값 분해에서는 이 시그마를 특이값이라고 부른다.) 

■ 특이값 분해는 위의 그림과 같이 Av1=σ1u1에서 v1이 정규직교기저일 때, 선형변환을 통해서(= v1에 행렬 A를 곱해서) u1열공간 내의 정규직교기저가 되게 하는 행공간의 기저를 찾는 것이 목표이다.

Av1=σ1u1,Av2=σ2u2,이므로 A[v1,v2,,vr,]는 다음과 같이 나타낼 수 있다. 

A[v1v2vr]=[u1u2ur][σ1000σ2000σr]AV=UΣ 

- 다시 정리하면,

- 행렬 V의 열벡터 v1,v2,,vr은 행렬 A의 행공간의 정규직교기저(벡터)이고

- 행렬 U의 열벡터 u1,u2,,ur은 행렬 A의 열공간의 정규직교기저이며

- Σ에 있는 σ1,sigma2,σru1,u2,,ur에 곱해지는 요소들이다.

- 곱해지는 배수 인자인 σ들이 대각 원소에 있으므로 대각선을 제외한 나머지 위치에 존재하는 원소들은 항상 0이 된다. 그러므로 Σ는 대각행렬이 된다. 

AV=UΣ에서 V는 행공간에 있는 정규직교기저들로 구성된 행렬, U는 열공간에 있는 정규직교기저들로 구성된 행렬이므로, A는 대각행렬 Σ로 변환되는 것으로 볼 수 있다.

■ 여기서 VU는 각각 행공간과 열공간의 정규직교기저들로 구성된 행렬이므로 직교행렬이다. AV=UΣ 식의 양변에 V의 역행렬을 곱하면 A=UΣV1이며, V는 직교행렬이므로 A=UΣVT로 나타낼 수 있다. 

A=UΣVT에는 두 개의 직교 행렬 UV가 있다. U,V를 한 번에 찾을 수는 없고, 별도로 찾아야 한다.

■ 그 방법은 바로 ATA, AAT 표현을 이용하는 것이다.

ATA를 이용해 U를 사라지게 만들어 V를 구할 수 있고, AAT를 이용해 V를 사라지게 만들어 U를 구할 수 있다.

■ 일반적인 직사각형 행렬 A가 있을 때, ATA는 대칭 행렬이고, 양의 정부호 또는 적어도 양의 준정부호이다. 이것은 좋은 특성을 가진 행렬이다.

A=UΣVT일 때, AT=VΣTUT이므로 ATA=(VΣTUT)(UΣVT)가 된다.

■ 이때, U는 직교행렬이므로 UTU=I가 된다. 그러므로 ATA=(VΣTUT)(UΣVT)=VΣTΣVT가 된다. 

ATA=VΣTΣVT에서 Σ행렬은 대각행렬이다. 그러므로 ΣTΣ는 단지 대각선 위에 σ값의 제곱을 가지게 된다.

ATA=VΣTΣVT=V[σ210000σ220000σ230000]VT

■ 정리된 ATA 식을 보면, 이는 고윳값 분해의 QΛQT와 동일한 것을 볼 수 있다.

- 즉 ATA에 대해 VATA의 고유벡터로 구성된 행렬,

- ΣTΣ는 대각 원소가 ATA의 고윳값으로 구성된 행렬

■ 행렬 A는 그 자체로 특별하지 않지만, ATA는 대칭 양의 정부호(symmetric positive definite)이므로, VATA의 고유벡터로 구성된 직교행렬, ΣTΣ=Σ2ATA의 고윳값으로 구성된 대각행렬이다.

■ 그리고 이 고윳값들은 양수가 된다. 왜냐하면 ATA는 양의 정부호이기 때문이다. 

ATA 표현을 통해 VATA의 고유벡터로 구성된 직교행렬임을 확인하였다. 이제 AAT표현을 통해 U가 무엇인지 찾으면 된다. 

AAT 표현을 이용하면 V를 제거하고 U만 남게 된다. AAT=UΣTΣUT=UΣ2UT

 V를 찾기 위한 과정과 U를 찾기 위한 과정은 동일하다. ATA를 이용하느냐 AAT를 이용하느냐의 차이이다.

■ 즉, UAAT의 고유벡터로 구성된 직교행렬이다. 그리고 이 경우에도 Σ2이므로 Σ2행렬은 대각 원소에 양의 σ값을 가진다.

■ 예를 들어, ATA=[4343][4433]=[257725]라고 하자.

■ 그러면 정방행렬 ATA 고유벡터들은 행렬 V가 될 것이고, ATA의 고윳값은 σ의 제곱이 될 것이다.

■ 이 ATA 예시의 고유벡터는 [11][11]이다.

ATA=[257725]에 고유벡터 [11]를 곱하면 32[11]이 된다. 즉, ATA의 고유벡터 중 하나는 [11]이고 이 고유벡터에 대응되는 고윳값은 32이다.

ATA=[257725]에 고유벡터 [11]를 곱하면  18[11]이 된다. 즉, ATA의 고유벡터 중 하나는 [11]이고 이 고유벡터에 대응되는 고윳값은 18이다.

ATA=VΣ2VT에서 VATA의 고유벡터로 구성된 직교행렬이었다. 즉, V에는 ATA의 고유벡터에 정규직교를 가한 벡터로 구성된다.

■ 그러므로 위의 ATA에서 얻은 고유벡터들에 대해 정규화를 해야 한다. 그러면 정규화한 ATA의 고유벡터들은 [1/21/2][1/21/2]이며, 

[1/21/2] [1/21/2]로 구성된 행렬이 바로 V이다.

■ 그리고 ATA=VΣ2VT에서 Σ2의 대각 원소 σ2은 고윳값이었다. 즉, 특이값인 σ값은 고윳값의 제곱근이다. 그러므로 특이값 행렬 Σ의 대각 원소는 3218이다.

■ 그러므로 이 예시에서 행렬 A=[4433]은 특이값 분해 A=UΣVT로 나타낸다면, ΣV를 알고 있으므로 

[4433]=U[320018][1/21/21/21/2] 로 나타낼 수 있다.

■ 이제 마지막으로, U를 찾아야 한다.

- 사실, 위의 상태에서 U를 제외한 나머지 행렬들을 알고 있으므로, 나머지 행렬들( A,Σ,VT )를 이용해서 U를 도출할 수 있다.

AAT=UΣ2UT이며, AAT는 symmetric positive definite이거나 최소한 semi-definite matrix이므로 UAAT의 고유벡터들로 구성된 직교행렬이며 Σ2AAT의 고윳값으로 구성된 고윳값 대각행렬이며, 대각 원소들은 양수가 된다.

UAAT의 고유벡터들로 구성된 직교행렬이므로 AAT를 계산할 필요가 있다.

AAT=[4433][4343]=[320018]이므로 AAT의 고윳값은 32, 18이며, λ=32에 대응되는 고유벡터는 [10], λ=18에 대응되는 고유벡터는 [01]이다. 

위에서 계산한 ATA의 고윳값과 AAT의 고윳값이 동일한 것을 확인할 수 있다.

- Ax=λx에서 A 대신 ATA를 놓으면

- ATAx=λx이며, 양변에 A를 곱하면 (AAT)(Ax)=λ(Ax)가 된다.

- 이때, ATA의 고윳값과 AAT의 고윳값은 λ로 동일한 것을 볼 수 있다.

■ 이 예시에서 AAT의 고유벡터들이 직교행렬 U를 구성하는 벡터들이 되기 위해선, 마찬가지로 정규화가 필요하지만, 이미 AAT의 고유벡터들은 [10], [01]이다. 

U를 구했으므로, A에 대한 특이값 분해는 다음과 같다. 

[4433]=[1001][320018][1/21/21/21/2] 

■ 또 다른 예로, A=[4386]이다. 이 행렬은 특이(singular) 행렬이다.

■ 즉, 이 행렬의 계수(rank)는 1이므로 행공간과 열공간의 차원은 1차원이며, 퇴화차수(영공간의 차원)은 nrank=21=1이다.

■ 그러므로 이 행렬의 행공간은 행벡터 (4, 3)에 의해 생성되며(행벡터 (4, 3)에 스칼라배한 벡터들로 행공간이 생성되며), 열공간은 열벡터 (1, 2)에 의해 생성된다. (열벡터 (1, 2)에 스칼라배한 벡터들로 열공간이 생성된다.) 

그러므로 행공간과 열공간은 다음과 같이 2차원 공간 상에서 직선(1차원)이 된다.

■ 이 예시에서 전체 공간은 행렬 A2×2이므로 Rn=R2이며, Rm=R2이다.

■ 행공간과 수직인 공간은 영공간(nullspace)이다. 이 예에서 Rn=R2이며, 행공간은 1차원이므로 영공간은 1차원이다.

그리고 열공간과 수직인 공간은 left nullspace이다. 이 예에서 Rm=R2이며, 열공간은 1차원이므로 left nullspace은 1차원이다.

그러므로 이 예시 행렬의 4개의 부분공간은 다음과 같다.

■ 즉, 직교 기저를 선택할 때 행공간에 직교하는 영공간의 기저를, 영공간과 직교하는 left nullspace의 기저를 선택할 수 있다. 

■ 이 예시에서 행렬 A2×2이므로 V행렬은 v1v2 두 개의 정규직교가저로 구성된다. 이때, v1은 행공간에 있는 기저 벡터를, v2는 행공간의 기저 벡터와 직교하는 영공간의 기저 벡터를 선택할 수 있다는 얘기이다. 이는 U행렬에 대해서도 마찬가지이다.

이 예시에서 행공간의 기저 벡터는 (4, 3)이다. 이 기저 벡터를 V행렬의 v1벡터로 사용하기 위해서는 이 기저 벡터를 정규직교기저로 만들어야 한다. 정규직교기저로 만들면 (4/5, 3/5) = (0.8, 0.6)이 된다.

그리고 v2v1과 수직이므로 v1과의 내적 결과가 0이 되는 정규직교기저를 v2로 사용하면 된다.

■ 영공간의 기저 벡터는 (1, 2)이다. 이 기저 벡터를 U행렬의 u1벡터로 사용하기 위해서는, 마찬가지로 정규직교기저로 만들어야 한다. 정규직교기저로 만들면 (1/sqrt(5), 2/sqrt(5))이다. u1u2는 수직이므로 u1과의 내적 결과가 0이 되는 정규직교기저를 u2로 사용하면 된다.

Σ 행렬을 찾기 위해 ATA 표현을 이용하면, ATA=[4836][4386]=[80606045]이며, A는 rank가 1인 행렬이므로 ATA도 rank가 1인 행렬이 된다.

■ rank가 1이므로 이 행렬의 고윳값 중 하나는 0이 된다. 대각합은 고윳값의 합이므로 다른 하나의 고윳값은 125이다.

Σ 행렬의 대각 원소는 ATA의 고윳값의 제곱근이므로, 이 예시의 Σ=[125000]가 된다.

■ 여기서 행렬 A의 계수(rank)는 0이 아닌 특이값의 개수라는 것을 알 수 있다. 이 예에서 행렬 A의 rank는 1이며, Σ 행렬에서 0이 아닌 특이값 σ의 개수는 1개이다.

U,,V,Σ 행렬을 찾았으므로 행렬 A에 대한 특이값 분해를 나타낼 수 있다. 

A=[4386]=15[1221][125000][0.80.60.60.8]

■ 여기서 행렬 U=15[1221]를 보면, 1열인 [12]는 열공간의 정규직교기저이며, 2열은 열공간의 정규직교기저와 직교하는 left nullspace의 정규직교기저임을 알 수 있다. 

■ 그리고 행렬 VT=[0.80.60.60.8]를 보면, 1행은 행공간의 정규직교기저이며, 2행은 행공간의 정규직교기저와 직교하는 영공간(nullspace)의 정규직교기저임을 알 수 있다.

■ 행렬 UV에 들어가는 행공간, 열공간, 영공간, left nullspace의 정규직교기저는 행렬 A의 rank와 관련이 있는 것을 알 수 있다.

행렬 A의 rank를 r이라고 했을 때, r=1이다. 여기서 r은 행공간의 차원이므로 행공간의 차원은 1이며, 행공간과 직교하는 영공간의 차원은 nr=21=1이다.

- VT의 1행은 행공간의 정규직교기저로 행공간을 생성하는 벡터이다. 2행은 영공간의 정규직교기저로 영공간을 생성하는 벡터이다.

- 그리고 VT에서 행공간의 정규직교기저의 위치와 영공간의 정규직교기저의 위치는 행렬 A의 계수(rank) r=1을 기준으로 나뉘는 것을 볼 수 있다.

- U에도 동일한 논리가 적용된다.

- 열공간의 차원은 행렬 A의 rank인 r이므로 열공간의 차원은 1이다. 그리고 열공간과 직교하는 left nullspace의 차원은 mr=21=1이다. 

- U의 1열은 열공간을 생성하는 열공간의 정규직교기저, 2열은 left nullspace를 생성하는 left nullspace의 정규직교기저이다. 

- 즉, U 역시 A의 계수 r을 기준으로 나뉘어지는 것을 볼 수 있다.

그러므로, 행렬 A의 계수(rank)를 r이라고 했을 때,

- 정방행렬인 직교행렬 V를 구성하는 행벡터 v에 대해,  v1,v2,,vr은 행공간에 대한 정규직교기저이며, vr+1부터 나머지 벡터는 영공간에 대한 정규직교기저이다.

- 정방행렬인 직교행렬 U를 구성하는 열벡터 u에 대해, u1,u2,,ur은 열공간에 대한 정규직교기저이며, ur+1부터 나머지 벡터는 left nullspace에 대한 정규직교기저이다.

■ 그리고 특이값 분해에서는 이 기저들이 행렬을 대각화하기 위해 특이값 σ가 필요했다. 행렬 A에 대하여 σ의 관계는 Avi=σiui. 즉, Avi는 벡터 uiσi만큼의 배수가 된다.

■ 이 σi가 왼쪽 특이벡터와 오른쪽 특이벡터를 연결하는 역할을 수행한다.


정리

■ 행렬 A가 정방이 아닌 m×n 비정방에 대해서도 특이값 분해를 통해 고윳값 분해처럼 대각화를 할 수 있다.

■ 특이값 분해는 보통 행렬의 대각화가 가능하지 않은 경우나 두 벡터공간의 차원이 다른 경우, 선형변환의 정의역의 정규직교기저 vi와 공역의 정규직교기저 ui를 다르게 잡아서 선형변환을 표현할 수 있도록 하기 위해 사용된다. 

즉, Avi=σiui라는 선형변환이 성립하도록 만드는 것이다.

이는 선형변환의 역할을 수행하는 행렬 A를 정의역의 정규직교기저 vi에 작용했을 때(곱했을 때), 변환되는 벡터가 공역의 정규직교기저 ui의 배수 σiui가 되도록 하는 과정으로 이해할 수 있다.

■ 그러므로 A에 대해 특이값 분해를 하면 A=UΣVT로 분해되며, 이때 U와 VT는 각각 정규직교기저 ui와 vi로 구성된 직교행렬(BTB=I)이다. 

- 여기서 U의 열벡터를 행렬 A의 왼쪽 특이벡터, V의 열벡터를 행렬 A의 오른쪽 특이벡터라고 부른다.
- 이 특이벡터들은 마치 고윳값 분해에서 A를 대각화하기 위해 사용된 Q 행렬의 벡터들과 동일한 역할(=대각화하는 역할)을 수행한다. 

■ 그리고 행렬 A의 계수(rank)가 r이라면, 

- 대각행렬인 특이값 행렬 Σ의 대각 원소에 있는 0이 아닌 특이값의 개수는 A의 계수 r이다.
- U의 처음 r개의 열은 행렬 A의 열공간을 생성하는 열공간의 정규직교기저이며, 나머지 열은 left nullspace을 생성하는 left nullspace의 정규직교기저이다. 

- VT의 처음 r개의 행은 행렬 A의 행공간을 생성하는 행공간의 정규직교기저이며, 나머지 행은 영공간(nullspace)을 생성하는 영공간의에 정규직교기저이다.
- 그러므로 행렬 A가 m×n크기를 갖는 비정방행렬일 때, r=m이면 left nullspace는 {0}이므로 전체 공간의 차원은 A의 열공간의 차원이 된다.
r=n이면 영공간은 {0}이므로 전체 공간의 차원은 A의 행공간의 차원이 된다.

■ 이렇게 특이값 분해(SVD)는 행렬의 4개의 부분공간인 행공간, 열공간, 영공간, 왼쪽 영공간을 모두 나타낸다는 특징이 있다.

A=UΣVT에서 직교행렬인 U와 V를 구하기 위하여 ATA 표현과 AAT 표현을 이용한다.

ATA는 행렬 A의 오른쪽 특이벡터를 구하기 위해 사용된다. 즉, ATA를 통해 행렬 V를 도출할 수 있다.
AAT는 행렬 A의 왼쪽 특이벡터를 구하기 위해 사용된다. 즉, AAT를 통해 행렬 U를 도출할 수 있다.
- 이 방법들은 U와 V가 직교행렬임을 이용하는 방법이다.

■ 먼저, ATA=VΣTUTUΣVT=VΣ2VT가 된다.

U는 직교행렬이므로 UTU=I
- Σ는 대각행렬이므로 ΣTΣ=Σ2
- AAT=UΣVTVΣTUT=UΣ2UT가 된다.

■ 이때, 대칭행렬 ATA와 AAT를 전개한 식을 보면, 고윳값 분해의 QΛQT와 동일한 형태임을 확인할 수 있다. 

즉, 대칭행렬에 대해서 특이값 분해(SVD)는 고윳값 분해와 같은 개념이라고 생각할 수 있다.

ATAAAT는 (대칭) 양의 정부호 행렬이거나 최소한 양의 준정부호 행렬이다. 그러므로 VUATA의 고유벡터로 구성된 직교행렬, AAT의 고유벡터로 구성된 직교행렬이며, Σ2 행렬은 ATA 또는 AAT의 고윳값으로 구성된 대각행렬이다. 

■ 또한, ATAAAT는 (대칭) 양의 정부호 행렬이거나 최소한 양의 준정부호 행렬이라는 것은 대각행렬인 Σ2의 대각 원소가 적어도 양수라는 것 의미한다.

이때, 대각 Sigma2의 원소는 ATA 또는 AAT의 고윳값으로 구성되었으므로 고윳값들은 양수라고 할 수 있다. 

Σ2의 대각 원소인 σ2가 ATA 또는 AAT의 고윳값이라면 특이값 σ은 고윳값의 제곱근이며, 이때 고윳값이 양수였으므로 모든 특이값은 음수가 아닌 실수라고 할 수 있다.

ATA나 AAT는 대칭행렬이 된다. 대칭행렬의 고윳값은 실수이므로 특이값은 실수이다. 

■ 또한, 대칭행렬의 고유벡터는 직교이므로 특이벡터는 직교벡터가 되어야 한다. 즉, ATA의 고유벡터는 오른쪽 특이벡터가 되기 위해서는 직교벡터가 되어야 한다. 

- UV의 벡터를 정규직교기저로 가정했으면, 대칭행렬 ATAAAT의 고유벡터를 정규화하여 정규직교기저로 만들면 된다.

■ 이러한 특이값 행렬의 특징을 정리하면 ① 특이값은 음수가 될 수 없다 ② 특이값은 실수이다 ③ 특이벡터는 (정규)직교벡터이다. 

■ 이렇게 U,V,Σ 행렬을 찾았으면 A에 대해 특이값 분해를 수행할 수 있다. 

■ 특이값 분해를 나타냈을 때, U를 보면 m×n행렬 A의 계수(rank)가 r일 때, m×m행렬 U의 1열부터 r열까지는 열공간의 (정규)직교기저, r+1열부터 m열까지는 left nullspace의 (정규)직교기저임을 확인할 수 있다.

n×n 행렬 VT를 보면 VT의 1행부터 r행까지는 행공간의 (정규)직교기저, r+1행부터 n행까지는 영공간의 (정규)직교기저임을 확인할 수 있다.

■ 그리고 특이값 행렬에서 대각 원소에 있는 특이값은 항상 가장 큰 값(왼쪽 위)부터 가장 작은 값(오른쪽 아래) 순서대로 정렬된다. 또한, 특이벡터는 동일한 특이값과 쌍을 이루는 것을 확인할 수 있다.

■ 특이벡터는 동일한 특이값과 쌍을 이룬다는 것은 i번째 왼쪽 특이벡터를 ui, i번째 특이값을 σi, i번째 오른쪽 특이벡터 vTi라고 하자.

■ 예를 들어, 가장 큰 특이값은 특이행렬의 맨 왼쪽 위에 위치한다. 즉, σ1이다. 

- σ1σ2σr>0이기 때문

■ 그리고 특이벡터 u1U의 1열에 v1VT의 1행에 위치한다. 이를 그림으로 나타내면 다음과 같으며, 특이벡터는 동일한 특이값과 쌍을 이루는 것을 볼 수 있다.  

■ 이때, ui, σi, vTi를 곱하면, σi는 실수이므로 열벡터 × 행벡터이다.

이렇게 열벡터 × 행벡터. 벡터의 곱셈을 계산하면 행렬 A와 동일한 크기를 갖는 계수(rank)가 1인 행렬이 만들어진다.

■ 예를 들어,  u1 σ1 vT1을 곱하면 행렬 A와 동일한 크기를 갖는 계수가 1인 행렬이 만들어진다. 그리고 이 행렬은 가장 큰 특이값 σ1을 가지고 있는 행렬이 된다.

u2 σ2 vT2을 곱했다면, 두 번째로 큰 특이값을 가지고 있는 행렬 A와 동일한 크기를 갖는 계수가 1인 행렬이 된다.

■ 즉, 행렬 A의 계수가 r이라면, 위와 같이 만들어진 행렬 A와 동일한 크기를 가지지만 계수가 1인 행렬들을 모두 더한 결과는 원래 행렬로 복원된다. 이를 식으로 나타내면 다음과 같다. 

A=ri=1uiσivTi, σ1σ2σr>0

cf) A=ri=1uiσivTi, σ1σ2σr>0의 원리는 데이터 정제에서 사용된다.

- 위의 식은 i=1부터 A의 계수인 r까지 행렬 A와 동일한 크기를 가지며 계수가 1인 행렬을 더하여 원래 행렬 A를 복원한다. 특이값과 관련된 정보까지 모두 복원되는 것이다.

- 이때, 이렇게 모두 더하는 것이 아니라 작은 특이값을 담고 있는 계수-1 행렬은 제외하고 어느 정도 값이 큰 특이값을 가지는 k개의 계수-1행렬을 더하여 행렬 A를 근사 시킬 수 있다. (여기서 k1kr)

- 이를 행렬 A의 낮은 계수 근사치(low rank approximation)이라고 하며, 이것이 데이터 정제에서 사용하는 아이디어이다.

- 데이터 정제에서는 작은 특이값과 관련된 정보는 데이터의 전체 분산에 기여하는 정도가 매우 작으므로 작은 특이값을 갖는 정보는 제외시킨다.즉, 상위의 특이값 몇 개만 선택하여 원래 정보와 최대한 가깝게 근사시키는 것이다. 

- 이렇게 Σ 행렬의 대각 원소인 특이값 중에서 상위 몇 개만 선택하는 것을 truncated SVD라고 부른다.


이어서 Singular value decomposition (2) - 특이값 분해 응용 (1)