필립 클라인의 저서 코딩 더 매트릭스 12장 특이값 분해
행렬을 로우 랭크 행렬로 근사시 얻는 이점을 알아봅니다.
프로베니우스 norm을 알아봅니다.
트롤리 노선 위치 문제를 통해 벡터들에 가장 가까운 벡터의 의미를 이해합니다.
가장 가까운 1차원 공간의 의미를 이해합니다.
가장 가까운 k-차원 공간의 의미를 이해합니다.
특이값 분해를 알고 성질을 이해합니다.
오른쪽 특이벡터들을 이용해 가장 가까운 k-차원 공간을 찾는 법을 이해합니다.
로우 랭크 행렬에 의한 행렬 근사
랭크가 1인 행렬의 모든 행들은 1차원 공간에 놓여 있습니다. v v v 가 이 공간의 기저라 하면 행렬의 모든 행은 v v v 의 스칼라배입니다. u u u 를 스칼라배들을 엔트리로 가지는 벡터라 하면 랭크가 1인 행렬을 다음과 같이 표현할 수 있습니다.
[ u ] [ v T ] \begin{bmatrix}
\text{ }\\
u \\
\text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } & v^T & \text{ }
\end{bmatrix} ⎣ ⎢ ⎡ u ⎦ ⎥ ⎤ [ v T ]
위와 같이 행렬을 표현하면 m x n 행렬을 단순히 m + n 개의 숫자들로 표현할 수 있습니다. 그리고 행렬-벡터 곱셈에 대해 다음처럼 바꾸어 표현함으로써 연산수를 줄일 수 있습니다.
( [ u ] [ v T ] ) [ w ] = [ u ] ( [ v T ] [ w ] ) \begin{pmatrix}
\begin{bmatrix}
\text{ } \\
u \\
\text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } & v^T & \text{ }
\end{bmatrix}
\end{pmatrix}
\begin{bmatrix}
\text{ } \\
w \\
\text{ }
\end{bmatrix}
= \begin{bmatrix}
\text{ } \\
u \\
\text{ }
\end{bmatrix}
\begin{pmatrix}
\begin{bmatrix}
\text{ } & v^T & \text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } \\
w \\
\text{ }
\end{bmatrix}
\end{pmatrix} ⎝ ⎛ ⎣ ⎢ ⎡ u ⎦ ⎥ ⎤ [ v T ] ⎠ ⎞ ⎣ ⎢ ⎡ w ⎦ ⎥ ⎤ = ⎣ ⎢ ⎡ u ⎦ ⎥ ⎤ ⎝ ⎛ [ v T ] ⎣ ⎢ ⎡ w ⎦ ⎥ ⎤ ⎠ ⎞
행렬의 norm
다음과 같이 행렬의 norm을 구하는 것을 프로베니우스 norm이라 합니다.
∥ A ∥ = ∑ i ∑ j A [ i , j ] 2 \parallel A \parallel = \sqrt{\sum_i \sum_j A[i, j]^2} ∥ A ∥ = i ∑ j ∑ A [ i , j ] 2
프로베니우스 norm의 제곱은 행렬 A A A 의 행들의 제곱의 합과 동일합니다.
트롤리 노선 위치
벡터 a 1 , . . . , a m a_1, ..., a_m a 1 , . . . , a m 으로 명시된 m m m 개의 주택의 위치에 대해 m m m 개의 주택에 가장 가깝게 배치하는 트램 레일을 찾으려고 합니다. 이 때 norm이 1인 벡터 v v v 에 대해 트램 레일을 S p a n { v } Span\text{ }\{v\} S p a n { v } 라 하면 어떤 벡터 v v v 가 가장 이상적인 배치를 이끌어 낼 수 있을까요?
각 벡터 a 1 , . . . , a m a_1, ..., a_m a 1 , . . . , a m 은 각자로부터 레일까지의 거리 d i d_i d i 를 가집니다. 최소제곱처럼 벡터 [ d 1 , . . . , d m ] [d_1, ..., d_m] [ d 1 , . . . , d m ] 의 norm을 최소화한다면 가장 가까운 위치라 할 수 있습니다. 즉 d 1 2 + . . . + d m 2 d_1^2 + ... + d_m^2 d 1 2 + . . . + d m 2 을 최소화하는 경우입니다. 각각의 주택에서 레일까지의 거리는 ∥ a i ⊥ v ∥ 2 \parallel a_i^{\perp v} \parallel ^2 ∥ a i ⊥ v ∥ 2 이라 할 수 있습니다. 피타고라스의 정리에 의해 ∥ a i ⊥ v ∥ 2 \parallel a_i^{\perp v} \parallel ^2 ∥ a i ⊥ v ∥ 2 를 다음과 같이 쓸 수 있습니다.
∥ a i ⊥ v ∥ 2 = ∥ a i ∥ 2 − ∥ a i ∥ v ∥ 2 \parallel a_i^{\perp v} \parallel ^2 = \parallel a_i \parallel ^2 - \parallel a_i^{\parallel v} \parallel ^2 ∥ a i ⊥ v ∥ 2 = ∥ a i ∥ 2 − ∥ a i ∥ v ∥ 2
각각의 주택에 대해 합하면 다음과 같습니다.
∑ i = 1 m ( a i 에서 S p a n { v } 까지의 거리 ) 2 = ∥ a 1 ∥ 2 + . . . + ∥ a m ∥ 2 − ( ∥ a 1 ∥ v ∥ 2 + . . . + ∥ a m ∥ v ∥ 2 ) = ∥ A ∥ 2 − ( ∥ a 1 ∥ v ∥ 2 + . . . + ∥ a m ∥ v ∥ 2 ) \begin{aligned}
\sum_{i=1}^{m} (a_i에서 \text{ } Span\text{ }\{v\}까지의 \text{ }거리)^2 & = \parallel a_1 \parallel ^2 + ... + \parallel a_m \parallel ^2 - (\parallel a_1^{\parallel v} \parallel ^2 + ... + \parallel a_m^{\parallel v} \parallel ^2) \\
& = \parallel A \parallel ^2 - (\parallel a_1^{\parallel v} \parallel ^2 + ... + \parallel a_m^{\parallel v} \parallel ^2)
\end{aligned} i = 1 ∑ m ( a i 에 서 S p a n { v } 까 지 의 거 리 ) 2 = ∥ a 1 ∥ 2 + . . . + ∥ a m ∥ 2 − ( ∥ a 1 ∥ v ∥ 2 + . . . + ∥ a m ∥ v ∥ 2 ) = ∥ A ∥ 2 − ( ∥ a 1 ∥ v ∥ 2 + . . . + ∥ a m ∥ v ∥ 2 )
a i ∥ v = ⟨ a i , v ⟩ v a_i^{\parallel v} = \langle a_i, v \rangle v a i ∥ v = ⟨ a i , v ⟩ v 인 사실과 v v v 의 norm이 1인 사실을 이용해 위 식을 아래와 같이 바꿔 쓸 수 있습니다.
∑ i = 1 m ( a i 에서 S p a n { v } 까지의 거리 ) 2 = ∥ A ∥ 2 − ( ⟨ a 1 , v ⟩ 2 + . . + ⟨ a m , v ⟩ 2 ) = ∥ A ∥ 2 − ∥ A v ∥ 2 \begin{aligned}
\sum_{i=1}^{m} (a_i에서 \text{ } Span\text{ }\{v\}까지의 \text{ }거리)^2 & = \parallel A \parallel ^2 - (\langle a_1, v \rangle ^2 + .. + \langle a_m, v \rangle ^2) \\
& = \parallel A \parallel ^2 - \parallel Av \parallel ^2
\end{aligned} i = 1 ∑ m ( a i 에 서 S p a n { v } 까 지 의 거 리 ) 2 = ∥ A ∥ 2 − ( ⟨ a 1 , v ⟩ 2 + . . + ⟨ a m , v ⟩ 2 ) = ∥ A ∥ 2 − ∥ A v ∥ 2
v v v 는 ∥ A v ∥ 2 \parallel Av \parallel ^2 ∥ A v ∥ 2 을 최대화하는 벡터라 할 수 있습니다. 이 때 σ 1 = ∥ A v ∥ \sigma_1 = \parallel Av \parallel σ 1 = ∥ A v ∥ 을 만족하는 σ 1 \sigma_1 σ 1 을 A A A 의 첫번째 특이값이라 하고 v v v 를 첫번째 오른쪽 특이 벡터라고 합니다. 따라서 제곱 거리합의 최솟값을 ∥ A ∥ 2 − σ 1 2 \parallel A \parallel ^2 - \sigma_1^2 ∥ A ∥ 2 − σ 1 2 처럼 쓸 수 있습니다.
행렬에 대한 랭크-1 근사
벡터에 대한 최상의 k-스파스 근사를 찾는데 있어서 "최상"은 "원래의 벡터에 가장 가까운"을 말합니다. 이번에는 원래의 행렬에 가장 가까운 행렬, 즉 최상의 랭크-k 근사 행렬을 찾아보겠습니다. 여기서 가장 가까운 랭크-1 행렬을 A ˉ \bar{A} A ˉ 라 쓰겠습니다. A ˉ \bar{A} A ˉ 은 ∥ A − A ˉ ∥ \parallel A - \bar{A} \parallel ∥ A − A ˉ ∥ 를 최소화하는 랭크-1 행렬입니다.
∥ A − A ˉ ∥ \parallel A - \bar{A} \parallel ∥ A − A ˉ ∥ 를 A − A ˉ A - \bar{A} A − A ˉ 의 행벡터의 관점에서 보면 다음과 같이 쓸 수 있습니다.
∥ A − A ˉ ∥ 2 = ∥ ( A − A ˉ ) 의 행 1 ∥ 2 + . . . + ∥ ( A − A ˉ ) 의 행 m ∥ 2 \parallel A - \bar{A} \parallel ^2 = \parallel (A - \bar{A})의 \text{ } 행 \text{ } 1 \parallel ^2 + ... + \parallel (A - \bar{A})의 \text{ } 행 \text{ } m \parallel ^2 ∥ A − A ˉ ∥ 2 = ∥ ( A − A ˉ ) 의 행 1 ∥ 2 + . . . + ∥ ( A − A ˉ ) 의 행 m ∥ 2
A ˉ \bar{A} A ˉ 는 랭크-1 행렬이므로 어떤 벡터 v 1 v_1 v 1 에 대해 A ˉ \bar{A} A ˉ 의 각 행은 S p a n { v 1 } Span\text{ }\{v_1\} S p a n { v 1 } 내에 있어야 합니다. 따라서 A A A 까지의 거리를 최소화하기 위해 v 1 v_1 v 1 가 선택되면 A ˉ \bar{A} A ˉ 를 아래와 같이 선택해야 합니다.
A ˉ = [ a 1 에 가장 가까운 S p a n { v 1 } 내의 벡터 . . . a m 에 가장 가까운 S p a n { v 1 } 내의 벡터 ] \bar{A} = \begin{bmatrix}
a_1에 \text{ }가장 \text{ }가까운 \text{ } Span\text{ }\{v_1\}내의 \text{ }벡터 \\
... \\
a_m에 \text{ }가장 \text{ }가까운 \text{ } Span\text{ }\{v_1\}내의 \text{ }벡터
\end{bmatrix} A ˉ = ⎣ ⎢ ⎡ a 1 에 가 장 가 까 운 S p a n { v 1 } 내 의 벡 터 . . . a m 에 가 장 가 까 운 S p a n { v 1 } 내 의 벡 터 ⎦ ⎥ ⎤
a i a_i a i 에 가장 가까운 S p a n { v 1 } Span\text{ }\{v_1\} S p a n { v 1 } 내의 벡터는 트롤리 노선 위치 문제와 마찬가지로 a i a_i a i 에 대한 투영이라 할 수 있습니다. 따라서 각각의 행을 다음처럼 쓸 수 있습니다.
A ˉ = [ ⟨ a 1 , v 1 ⟩ v 1 T . . . ⟨ a m , v 1 ⟩ v 1 T ] \bar{A} = \begin{bmatrix}
\text{ } & \langle a_1, v_1 \rangle v_1^T & \text{ }\\
\text{ } & ... & \text{ }\\
\text{ } & \langle a_m, v_1 \rangle v_1^T & \text{ }
\end{bmatrix} A ˉ = ⎣ ⎢ ⎡ ⟨ a 1 , v 1 ⟩ v 1 T . . . ⟨ a m , v 1 ⟩ v 1 T ⎦ ⎥ ⎤
위 행렬은 다시 다음과 같이 변환됩니다.
A ˉ = [ ⟨ a 1 , v 1 ⟩ . . . ⟨ a m , v 1 ⟩ ] [ v 1 T ] = [ A v 1 ] [ v 1 T ] \bar{A} = \begin{bmatrix}
\text{ } & \langle a_1, v_1 \rangle & \text{ } \\
\text{ } & ... & \text{ }\\
\text{ } & \langle a_m, v_1 \rangle & \text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_1^T & \text{ }
\end{bmatrix}
= \begin{bmatrix}
\text{ } \\
\text{ } \\
Av_1 \\
\text{ } \\
\text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_1^T & \text{ }
\end{bmatrix} A ˉ = ⎣ ⎢ ⎡ ⟨ a 1 , v 1 ⟩ . . . ⟨ a m , v 1 ⟩ ⎦ ⎥ ⎤ [ v 1 T ] = ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎡ A v 1 ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤ [ v 1 T ]
이전에 σ 1 = ∥ A v 1 ∥ \sigma_1 = \parallel Av_1 \parallel σ 1 = ∥ A v 1 ∥ 를 정의했었습니다. σ 1 u 1 = A v 1 \sigma_1 u_1 = Av_1 σ 1 u 1 = A v 1 을 만족하는 norm이 1인 벡터를 u 1 u_1 u 1 이 있다고 하면 다음과 같이 바꿔 쓸 수 있습니다.
A ˉ = σ 1 [ u 1 ] [ v 1 T ] \bar{A} = \sigma_1 \begin{bmatrix}
\text{ } \\
\text{ } \\
u_1 \\
\text{ } \\
\text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_1^T & \text{ }
\end{bmatrix} A ˉ = σ 1 ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎡ u 1 ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤ [ v 1 T ]
이 때 u 1 u_1 u 1 을 A A A 의 왼쪽 특이벡터라 합니다. A ˉ = σ 1 u 1 v T \bar{A} = \sigma_1 u_1 v^T A ˉ = σ 1 u 1 v T 입니다.
가장 가까운 1차원 아핀공간
트롤리 노선 위치문제의 가장 가까운 벡터 S p a n { v } Span\text{ }\{v\} S p a n { v } 는 원점을 지나는 직선이었습니다. 하지만 임의의 직선은 항상 원점을 지나지는 않습니다. 임의의 직선은 아핀 공간입니다. 주택의 위치 a 1 , . . . , a m a_1, ..., a_m a 1 , . . . , a m 에 대해 점 a ˉ \bar{a} a ˉ 를 선택하고 다음에 a ˉ \bar{a} a ˉ 를 각각의 주택의 위치에서 빼 평행이동하면 다음과 같습니다.
a 1 − a ˉ , . . . , a m − a ˉ a_1 - \bar{a}, ..., a_m - \bar{a} a 1 − a ˉ , . . . , a m − a ˉ
위처럼 평행이동한 위치에 대해 가장 가까운 1차원 벡터공간을 찾고 나중에 a ˉ \bar{a} a ˉ 를 더해 벡터공간을 평행이동 시키면 가장 가까운 벡터를 찾을 수 있습니다. 이 때 a ˉ \bar{a} a ˉ 는 직관적으로 입력된 점들의 센트로이드(centroid)이고 다음과 같이 기술합니다.
a ˉ = 1 m ∑ i = 1 m a i \bar{a} = \frac{1}{m} \sum_{i=1}^{m}a_i a ˉ = m 1 i = 1 ∑ m a i
가장 가까운 차원-k 벡터 공간
트롤리 노선 위치 문제를 더 높은 차원으로 일반화 해보겠습니다. 이 알고리즘의 입력과 출력은 다음과 같습니다.
input: 벡터 a 1 , . . . , a m a_1, ..., a_m a 1 , . . . , a m 과 양의 정수 k k k
output: 다음을 최소화하는 k-차원 벡터공간 V k V_k V k 의 기저
∑ i ( a i 에서 V k 까지의 거리 ) 2 \sum_i (a_i에서 \text{ } V_k까지의 \text{ } 거리)^2 i ∑ ( a i 에 서 V k 까 지 의 거 리 ) 2
이 알고리즘의 자연스러운 일반화는 정규직교 기저를 찾는 것입니다. 매 이터레이션에서 V k V_k V k 의 기저를 찾는 다고 할 때 다음과 같은 프로세스가 진행됩니다.
v 1 v_1 v 1 은 ∥ A v ∥ \parallel Av \parallel ∥ A v ∥ 을 최대가 되게 하는 norm이 1인 벡터
v 2 v_2 v 2 는 v 1 v_1 v 1 에 직교하며 ∥ A v ∥ \parallel Av \parallel ∥ A v ∥ 을 최대가 되게 하는 norm이 1인 벡터
v 3 v_3 v 3 는 v 1 v_1 v 1 , v 2 v_2 v 2 에 직교하며 ∥ A v ∥ \parallel Av \parallel ∥ A v ∥ 을 최대가 되게 하는 norm이 1인 벡터
...
다음은 이 알고리즘에 대한 의사코드입니다.
def find_right_singular_vectors ( A) :
for i = 1 , 2 , . . .
vi = arg_max{ | | Av| | : | | v| | = 1 , v is orthogonal to v1, v2, . . . , v( i- 1 ) }
sigma = | | Avi| |
until Av = 0 ( v is orthogonal to v1, v2, . . . , vi)
return [ v1, v2, . . . , vi]
위와 같은 알고리즘을 Gedaken 알고리즘이라고 합니다.
이터레이션에서 매번 얻게 되는 σ i = ∥ A v i ∥ \sigma_i = \parallel Av_i \parallel σ i = ∥ A v i ∥ 는 음수가 아니며 내림차순입니다. 그도 그럴것이 σ i \sigma_i σ i 는 norm이므로 당연히 음수가 아닙니다. 매 이터레이션에서 얻게 되는 σ i \sigma_i σ i 는 ∥ A v i ∥ \parallel Av_i \parallel ∥ A v i ∥ 값을 최대화 시키는 후보집합 중 이전 이터레이션의 결과를 제외한 집합에서 선택되므로 자명하게 내림차순임을 알 수 있습니다. 이터레이션은 A v = 0 Av = 0 A v = 0 일 때 까지 반복됩니다. 거리는 ∥ A ∥ 2 − ∥ A v ∥ 2 \parallel A \parallel ^2 - \parallel Av \parallel ^2 ∥ A ∥ 2 − ∥ A v ∥ 2 이므로 A v = 0 Av = 0 A v = 0 은 더이상 가까운 벡터가 없음을 의미합니다. 따라서 이터레이션의 종료 조건이 됩니다.
한편 A A A 의 모든 행들은 오른쪽 특이벡터의 생성에 속합니다. 이터레이션의 종료 조건인 A v = 0 Av = 0 A v = 0 을 만족할 때 이전까지의 오른쪽 특이벡터 v 1 , . . . , v i v_1, ..., v_i v 1 , . . . , v i 는 v v v 와 직교합니다. 그리고 v v v 는 A A A 의 소멸자 입니다. v v v 를 V 0 V^0 V 0 의 임의의 벡터라 하겠습니다. ( V 0 ) 0 (V^0)^0 ( V 0 ) 0 는 V 0 V^0 V 0 에 직교하는 모든 벡터들로 구성되므로 v 1 , . . . , v i v_1, ..., v_i v 1 , . . . , v i 는 ( V 0 ) 0 (V^0)^0 ( V 0 ) 0 에 속한다고 할 수 있습니다. 그리고 A A A 는 v v v 의 소멸자이므로 ( V 0 ) 0 (V^0)^0 ( V 0 ) 0 에 속한다고 할 수 있습니다. 따라서 A A A 의 행들은 S p a n { [ v 1 , . . . , v i ] } Span\text{ }\{[v_1, ..., v_i]\} S p a n { [ v 1 , . . . , v i ] } , 즉 ( V 0 ) 0 = V (V^0)^0 = V ( V 0 ) 0 = V 의 생성에 속합니다.
특이값 분해
A A A 의 각 행 a i a_i a i 가 오른쪽 특이벡터들의 생성에 속한다는 것을 보았습니다. v i v_i v i 는 norm이 1인 벡터이므로 a i a_i a i 를 다음과 같이 표현 할 수 있습니다.
a i = σ 1 v 1 + . . . + σ r v r = ⟨ a i , v 1 ⟩ v 1 + . . . + ⟨ a i , v r ⟩ v r \begin{aligned}
a_i & = \sigma_1 v_1 + ... + \sigma_r v_r \\
& = \langle a_i, v_1 \rangle v_1 + ... + \langle a_i, v_r \rangle v_r
\end{aligned} a i = σ 1 v 1 + . . . + σ r v r = ⟨ a i , v 1 ⟩ v 1 + . . . + ⟨ a i , v r ⟩ v r
위 식을 벡터-행렬 곱셈으로 아래와 같이 표현 할 수 있습니다.
a i = [ ⟨ a i , v 1 ⟩ . . . ⟨ a i , v r ⟩ ] [ v 1 T . . . v r T ] a_i = \begin{bmatrix}
\langle a_i, v_1 \rangle & ... & \langle a_i, v_r \rangle
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_1^T & \text{ } \\
\text{ } & ... & \text{ } \\
\text{ } & v_r^T & \text{ }
\end{bmatrix} a i = [ ⟨ a i , v 1 ⟩ . . . ⟨ a i , v r ⟩ ] ⎣ ⎢ ⎡ v 1 T . . . v r T ⎦ ⎥ ⎤
A A A 의 모든 행들에 대해 표현하면 다음과 같습니다.
A = [ ⟨ a 1 , v 1 ⟩ . . . ⟨ a 1 , v r ⟩ . . . ⟨ a m , v 1 ⟩ . . . ⟨ a m , v r ⟩ ] [ v 1 T . . . v r T ] A = \begin{bmatrix}
\langle a_1, v_1 \rangle & ... & \langle a_1, v_r \rangle \\
\text{ } & ... & \text{ } \\
\langle a_m, v_1 \rangle & ... & \langle a_m, v_r \rangle
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_1^T & \text{ } \\
\text{ } & ... & \text{ } \\
\text{ } & v_r^T & \text{ }
\end{bmatrix} A = ⎣ ⎢ ⎡ ⟨ a 1 , v 1 ⟩ ⟨ a m , v 1 ⟩ . . . . . . . . . ⟨ a 1 , v r ⟩ ⟨ a m , v r ⟩ ⎦ ⎥ ⎤ ⎣ ⎢ ⎡ v 1 T . . . v r T ⎦ ⎥ ⎤
이 때 우변의 첫번째 행렬의 한 열을 따로 떼어놓고 다시 정리하면 다음과 같습니다.
[ ⟨ a 1 , v i ⟩ ⟨ a m , v i ⟩ ] = [ A v i ] \begin{bmatrix}
\langle a_1, v_i \rangle\\
\text{ } \\
\langle a_m, v_i \rangle
\end{bmatrix}
= \begin{bmatrix}
\text{ } \\
Av_i \\
\text{ }
\end{bmatrix} ⎣ ⎢ ⎡ ⟨ a 1 , v i ⟩ ⟨ a m , v i ⟩ ⎦ ⎥ ⎤ = ⎣ ⎢ ⎡ A v i ⎦ ⎥ ⎤
σ i u i = A v i \sigma_i u_i = Av_i σ i u i = A v i 라 하고 다시 고쳐 쓰면 다음과 같습니다.
A = [ σ 1 u 1 . . . σ r u r ] [ v 1 T . . . v r T ] = [ u 1 . . . u r ] [ σ 1 . . . σ r ] [ v 1 T . . . v r T ] \begin{aligned}
A & = \begin{bmatrix}
\text{ } & \text{ } & \text{ } \\
\sigma_1 u_1 & ... & \sigma_r u_r \\
\text{ } & \text{ } & \text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_1^T & \text{ } \\
\text{ } & ... & \text{ } \\
\text{ } & v_r^T & \text{ }
\end{bmatrix} \\
& = \begin{bmatrix}
\text{ } & \text{ } & \text{ } \\
u_1 & ... & u_r \\
\text{ } & \text{ } & \text{ }
\end{bmatrix}
\begin{bmatrix}
\sigma_1 & \text{ } & \text{ } \\
\text{ } & ... & \text{ } \\
\text{ } & \text{ } & \sigma_r
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_1^T & \text{ } \\
\text{ } & ... & \text{ } \\
\text{ } & v_r^T & \text{ }
\end{bmatrix}
\end{aligned} A = ⎣ ⎢ ⎡ σ 1 u 1 . . . σ r u r ⎦ ⎥ ⎤ ⎣ ⎢ ⎡ v 1 T . . . v r T ⎦ ⎥ ⎤ = ⎣ ⎢ ⎡ u 1 . . . u r ⎦ ⎥ ⎤ ⎣ ⎢ ⎡ σ 1 . . . σ r ⎦ ⎥ ⎤ ⎣ ⎢ ⎡ v 1 T . . . v r T ⎦ ⎥ ⎤
위 식을 간단하게 A = U Σ V T A = U\Sigma V^T A = U Σ V T 라 쓸 수 있습니다. 이를 특이값 분해라 하고 다음 세가지 성질을 갖습니다.
Σ \Sigma Σ 는 대각 행렬이고 그 엔트리 σ 1 , . . . , σ r \sigma_1, ..., \sigma_r σ 1 , . . . , σ r 은 양수이고 내림차순입니다.
V V V 는 열-직교 행렬입니다.
U U U 는 열-직교 행렬입니다.
특이값 분해는 전치에 대해 대칭성을 가집니다. A = U Σ V T A = U\Sigma V^T A = U Σ V T 일 때 A T A^T A T 에 대해 다음이 성립합니다.
A T = ( U Σ V T ) T = V Σ T U T = V Σ U T \begin{aligned}
A^T & = (U\Sigma V^T)^T \\
& = V \Sigma^T U^T \\
& = V \Sigma U^T
\end{aligned} A T = ( U Σ V T ) T = V Σ T U T = V Σ U T
여기서 Σ \Sigma Σ 는 대각행렬이므로 Σ = Σ T \Sigma = \Sigma^T Σ = Σ T 입니다.
가장 가까운 k-차원 공간을 찾는데 오른쪽 특이벡터 사용하기
벡터 공간 V V V 의 정규 직교 기저, v 1 , . . . , v k v_1, ..., v_k v 1 , . . . , v k 에 대해 다음이 성립합니다.
( a 1 에서 V 까지의 거리 ) 2 + . . . + ( a m 에서 V 까지의 거리 ) 2 = ∣ ∣ A ∣ ∣ 2 − ∣ ∣ A v 1 ∣ ∣ 2 − ∣ ∣ A v 2 ∣ ∣ 2 − . . . − ∣ ∣ A v k ∣ ∣ 2 \begin{aligned}
(a_1에서 \text{ } V까지의 \text{ } 거리)^2 + ... + (a_m에서 \text{ } V까지의 \text{ } 거리)^2 \\
= ||A||^2 - ||Av_1||^2 - ||Av_2||^2 - ... - ||Av_k||^2
\end{aligned} ( a 1 에 서 V 까 지 의 거 리 ) 2 + . . . + ( a m 에 서 V 까 지 의 거 리 ) 2 = ∣ ∣ A ∣ ∣ 2 − ∣ ∣ A v 1 ∣ ∣ 2 − ∣ ∣ A v 2 ∣ ∣ 2 − . . . − ∣ ∣ A v k ∣ ∣ 2
a i a_i a i 에서 V V V 까지의 거리는 피타고라스의 정리에 의해 ∥ a i ⊥ V ∥ 2 = ∥ a i ∥ 2 − ∥ a i ∥ V ∥ 2 \parallel a_i^{\perp V} \parallel ^2 = \parallel a_i \parallel ^2 - \parallel a_i^{\parallel V} \parallel ^2 ∥ a i ⊥ V ∥ 2 = ∥ a i ∥ 2 − ∥ a i ∥ V ∥ 2 입니다. 이를 위 식에 대입하면 다음을 얻습니다.
( a 1 에서 V 까지의 거리 ) 2 + . . . + ( a m 에서 V 까지의 거리 ) 2 = ( ∥ a 1 ∥ 2 − ∥ a 1 ∥ V ∥ 2 ) + . . . + ( ∥ a m ∥ 2 − ∥ a m ∥ V ∥ 2 ) = ∥ a 1 ∥ 2 + . . . + ∥ a m ∥ 2 − ∥ a 1 ∥ V ∥ 2 − . . . − ∥ a m ∥ V ∥ 2 = ∥ A ∥ 2 − ⟨ a 1 , v 1 ⟩ 2 − . . . − ⟨ a 1 , v k ⟩ 2 − . . . − ⟨ a m , v 1 ⟩ 2 − . . . − ⟨ a m , v k ⟩ 2 = ∥ A ∥ 2 − ⟨ a 1 , v 1 ⟩ 2 − . . . − ⟨ a m , v 1 ⟩ 2 − . . . − ⟨ a 1 , v k ⟩ 2 − . . . − ⟨ a m , v k ⟩ 2 = ∥ A ∥ 2 − ∥ A v 1 ∥ 2 − . . . − ∥ A v k ∥ 2 \begin{aligned}
& (a_1에서 \text{ } V까지의 \text{ } 거리)^2 + ... + (a_m에서 \text{ } V까지의 \text{ } 거리)^2 \\
& = (\parallel a_1 \parallel ^2 - \parallel a_1^{\parallel V} \parallel ^2) + ... + (\parallel a_m \parallel ^2 - \parallel a_m^{\parallel V} \parallel ^2) \\
& = \parallel a_1 \parallel ^2 + ... + \parallel a_m \parallel ^2 - \parallel a_1^{\parallel V} \parallel ^2 - ... - \parallel a_m^{\parallel V} \parallel ^2 \\
& = \parallel A \parallel ^2 - \langle a_1, v_1 \rangle ^2 - ... - \langle a_1, v_k \rangle ^2 - ... - \langle a_m, v_1 \rangle ^2 - ... - \langle a_m, v_k \rangle ^2 \\
& = \parallel A \parallel ^2 - \langle a_1, v_1 \rangle ^2 - ... - \langle a_m, v_1 \rangle ^2 - ... - \langle a_1, v_k \rangle ^2 - ... - \langle a_m, v_k \rangle ^2 \\
& = \parallel A \parallel ^2 - \parallel Av_1 \parallel ^2 - ... - \parallel Av_k \parallel ^2
\end{aligned} ( a 1 에 서 V 까 지 의 거 리 ) 2 + . . . + ( a m 에 서 V 까 지 의 거 리 ) 2 = ( ∥ a 1 ∥ 2 − ∥ a 1 ∥ V ∥ 2 ) + . . . + ( ∥ a m ∥ 2 − ∥ a m ∥ V ∥ 2 ) = ∥ a 1 ∥ 2 + . . . + ∥ a m ∥ 2 − ∥ a 1 ∥ V ∥ 2 − . . . − ∥ a m ∥ V ∥ 2 = ∥ A ∥ 2 − ⟨ a 1 , v 1 ⟩ 2 − . . . − ⟨ a 1 , v k ⟩ 2 − . . . − ⟨ a m , v 1 ⟩ 2 − . . . − ⟨ a m , v k ⟩ 2 = ∥ A ∥ 2 − ⟨ a 1 , v 1 ⟩ 2 − . . . − ⟨ a m , v 1 ⟩ 2 − . . . − ⟨ a 1 , v k ⟩ 2 − . . . − ⟨ a m , v k ⟩ 2 = ∥ A ∥ 2 − ∥ A v 1 ∥ 2 − . . . − ∥ A v k ∥ 2
A A A 의 오른쪽 특이벡터 v 1 , . . . , v k v_1, ..., v_k v 1 , . . . , v k 와 특이값 σ 1 , . . . , σ r \sigma_1, ..., \sigma_r σ 1 , . . . , σ r 에 대해 제곱 거리의 합의 최소값은 ∥ A ∥ 2 − σ 1 2 − . . . − σ k 2 \parallel A \parallel ^2 - \sigma_1 ^2 - ... - \sigma_k ^2 ∥ A ∥ 2 − σ 1 2 − . . . − σ k 2 입니다. 이를 증명하기 위해 임의의 다른 k-차원 벡터공간 W W W 의 최소 제곱합이 ∥ A ∥ 2 − σ 1 2 − . . . − σ k 2 \parallel A \parallel ^2 - \sigma_1 ^2 - ... - \sigma_k ^2 ∥ A ∥ 2 − σ 1 2 − . . . − σ k 2 보다 큼을 보여줄 필요가 있습니다.
임의의 벡터공간 W W W 는 정규직교 기저를 가지고 이를 w 1 , . . . , w k w_1, ..., w_k w 1 , . . . , w k 라 하겠습니다. 그러면 A A A 의 각 행 a 1 , . . . , a m a_1, ..., a_m a 1 , . . . , a m 에 대해 다음 제곱 거리의 합을 얻습니다.
∥ A ∥ 2 − ∥ A w 1 ∥ 2 − . . . − ∥ A w k ∥ 2 \parallel A \parallel ^2 - \parallel Aw_1 \parallel ^2 - ... - \parallel Aw_k \parallel ^2 ∥ A ∥ 2 − ∥ A w 1 ∥ 2 − . . . − ∥ A w k ∥ 2
∥ A w 1 ∥ 2 + . . . + ∥ A w k ∥ 2 ≤ σ 1 2 + . . . + σ k 2 \parallel Aw_1 \parallel ^2 + ... + \parallel Aw_k \parallel ^2 \le \sigma_1 ^2 + ... + \sigma_k ^2 ∥ A w 1 ∥ 2 + . . . + ∥ A w k ∥ 2 ≤ σ 1 2 + . . . + σ k 2 이면 증명이 완료됩니다.
∥ A w 1 ∥ 2 + . . . + ∥ A w k ∥ 2 \parallel Aw_1 \parallel ^2 + ... + \parallel Aw_k \parallel ^2 ∥ A w 1 ∥ 2 + . . . + ∥ A w k ∥ 2 는 ∥ A W ∥ 2 \parallel AW \parallel ^2 ∥ A W ∥ 2 이라 할 수 있습니다. A = U Σ V T A = U \Sigma V^T A = U Σ V T 로 분해할 수 있고 이를 ∥ A W ∥ 2 \parallel AW \parallel ^2 ∥ A W ∥ 2 에 대입하면 ∥ U Σ V T W ∥ 2 \parallel U \Sigma V^T W \parallel ^2 ∥ U Σ V T W ∥ 2 을 얻습니다. 이 때 U U U 는 열-직교 행렬이므로 ∥ U Σ V T W ∥ 2 = ∥ Σ V T W ∥ 2 \parallel U \Sigma V^T W \parallel ^2 = \parallel \Sigma V^T W \parallel ^2 ∥ U Σ V T W ∥ 2 = ∥ Σ V T W ∥ 2 입니다. (∵ \because ∵ norm 이 1인 열-직교 행렬과의 곱은 norm을 유지함 %})
한편 ∥ v i ∥ 2 = ∥ v i ∥ W ∥ 2 + ∥ v i ⊥ W ∥ 2 \parallel v_i \parallel ^2 = \parallel v_i^{\parallel W} \parallel ^2 + \parallel v_i^{\perp W} \parallel ^2 ∥ v i ∥ 2 = ∥ v i ∥ W ∥ 2 + ∥ v i ⊥ W ∥ 2 입니다. 식을 통해 ∥ v i ∥ W ∥ 2 ≤ ∥ v i ∥ 2 = 1 \parallel v_i^{\parallel W} \parallel ^2 \le \parallel v_i \parallel ^2 = 1 ∥ v i ∥ W ∥ 2 ≤ ∥ v i ∥ 2 = 1 을 알 수 있습니다. Σ V T W \Sigma V^TW Σ V T W 에서 V T W V^T W V T W 은 v i ∥ W v_i^{\parallel W} v i ∥ W 의 좌표표현의 행렬입니다. 예를 들면 V T W V^T W V T W 의 첫번째 행은 [ ⟨ v 1 , w 1 ⟩ , . . . , ⟨ v 1 , w k ⟩ ] [\langle v_1, w_1 \rangle, ..., \langle v_1, w_k \rangle] [ ⟨ v 1 , w 1 ⟩ , . . . , ⟨ v 1 , w k ⟩ ] 입니다. 따라서 V T W V^T W V T W 의 한 행의 제곱의 합은 ∥ v i ∥ W ∥ 2 \parallel v_i^{\parallel W} \parallel ^2 ∥ v i ∥ W ∥ 2 입니다. Σ V T W \Sigma V^T W Σ V T W 에 이를 적용하면 최소 제곱 거리의 합은 σ 1 2 ∥ v 1 ∥ W ∥ 2 + . . . + σ k 2 ∥ v k ∥ W ∥ 2 \sigma_1 ^2 \parallel v_1^{\parallel W} \parallel ^2 + ... + \sigma_k ^2 \parallel v_k^{\parallel W} \parallel ^2 σ 1 2 ∥ v 1 ∥ W ∥ 2 + . . . + σ k 2 ∥ v k ∥ W ∥ 2 입니다.
증명하고자 했던 부등식은 아래와 같았습니다.
∥ A w 1 ∥ 2 + . . . + ∥ A w k ∥ 2 ≤ σ 1 2 + . . . + σ k 2 \parallel Aw_1 \parallel ^2 + ... + \parallel Aw_k \parallel ^2 \le \sigma_1 ^2 + ... + \sigma_k ^2 ∥ A w 1 ∥ 2 + . . . + ∥ A w k ∥ 2 ≤ σ 1 2 + . . . + σ k 2
∥ A w 1 ∥ 2 + . . . + ∥ A w k ∥ 2 = σ 1 2 ∥ v 1 ∥ W ∥ 2 + . . . + σ k 2 ∥ v k ∥ W ∥ 2 \parallel Aw_1 \parallel ^2 + ... + \parallel Aw_k \parallel ^2 = \sigma_1 ^2 \parallel v_1^{\parallel W} \parallel ^2 + ... + \sigma_k ^2 \parallel v_k^{\parallel W} \parallel ^2 ∥ A w 1 ∥ 2 + . . . + ∥ A w k ∥ 2 = σ 1 2 ∥ v 1 ∥ W ∥ 2 + . . . + σ k 2 ∥ v k ∥ W ∥ 2 이고 ∥ v i ∥ W ∥ 2 ≤ ∥ v i ∥ 2 = 1 \parallel v_i^{\parallel W} \parallel ^2 \le \parallel v_i \parallel ^2 = 1 ∥ v i ∥ W ∥ 2 ≤ ∥ v i ∥ 2 = 1 이므로 다음이 성립합니다.
σ 1 2 ∥ v 1 ∥ W ∥ 2 + . . . + σ k 2 ∥ v k ∥ W ∥ 2 ≤ σ 1 2 + . . . + σ k 2 \sigma_1 ^2 \parallel v_1^{\parallel W} \parallel ^2 + ... + \sigma_k ^2 \parallel v_k^{\parallel W} \parallel ^2 \le \sigma_1 ^2 + ... + \sigma_k ^2 σ 1 2 ∥ v 1 ∥ W ∥ 2 + . . . + σ k 2 ∥ v k ∥ W ∥ 2 ≤ σ 1 2 + . . . + σ k 2
행렬 A의 최상의 랭크-k 근사
행렬 A A A 의 최상의 랭크-k 근사는 다음과 같습니다.
A ˉ = σ 1 u 1 v 1 T + . . . + σ k u k v k T \bar{A} = \sigma_1 u_1 v_1^T + ... + \sigma_k u_k v_k^T A ˉ = σ 1 u 1 v 1 T + . . . + σ k u k v k T
여기서 σ i \sigma_i σ i 는 A A A 의 특이값, u i u_i u i 는 왼쪽 특이벡터, v i v_i v i 는 오른쪽 특이벡터입니다. 이 때 ∥ A − A ˉ ∥ 2 = ∥ A ∥ 2 − σ 1 2 − . . . − σ k 2 \parallel A - \bar{A} \parallel ^2 = \parallel A \parallel ^2 - \sigma_1^2 - ... - \sigma_k^2 ∥ A − A ˉ ∥ 2 = ∥ A ∥ 2 − σ 1 2 − . . . − σ k 2 입니다.
A ˉ \bar{A} A ˉ 는 다음과 같습니다.
A ˉ = [ a 1 에 가장 가까운 V 에 속하는 벡터 . . . a m 에 가장 가까운 V 에 속하는 벡터 ] \bar{A} = \begin{bmatrix}
a_1에 \text{ }가장 \text{ }가까운 \text{ }V에 \text{ }속하는 \text{ }벡터 \\
... \\
a_m에 \text{ }가장 \text{ }가까운 \text{ }V에 \text{ }속하는 \text{ }벡터
\end{bmatrix} A ˉ = ⎣ ⎢ ⎡ a 1 에 가 장 가 까 운 V 에 속 하 는 벡 터 . . . a m 에 가 장 가 까 운 V 에 속 하 는 벡 터 ⎦ ⎥ ⎤
A ˉ \bar{A} A ˉ 를 다음과 같이 다시 쓸 수 있습니다.
A ˉ = [ ⟨ a 1 , v 1 ⟩ v 1 T + . . . + ⟨ a 1 , v k ⟩ v k T . . . ⟨ a m , v 1 ⟩ v 1 T + . . . + ⟨ a m , v k ⟩ v k T ] = [ ⟨ a 1 , v 1 ⟩ v 1 T . . . ⟨ a m , v 1 ⟩ v 1 T ] + . . . + [ ⟨ a 1 , v k ⟩ v k T . . . ⟨ a m , v k ⟩ v k T ] = [ A v 1 ] [ v 1 T ] + . . . + [ A v k ] [ v k T ] \begin{aligned}
\bar{A} & = \begin{bmatrix}
\langle a_1, v_1 \rangle v_1^T + ... + \langle a_1, v_k \rangle v_k^T \\
... \\
\langle a_m, v_1 \rangle v_1^T + ... + \langle a_m, v_k \rangle v_k^T \\
\end{bmatrix} \\
& = \begin{bmatrix}
\langle a_1, v_1 \rangle v_1^T \\
... \\
\langle a_m, v_1 \rangle v_1^T
\end{bmatrix} + ... + \begin{bmatrix}
\langle a_1, v_k \rangle v_k^T \\
... \\
\langle a_m, v_k \rangle v_k^T
\end{bmatrix} \\
& = \begin{bmatrix}
\text{ } \\
Av_1 \\
\text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_1^T & \text{ }
\end{bmatrix} + ... +
\begin{bmatrix}
\text{ } \\
Av_k \\
\text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_k^T & \text{ }
\end{bmatrix}
\end{aligned} A ˉ = ⎣ ⎢ ⎡ ⟨ a 1 , v 1 ⟩ v 1 T + . . . + ⟨ a 1 , v k ⟩ v k T . . . ⟨ a m , v 1 ⟩ v 1 T + . . . + ⟨ a m , v k ⟩ v k T ⎦ ⎥ ⎤ = ⎣ ⎢ ⎡ ⟨ a 1 , v 1 ⟩ v 1 T . . . ⟨ a m , v 1 ⟩ v 1 T ⎦ ⎥ ⎤ + . . . + ⎣ ⎢ ⎡ ⟨ a 1 , v k ⟩ v k T . . . ⟨ a m , v k ⟩ v k T ⎦ ⎥ ⎤ = ⎣ ⎢ ⎡ A v 1 ⎦ ⎥ ⎤ [ v 1 T ] + . . . + ⎣ ⎢ ⎡ A v k ⎦ ⎥ ⎤ [ v k T ]
A v i = σ i u i Av_i = \sigma_i u_i A v i = σ i u i 라 하면 다음과 같이 쓸 수 있습니다.
A ˉ = [ σ 1 u 1 ] [ v 1 T ] + . . . + [ σ k u k ] [ v k T ] = [ u 1 . . . u k ] [ σ 1 . . . σ k ] [ v 1 T . . . v k T ] \begin{aligned}
\bar{A} & = \begin{bmatrix}
\text{ } \\
\sigma_1 u_1 \\
\text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_1^T & \text{ }
\end{bmatrix} + ... +
\begin{bmatrix}
\text{ } \\
\sigma_k u_k \\
\text{ }
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_k^T & \text{ }
\end{bmatrix} \\
& = \begin{bmatrix}
\text{ } & \text{ } & \text{ } \\
u_1 & ... & u_k \\
\text{ } & \text{ } & \text{ }
\end{bmatrix}
\begin{bmatrix}
\sigma_1 & \text{ } & \text{ } \\
\text{ } & ... & \text{ } \\
\text{ } & \text{ } & \sigma_k
\end{bmatrix}
\begin{bmatrix}
\text{ } & v_1^T & \text{ } \\
\text{ } & ... & \text{ } \\
\text{ } & v_k^T & \text{ }
\end{bmatrix}
\end{aligned} A ˉ = ⎣ ⎢ ⎡ σ 1 u 1 ⎦ ⎥ ⎤ [ v 1 T ] + . . . + ⎣ ⎢ ⎡ σ k u k ⎦ ⎥ ⎤ [ v k T ] = ⎣ ⎢ ⎡ u 1 . . . u k ⎦ ⎥ ⎤ ⎣ ⎢ ⎡ σ 1 . . . σ k ⎦ ⎥ ⎤ ⎣ ⎢ ⎡ v 1 T . . . v k T ⎦ ⎥ ⎤
A ˉ = σ 1 u 1 v 1 T + . . . + σ k u k v k T \bar{A} = \sigma_1 u_1 v_1^T + ... + \sigma_k u_k v_k^T A ˉ = σ 1 u 1 v 1 T + . . . + σ k u k v k T 의 증명이 완료되었습니다.
특이값들의 개수는 rank A
벡터-행렬 곱의 관점에서 A = ( U Σ ) V T A = (U \Sigma)V^T A = ( U Σ ) V T 의 A A A 의 각 행은 V T V^T V T 의 행의 선형결합입니다. 따라서 R o w A = R o w V T Row\text{ }A = Row\text{ }V^T R o w A = R o w V T 입니다. 행렬-벡터 곱의 관점에서 A = U ( Σ V T ) A = U(\Sigma V^T) A = U ( Σ V T ) 의 A A A 의 각 열은 U U U 의 열의 선형결합입니다. 따라서 C o l A = C o l U Col\text{ }A = Col\text{ }U C o l A = C o l U 입니다.
가장 가까운 k-차원 아핀공간
1차원 아핀공간과 마찬가지로 센트로이드 a ˉ \bar{a} a ˉ 를 찾습니다. a 1 − a ˉ , . . . , a m − a ˉ a_1 - \bar{a}, ..., a_m - \bar{a} a 1 − a ˉ , . . . , a m − a ˉ 에 대해 가장 가까운 k-차원 벡터공간을 찾고 나중에 벡터공간의 기저에 a ˉ \bar{a} a ˉ 를 더해줍니다.
{ a ˉ + v : v ∈ S p a n { v 1 , . . . , v k } } \{\bar{a} + v : v \in Span\text{ }\{v_1, ..., v_k\}\} { a ˉ + v : v ∈ S p a n { v 1 , . . . , v k } }