[46일차]머신러닝에 필요한 선형대수 2

김준석·2024년 1월 29일

특이값 분해

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

특이값 분해란?

중학교 수학에서 배운 소인수 분해를 생각해 보자.
30을 소인수분해한다면? 30 = 235로 진행된다.
즉, 복잡한 수(30)를 그 수를 구성하는 기본적인 블록(소수 2,3,5)으로 분해.

행렬에도 이와 비슷한 과정이 있다.

  • 복잡한 행렬 A(m*n)을 더 간단한 세가지 행렬(U, Σ, Vt)로 분해.
    • A=UΣVt
      • U의 열 벡터들은 A의 왼쪽 특이 벡터로 A*At의 고유벡터 들로 이루어짐
        • A의 왼쪽 특이행렬 이라고 함.
      • V의 열 벡터들은 A의 오른쪽 특이 벡터로 At*A의 고유벡터 들로 이루어짐
        • A의 오른쪽 특이행렬 이라고 함.
      • Σ의 대각선 위의 값들로 A의 특이값
        • 원래 행렬 A의 데이터가 가진 중요도를 의미
  • 이런 [하나의 행렬]을 [세가지의 행렬]로 분해하는 과정을 특이값 분해(SVD)라고 한다.

“고유벡터와 고유값” 그리고 SVD의 관계

고유벡터와 고유값은 특정 행렬 A에서 정보를 뽑아내는 과정

  • 하지만 고유벡터와 고유값 분석은 행렬 A가 정사각 행렬일 경우에 사용 가능
  • 반면, SVD는 직사각 행렬 A에 대해 사용 가능

따라서 SVD가 조금 더 일반적인 경우를 나타내며,
고유벡터와 고유값은 SVD의 스페셜 케이스로 보면 됨.

AAt는 무슨 의미인가요?

  • A 행렬의 크기가 (m*n) 이라고 할 때,
    정사각 행렬이 아니므로 바로 고유벡터와 고유값 분석을 할 수 없다.
  • 따라서 행렬 A에서 행과 열 방향으로 따로 나눠서 봐야 됨.
    행 사이의 관계를 따로!
    열사이의 관계를 따로! 보고자 했다.

그래서 고안을 한 것이 바로 제곱을해서 정사각 행렬을 만들어버린 것! A*At!

  • AAt는 (m*m)의 크기를 갖고 있어 고유벡터와 고유값 분석이 가능하다.

  • AAt는 원래 행렬 A의 행 사이의 관계도가 데이터의 형태로 존재하며
    그들의 정보력 중 분산이 크고 중요한 의미를 갖는 방향 벡터를 U랑 V라고 하는 것이다.

  • AtA(n*n)도 마찬가지!

    • 단, 원본 행렬A의 열 사이의 관계를 바탕으로 고유값 및 고유벡터 분석 진행
    • AAt 의 고유값과 AtA 의 고유값은 서로 같음

Σ는 무슨 의미인가요?

AAt 혹은 AtA의 고유값의 제곱근 값을 A의 특이값이라고 함.
AAt, AtA는 제곱을 해서 U랑 V를 나타낸 것이기 때문에 가운데에 제곱근 값을 표시해주는 Σ를 넣는 형식!

  • Σ행렬은 A의 특이값을 대각선 위치에 갖고 있고
    대각선을 제외한 나머지 모든 값은 0이 된다.
  • 고유값 분석과 마찬가지로
    행렬 A의 선형 변환에서 중요한 스케일링 정보를 포함하고 있다.

정리!

m × n 크기를 갖는 직사각 행렬 A는

A = UΣVt

  • U(왼쪽 특이 벡터들)
    • 크기 : m*m
    • 원본 행렬 A의 행 정보를 바탕으로 중요도를 파악
  • V(오른쪽 특이 벡터들)
    • 크기 : n*n
    • 원본 행렬 A의 열 정보를 바탕으로 중요도를 파악
  • Σ(특이값들)
    • 크기 : m*n
    • 행렬 A 선형 변환 과정에서 영향을 미치는 스케일링 정보(중요도)를 포함.
      특이값이 크면 해당 방향(특이벡터)이 중요하다고 볼 수 있다.

특이값 분해는 하나의 행렬을 특이값과 특이벡터들의 곱으로 분해하는 것이다.
이를 통해 데이터의 구조와 중요한 부분을 이해하고 압축하는 데 사용될 수 있다.

0개의 댓글