본문 바로가기

머신러닝/[기타]

특이값 분해(Singular Vector Decomposition, SVD)

머신러닝을 공부하다 보면 고등학생 시절, 현실과 동떨어져있다고 생각해왔던 수학이, 정말 여러 방면으로 쓰이고 있음을 깨닫습니다. 그 중 하나가 특이값 분해(Singular Vector Decomposition, SVD)입니다. 일전에 기업 협력 프로그램을 진행해보면서 한 번 사용했던 개념이었는데, 이해하는데 골머리를 썩혔던 기억이 있습니다. 유튜브를 보던 중, 최대한 수학적인 내용을 배제하고 효용있는 내용을 잘 설명하는 영상을 발견하여 공유드립니다.

[SVD(Singular Vector Decomposition) 이해하기 쉽게 설명드려요!]
[Stanford AI recture]

복잡한 개념인데다 수식으로 표현할 것이 많아 일단 영상만 링크해두려다, 복습도 할 겸 정말 간단히만 요약해보겠습니다.

1.  특이값 분해란, [m x m] 행렬을 [m x r], [r x r], [r x n] 행렬들의 곱으로 근사하게 표현하는 것. 이 때, [m x r], [r x n]은 정규직교(Orthornomal)이며, [r x r]은 대각(Diagomal) 행렬.
    
2.  행렬곱의 계산상(행렬을 다룰 때는 항상 쉐잎(Shape)를 생각해야한다), r의 크기가 기존 데이터[m x m]의 컨셉(Concept)를 분류하는 기준이 되며, 고정된 값이 아니다.
    
3.  M -> A x B x C (단, M,A,B,C 는 행렬이며, x는 행렬곱) 그러니까 분해라는 측면에서는 임의의 데이터(A)를 원하는 정보량 또는 컨셉(r)에 따라 여러 레이어(Layer)로 나눌 수 있게 해주는 것. 이를 통해 데이터에 숨겨진 새로운 의미를 발견하는 것이 가능. 추천시스템에서 활용
    
4.  더 중요한 것은, A' x B' x C' -> M 라는 측면, 그러니까 분해된 행렬을 다시 조합하는 과정이다. 분해 과정에서 정보량이 높은 컨셉만을 추출하는데 성공한다면, 모든 데이터를 사용하지 않고도 정보량이 높은 일부 데이터를 사용해 본래의 데이터(M)을 복원하는 것이 가능. 데이터 압축(또는 차원 축소) 과정에서 활용