특이값분해 (Singular Value Decomposition)

수학 컴퓨터과학·AI
한 줄 정의: 어떤 크기의 행렬이든 "회전 · 늘이기 · 회전"이라는 세 단계로 쪼개어 표현하는 방법입니다.

쉽게 풀면

복잡하게 얽힌 데이터 표(행렬)를 이해하기 쉬운 조각으로 나눈다고 생각해 봅시다. 특이값분해(Singular Value Decomposition, SVD)는 어떤 행렬이든 세 개의 단순한 행렬의 곱으로 다시 쓸 수 있다는 원리입니다. 비유하자면 복잡한 도장 하나를 "방향을 바꾸는 도장", "크기만 늘리거나 줄이는 도장", "다시 방향을 바꾸는 도장" 세 개를 순서대로 찍은 것과 같은 효과로 표현하는 것입니다. 이때 "크기를 늘리는 정도"에 해당하는 숫자들이 특이값인데, 이 값이 큰 순서대로 정보의 중요도가 매겨지기 때문에 중요한 부분만 남기고 나머지를 버리면 데이터를 압축하거나 잡음을 제거할 수 있습니다.

왜 중요한가

특이값분해는 행렬의 구조를 가장 근본적인 형태로 드러내는 도구라서, 데이터 압축·잡음 제거·차원 축소가 필요한 거의 모든 분야에서 계산의 기반으로 쓰입니다. 추천시스템, 자연어처리의 잠재의미분석, 신호처리, 통계학의 주성분분석 등 서로 다른 응용 분야가 결국 같은 SVD 계산으로 귀결되는 경우가 많아, 여러 논문에서 방법론적으로 공유되는 핵심 개념입니다.

논문에서는 이렇게 쓰입니다

"평점 행렬에 특이값분해(SVD)를 적용하여 잠재 요인(latent factor)을 추출하고, 이를 기반으로 사용자에게 상품을 추천하였다."

이 문장은 사용자-상품 평점 데이터를 특이값분해로 분해해서, 겉으로 드러나지 않는 취향 요인들을 뽑아내고 이를 추천 시스템에 활용했다는 뜻입니다. 이미지 압축, 잡음 제거, 주성분분석의 계산 방법으로도 특이값분해가 널리 쓰입니다.

"문서-단어 행렬에 특이값분해를 적용하여 잠재의미분석(LSA)을 수행하고, 문서 간 의미적 유사도를 계산하였다."

자연어처리 분야에서 텍스트의 잠재적 의미 구조를 추출할 때 SVD가 쓰이는 방식을 보여주는 문장이다.

"진동 신호 행렬을 특이값분해하여 상위 특이값에 대응하는 성분만 남기고 노이즈를 제거하였다."

신호처리·기계진단 분야에서 SVD를 잡음 제거 및 신호 복원에 활용하는 사례를 나타낸다.

조금 더 깊게 보면

특이값분해에서 상위 몇 개의 특이값과 대응하는 벡터만 남기고 나머지를 버리는 절단된 SVD(truncated SVD)는 원래 행렬을 가장 잘 근사하는 저랭크 행렬을 만드는 방법으로 알려져 있으며, 이 성질 덕분에 차원 축소와 압축에 이론적 근거를 제공합니다. 공분산 행렬에 SVD를 적용하면 주성분분석과 사실상 동일한 결과를 얻을 수 있어, 두 개념이 서로 다른 이름으로 같은 계산을 가리키는 경우가 많다는 점도 논문을 읽을 때 참고할 만합니다.

주의할 점

특이값분해는 정사각형이 아닌 직사각형 행렬에도 항상 적용할 수 있다는 점에서, 정사각 행렬에서만 정의되는 고유값과 고유벡터보다 더 일반적인 개념입니다. 특이값의 개수 중 0이 아닌 값의 개수는 그 행렬의 행렬의 랭크와 같습니다.

관련 용어