비지도학습 – 4.1 특이값 분해



특이값 분해
비지도학습 알고리즘 4

특이값 분해란?

특이값 분해(Singular Value Decomposition, SVD)는 선형 대수학의 중요한 개념으로, 임의의 m x n 행렬을 세 개의 행렬로 분해하는 방법입니다. 주로 대칭 행렬이 아닌 임의의 행렬에 대해 수행되며, 행렬 분해에 대한 다양한 알고리즘이 존재합니다. 아래 사진과 함께 좀 더 자세히 알아보도록 하겠습니다.

특이값 분해 개념도 (출처: 네이버 블로그)

주어진 행렬 A를 3개의 행렬 U, Σ, V로 분해하는데, U는 m x m 크기의 직교 행렬, Σ는 m x n 크기의 대각 행렬(특이값을 대각 요소로 가지며, 0이 아닌 값은 대각선 상에만 존재), V는 n x n 크기의 직교 행렬로 표현됩니다. 이때, 행렬 A의 특이값은 Σ의 대각 요소들이며, 크기에 따라 정렬됩니다.

 

알고리즘 과정

 특이값 분해의 핵심은 행렬 A를 저차원의 행렬들의 조합으로 근사하는 것입니다. 행렬 A의 특이값은 중요도나 기여도를 나타내며, 큰 특이값은 A의 가장 중요한 구성 요소를 나타냅니다. 따라서, 작은 특이값은 근사 오차로 간주되어 제거될 수 있습니다. 이를 통해 행렬 A를 차원 축소하고 노이즈를 제거하여 데이터의 핵심 구조를 추출할 수 있습니다. 행렬 A를 구하는 방법에 대해서는 다음 문단에서 자세하게 설명해드리겠습니다.

 

계산 과정

이 알고리즘을 수행하기 위해서는 복잡한 계산 과정이 요구됩니다. 계산 과정에 대해서 함께 알아보도록 하겠습니다.

1. 행렬 A의 전치행렬 A^T를 구합니다.

2. 행렬 A와 전치행렬 A^T의 곱인 A*A^T를 계산하고 A*A^T의 고유값과 고유벡터를 구합니다. 이를 위해 고유값 분해를 수행합니다.

(고유값 분해에는 행렬의 크기에 따라 효율적인 알고리즘인 대칭 행렬 고유값 분해(Symmetric Eigenvalue Decomposition) 또는 QR 분해를 활용)

3. 고유값과 고유벡터를 기준으로 A*A^T의 고유값 중 양수 고유값을 특이값의 제곱근으로 사용합니다.

4. 행렬 A^T*A의 고유값과 고유벡터를 구합니다.

마찬가지로 고유값 분해를 수행하고, 양수인 고유값들을 선택하여 특이값의 제곱근으로 사용합니다.

5. 행렬 A의 왼쪽 특이벡터 행렬 U를 구하기 위해 A*A^T의 고유값에 대응하는 고유벡터들을 정규화합니다.

6. 행렬 A의 오른쪽 특이벡터 행렬 V를 구하기 위해 A^T*A의 고유값에 대응하는 고유벡터들을 정규화합니다.

7. 행렬 A의 특이값 행렬 Σ를 구합니다.

이 때, 특이값 행렬 Σ은 AA^T와 A^TA의 양수인 고유값들의 제곱근을 대각 요소로 가지는 대각행렬입니다.

8. U, Σ, V를 조합하여 행렬 A의 특이값 분해를 완성합니다.

 

활용

특이값 분해는 데이터 압축, 차원 축소, 행렬 근사, 이미지 처리, 자연어 처리 등 다양한 분야에서 활용됩니다. 예를 들어, 이미지 처리에서는 이미지를 저차원의 특성 벡터로 표현하고, 이미지 압축 및 재구성에 활용할 수 있습니다. 또한, 자연어 처리에서는 텍스트 문서의 특이값 분해를 통해 의미론적 차원 축소와 토픽 모델링을 수행할 수 있습니다. 특이값 분해를 이용하여 이미지 압축을 하는 과정에 대한 영상이 있어 참고하시면 도움이 될 거 같습니다.

 

출처: 윤태웅 유튜브

특이값 분해는 다양한 분야에서 데이터 분석과 관련된 작업에 활용되는 강력한 도구입니다. 알고리즘의 원리와 사용 사례를 이해하여 데이터의 핵심 구조를 추출하고 차원 축소를 수행하는 데 활용해 볼 수 있을 것입니다.

 

함께 보면 좋은 글들

Leave a Comment