특잇값 분해(Singular value decomposition, SVD) - 행렬식으로 유도하기
0) 서론
SVD를 유도하는 방법은 크게 두 가지입니다.
그 중 하나가 지금까지 우리가 해왔던 벡터 기반 접근입니다.
즉, $v_i$라는 벡터 하나에서 출발해 $(A^TA)v_i = \lambda_i v_i$ 임을 발견하고, $u_i$를 계산해내는 작업이었죠.
그리고 이 벡터들을 모아서 행렬식을 구성한, 어떻게 보자면 상향식(Bottom-up) 방식이었습니다.
이번에 우리가 해 볼 방식은 두번째 방식이라고 볼 수 있습니다.
바로 행렬 기반 접근인데요.
그럼 바로 한 번 진행해 볼까요?
1) 행렬기반 접근으로 유도하기: 기본 설정
이전까지 우리가 논지를 전개하며 발견했던 것들을 여기서는 바로 써먹어 보겠습니다.
- 사실 1: $A^TA$는 $n \times n$ 대칭 행렬(Symmetric Matrix)입니다.
- 사실 2: 스펙트럼 정리에 따르면, 모든 대칭 행렬은 직교 대각화(Orthogonally Diagonalizable)가 가능합니다.
그리고 여기서 "직교 대각화가 가능하다"는 말은, $A^TA$를 다음과 같이 분해할 수 있음이 수학적으로 100% 보장된다는 뜻입니다.(여지없이 등장하는 피보나치 수열을 선형대수로 풀어보자 포스팅)
$$
A^TA = V \Lambda V^T
$$
- $V$: $n \times n$ 직교 행렬(Orthogonal Matrix)입니다. (즉, $V^T V = I$ 이며, $V$의 열이 바로 우리가 찾던 '입력 직교축' $v_i$ 들입니다.)["이전엔 정규직교(Orthonormal)라며!" 라고 하신분들! 짝짝짝! 그러나 행렬에서는 정규직교 행렬이란 말 보다는 그냥 직교행렬이라고 한답니다!]
- $\Lambda$ (람다): $n \times n$ 대각 행렬(Diagonal Matrix)입니다. (대각선에 $A^TA$의 고유값 $\lambda_i$들이 있습니다.)
2) 행렬기반 접근으로 유도하기: 행렬식 유도
이제 $A^TA = V \Lambda V^T$ 라는 보장된 사실에서부터 $A = U \Sigma V^T$ 를 건설해 봅시다.
1] $\Sigma$ (시그마) 정의하기
$A^TA$는 (수학적으로 'Positive Semidefinite'이므로) 모든 고유값 $\lambda_i$가 0보다 크거나 같습니다($\lambda_i \ge 0$).
이제 특이값(Singular Value) $\sigma_i$을 $\sigma_i = \sqrt{\lambda_i}$ 로 정의합니다.
그리고 $A$와 크기가 같은 $m \times n$ 대각 행렬 $\Sigma$를 만듭니다.
$$
\Sigma = \begin{bmatrix} \sigma_1 &0 &0 \\0 & \sigma_2 & 0\\0 &0 & \ddots \end{bmatrix}
$$
이렇게 정의하면, $\Lambda = \Sigma^T \Sigma$라는 관계가 성립합니다. (직접 $n \times m$ 행렬 $\Sigma^T$ 와 $m \times n$ 행렬 $\Sigma$를 곱해보면 $n \times n$ 대각 행렬 $\Lambda$가 나옵니다.)
2] 식에 대입하기
$A^TA = V \Lambda V^T$ 에 $\Lambda = \Sigma^T \Sigma$ 를 대입합니다.
$$
A^TA = V (\Sigma^T \Sigma) V^T
$$
3] $AV$ (출력결과) 확인하기
여기서 입력축 $V$를 $A$로 변환한 후 나오는 행렬 $AV$가 서로 직교하는지 한번 살펴봅시다.
$$(AV)^T(AV) = V^TA^TAV$$
이고, 여기서 중간에 $A^TA$를 위에서 찾은 $V(\Sigma^T \Sigma)V^T$로 치환해주면
\begin{align}
(AV)^T(AV) &= V^T(V(\Sigma^T \Sigma)V^T)V \\
&= I \Sigma^T \Sigma I \\
&= \Sigma^2
\end{align}
으로 정리가 됩니다.(여기서 $V^T V = I$죠)
즉, 이 결과가 의미하는 것은 i번째 열벡터와 j번째 열벡터를 서로 내적한 결과 i=j인 곳에서만 제곱이 발생했다는 것이므로,
행렬 $AV$의 열벡터들은 서로 직교하며, 그 크기가 $\Sigma$(특이값)라는 것입니다.
4] 출력축 $U$ 발견하기
따라서 $AV$를 크기($\Sigma$)로 나눠주기만 하면, 정규직교행렬 $U$를 얻을 수 있겠네요?($\sigma$가 0인 경우는 여러 다른 방법(그람-슈미트 라던가..)들로 극복이 가능하니 여기서는 살짝 덮어두고 지나가죠)
$$ U = (AV)\Sigma^{-1}$$
그리고 $U$는 수학적으로 정규직교 행렬이므로 $ U^T U = I$를 만족해야 합니다.
따라서 위 식을 $U^TU$에 넣고 정리를 하면,
$$U^T U = (\Sigma^{-1})^T (AV)^T (AV) \Sigma^{-1} = \Sigma^{-1} \Sigma^2 \Sigma^{-1} = I$$
위 식도 조건을 만족하게 되네요.
5] 수식정리하기
이제, $U = A V \Sigma^{-1}$ 식의 양변에 뒤쪽으로 $\Sigma$를 곱하고, $V^T$를 정리하면 끝입니다.
\begin{align}
U &= AV\Sigma^{-1} \\
U\Sigma &= AV \\
U\Sigma V^T &= A \quad \because V^T V = I \\
A &= U\Sigma V^T
\end{align}
이로써 행렬식 만으로 SVD를 유도해 내었습니다.
3) 더 나아가기
이제, 실제로 이 SVD(Full SVD)를 하면 행렬의 사이즈가 어떻게 되는지, 눈으로 한번 살펴볼까요?

