Matrix Decomposition(3): SVD

고영민·2022년 1월 7일
0
post-thumbnail

1. 고유값 분해

어떠한 시스템 Ax=b\mathbf{A}\mathbf{x}=\mathbf{b}가 주어졌을 때, 행렬 A\mathbf{A}가 다음과 같이 대각행렬로 주어지면 시스템의 풀이가 간편해진다.

Ax=b(a11000a22000a33)(x1x2x3)=(b1b2b3){x1=b1/a1x2=b2/a2x3=b3/a3\mathbf{A}\mathbf{x}=\mathbf{b} \rightarrow \begin{pmatrix} a_{11} & 0 & 0\\ 0 & a_{22} &0\\ 0 & 0 & a_{33} \end{pmatrix} \begin{pmatrix} x_1\\ x_2 \\ x_3 \end{pmatrix}= \begin{pmatrix} b_1\\ b_2 \\ b_3 \end{pmatrix} \rightarrow \begin{cases} x_1 = b_1/a_1\\ x_2 = b_2/a_2\\ x_3 = b_3/a_3 \end{cases}

이러한 관점에서 어떤 행렬이 주어졌을 때 위와 같은 대각행렬로 바꿀 수 있다면, 그 행렬이 나타내는 시스템의 해석이나 풀이가 간단해질 수 있으며, 이를 대각화라고 한다.

Ax=b\mathbf{A}\mathbf{x}=\mathbf{b}가 주어졌을 때, A\mathbf{A}를 대각화하기 위해서 P1AP\mathbf{P^{-1}}\mathbf{A}\mathbf{P}와 같은 닮음 변환을 많이 사용하는데, 이러한 닮음 변환은 여러 성질을 갖기 때문이다.

B=P1AP\mathbf{B}=\mathbf{P^{-1}}\mathbf{A}\mathbf{P} 이라고 할 때, A,B\mathbf{A}, \mathbf{B}는 서로 닮음이며 다음과 같은 성질을 갖는다.

  1. rank(A)=rank(B)rank(\mathbf{A})=rank(\mathbf{B})
  2. nullity(A)=nullity(B)nullity(\mathbf{A})=nullity(\mathbf{B})
  3. A\mathbf{A}B\mathbf{B}의 고유값이 값음

이때 사용된 용어 및 앞으로 사용될 차원정리는 이전 글에 설명되어 있으며, 이제 위의 3가지 성질을 증명해보자.


1번 성질을 증명하기 위해 먼저 어떤 가역행렬 P\mathbf{P}에 대해 rank(PA)=rank(A)rank(\mathbf{P}\mathbf{A})=rank(\mathbf{A})임을 보이자. 차원 정리에 의해 nullity(PA)=nullity(A)nullity(\mathbf{P}\mathbf{A})=nullity(\mathbf{A})임을 보이면 된다. 이는 PA,A\mathbf{P}\mathbf{A}, \mathbf{A}의 null space이 같을 경우 성립할 수 있다. 먼저, vker(PA)PAv=0Av=A10Av=0\mathbf{v} \in ker(\mathbf{P}\mathbf{A}) \rightarrow \mathbf{P}\mathbf{A}\mathbf{v}=0 \rightarrow \mathbf{A}\mathbf{v}=\mathbf{A^{-1}} \cdot 0 \rightarrow \mathbf{A}\mathbf{v}= 0 이므로 vker(A)\mathbf{v} \in ker(\mathbf{A}) 이며, vker(A)Av=0PAv=P0PAv=0\mathbf{v} \in ker(\mathbf{A}) \rightarrow \mathbf{A}\mathbf{v}=0 \rightarrow \mathbf{P}\mathbf{A}\mathbf{v}=\mathbf{P} \cdot 0 \rightarrow \mathbf{P}\mathbf{A}\mathbf{v}= 0 이므로 vker(PA)\mathbf{v} \in ker(\mathbf{P}\mathbf{A}) 이다. 따라서 PA,A\mathbf{P}\mathbf{A}, \mathbf{A}의 null space이 같고, nullity(PA)=nullity(A)nullity(\mathbf{P}\mathbf{A})=nullity(\mathbf{A})이므로, 어떤 가역행렬 P\mathbf{P}에 대해 rank(PA)=rank(A)rank(\mathbf{P}\mathbf{A})=rank(\mathbf{A})이다.

같은 방법으로 rank(AP)=rank(A)rank(\mathbf{A}\mathbf{P})=rank(\mathbf{A})을 보일 수 있으며, 이 보조정리를 이용하여 1번 성질을 다음과 같이 구할 수 있다.

rank(B)=rank(P1AP)=rank(PP1APP1)        (보조정리)=rank(A)\begin{aligned} rank(\mathbf{B}) & = rank(\mathbf{P^{-1}}\mathbf{A}\mathbf{P})\\ & = rank(\mathbf{P}\mathbf{P^{-1}}\mathbf{A}\mathbf{P}\mathbf{P^{-1}}) \;\;\;\;(보조정리) \\ & = rank(\mathbf{A}) \end{aligned}

2번 성질은 1번 성질이 성립할 경우 차원정리에 의해 쉽게 도출이 가능하다.

{rank(A)+nullity(A)=nrank(B)+nullity(B)=nnullity(A)=nullity(B)\begin{cases} rank(\mathbf{A})+nullity(\mathbf{A})=n\\ rank(\mathbf{B})+nullity(\mathbf{B})=n \end{cases} \rightarrow nullity(\mathbf{A}) = nullity(\mathbf{B})

3번 성질은 고유값을 구하는 특성방정식에서 유도할 수 있다.

det(λIB)=det(λIP1AP)=det(P1(λI)PP1AP)=det(P1(λIA)P)=det(P1)det(λIA)det(P)=1det(P1)det(λIA)det(P)=det(λIA)\begin{aligned} det(\lambda \mathbf{I}- \mathbf{B}) & = det(\lambda \mathbf{I}- \mathbf{P^{-1}}\mathbf{A}\mathbf{P} ) \\ & = det(\mathbf{P^{-1}} (\lambda \mathbf{I}) \mathbf{P}- \mathbf{P^{-1}}\mathbf{A}\mathbf{P} )\\ & = det(\mathbf{P^{-1}} (\lambda \mathbf{I}-\mathbf{A})\mathbf{P} )\\ & = det(\mathbf{P^{-1}})det(\mathbf{\lambda \mathbf{I}-\mathbf{A}})det(\mathbf{P})\\ & = \frac{1}{det(\mathbf{P^{-1}})}det(\mathbf{\lambda \mathbf{I}-\mathbf{A}})det(\mathbf{P})\\ & = det(\lambda \mathbf{I}- \mathbf{A}) \end{aligned}

이제 닮음 변환을 이용하여 행렬 A\mathbf{A}를 대각화해보자. 목표는 P1AP=Λ\mathbf{P^{-1}}\mathbf{A}\mathbf{P}=\Lambda인 대칭행렬 Λ\Lambda과 가역행렬 P\mathbf{P}를 찾는 것이다. P1AP=Λ\mathbf{P^{-1}}\mathbf{A}\mathbf{P}=\Lambda일 경우, AP=PΛ\mathbf{A}\mathbf{P}=\mathbf{P}\Lambda이며, 이를 풀어쓰면 다음과 같다.

A(p1,,pn)=(p1,,pn)(λ100λn)\mathbf{A}(\mathbf{p_1}, \cdots, \mathbf{p_n}) = (\mathbf{p_1}, \cdots, \mathbf{p_n}) \begin{pmatrix} \lambda_{1} & & 0\\ & \ddots &\\ 0 & & \lambda_{n} \end{pmatrix}
Ap1=λ1p1Apn=λnpn\mathbf{A}\mathbf{p_1}=\lambda_{1}\mathbf{p_1}\\ \vdots\\ \mathbf{A}\mathbf{p_n}=\lambda_{n}\mathbf{p_n}

위의 식은 고유값, 고유벡터의 정의와 같으며, 따라서 우리는 고유값을 대각 성분으로 하는 대각행렬 Λ\Lambda와 그에 해당하는 고유벡터로 이루어진 가역행렬 P\mathbf{P}로 대각화를 할 수 있다. 이때 고유값을 이용하므로 행렬 A\mathbf{A}n×nn \times n의 정방행렬이어야 한다. 고윳값 분해를 위해 주어진 행렬은 정방행렬이어야 하며, 고유값이 nn개 존재해야 한다.

특히 P\mathbf{P}PT=P1\mathbf{P^T}=\mathbf{P^{-1}}인 직교행렬이라면 P1AP=PTAP=Λ\mathbf{P^{-1}}\mathbf{A}\mathbf{P}=\mathbf{P^T}\mathbf{A}\mathbf{P}=\Lambda이고, 이를 직교대각화라고 한다. 이때, A\mathbf{A}가 실수로 이루어진 대칭행렬인 것과 A\mathbf{A}가 대칭대각화 가능인 것은 동치이다. 그 증명은 다음과 같다.


  1. A\mathbf{A}가 대칭대각화 가능이면, A\mathbf{A}는 대칭행렬

    PTAP=Λ\mathbf{P^T}\mathbf{A}\mathbf{P}=\Lambda를 만족하는 행렬 P\mathbf{P}가 존재하며, A=PΛPT\mathbf{A}=\mathbf{P}\Lambda\mathbf{P^T}이다(PT=P1\mathbf{P^T}=\mathbf{P^{-1}}). 따라서 AT=(PΛPT)T=PΛPT=A\mathbf{A^T}=(\mathbf{P}\Lambda\mathbf{P^T})^T=\mathbf{P}\Lambda\mathbf{P^T}=\mathbf{A} 이므로 A\mathbf{A}는 대칭행렬이다((AB)T=BTAT(\mathbf{A}\mathbf{B})^T=\mathbf{B}^T\mathbf{A}^T).


  1. n×nn \times n행렬 A\mathbf{A}가 실수로 이루어진 대칭행렬이면, A\mathbf{A}는 대칭대각화 가능
  • n=1n=1인 경우, 위 명제가 성립 (A=[a],P=[1],PTAP=Λ\mathbf{A}=[a], P=[1], \mathbf{P^T}\mathbf{A}\mathbf{P}=\Lambda)

  • n=kn=k인 경우, 위 명제가 성립한다고 가정.

  • n=k+1n=k+1인 경우, 위 명제가 성립함을 보여 수학적 귀납법을 완성해보자.

    먼저, 실수로 이루어진 n×nn \times n 대칭행렬 A\mathbf{A}가 주어질 경우, A\mathbf{A}의 모든 고유값은 실수이다. 먼저, 행렬의 고유값을 구하는 특성방정식 det(λIA)=0det(\lambda \mathbf{I}- \mathbf{A})=0을 풀어보면 결국 n차 다항식이 나오고, 실수와 복소수를 포함하면 고유값은 언제나 n개가 존재한다. 이제 A,v\mathbf{A^*}, \mathbf{v^*}를 행렬 또는 벡터 A,v\mathbf{A}, \mathbf{v}의 켤레전치라고 하자(켤레: 복소수 a±bia \pm bi의 켤래는 abia \mp bi, 전치:transpose, 즉 켤레전치는 주어진 벡터 또는 행렬의 원소를 모두 켤레로 바꾸고 전치를 취한 것, (AB)=BA(\mathbf{A}\mathbf{B})^*=\mathbf{B}^*\mathbf{A}^*, (A1An)=AnA1,(cA)=cˉA(\mathbf{A_1}\cdots\mathbf{A_n})^*=\mathbf{A_n}^*\cdots\mathbf{A_1}^*, (c\mathbf{A})^* = \bar{c}\mathbf{A}^*, cc는 스칼라). 이때 v,λ\mathbf{v}, \lambda 가 주어진 행렬 A\mathbf{A}의 임의의 고유벡터, 고유값이라고 하면, vAv=vλv=λvv\mathbf{v^*}\mathbf{A}\mathbf{v}=\mathbf{v^*}\lambda\mathbf{v}=\lambda\mathbf{v^*}\mathbf{v} 이다. 여기서 vv\mathbf{v^*}\mathbf{v}1×11 \times 1이 되어 dI1×1\mathbf{d}\mathbf{I_{1 \times 1}}로 쓸 수 있는데 서로 켤레관계인 복소수를 곱하면 양수인 실수가 되므로, d\mathbf{d}는 양수인 실수이다. 따라서 vAv=λdI1×11dvAv=λI1×1\mathbf{v^*}\mathbf{A}\mathbf{v}=\lambda\mathbf{d}\mathbf{I_{1 \times 1}} \rightarrow \frac{1}{\mathbf{d}}\mathbf{v^*}\mathbf{A}\mathbf{v}=\lambda\mathbf{I_{1 \times 1}} 이며, 양변의 켤레전치를 구하면 (1dvAv)=(λI1×1)1dvAv=λˉI1×1(\frac{1}{\mathbf{d}}\mathbf{v^*}\mathbf{A}\mathbf{v})^*=(\lambda\mathbf{I_{1 \times 1}})^* \rightarrow \frac{1}{\mathbf{d}}\mathbf{v^*}\mathbf{A}\mathbf{v}=\bar{\lambda}\mathbf{I_{1 \times 1}} 이다(실수의 켤레는 자기 자신과 같음, A\mathbf{A}는 실수로 이루어진 대칭행렬). 이는 고유값 λ\lambda의 결레는 자기자신과 같음을 의미하며, 따라서 실수로 이루어진 n×nn \times n 대칭행렬 A\mathbf{A}의 고유값 λ\lambda는 실수이다.

    이제 실수로 이루어진 n×nn \times n 대칭행렬 A\mathbf{A}에서 실수 고유값 λ1,,λn\lambda_1, \cdots, \lambda_n을 구할 수 있으며, 이에 대한 고유벡터 v1,,vn\mathbf{v_1}, \cdots, \mathbf{v_n}을 구할 수 있고, 그람-슈미트 방법 등을 통해 정규직교기저화 할 수 있다. 이렇게 얻은 정규직교기저들 v1,,vn\mathbf{v_1}, \cdots, \mathbf{v_n}을 이용하여 행렬 U\mathbf{U}를 만들면 다음과 같다.

    UTAU=UTA(v1v2vn)                  블록행렬=UTA(v1v)=UT(Av1Av)=UT(λ1v1Av)=(v1TvT)(λ1v1Av)=(λ1v1Tv1v1TAvλ1vTv1vTAv)=(λ100vTAv)=(λ100B)\begin{aligned} \mathbf{U}^T\mathbf{A}\mathbf{U} & = \mathbf{U}^T\mathbf{A} \left( \begin{array}{c|c} \mathbf{v_1} & \mathbf{v_2} & \cdots & \mathbf{v_n}\\ \end{array} \right) \;\;\;\;\;\;\; \cdots \;\;블록행렬 \\ & = \mathbf{U}^T\mathbf{A} \left( \begin{array}{c|c} \mathbf{v_1} & \mathbf{v'} \\ \end{array} \right) \\ & = \mathbf{U}^T \left( \begin{array}{c|c} \mathbf{A}\mathbf{v_1} & \mathbf{A}\mathbf{v'} \\ \end{array} \right) \\ & = \mathbf{U}^T \left( \begin{array}{c|c} \lambda_1\mathbf{v_1} & \mathbf{A}\mathbf{v'} \\ \end{array} \right) \\ & = \begin{pmatrix} \mathbf{v_1}^T\\ \hline \mathbf{v'}^T \end{pmatrix} \left( \begin{array}{c|c} \lambda_1\mathbf{v_1} & \mathbf{A}\mathbf{v'} \\ \end{array} \right) \\ & = \left( \begin{array}{c|c} \lambda_1\mathbf{v_1}^T\mathbf{v_1} & \mathbf{v_1}^T\mathbf{A}\mathbf{v'} \\ \hline \lambda_1\mathbf{v'}^T\mathbf{v_1} & \mathbf{v'}^T\mathbf{A}\mathbf{v'} \end{array} \right) \\ & = \left( \begin{array}{c|c} \lambda_1 & 0 \\ \hline 0 & \mathbf{v'}^T\mathbf{A}\mathbf{v'} \end{array} \right) \\ & = \left( \begin{array}{c|c} \lambda_1 & 0 \\ \hline 0 & \mathbf{B} \end{array} \right) \end{aligned}

    이때, 마지막 단계에서 vi\mathbf{v_i}들은 서로 정규직교하기 때문에 v1Tv1=1\mathbf{v_1}^T\mathbf{v_1}=1이며, vTv1=0\mathbf{v'}^T\mathbf{v_1}=0 (v\mathbf{v'}에는 v1\mathbf{v_1}가 없기 때문), UTAU\mathbf{U}^T\mathbf{A}\mathbf{U}(UTAU)T=UTAU(\mathbf{U}^T\mathbf{A}\mathbf{U})^T=\mathbf{U}^T\mathbf{A}\mathbf{U}인 대칭행렬이므로 대칭성을 보이기 위해 오른쪽 위의 v1TAv\mathbf{v_1}^T\mathbf{A}\mathbf{v'} 또한 0이다.

    또한 UTAU\mathbf{U}^T\mathbf{A}\mathbf{U}는 대칭행렬이므로 오른쪽 아래의 B\mathbf{B} 또한 대칭행렬이며, 위에서 n=kn=k인 경우, 명제가 성립한다고 가정하였으므로 QTBQ=ΛB\mathbf{Q}^T\mathbf{B}\mathbf{Q}=\mathbf{\Lambda_B}와 같이 대칭대각화가 가능하다. 이를 이용하여 다음과 같이 생각하면 n=k+1n=k+1인 경우에도 대칭대각화가 가능함을 보일 수 있어 수학적 귀납법에 의해 위 명제는 성립한다.

    (100QT)(λ100B)(100Q)=(λ100QTBQ)=(λ100ΛB)                    대각행렬=(100QT)PTAP(100Q)=TTUTAUT=PTAP=Λ\begin{aligned} \left( \begin{array}{c|c} 1 & 0 \\ \hline 0 & \mathbf{Q}^T \end{array} \right) \left( \begin{array}{c|c} \lambda_1 & 0 \\ \hline 0 & \mathbf{B} \end{array} \right) \left( \begin{array}{c|c} 1 & 0 \\ \hline 0 & \mathbf{Q} \end{array} \right) & = \left( \begin{array}{c|c} \lambda_1 & 0 \\ \hline 0 & \mathbf{Q}^T\mathbf{B}\mathbf{Q} \end{array} \right) \\ & = \left( \begin{array}{c|c} \lambda_1 & 0 \\ \hline 0 & \mathbf{\Lambda_B} \end{array} \right) \;\;\;\;\;\;\;\; \cdots \;\;대각행렬\\ & = \left( \begin{array}{c|c} 1 & 0 \\ \hline 0 & \mathbf{Q}^T \end{array} \right) \mathbf{P}^T\mathbf{A}\mathbf{P} \left( \begin{array}{c|c} 1 & 0 \\ \hline 0 & \mathbf{Q} \end{array} \right) \\ & = \mathbf{T}^T\mathbf{U}^T\mathbf{A}\mathbf{U}\mathbf{T} \\ & = \mathbf{P}^T\mathbf{A}\mathbf{P} \\ & = \mathbf{\Lambda} \end{aligned}

    여기서 T,U\mathbf{T}, \mathbf{U}는 둘 다 직교 행렬이므로 TTUT,UT\mathbf{T}^T\mathbf{U}^T, \mathbf{U}\mathbf{T}또한 직교이며, UT=P    (TTUT=PT)\mathbf{U}\mathbf{T}=\mathbf{P}\;\;(\mathbf{T}^T\mathbf{U}^T=\mathbf{P}^T)라고 쓰면 PTAP=Λ\mathbf{P}^T\mathbf{A}\mathbf{P}= \mathbf{\Lambda}라고 할 수 있다.

    따라서 실수로 이루어진 n×nn \times n행렬 A\mathbf{A}는 직교 대각화가 가능하다.


우리는 실수로 이루어진 n×nn \times n 대칭행렬 A\mathbf{A}에서 실수 고유값 λ1,,λn\lambda_1, \cdots, \lambda_n을 구할 수 있으며, 이에 대한 고유벡 v1,,vn\mathbf{v_1}, \cdots, \mathbf{v_n}을 구할 수 있고, 그람-슈미트 방법 등을 통해 정규직교기저화 할 수 있다. 이렇게 얻은 정규직교기저들 v1,,vn\mathbf{v_1}, \cdots, \mathbf{v_n}을 이용하여 행렬 P\mathbf{P}를 만들 수 있고, 우리는 위에서 고유값과 고유벡터를 통해 P1AP=Λ\mathbf{P^{-1}}\mathbf{A}\mathbf{P}=\Lambda같이 대각화 할 수 있음을 보였다. 다만 여기서 만든 행렬 P\mathbf{P}는 정규직교기저들로 이루어져 있으므로 P\mathbf{P}는 직교행렬이고 P1AP=PTAP=Λ\mathbf{P^{-1}}\mathbf{A}\mathbf{P}=\mathbf{P}^T\mathbf{A}\mathbf{P}=\Lambda 이며, 직교대각화 역시 고유값과 고유벡터의 정규직교기저들로 수행할 수 있다.

특히 PTAP=ΛA=PΛPT\mathbf{P}^T\mathbf{A}\mathbf{P}=\Lambda \rightarrow \mathbf{A}=\mathbf{P}\Lambda\mathbf{P}^T를 풀어쓰면 다음과 같다.

A=PΛPT=(v1,,vn)(λ1000λ2000λ3)(v1TvnT)=i=1nλiviviT\mathbf{A}=\mathbf{P}\Lambda\mathbf{P}^T=(\mathbf{v_1}, \cdots, \mathbf{v_n}) \begin{pmatrix} \lambda_1 & 0 & 0\\ 0 & \lambda_2 & 0\\ 0 & 0 & \lambda_3 \end{pmatrix} \begin{pmatrix} \mathbf{v_1}^T\\ \vdots \\ \mathbf{v_n} ^T \end{pmatrix} = \sum^{n}_{i=1}{\lambda_i\mathbf{v_i}\mathbf{v_i}^T}

만약 고유값 λi\lambda_i를 크기 순으로 정렬할 수 있다면 작은 고유값에 해당하는 term은 0으로 무시할 수 있고(vi\mathbf{v_i} 또한 크기가 1인 벡터이므로 원소들이 그리 크지 않음), 이를 통해 행렬 A\mathbf{A}를 압축할 수 있다.

2. 특이값 분해

위에서 고유값 분해를 통해 행렬 A\mathbf{A}A=PΛP1\mathbf{A}=\mathbf{P}\mathbf{\Lambda}\mathbf{P}^{-1}와 같이 대각행렬을 포함한 행렬들의 곱으로 분해할 수 있었으며, 특히 대각행렬 Λ\mathbf{\Lambda}의 대각 성분은 A\mathbf{A}의 고유값들, 행렬 P\mathbf{P}의 열백터들은 각 고유값에 해당하는 고유벡터들이었다. 하지만 이러한 고유값 분해는 A\mathbf{A}의 고유값을 사용해야하기 때문에 A\mathbf{A}가 정방행렬이어야 한다거나, 혹은 직교대각화를 위해 대칭행렬이어야 한다라는 조건이 붙는다. 특이값 분해(SVD, Singular Value Decomposition)는 이러한 조건 없이 임의의 m×nm \times n 행렬 A\mathbf{A}를 다음과 같이 분해하는 방법이다.

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

이때, A\mathbf{A}는 임의의 m×nm \times n 행렬, U\mathbf{U}m×mm \times m의 직교행렬, V\mathbf{V}n×nn \times n의 직교행렬, Σ\mathbf{\Sigma}m×nm \times n의 대각행렬이다. 특이값 분해에서도 각 행렬의 구성은 고유값, 고유벡터들과 깊은 연관이 있다. VT\mathbf{V}^Tn×nn \times n의 직교행렬이므로 A=UΣVTAV=UΣ\mathbf{A} = \mathbf{U}\mathbf{\Sigma}\mathbf{V}^T \rightarrow \mathbf{A}\mathbf{V} = \mathbf{U}\mathbf{\Sigma}로 쓸 수 있다. 이제 이러한 식을 만족하는 행렬 U,Σ,V\mathbf{U},\mathbf{\Sigma},\mathbf{V}를 찾을 것이다.

먼저, ATA\mathbf{A}^T\mathbf{A}를 생각해보면, (ATA)T=ATA(\mathbf{A}^T\mathbf{A})^T=\mathbf{A}^T\mathbf{A}이므로 대칭행렬임을 알 수 있다. 따라서 위에서 보았듯이 ATA=VDVT\mathbf{A}^T\mathbf{A}=\mathbf{V}\mathbf{D}\mathbf{V}^T와 같이 직교 대각화가 가능하다. ATA\mathbf{A}^T\mathbf{A}의 각 고유값 λi\lambda_i에 대해서 Ax2=AxAx=xATAx=xλix=λi(xx)=λix2\mid \mathbf{A}\mathbf{x} \mid ^2 = \mathbf{A}\mathbf{x} \cdot \mathbf{A}\mathbf{x} = \mathbf{x}\cdot\mathbf{A}^T\mathbf{A}\mathbf{x}= \mathbf{x}\cdot\lambda_i\mathbf{x}=\lambda_i(\mathbf{x} \cdot \mathbf{x})=\lambda_i\mid \mathbf{x} \mid ^2이며, 양변이 양수가 되어야 하므로 고유값 λi\lambda_i는 양수가 되어야 한다 (대칭행렬의 고유값이므로 실수이다).

그리고 rank(ATA)=rank(A)rank(\mathbf{A}^T\mathbf{A})=rank(\mathbf{A})인데, null(ATA)null(A),null(A)null(ATA)null(\mathbf{A}^T\mathbf{A}) \sube null(\mathbf{A}), null(\mathbf{A}) \sube null(\mathbf{A}^T\mathbf{A}) 각각을 보이면 ATA,A\mathbf{A}^T\mathbf{A}, \mathbf{A}의 null space가 동일함을 보일 수 있고, 차원 정리에 의해 rank(ATA)=rank(A)rank(\mathbf{A}^T\mathbf{A})=rank(\mathbf{A})가 성립한다. 어떤 벡터 xnull(A)\mathbf{x} \in null(\mathbf{A})에 대해 ATAx=AT0=0\mathbf{A}^T\mathbf{A}\mathbf{x}=\mathbf{A}^T\mathbf{0}=\mathbf{0}이므로 null(ATA)null(A)null(\mathbf{A}^T\mathbf{A}) \sube null(\mathbf{A})이고, xnull(ATA)\mathbf{x} \in null(\mathbf{A}^T\mathbf{A})에 대해 ATAx=0xATAx=0AxAx=0Ax2=0\mathbf{A}^T\mathbf{A}\mathbf{x}=\mathbf{0} \rightarrow \mathbf{x} \cdot\mathbf{A}^T\mathbf{A}\mathbf{x}=\mathbf{0} \rightarrow \mathbf{A}\mathbf{x} \cdot \mathbf{A}\mathbf{x}=\mathbf{0} \rightarrow \mid \mathbf{A}\mathbf{x} \mid ^2 =\mathbf{0}이므로 null(A)null(ATA)null(\mathbf{A}) \sube null(\mathbf{A}^T\mathbf{A})이다.

따라서 다음과 같이 쓸 수 있다.

rank(ATA)=rank(A)=rank(D)              닮음=k\begin{aligned} rank(\mathbf{A}^T\mathbf{A}) & = rank(\mathbf{A}) \\ & = rank(\mathbf{D}) \;\;\;\;\;\;\; \cdots 닮음 \\ & = k \end{aligned}

위에서 보였던 고유값 λi\lambda_i는 양수가 되어야 한다는 점에서 대각행렬 D\mathbf{D}의 고유값은 λ1λ2λn0\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_n \geq 0이며(큰 순으로 정렬이 가능하다), rank(D)=krank(\mathbf{D})=k라는 점에서 λk+1,,λn=0\lambda_{k+1}, \cdots, \lambda_{n}=0이 되어야 한다(rank(D)=krank(\mathbf{D})=k이면 D\mathbf{D} 열백터 중 kk개만 선형독립이어야 하며, D\mathbf{D}는 대각행렬임).

행렬 V\mathbf{V}(v1,,vn)(\mathbf{v_1}, \cdots, \mathbf{v_n})이며, 0이 아닌 고유값에 대한 단위고유벡터들은 (v1,,vk)(\mathbf{v_1}, \cdots, \mathbf{v_k})로 쓸 수 있다. 이때, V\mathbf{V}ATA\mathbf{A}^T\mathbf{A}를 직교대각화 한 것으로 각 vi\mathbf{v_i}는 서로 직교하며, AviAvj=viATAvj=viλjvj=λj(vivj)=0\mathbf{A}\mathbf{v_i} \cdot \mathbf{A}\mathbf{v_j}=\mathbf{v_i} \cdot \mathbf{A}^T\mathbf{A}\mathbf{v_j}=\mathbf{v_i} \cdot \lambda_j\mathbf{v_j} =\lambda_j(\mathbf{v_i} \cdot \mathbf{v_j})=0이 되어 Avi\mathbf{A}\mathbf{v_i}들도 서로 직교한다. 또한 Avi2=AviAvi=λi(vivi)=λiAvi=λi\mid \mathbf{A}\mathbf{v_i} \mid^2=\mathbf{A}\mathbf{v_i} \cdot \mathbf{A}\mathbf{v_i} = \lambda_i(\mathbf{v_i} \cdot \mathbf{v_i})=\lambda_i \rightarrow \mid \mathbf{A}\mathbf{v_i} \mid =\sqrt{\lambda_i}이고(고유값들은 실수이며 양수), 이를 이용하면 (1λ1Av1,,1λkAvk)=(u1,,uk)(\frac{1}{\sqrt{\lambda_1}}\mathbf{A}\mathbf{v_1}, \cdots, \frac{1}{\sqrt{\lambda_k}}\mathbf{A}\mathbf{v_k})=(\mathbf{u_1}, \cdots, \mathbf{u_k})와 같은 새로운 정규직교기저들을 구성할 수 있다. 이들이 SVD 결과 식에 나오는 행렬 U\mathbf{U}를 구성하는 벡터들이 되는데, U\mathbf{U}m×mm \times m행렬이므로 mkm-k개의 벡터가 부족하지만 u1,,uk\mathbf{u_1}, \cdots, \mathbf{u_k}로부터 mkm-k개의 정규직교기저를 생성하는 방법이 존재한다.

예를들어 u1T,,ukT\mathbf{u_1}^T, \cdots, \mathbf{u_k}^T들을 행벡터로 하는 행렬 B\mathbf{B}를 만들면 이는 k×mk \times m 행렬이고, 차원정리에 의해 rank(B)+nullity(B)=mrank(\mathbf{B})+nullity(\mathbf{B})=m이다. 이때, rank(B)=dim(row(B))=krank(\mathbf{B})=dim(row(\mathbf{B}))=k이며, nullity(B)=mknullity(\mathbf{B})=m-k이므로 행렬 B\mathbf{B}의 null space는 mkm-k개의 기저를 포함하고 있음을 알 수 있다. B\mathbf{B}의 null space는 Bx=0\mathbf{B}\mathbf{x}=\mathbf{0}의 해가 이루는 공간이며, Bx=(u1x,,ukx)T=0\mathbf{B}\mathbf{x}=(\mathbf{u_1} \cdot \mathbf{x}, \cdots, \mathbf{u_k} \cdot \mathbf{x})^T=\mathbf{0}이므로 x\mathbf{x}들이 u1,,uk\mathbf{u_1}, \cdots, \mathbf{u_k}들과 직교함을 알 수 있다. 따라서 null(B)null(\mathbf{B})의 단위기저벡터 w1,wmk\mathbf{w}_1, \cdots \mathbf{w}_{m-k}를 구함으로써, u1,,uk,w1,wmk\mathbf{u_1}, \cdots, \mathbf{u_k}, \mathbf{w}_1, \cdots \mathbf{w}_{m-k}와 같이 총 mm개의 정규직교기저를 생성할 수 있다.

이렇게 생성한 정규직교기저 u1,,uk,w1,wmk\mathbf{u_1}, \cdots, \mathbf{u_k}, \mathbf{w}_1, \cdots \mathbf{w}_{m-k}를 이용하여 행렬 U\mathbf{U}를 구성하고 다음과 같은 행렬 Σ\mathbf{\Sigma}를 생각해보자.

UΣ=(u1ukw1,wmk)m×m(λ1000λk000)m×n=(λ1u1,,λkuk,0,,0)m×n=(Av1,,Avk,Avk+1,,Avn)=AV\begin{aligned} \mathbf{U}\mathbf{\Sigma} & = \left( \begin{array}{ccc|c} \mathbf{u_1} & \cdots & \mathbf{u_k} & \mathbf{w}_1, \cdots \mathbf{w}_{m-k}\\ \end{array} \right)_{m \times m} \begin{pmatrix} \sqrt{\lambda_{1}} & 0 & & \cdots & & 0\\ 0 & \ddots & & & & \\ & & \sqrt{\lambda_{k}} & & & \vdots \\ \vdots & & & 0 \\ & & & & \ddots \\ 0 & & \cdots & & & 0 \end{pmatrix}_{m \times n} \\ & = (\sqrt{\lambda_{1}}\mathbf{u_1}, \cdots, \sqrt{\lambda_{k}}\mathbf{u_k}, 0, \cdots, 0)_{m \times n} \\ & = (\mathbf{A}\mathbf{v_1}, \cdots, \mathbf{A}\mathbf{v_k}, \mathbf{A}\mathbf{v_{k+1}}, \cdots, \mathbf{A}\mathbf{v_n}) \\ & = \mathbf{A}\mathbf{V} \end{aligned}

행렬 Σ\mathbf{\Sigma}는 대각성분이 ATA\mathbf{A}^T\mathbf{A}의 고유값의 제곱근 및 0으로 이루어진 대각행렬이며, 결과적으로 UΣ=AVUΣVT=A\mathbf{U}\mathbf{\Sigma} = \mathbf{A}\mathbf{V} \rightarrow \mathbf{U}\mathbf{\Sigma}\mathbf{V}^T = \mathbf{A}가 되어 SVD가 수행된다. 여기서 λi=σi\sqrt{\lambda_i}=\sigma_i라고 쓰며 이 값들을 특이값이라고 하고, 그에 대응되는 U,VT\mathbf{U},\mathbf{V}^T의 벡터들, u1,,uk\mathbf{u_1}, \cdots, \mathbf{u_k}v1T,,vkT\mathbf{v_1}^T, \cdots, \mathbf{v_k}^T 들을 왼쪽, 오른쪽 특이벡터라고 한다.

또한 위의 전개에서 w1,wmk\mathbf{w}_1, \cdots \mathbf{w}_{m-k}vk+1,vn\mathbf{v}_{k+1}, \cdots \mathbf{v}_{n}은 0과 곱해져 사라지므로 다음과 같이 m×km \times k의 직교행렬 U\mathbf{U'}, k×nk \times n의 직교행렬 VT\mathbf{V'}^T, k×kk \times k의 대각행렬 Σ\mathbf{\Sigma'}로 다음과 같이 축소된 SVD 또한 가능하다.

UΣ=(u1uk)m×k(λ100λk)k×k=(λ1u1,,λkuk)m×k=(Av1,,Avk)=AV\begin{aligned} \mathbf{U'}\mathbf{\Sigma'} & = \left( \begin{array}{ccc} \mathbf{u_1} & \cdots & \mathbf{u_k}\\ \end{array} \right)_{m \times k} \begin{pmatrix} \sqrt{\lambda_{1}} & & 0\\ & \ddots & \\ 0 & & \sqrt{\lambda_{k}} \end{pmatrix}_{k \times k} \\ & = (\sqrt{\lambda_{1}}\mathbf{u_1}, \cdots, \sqrt{\lambda_{k}}\mathbf{u_k})_{m \times k} \\ & = (\mathbf{A}\mathbf{v_1}, \cdots, \mathbf{A}\mathbf{v_k}) \\ & = \mathbf{A}\mathbf{V'} \end{aligned}

여기서 고유값분해에서와 마찬가지로 작은 고유값에 해당하는 term을 0으로 두어 데이터 압축에도 활용할 수 있다.

3. 특이값 분해의 활용

3.1. 최소제곱법

특이값 분해는 임의의 임의의 m×nm \times n 행렬 A\mathbf{A}A=UΣVT=UΣVT\mathbf{A} = \mathbf{U}\mathbf{\Sigma}\mathbf{V}^T = \mathbf{U'}\mathbf{\Sigma'}\mathbf{V'}^T와 같이 분해할 수 있다는 점에서 다양한 활용성을 갖는다. 특히 Axb\mid \mathbf{A}\mathbf{x}-\mathbf{b} \mid가 최소가 되는 x\mathbf{x}를 찾는 최소제곱문제에도 적용 가능하다.

A\mathbf{A}가 가역행렬일 경우 A1=(UΣVT)1=VΣ1UT\mathbf{A}^{-1}=(\mathbf{U'}\mathbf{\Sigma'}\mathbf{V'}^T)^{-1}=\mathbf{V'}\mathbf{\Sigma'}^{-1}\mathbf{U'}^T으로 최소제곱문제가 쉽게 해결된다. 가역행렬이 아닐 경우 VΣ1UT\mathbf{V'}\mathbf{\Sigma'}^{-1}\mathbf{U'}^TA\mathbf{A}의 역행렬은 아니지만 여전히 최소제곱문제의 해를 도출하는데, VΣ1UT\mathbf{V'}\mathbf{\Sigma'}^{-1}\mathbf{U'}^TA\mathbf{A}유사역행렬(pseudo inverse)라고 한다.

이제 VΣ1UT\mathbf{V'}\mathbf{\Sigma'}^{-1}\mathbf{U'}^T가 정말 최소제곱문제의 해를 도출하는지 살펴보자. 예상되는 최소제곱문제의 해는 x^=VΣ1UTb\mathbf{\hat{x}}=\mathbf{V'}\mathbf{\Sigma'}^{-1}\mathbf{U'}^T\mathbf{b}이다.

                x^=VΣ1UTb    VTx^=Σ1UTb    ΣVTx^=UTb    UΣVTx^=UUTb    Ax^=UUTb\begin{aligned} & \;\;\;\;\;\;\;\; \mathbf{\hat{x}}=\mathbf{V'}\mathbf{\Sigma'}^{-1}\mathbf{U'}^T\mathbf{b} \\ & \rightarrow \;\; \mathbf{V'}^T\mathbf{\hat{x}}=\mathbf{\Sigma'}^{-1}\mathbf{U'}^T\mathbf{b} \\ & \rightarrow \;\; \mathbf{\Sigma'}\mathbf{V'}^T\mathbf{\hat{x}}=\mathbf{U'}^T\mathbf{b} \\ & \rightarrow \;\; \mathbf{U'}\mathbf{\Sigma'}\mathbf{V'}^T\mathbf{\hat{x}}=\mathbf{U'}\mathbf{U'}^T\mathbf{b} \\ & \rightarrow \;\; \mathbf{A}\mathbf{\hat{x}}=\mathbf{U'}\mathbf{U'}^T\mathbf{b} \end{aligned}

위의 식은 QR decomposition에서 최소제곱문제가 해결됨을 보이기 위해 전개했던 식과 유사하다. UUTb\mathbf{U'}\mathbf{U'}^T\mathbf{b}는 QR decomposition에서 설명했듯이 column space Col(U)Col(\mathbf{U'})로의 b\mathbf{b}의 투영 bCol(U)\mathbf{b}^{\parallel Col(\mathbf{U'})}이며, Col(U)=Col(A)Col(\mathbf{U'})=Col(\mathbf{A})이므로 UUTb=bCol(U)=bCol(A)\mathbf{U'}\mathbf{U'}^T\mathbf{b}=\mathbf{b}^{\parallel Col(\mathbf{U'})}=\mathbf{b}^{\parallel Col(\mathbf{A}) }이 되어 계산된 벡터 x^\mathbf{\hat{x}}가 주어진 최소제곱문제의 최적해가 된다 (Col(A)Col(\mathbf{A})가 곧 Ax\mathbf{A}\mathbf{x}의 공간이다).

여기서 Col(U)=Col(A)Col(\mathbf{U'})=Col(\mathbf{A})인 것과 더불어 Row(VT)=Row(A)Row(\mathbf{V'^T})=Row(\mathbf{A})인데, 이는 SVD 정의 식을 전개함으로써 도출이 가능하다.

A=UΣVT=(u1uk)m×k(λ100λk)k×k(v1TvkT)k×n=(λ1u1,,λkuk)m×k(v1TvkT)k×n\begin{aligned} \mathbf{A} & = \mathbf{U'}\mathbf{\Sigma'}\mathbf{V'^T}\\ & = \left( \begin{array}{ccc} \mathbf{u_1} & \cdots & \mathbf{u_k}\\ \end{array} \right)_{m \times k} \begin{pmatrix} \sqrt{\lambda_{1}} & & 0\\ & \ddots & \\ 0 & & \sqrt{\lambda_{k}} \end{pmatrix}_{k \times k} \begin{pmatrix} \mathbf{v_1}^T\\ \vdots \\ \mathbf{v_k}^T \end{pmatrix}_{k \times n}\\ & = (\sqrt{\lambda_{1}}\mathbf{u_1}, \cdots, \sqrt{\lambda_{k}}\mathbf{u_k})_{m \times k} \begin{pmatrix} \mathbf{v_1}^T\\ \vdots \\ \mathbf{v_k}^T \end{pmatrix}_{k \times n} \end{aligned}

rank(A)=dim(Row(A))rank(\mathbf{A}) = dim(Row(\mathbf{A}))인데, 위 전개에서 행렬 A\mathbf{A}의 행들은 v1T,,vkT\mathbf{v_1}^T, \cdots, \mathbf{v_k}^T의 선형결합으로 이루어져 있으므로 Row(A)Row(VT)Row(\mathbf{A}) \sube Row(\mathbf{V'^T})라고 할 수 있다. 그런데 rank(ATA)=rank(A)=krank(\mathbf{A}^T\mathbf{A})=rank(\mathbf{A})=k이고, v1T,,vkT\mathbf{v_1}^T, \cdots, \mathbf{v_k}^T 각각은 선형독립이므로, rank(VT)=dim(Row(VT))=krank(\mathbf{V'^T})=dim(Row(\mathbf{V'^T}))=k이다. 따라서 Row(A)Row(VT),  dim(Row(A))=dim(Row(VT))Row(\mathbf{A}) \sube Row(\mathbf{V'^T}), \; dim(Row(\mathbf{A})) = dim(Row(\mathbf{V'^T}))가 되어 Row(A)=Row(VT)Row(\mathbf{A})=Row(\mathbf{V'^T})이다. 이와 비슷하게 행렬 A\mathbf{A}의 열들은 행들은 u1,,uk\mathbf{u_1}, \cdots, \mathbf{u_k}의 선형결합으로 이루어져 있으므로 Col(U)=Col(A)Col(\mathbf{U'})=Col(\mathbf{A})이다.

위에서는 Axb\mid \mathbf{A}\mathbf{x}-\mathbf{b} \mid를 최소로 만드는 최소제곱법을 살펴보았지만, 사실 Ax=0\mathbf{A}\mathbf{x}=\mathbf{0}이라는 문제를 해결하기 위해 Ax\mid \mathbf{A}\mathbf{x} \mid를 최소로 만드는 최소제곱법 또한 많이 활용된다(물론 영벡터라는 자명한 해를 구하고자 함은 아니기 때문에 보통 x=1\mid \mathbf{x} \mid=1라는 제약조건이 붙음). 만약 A\mathbf{A}에 어떤 오른쪽 특이벡터를 곱한다면, V\mathbf{V}는 직교행렬이므로 Avi=σiui\mathbf{A}\mathbf{v_i}=\mathbf{\sigma_i}\mathbf{u_i}의 형태가 된다. 이때, 0인 특이값이 있다면 Ax=0\mathbf{A}\mathbf{x}=\mathbf{0}를 만족하는 정확한 해를 찾을 수 있고, 만약 0인 특이값이 없어 정확한 해를 찾을 수 없다면 최소의 특이값에 대응되는 오른쪽 특이벡터가 Ax\mid \mathbf{A}\mathbf{x} \mid를 최소로 만드는 해이다. 이에 대한 증명은 아래에서 소개한다(아래에서 기술될 내용을 이용하면 쉽게 파생되어 이 글에서는 아래 내용을 이용하지만, 이 최소제곱법 해만을 증명하려고 한다면 굳이 아래와 같이 복잡하게 할 필요는 없음).

3.2. Rank-r 근사

SVD를 통해 찾아낸 특이값과 특이벡터 들을 활용하면 어떤 행렬 A\mathbf{A}에 대한 Rank-rr 근사 (rk,    rank(A)=kr \leq k,\;\; rank(\mathbf{A})=k)를 찾을 수 있다. 이는 주어진 행렬 A\mathbf{A}의 rank보다 작은 rank를 가지는 행렬 A\mathbf{A'}A\mathbf{A}를 근사하는 것이며, 근사는 A\mathbf{A'}A\mathbf{A} 사이의 차이에 대한 norm을 최소로 한다는 것을 의미한다. 어떤 행렬에 대한 norm A\left| \mathbf{A} \right|를 정의하는 방법은 여러가지가 있지만 여기서는 다음과 같은 Frobenius norm을 사용한다.

A=(a1TamT),      AF=ijAij=(A112+A122++A1n2)++(Am12+Am22++Amn2)=a12++am2\mathbf{A}= \begin{pmatrix} \mathbf{a_1}^T\\ \vdots \\ \mathbf{a_m}^T \end{pmatrix},\;\;\; \begin{aligned} \left| \mathbf{A} \right|_F & = \sqrt{\sum_{i}{\sum_{j}{A_{ij}}}} \\ & = (A_{11}^2 + A_{12}^2 + \cdots + A_{1n}^2) + \cdots + (A_{m1}^2 + A_{m2}^2 + \cdots + A_{mn}^2) \\ & = \left| \mathbf{a_1} \right|^2 + \cdots + \left| \mathbf{a_m} \right|^2 \end{aligned}

이때, AijA_{ij}는 행렬 A\mathbf{A}의 성분들이다. 원래의 rank보다 작은 rank로 근사할 경우 행렬의 크기를 줄일 수 있고, 주요 성분 만이 남아 행렬의 분석에도 도움이 될 수 있다. 예를 들어 rank가 1인 행렬의 경우 m×nm \times n 크기의 행렬을 벡터곱 uvT\mathbf{u}\mathbf{v}^T(u\mathbf{u}: 길이 mm, v\mathbf{v}: 길이 nn)으로 표현이 가능하며, 이때 사용되는 원소는 m+nm+n개뿐이다.

A\mathbf{A'}A\mathbf{A}에 대한 최적의 Rank-rr 근사 (rk,    rank(A)=kr \leq k,\;\; rank(\mathbf{A})=k)라고 해보자. 이는 AAF2\left| \mathbf{A}- \mathbf{A'} \right|_F^2가 최소가 됨을 의미하며, 위의 norm의 정의에 의해 AAF2=\left| \mathbf{A}- \mathbf{A'} \right|_F^2=(AA\mathbf{A}- \mathbf{A'}의 첫번째 행벡터) + ... + (AA\mathbf{A}- \mathbf{A'}의 m번째 행벡터) 이다. Rank-rr 행렬 A\mathbf{A'}가 포함하는 rr개의 기저는 어떠한 공간 VV를 생성하며, A\mathbf{A'}의 행은 공간 VV에 포함되어 있다. 따라서 AAF2\left| \mathbf{A}- \mathbf{A'} \right|_F^2를 최소로 하기 위해서 A\mathbf{A'}의 행벡터들은 다음과 같이 결정되어야 한다.

A=(공간  V에서  a1  가장  가까운  벡터공간  V에서  am  가장  가까운  벡터)\mathbf{A'}= \begin{pmatrix} 공간\;V에서\;\mathbf{a_1}에\;가장\;가까운\;벡터\\ \vdots \\ 공간\;V에서\;\mathbf{a_m}에\;가장\;가까운\;벡터 \end{pmatrix}

이때 어떤 벡터 a\mathbf{a}는 어떤 공간 VV에 대해 a=aV+aV\mathbf{a}=\mathbf{a}^{\perp V}+\mathbf{a}^{\parallel V}와 같이 표현될 수 있고, 공간 VV에서 a\mathbf{a}에 가장 가까운 벡터는 aV\mathbf{a}^{\parallel V}, 공간 VV과 벡터 a\mathbf{a} 사이의 거리는 aV\left| \mathbf{a}^{\perp V} \right|이다. 따라서 AAF2=\left| \mathbf{A}- \mathbf{A'} \right|_F^2=(a1\mathbf{a_1}에서 공간 VV 사이의 거리)2^2+ ... + (am\mathbf{a_m}에서 공간 VV 사이의 거리)2^2이 된다.

따라서 주어진 AAF2\left| \mathbf{A}- \mathbf{A'} \right|_F^2A\mathbf{A}의 각 행들에서 공간 VV 사이의 거리의 제곱의 합으로 주어지며, 이러한 공간 VVA\mathbf{A}로부터 계산되는 rr개의 특이벡터들이 span하는 공간이다. 또한 AAF2\left| \mathbf{A}- \mathbf{A'} \right|_F^2는 특이벡터들에 대응되는 특이값을 이용하여 AAF2=AF2σ1σr\left| \mathbf{A}- \mathbf{A'} \right|_F^2=\left| \mathbf{A} \right|_F^2-\sigma_1-\cdots-\sigma_r이다(아래에서 증명함).

aiV=aiv1++aivr=(aiv1)v1++(aivr)vr\mathbf{a_i}^{\parallel V}=\mathbf{a_i}^{\parallel \mathbf{v_1}}+\cdots+\mathbf{a_i}^{\parallel \mathbf{v_r}}=(\mathbf{a_i} \cdot \mathbf{v_1})\mathbf{v_1} + \cdots + (\mathbf{a_i} \cdot \mathbf{v_r})\mathbf{v_r}로 쓸 수 있으며, 행렬 A\mathbf{A}에 대한 Rank-rr 근사 A\mathbf{A'}은 다음과 같이 쓸 수 있다.

A=((a1v1)v1T(amv1)v1T)++((a1vr)vrT(amvr)vrT)=σ1(u1  )(v1T)++σr(ur  )(vrT)=(u1ur)(σ1σr)(v1vr)=UˉΣˉVTˉ\begin{aligned} \mathbf{A'} & = \begin{pmatrix} (\mathbf{a_1} \cdot \mathbf{v_1})\mathbf{v_1}^T\\ \vdots \\ (\mathbf{a_m} \cdot \mathbf{v_1})\mathbf{v_1}^T \end{pmatrix} + \cdots + \begin{pmatrix} (\mathbf{a_1} \cdot \mathbf{v_r})\mathbf{v_r}^T\\ \vdots \\ (\mathbf{a_m} \cdot \mathbf{v_r})\mathbf{v_r}^T \end{pmatrix}\\ & = \sigma_1 \begin{pmatrix} \\ \mathbf{u_1} \\ \; \end{pmatrix} \begin{pmatrix} &\mathbf{v_1}^T & \end{pmatrix} + \cdots + \sigma_r \begin{pmatrix} \\ \mathbf{u_r} \\ \; \end{pmatrix} \begin{pmatrix} &\mathbf{v_r}^T & \end{pmatrix}\\ & = \left( \begin{array}{c|c|c} & & \\ & & \\ \mathbf{u_1} & \cdots & \mathbf{u_r} \\ & & \\ & & \\ \end{array} \right) \begin{pmatrix} \sigma_1 & & \\ & \ddots & \\ & & \sigma_r \end{pmatrix} \begin{pmatrix} & \mathbf{v_1} & \\ \hline & \vdots & \\ \hline & \mathbf{v_r} & \end{pmatrix}\\ & = \bar{\mathbf{U}}\bar{\mathbf{\Sigma}}\bar{\mathbf{V}^T} \end{aligned}

즉, 행렬 A\mathbf{A}에 대한 Rank-rr 근사는 행렬 A\mathbf{A}의 SVD에서 일부의 특이값 및 특이벡터만 취한 것으로 볼 수 있으며, 앞에서 설명한 SVD 활용 데이터 압축과도 연관지어 생각할 수 있다.

위에서 (aivi)viT(\mathbf{a_i} \cdot \mathbf{v_i})\mathbf{v_i}^T들로 표현된 행렬이 갑자기 σi,ui\sigma_i, \mathbf{u_i}로 표현되었으나, 이는 SVD 유도과정에서 UΣ=AV\mathbf{U}\mathbf{\Sigma}=\mathbf{A}\mathbf{V} 를 전개해보면 알 수 있다.


이제 앞에서 생략한 증명을 살펴보자.

  • 먼저 어떤 공간 VV의 정규직교기저가 v1,,vr\mathbf{v_1}, \cdots, \mathbf{v_r}이고, a1,,am\mathbf{a_1}, \cdots, \mathbf{a_m}이 행렬 A\mathbf{A}의 행이라고 할 때, (a1\mathbf{a_1}에서 공간 VV 사이의 거리)2^2+ ... + (am\mathbf{a_m}에서 공간 VV 사이의 거리)2^2=AF2Av12Av22Avr2\left| \mathbf{A} \right|_F^2- \left| \mathbf{A}\mathbf{v_1} \right|^2-\left| \mathbf{A}\mathbf{v_2} \right|^2-\cdots-\left| \mathbf{A}\mathbf{v_r} \right|^2임을 보인다.

    ai=aiV+aiV\mathbf{a_i}=\mathbf{a_i}^{\perp V}+\mathbf{a_i}^{\parallel V}이며, 피타고라스 정리에 의해 aiV2=ai2aiV2\left| \mathbf{a_i}^{\perp V} \right|^2 = \left| \mathbf{a_i} \right|^2-\left| \mathbf{a_i}^{\parallel V} \right|^2이다. 따라서 구하고자 하는 ai\mathbf{a_i} 부터 공간 VV 사이의 제곱 거리의 합은 다음과 같이 쓸 수 있다.

(a12a1V2)++(am2amV2)=(a12++am2)(a1V2++amV2)=AF2((a1v12++a1vr2)++(amv12++amvr2))=AF2(((a1v1)2++(a1vr)2)++((amv1)2++(amvr)2))=AF2(((a1v1)2++(amv1)2)++((a1vr)2++(amvr)2))=AF2Av12Avr2\begin{aligned} (\left| \mathbf{a_1} \right|^2-\left| \mathbf{a_1}^{\parallel V}\right|^2)+ \cdots + (\left| \mathbf{a_m} \right|^2-\left| \mathbf{a_m}^{\parallel V}\right|^2) & = (\left| \mathbf{a_1} \right|^2+\cdots+\left| \mathbf{a_m} \right|^2) - (\left| \mathbf{a_1}^{\parallel V}\right|^2+\cdots+\left| \mathbf{a_m}^{\parallel V}\right|^2) \\ & = \left| \mathbf{A} \right|^2_F-\left((\left| \mathbf{a_1}^{\parallel v_1}\right|^2+\cdots+\left| \mathbf{a_1}^{\parallel v_r}\right|^2) + \cdots + (\left| \mathbf{a_m}^{\parallel v_1}\right|^2+\cdots+\left| \mathbf{a_m}^{\parallel v_r}\right|^2)\right) \\ & = \left| \mathbf{A} \right|^2_F-\left(((\mathbf{a_1} \cdot \mathbf{v_1})^2+\cdots+(\mathbf{a_1} \cdot \mathbf{v_r})^2)+\cdots+((\mathbf{a_m} \cdot \mathbf{v_1})^2+\cdots+(\mathbf{a_m} \cdot \mathbf{v_r})^2)\right) \\ & = \left| \mathbf{A} \right|^2_F-\left(((\mathbf{a_1} \cdot \mathbf{v_1})^2+\cdots+(\mathbf{a_m} \cdot \mathbf{v_1})^2)+\cdots+((\mathbf{a_1} \cdot \mathbf{v_r})^2+\cdots+(\mathbf{a_m} \cdot \mathbf{v_r})^2)\right) \\ & = \left| \mathbf{A} \right|^2_F-\left| \mathbf{A}\mathbf{v_1} \right|^2-\cdots-\left| \mathbf{A}\mathbf{v_r} \right|^2 \end{aligned}
  • 이제 a1,,am\mathbf{a_1}, \cdots, \mathbf{a_m}이 행렬 A\mathbf{A}의 행, v1,,vk\mathbf{v_1}, \cdots, \mathbf{v_k}σ1,,σk\sigma_1, \cdots, \sigma_k가 행렬 A\mathbf{A}의 오른쪽 특이벡터와 특이값이라고 할때, rkr \leq krr개의 특이벡터 v1,,vr\mathbf{v_1}, \cdots, \mathbf{v_r}가 span하는 공간 VV가 (a1\mathbf{a_1}에서 공간 VV 사이의 거리)2^2+ ... + (am\mathbf{a_m}에서 공간 VV 사이의 거리)2^2를 최소화하고, 그 최솟값은 AF2σ12σ22σr2\left| \mathbf{A} \right|_F^2- \sigma_1^2-\sigma_2^2-\cdots-\sigma_r^2임을 보인다.

    우선 앞에서 증명한 내용에 의해 공간 VV에 대한 제곱거리 합은 다음과 같다.

    AF2σ12σ22σr2\left| \mathbf{A} \right|_F^2- \sigma_1^2-\sigma_2^2-\cdots-\sigma_r^2

    이는 UΣ=AV\mathbf{U}\mathbf{\Sigma}=\mathbf{A}\mathbf{V}에서 알 수 있으며, 하나의 벡터성분만 보자면 σiui=Avi\sigma_i\mathbf{u_i}=\mathbf{A}\mathbf{v_i}인데 양변을 제곱하며 크기를 구하면 ui\mathbf{u_i}는 단위벡터이므로 크기는 σi2\sigma_i^2이 된다.

    이제 이 값이 최소임을 증명하기 위해 임의의 r차원 벡터 공간 W=span(w1,,wr)W=span(\mathbf{w_1}, \cdots, \mathbf{w_r)}을 도입하여 WW까지의 제곱거리합이 위의 값보다 작지 않다는 것을 보인다. WW까지의 제곱거리합은 다음과 같다.

    AF2Aw12Awr2=AF2AWF2\left| \mathbf{A} \right|^2_F-\left| \mathbf{A}\mathbf{w_1} \right|^2-\cdots-\left| \mathbf{A}\mathbf{w_r} \right|^2 = \left| \mathbf{A} \right|^2_F- \left| \mathbf{A}\mathbf{W} \right|^2_F

    따라서 AWF2σ12+σ22++σr2\left| \mathbf{A}\mathbf{W} \right|^2_F \leq \sigma_1^2+\sigma_2^2+\cdots+\sigma_r^2 임을 보여야한다. SVD에 의해 A=UΣVT\mathbf{A}=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^T이며, U,V\mathbf{U},\mathbf{V} 는 직교행렬이므로 벡터를 곱했을때 norm을 보존한다. 즉, AWF2=UΣVTWF2=ΣVTWF2\left| \mathbf{A}\mathbf{W} \right|^2_F=\left| \mathbf{U}\mathbf{\Sigma}\mathbf{V}^T\mathbf{W} \right|^2_F=\left| \mathbf{\Sigma}\mathbf{V}^T\mathbf{W} \right|^2_F 이다. 여기서 VTW=X\mathbf{V}^T\mathbf{W}=\mathbf{X}라고 하자.

    x1,,xr\mathbf{x_1}, \cdots, \mathbf{x_r}이 행렬 X\mathbf{X}의 열이라고 할 때, xi=VTwiVxi=VVTwi\mathbf{x_i}=\mathbf{V}^T\mathbf{w_i}\rightarrow\mathbf{V}\mathbf{x_i}=\mathbf{V}\mathbf{V}^T\mathbf{w_i}이며, QR decomposition에서 보았듯이 이는 VV로의 투영 wiV\mathbf{w_i}^{\parallel V}이다. 길이가 1인 단위행렬 wi\mathbf{w_i}를 투영한 것이므로 Vxi21|\mathbf{V}\mathbf{x_i}|^2\leq1이고, V\mathbf{V}는 직교행렬이므로 벡터를 곱했을때 norm을 보존하여 xi21|\mathbf{x_i}|^2\leq1이다. 따라서 XF2r\left| \mathbf{X} \right|^2_F\leq r이다(행렬의 제곱크기는 열벡터들의 제곱크기의 합이므로).

    y1,,yk\mathbf{y_1}, \cdots, \mathbf{y_k}이 행렬 X\mathbf{X}의 행이라고 하면 yi=viTWyi=WTvi\mathbf{y_i}=\mathbf{v_i}^T\mathbf{W}\rightarrow\mathbf{y_i}=\mathbf{W}^T\mathbf{v_i}가 되어 동일한 과정으로 yi21|\mathbf{y_i}|^2\leq1이다.

    ΣXF2=σ12y12++σk2yk2\left| \mathbf{\Sigma}\mathbf{X} \right|^2_F=\sigma_1^2|\mathbf{y_1}|^2+\cdots+\sigma_k^2|\mathbf{y_k}|^2이고, XF2r\left| \mathbf{X} \right|^2_F\leq r이므로 y12++yk2r|\mathbf{y_1}|^2+\cdots+|\mathbf{y_k}|^2\leq r이다. 따라서 다음과 같다(σ1σ2σk\sigma_1\geq\sigma_2\geq\cdots\geq\sigma_k).

    σ12y12++σk2yk2σ12y12++σr2yr2+σr2yr+12+++σr2yk2=((σ12σr2)y12++(σr2σr2)yr2)+(σr2y12++σr2yk2)((σ12σr2)++(σr2σr2))+σr2(y12++yk2)(σ12++σr2rσr2)+σr2r=σ12++σr2\begin{aligned} \sigma_1^2|\mathbf{y_1}|^2+\cdots+\sigma_k^2|\mathbf{y_k}|^2 & \leq \sigma_1|^2\mathbf{y_1}|^2+\cdots+\sigma_r^2|\mathbf{y_r}|^2+\sigma_r^2|\mathbf{y_{r+1}}|^2+\cdots+ +\sigma_r^2|\mathbf{y_k}|^2 \\ & = ((\sigma_1^2-\sigma_r^2)|\mathbf{y_1}|^2+\cdots+(\sigma_r^2-\sigma_r^2)|\mathbf{y_r}|^2)+(\sigma_r^2|\mathbf{y_1}|^2+\cdots+\sigma_r^2|\mathbf{y_k}|^2)\\ & \leq ((\sigma_1^2-\sigma_r^2)+\cdots+(\sigma_r^2-\sigma_r^2))+\sigma_r^2(|\mathbf{y_1}|^2+\cdots+|\mathbf{y_k}|^2)\\ & \leq (\sigma_1^2+\cdots+\sigma_r^2-r\sigma_r^2)+\sigma_r^2r\\ & = \sigma_1^2+\cdots+\sigma_r^2 \end{aligned}

    따라서 AWF2=UΣVTWF2=ΣVTWF2=ΣXF2σ12++σr2\left| \mathbf{A}\mathbf{W} \right|^2_F=\left| \mathbf{U}\mathbf{\Sigma}\mathbf{V}^T\mathbf{W} \right|^2_F=\left| \mathbf{\Sigma}\mathbf{V}^T\mathbf{W} \right|^2_F=\left| \mathbf{\Sigma}\mathbf{X} \right|^2_F \leq \sigma_1^2+\cdots+\sigma_r^2가 되어 증명이 완료된다.


이제 Ax\mid \mathbf{A}\mathbf{x} \mid를 최소로 만드는 최소제곱문제의 최적해가 가장 작은 특이값에 대응되는 오른쪽 특이벡터라는 것을 증명해보자. 이를 위하여 임의의 벡터 w\mathbf{w}에 대해서 AwAvkσk|\mathbf{A}\mathbf{w}| \leq |\mathbf{A}\mathbf{v_k}| \leq \mathbf{\sigma_k}가 만족함을 보여야 한다. 이는 W\mathbf{W}를 생성할 때 한 개의 임의의 벡터만 사용되었다고 생각하고 위 과정을 진행한 뒤에, 위 부등식에서 다음과 같이 전개하여 증명할 수 있다.

σ12y12++σk2yk2σk2y12++σk2yk2=σk2(y12++yk2)                  제약조건    w=1=σk2\begin{aligned} \sigma_1^2|\mathbf{y_1}|^2+\cdots+\sigma_k^2|\mathbf{y_k}|^2 & \geq \sigma_k^2|\mathbf{y_1}|^2+\cdots+\sigma_k^2|\mathbf{y_k}|^2 \\ & = \sigma_k^2(|\mathbf{y_1}|^2+\cdots+|\mathbf{y_k}|^2) \;\;\;\;\;\;\;\;\; \cdots 제약조건\;\; |\mathbf{w}|=1\\ & = \sigma_k^2 \end{aligned}

따라서 AWF2=UΣVTWF2=ΣVTWF2=ΣXF2=σ12y12++σk2yk2σk2\left| \mathbf{A}\mathbf{W} \right|^2_F=\left| \mathbf{U}\mathbf{\Sigma}\mathbf{V}^T\mathbf{W} \right|^2_F=\left| \mathbf{\Sigma}\mathbf{V}^T\mathbf{W} \right|^2_F=\left| \mathbf{\Sigma}\mathbf{X} \right|^2_F =\sigma_1^2|\mathbf{y_1}|^2+\cdots+\sigma_k^2|\mathbf{y_k}|^2 \geq \sigma_k^2이고, 양변에 루트를 취하면 AWFσk\left| \mathbf{A}\mathbf{W} \right|_F \geq \sigma_k가 되어 가장 작은 특이값에 대응되는 오른쪽 특이벡터를 A\mathbf{A}에 곱했을 때, 임의의 벡터 w\mathbf{w}를 곱했을 때보다 작거나 같은 값을 얻을 수 있음을 알 수 있다.

0개의 댓글

관련 채용 정보