Back to Home

Singular Value Decomposition (SVD) Demo

Singular Value Decomposition - SVD là một trong những phép phân tích quan trọng nhất trong đại số tuyến tính vì nó được áp dụng cực kỳ phổ biến trong các lĩnh vực về Machine Learning để giảm chiều dữ liệu hay nén ảnh... Bài viết này mình muốn giới thiệu đến bạn về phương pháp này và một interactive demo để các bạn có thể “vọc“ tận tay với nó :)

Singular Value Decomposition

SVD cho phép ta phân rã một ma trận AA bất kỳ kích thước m×nm \times n thành ba ma trận khác:

A=UΣVTA = U \Sigma V^T
  • UU là ma trận trực giao kích thước m×mm\times m với các cột là là eigenvectors của AATAA^T

  • Σ\Sigma là ma trận chéo kích thước m×nm \times n chứa các singular values (luôn không âm)

  • VV là ma trận trực giao kích thước n×nn \times n với các cột là eigenvectors của ATAA^TA

Một chút kiến thức nền tảng

Eigenvalues và Eigenvectors

Cho ma trận vuông MM, một vector được gọi là eigenvector nếu:

Mv=λvMv = \lambda v

trong đó λ\lambda là eigen value. Điều này có nghĩa là khi nhân ma trận MM với vv chỉ làm cho thay đổi độ dài chứ không thay đổi hướng.

Chéo hóa (diagonalization)

Nếu ma trận MM có thể viết dưới dạng

M=PDP1M = PDP^{-1}

với DD là ma trận chéo chứa các eigenvalues, thì ta nói MM có thể chéo hóa.

Trong SVD, ta không yêu cầu AA phải vuông hay khả nghịch. Thay vào đó, ta khai thác eigen-decomposition của hai ma trận vuông đối xứng ATA,AATA^TA, AA^T, các eigenvectors của chúng sẽ tạo nên ma trận U,VU,V

Low-rank Approximation

Giả sử ma trận AA có phân rã: A=UΣVTA=U\Sigma V^T , nếu sắp xếp các singular values σ1σ2σr>0\sigma_1 \ge \sigma_2 \ge \dots \ge\sigma_r > 0 với là rr rank của AA, ta có thể viết lại

A=i=1rσiuiviTA = \sum_{i=1}^r \sigma_iu_iv_i^T

Trong đó:

  • uiu_i là cột thứ ii của UU

  • viv_i là cột thứ iicủa VV (chú ý là công thức là VTV^T, nên viTv_i^T trở thành hàng)

Nếu chỉ giữ lại k<rk<r thành phần lớn nhất, ta sẽ có:

Ak=i=1kσiuiviTA_k = \sum_{i=1}^k \sigma_iu_iv_i^T

Lúc đó AkA_k sẽ là xấp xỉ lớn nhất của AAtrong chuẩn Frobenius và chuẩn 2 (Eckart–Young–Mirsky theorem)

Như vậy:

  • Trong xử lý ảnh: chỉ cần vài chục singular values lớn để khôi phục ảnh gần như đầy đủ, thay vì lưu toàn bộ ma trận pixel.

  • Trong machine learning: thay vì lưu một ma trận lớn (ví dụ 1 triệu user × 100 nghìn sản phẩm), ta có thể xấp xỉ bằng hạng thấp → tiết kiệm bộ nhớ và tính toán.

Ví dụ: Nếu ta lưu một ảnh kích thước 1,920 × 1,080 thì số pixel phải lưu là 2,073,600. Nếu áp dụng SVD với k=100 ta cần:

  • UxU_x: 100 cột đầu tiên của ma trận là 100×1,920 = 192,000

  • Σk\Sigma_k: 100 phần tử trên đường chéo

  • VkV_k: 100 cột đầu tiên của của ma trận là 100×1,080 = 108,000

Tổng cộng là 300,100 phần tử so với 2,073,600 phần tử của ma trận gốc.

Demo

Comments

0/300

Leave name/email blank to comment anonymously

No comments yet. Be the first to comment!