ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SVD
    Math/etc. 2022. 3. 16. 17:56

    SVD

    SVD는 차원축소 뿐만 아니라, Matrix completion, Matrix Factorization(행렬 분해) 등에 사용한다.

    • Rank

      랭크란 intrinsic dimensionality이다

      rank가 1이라는 것은 열벡터(행벡터)끼리 어떤 하나의 벡터의 곱으로 나타낼 수 있어 자유도는 0이라는 것이다. rank 가 mxn 행렬에서 min(m,n)이면 full rank 라고 한다.

    • SVD

      모든 mxn 행렬 A에 대하여 A행렬의 rank가 r인 경우 다음과 같이 분해가능하다

      • cf. SVD 구하기
        • VTV^T: ATAA^{T}A의 고유벡터로 구성됨 (v1, v2)
        • UU: AA의 고유값의 제곱근인 σ\sigma, A, v(위에서 구한) 것, 그리고 ATA^{T}의 left null space의 벡터를 그 크기로 나눈 것으로 구성된다.

        ref. https://www.youtube.com/watch?v=Ls2TgGFfZnU&t=129s

      또한 동일하게, D행렬(시그마 행렬)의 대각 원소를 통해 다음과 같이 표현할 수 있다. ui는 U행렬의 열벡터, vi 는 VTV^{T} 행렬의 행벡터이다. 이것은 r개의 rank가 1인 행렬들을 더한 것으로 볼 수 있다.

      (u1v1Tu1v1^T는 rank가 1인 행렬)

      A=i=1rdiuiviTA = \sum_{i=1}^{r} d_{i}u_{i}v_{i}^{T}

      고유값 분해와 다른 점은 대각행렬(D, 시그마)의 원소는 항상 양수인 것이다. singular value는 항상 양수이다. eigen value는 복소수나 음수일 수 있다.

      A=i=1rdiuiviT=i=1ndiuiviTA = \sum_{i=1}^{r} d_{i}u_{i}v_{i}^{T} = \sum_{i=1}^{n} d_{i}u_{i}v_{i}^{T} 

      그리고 1부터 n까지로 나타내고, dr+1,dn=0d_{r+1} , \cdots d_{n} = 0 으로 표현이 가능해, 여러 표현이 가능하며, 헷갈릴 수 있음.

    • SVD와 관련된 행렬의 Norm

      l1, l2 - 벡터의 길이를 측정, infinity norm - 벡터의 박스(?)를 포착하듯이,

      이 3가지 노름은 행렬의 힘, 에너지, 크기 등을 측정한다고 볼 수 있으며 SVD와 관계가 있다.

      • Frobenius Norm(Hilbert Schmidt norm)

        벡터에서의 l2 norm처럼 프로비니우스 노름을 사용한다. 4번째 항은 SVD를 사용해 표현한 것이고, 5번째 항은 norm(a,b) = norm(b,a)인 노름의 성질을 이용한 것이다.

        따라서, A행렬의 SVD의 대각행렬의 제곱합이 프로비니우스 노름이며, dot product에서 유도된 것이다.

      • Operator Norm or Spectral Norm

        행렬 A의 singular value 중 가장 큰 값이 A의 operator norm이다. 또한 동일하게 ATAA^T AAATAA^T의 가장 큰 고유값의 제곱근은 operator norm은 같다. PCA의 기본적인 아이디어가 operator norm을 사용한 것이다.

      • Nuclear Norm or Trace Norm

        A행렬의 singular value들의 합은 Nuclear Norm이다.

    • Matrix Approximation

      SVD가 어떤 것을 하는지 이해하기 위해 Matrix Approximation을 아는 것은 중요하다.

      SVD는 best approximation을 제공한다.

      arg minB rank1ABop=d1u1v1T\argmin_{B \ rank1} ||A-B||_{op} = d_{1}u_{1}v_{1}^{T}

      A를 근사하는 가장 좋은 rank가 1인 행렬 B는 d1u1v1Td_{1}u_{1}v_{1}^{T} 이다. 그리고 op 노름(가장 큰 singular value)가장 큰 으로 계산한 에러는 d2(두번째로 큰 singular value)이다. 즉, 가장 큰 singular value와 singular vector가 가장 큰 에너지를 차지한다.

      유사하게 A에 근사하는 rank가 2이면서, 손실이 가장 작은 행렬 B는 d1u1v1T+d2u2v2Td_{1}u_{1}v_{1}^{T} + d_{2}u_{2}v_{2}^{T}일 것이다.

      오차를 프로비니어스 노름으로 계산하면 다음과 같을 것이다. Ad1u1v1TF=i=2rdi2||A-d_{1}u_{1}v_{1}^{T}||_{F} = \sqrt{\sum_{i=2}^{r}d_{i}^{2}}

      → 결론적으로 rank k의 행렬과 프로비니어스 노름과 operator 노름으로 계산했을 때 가장 오차가 작은 행렬 B는 Σi=1kdiuiviT\Sigma_{i=1}^{k} d_{i}u_{i}v_{i}^{T} 이다.

      rank가 줄기 때문에 굉장히 차원축소를 많이 할 수 있는 것이다.

       u1v1T u1v1^T행렬과 u2v2Tu2v2^T의 행렬은 서로 직교하기 때문에 0 이다. 또한, uiviTuivi^T는 행렬 A의 기저이며, 어떤 기저가 가장 중요한지 SVD 찾게 해준다.

    'Math > etc.' 카테고리의 다른 글

    2 표본 가설 검정(Two-sample hypothesis testing)  (0) 2022.09.30
    Information Theory  (0) 2022.03.16
    Spaces  (0) 2022.03.16
    Lagrangian Multiplier & Equality Constraint  (0) 2022.03.16
    KKT & Inequality Constraint  (0) 2022.03.16

    댓글

Designed by Tistory.