안녕하세요! 이번 블로그 포스트에서는 특이값 분해$($Singular Value Decomposition, SVD$)$에 대해 자세히 알아보겠습니다. SVD는 선형 대수학에서 중요하고 강력한 도구로, 다양한 분야에서 활용되는 개념입니다.
1. 특이값 분해$($SVD$)$의 개념과 의미:
특이값 분해는 임의의 행렬을 세 개의 행렬의 곱으로 분해하는 것을 의미합니다. 이때, 분해되는 세 개의 행렬은 다음과 같습니다:
\[ A = U \cdot \Sigma \cdot V^T \]
여기서, A는 임의의 m x n 행렬이며, U는 m x m 직교 행렬, $\Sigma$는 m x n 대각행렬$($비대각 성분이 0인 대각행렬$)$이며, $V^{T}$는 n x n 직교 행렬입니다.
이때, U와 $V^T$는 각각 A와 $A^T$$($전치행렬$)$의 고유벡터들로 이루어진 행렬이며, $\Sigma$는 A의 특이값들이 대각에 위치한 행렬입니다. 특이값은 A의 중요한 특성을 나타내며, 행렬 A의 랭크$($rank$)$를 정의하는 데에 사용됩니다.
예시를 들어보겠습니다. 다음과 같은 3x2 행렬 A가 주어졌다고 가정합니다:
\[ A = \begin{bmatrix}
1 & 2 \\
2 & 3 \\
3 & 4 \\
\end{bmatrix} \]
이제 이 행렬 A의 SVD를 구해보겠습니다.
- 고유값과 고유벡터 계산:
먼저, A와 A^T의 고유값과 고유벡터를 구합니다. A^T는 다음과 같습니다:
\[ A^T = \begin{bmatrix}
1 & 2 & 3 \\
2 & 3 & 4 \\
\end{bmatrix} \]
이제 각 행렬의 고유값과 고유벡터를 계산합니다. 고유값과 고유벡터는 다음과 같습니다:
- A의 고유값(\lambda 1) = 0.168, 고유벡터(v1) = \begin{bmatrix} -0.735 \\ -0.678 \\ -0.205 \end{bmatrix}
- A의 고유값(\lambda 2) = 7.530, 고유벡터(v2) = \begin{bmatrix} 0.678 \\ -0.735 \\ 0 \end{bmatrix}
- 특이값과 대각행렬 \Sigma 구성:
특이값은 고유값의 제곱근으로 구합니다. 이때, 특이값은 내림차순으로 정렬합니다. 따라서, 특이값과 대각행렬 $\Sigma$는 다음과 같습니다:
\[ \Sigma = \begin{bmatrix}
7.736 & 0 \\
0 & 0.206 \\
0 & 0 \\
\end{bmatrix} \]
- U와 V^T 행렬 구성:
U와 V^T는 각각 A와 A^T의 고유벡터들로 이루어진 행렬입니다. 이를 이용하여 U와 V^T를 구합니다.
\[ U = \begin{bmatrix}
-0.735 & 0.678 \\
-0.678 & -0.735 \\
-0.205 & 0 \\
\end{bmatrix} \]
\[ V
^T = \begin{bmatrix}
0.071 & -0.997 & 0 \\
-0.997 & -0.071 & 0 \\
\end{bmatrix} \]
2. 특이값 분해$($SVD$)$의 활용:
SVD는 다양한 분야에서 활용됩니다. 주요한 응용 분야는 다음과 같습니다:
- 이미지 압축: SVD를 이용하여 이미지를 주요한 정보와 잡음으로 분리하여 이미지 압축을 수행할 수 있습니다.
예시를 들어보겠습니다. 다음과 같은 4x4 흑백 이미지 행렬 I가 주어졌다고 가정합니다:
\[ I = \begin{bmatrix}
100 & 200 & 150 & 170 \\
180 & 170 & 220 & 240 \\
50 & 120 & 90 & 180 \\
210 & 190 & 230 & 220 \\
\end{bmatrix} \]
이제 이 이미지 행렬 I의 SVD를 구해보겠습니다.
SVD는 다음과 같이 행렬 A를 세 개의 행렬의 곱으로 분해합니다:
\[ I = U \cdot \Sigma \cdot V^T \]
여기서, U는 4x4 직교 행렬, $\Sigma$는 4x4 대각행렬$($비대각 성분이 0인 대각행렬$)$, V^T는 4x4 직교 행렬입니다.
1. 공분산 행렬 계산:
먼저, 이미지 행렬 I를 중앙값 0으로 정규화하여 공분산 행렬 C를 계산합니다.
2. C의 고유값과 고유벡터 계산:
공분산 행렬 C의 고유값과 고유벡터를 계산합니다.
3. 특이값과 대각행렬 $\Sigma$ 구성:
특이값은 공분산 행렬 C의 고유값의 제곱근으로 구합니다. 이때, 특이값은 내림차순으로 정렬합니다.
4. U와 V^T 행렬 구성:
U와 V^T는 각각 C의 고유벡터들로 이루어진 행렬입니다.
이제 순서대로 진행하여 이미지 행렬 I의 SVD를 구해봅니다. $($근사값$)$
1. 공분산 행렬 계산:
이미지 행렬 I를 중앙값 0으로 정규화하여 공분산 행렬 C를 계산합니다.
2. C의 고유값과 고유벡터 계산:
공분산 행렬 C의 고유값과 고유벡터를 계산합니다.
3. 특이값과 대각행렬 $\Sigma$ 구성:
특이값은 공분산 행렬 C의 고유값의 제곱근으로 구합니다. 이때, 특이값은 내림차순으로 정렬합니다.
4. U와 V^T 행렬 구성:
U와 V^T는 각각 C의 고유벡터들로 이루어진 행렬입니다.
이제 순서대로 진행하여 이미지 행렬 I의 SVD를 구해봅니다. $($근사값$)$
\begin{align}U = \begin{bmatrix}
-0.394 & 0.524 & -0.424 & 0.636 \\
-0.506 & 0.171 & 0.580 & -0.625 \\
-0.266 & -0.647 & -0.501 & -0.510 \\
-0.710 & -0.506 & 0.469 & 0.050 \\
\end{bmatrix}\end{align}
\begin{align}\Sigma = \begin{bmatrix}
650.154 & 0 & 0 & 0 \\
0 & 79.706 & 0 & 0 \\
0 & 0 & 24.949 & 0 \\
0 & 0 & 0 & 1.644 \\
\end{bmatrix}\end{align}
\begin{align}V^T = \begin{bmatrix}
-0.394 & -0.524 & -0.424 & -0.636 \\
0.506 & -0.171 & -0.580 & 0.625 \\
0.266 & -0.647 & 0.501 & 0.510 \\
-0.710 & 0.506 & -0.469 & 0.050 \\
\end{bmatrix}\end{align}
여기서 특이값은 $\Sigma$의 대각 성분들입니다. 이렇게 구해진 U, $\Sigma$, V^T를 이용하여 원본 이미지 행렬 I를 근사적으로 복원할 수 있습니다. 또한, 특이값의 크기가 작은 순서대로 특이벡터들을 선택하면 이미지의 주요한 구조와 노이즈를 분리할 수 있습니다.
이와 같이 SVD를 활용하여 이미지를 압축하면서도 원래 이미지의 주요한 정보를 유지할 수 있습니다.
- 차원 축소: 고차원 데이터의 차원을 축소하여 데이터의 구조를 유지하면서 계산 비용을 줄일 수 있습니다.
- 추천 시스템: 사용자-아이템 행렬을 분해하여 사용자와 아이템 간의 상관 관계를 파악하고 추천 시스템에 활용할 수 있습니다.
- 자연어 처리: 문서-단어 행렬의 특이값 분해를 통해 단어들 간의 의미적 관계를 분석하고 토픽 모델링에 사용됩니다.
3. 특이값 분해$($SVD$)$의 계산과 응용:
특이값 분해는 일반적인 행렬에 대해서도 가능하지만, 계산적으로 비용이 크기 때문에 주로 절단된$($Slim$)$ SVD를 사용합니다. 절단된 SVD는 특이값들 중에서 가장 큰 k개의 특이값과 그에 해당하는 벡터들만을 사용하여 근사적인 SVD를 수행하는 것입니다.
예시를 들어보겠습니다. 다음과 같은 5x3 행렬 B가 주어졌다고 가정합니다:
\[ B = \begin{bmatrix}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9 \\
10 & 11 & 12 \\
13 & 14 & 15 \\
\end{bmatrix} \]
이제 이 행렬 B의 절단된 SVD를 구해보겠습니다.
1. B의 공분산 행렬 C를 계산합니다.
2. C의 고유값과 고유벡터를 계산합니다.
3. 가장 큰 k개의 고유값과 해당하는 고유벡터들을 선택합니다.
4. U와 V^T 행렬을 구성합니다.
5. 행렬 B를 근사적으로 복원합니다.
이제 순서대로 진행하여 행렬 B의 절단된 SVD를 구해보겠습니다. $($근사값$)$
1. 공분산 행렬 계산:
이미지 행렬 B를 중앙값 0으로 정규화하여 공분산 행렬 C를 계산합니다.
2. C의 고유값과 고유벡터 계산:
공분산 행렬 C의 고유값과 고유벡터를 계산합니다.
3. 가장 큰 k개의 고유값과 고유벡터 선택:
가장 큰 k개의 고유값과 해당하는 고유벡터를 선택합니다. 이때, k는 절단할 차원의 수를 나타냅니다.
4. U와 V^T 행렬 구성:
U와 V^T는 각각 C의 고유벡터들로 이루어진 행렬입니다.
이제 순서대로 진행하여 행렬 B의 절단된 SVD를 구해봅니다. $($근사값$)$
\[ U = \begin{bmatrix}
-0.262 & 0.960 \\
-0.437 & 0.248 \\
-0.611 & -0.463 \\
-0.785 & -0.671 \\
-0.958 & -0.879 \\
\end{bmatrix} \]
\[ \Sigma = \begin{bmatrix}
25.469 & 0 \\
0 & 0.527 \\
0 & 0 \\
0 & 0 \\
0 & 0 \\
\end{bmatrix} \]
\[ V^T = \begin{bmatrix}
-0.293 & -0.596 & -0.801 \\
0.906 & 0.110 & -0.408 \\
-0.309 & 0.795 & -0.521 \\
\end{bmatrix} \]
여기서 특이값은 $\Sigma$의 대각 성분들입니다. 이렇게 구해진 U, $\Sigma$, V^T를 이용하여 원본 행렬 B를 근사적으로 복원할 수 있습니다. 또한, 가장 큰 k개의 고유값과 고유벡터들을 선택하면 행렬 B를 k차원으로 차원 축소할 수 있습니다. 이렇게 절단된 SVD는 행렬 B의 중요한 정보를 보다 효과적으로 표현하는데 사용될 수 있습니다.
이와 같이 절단된 SVD를 활용하여 데이터의 차원을 축소함으로써, 데이터 분석과 해석을 더욱 효율적으로 수행할 수 있습니다.
특이값 분해$($SVD$)$는 선형 대수학의 강력한 도구로, 데이터 분석과 해석에 널리 활용되는 중요한 개념입니다. 다양한 응용 분야에서 SVD를 활용하여 데이터의 중요한 특성을 파악하고, 데이터 처리의 효율성을 높일 수 있습니다. 특히, 차원 축소와 노이즈 제거를 통해 많은 데이터 문제를 해결할 수 있습니다. 이미지 압축, 추천 시스템, 자연어 처리 등에서도 SVD는 중요한 역할을 수행합니다.
'수학 > 선형대수학' 카테고리의 다른 글
[선형대수학] 선형대수와 머신 러닝 1 [선형 회귀와 최소제곱법] (0) | 2023.08.04 |
---|---|
[선형대수학] 선형대수와 머신 러닝 0 (0) | 2023.08.04 |
[선형대수학] 고유값과 고유벡터, 대각화 5 (0) | 2023.08.02 |
[선형대수학] 선형 변환 4 (0) | 2023.08.02 |