그러나 실제적으로는 특이값이 0인 부분은 모두 버리고 Reduced SVD를 한다고 했잖아요?
그거는 위의 이미지에서

이렇게 사이즈를 바꿔서 진행한답니다.
그럼 여기서 특이값 행렬을 더 줄일 수 있을 것 같지 않나요?

네, 이렇게 Reduced SVD보다 더 Size를 줄인 것이 Truncated SVD입니다.
근데 잘 보면 위에서는 이미지가 A에 대한 건데, 이번엔 A'이 되었네요? 왤까요?
특이값은 값이 큰 순서대로 정렬이 되게 됩니다. 따라서 Reduced SVD보다 더 특이값 행렬의 사이즈를 줄이게 되면, 우선순위가 낮은 값이 '사라지게'되고, 정보의 손실이 발생하게 됩니다. 따라서 원래의 A값이 아니라 A' 즉 근사값이 나오게 되는거죠.
그리고 이것은 작은 특잇값(중요하지 않은 정보, 혹은 노이즈)을 버림으로써, 데이터의 핵심 특징만 남기는 압축의 효과를 가집니다.
(재밌게도, 푸리에 변환에서도 작은 계수(혹은 특정주파수의 계수)들을 버려서 신호를 압축했던 것 기억나시나요?)
그리고 여기서 PCA(주성분 분석)라는 것이 태동하게 됩니다.
4) 마무리
이로써 특이값 분해(SVD)의 모든 내용을 커버해 보았습니다.
마지막으로 고유값 분해(EVD)랑 같이 나란히 써보면, 두 방법의 차이가 명확하게 보입니다.
행렬식으로 쓰면 고유값분해는 입출력 축이 모두 같은 자기자신으로의 변화, 특이값분해는 입출력축이 서로 다른 변화를 한번에 볼 수 있습니다.
$A = V \Lambda V^T$
$A = U \Sigma V^T$
이로써 특이값 분해 관련 포스팅을 모두 마칩니다!
'Study > Mathematics' 카테고리의 다른 글
| 특잇값 분해(Singular value decomposition, SVD) - 행렬식으로 만들기 (0) | 2025.11.19 |
|---|---|
| 특잇값 분해(Singular value decomposition, SVD) - 뒤틀림 정도 찾기 (0) | 2025.11.18 |
| 특잇값 분해(Singular value decomposition, SVD) - 직교 축 찾기 (0) | 2025.11.17 |
| 특잇값 분해(Singular value decomposition, SVD) - 개념2 (0) | 2025.11.16 |
| 특잇값 분해(Singular value decomposition, SVD) - 개념 (0) | 2025.11.15 |

