Trực giác đằng sau SVD là gì?


50

Tôi đã đọc về phân rã giá trị số ít (SVD). Trong hầu hết tất cả các sách giáo khoa, nó được đề cập rằng nó nhân tố ma trận thành ba ma trận với đặc điểm kỹ thuật nhất định.

Nhưng trực giác đằng sau việc tách ma trận ở dạng như vậy là gì? PCA và các thuật toán khác để giảm kích thước là trực quan theo nghĩa là thuật toán có thuộc tính trực quan tốt nhưng với SVD thì không phải vậy.


4
Bạn có thể muốn bắt đầu từ trực giác của phân tách eigenvalue-eigenvector vì SVD là một phần mở rộng của nó cho tất cả các loại ma trận, thay vì chỉ là các hình vuông.
JohnK

Có rất nhiều ghi chú trên internet và câu trả lời ở đây trên CV về SVD và hoạt động của nó.
Vladislavs Dovgalecs

2
SVD có thể được coi là một thuật toán nén / học tập. Nó là một máy nén nén tuyến tính. Một ma trận M có thể được biểu diễn bằng phép nhân SVD. S là máy nén V xác định mức độ lỗi bạn muốn có (nén mất dữ liệu) và D là bộ giải nén. Nếu bạn giữ tất cả các giá trị đường chéo của V thì bạn có một máy nén không tổn hao. Nếu bạn bắt đầu vứt bỏ các giá trị số ít (bỏ qua chúng) thì bạn không thể xây dựng lại chính xác ma trận ban đầu nhưng vẫn sẽ đóng. Ở đây thuật ngữ đóng được đo bằng định mức Frobenius.
Cagdas Ozgenc

2
@Cagdas nếu bạn làm điều đó, vui lòng xác định cẩn thận những gì bạn đang sử dụng "S" "V" và "D" để được toán học. Tôi chưa từng thấy các chữ cái đầu bị quá tải vào ký hiệu trước đó (ví dụ có các giá trị số ít trong đó?). Nó dường như là một nguồn gây nhầm lẫn,
Glen_b

3
Bạn có biết cách ước tính PCA với SVD không? Nếu bạn làm như vậy, sau đó bạn có thể giải thích lý do tại sao bạn cảm thấy thiếu một cái gì đó trong sự hiểu biết của bạn về SVD? Xem cái này
Aksakal

Câu trả lời:


63

Viết SVD của ma trận (thực, ) là trong đó là , là đường chéo và là . Trong điều kiện của các cột của ma trận và chúng ta có thể viết . Đó là chương trình viết như một khoản ma trận bậc-1. Ma trận hạng 1 trông như thế nào? Hãy xem nào: Xn×p

X=UDVT
Un×pDp×pVTp×pUVX=i=1pdiuiviTXp
(123)(456)=(45681012121518)
Các hàng theo tỷ lệ và các cột tỷ lệ thuận.

Bây giờ hãy nghĩ về khi chứa các giá trị thang độ xám của hình ảnh đen trắng, mỗi mục trong ma trận đại diện cho một pixel. Ví dụ, hình ảnh sau đây của khỉ đầu chó:X

hình ảnh của khỉ đầu chó

Sau đó đọc hình ảnh này vào R và lấy phần ma trận của cấu trúc kết quả, có thể sử dụng thư viện pixmap.


Nếu bạn muốn có hướng dẫn từng bước về cách tái tạo kết quả, bạn có thể tìm mã ở đây .


Tính toán SVD:

baboon.svd  <-  svd(bab) # May take some time

Làm thế nào chúng ta có thể nghĩ về điều này? Chúng tôi nhận được hình ảnh baboon biểu thị dưới dạng tổng của hình ảnh đơn giản, với mỗi hình ảnh chỉ hiển thị cấu trúc dọc và ngang, tức là hình ảnh của các sọc dọc và ngang! Vì vậy, SVD của khỉ đầu chó đại diện cho hình ảnh khỉ đầu chó là sự chồng chất của hình ảnh đơn giản, mỗi hình chỉ hiển thị các sọc ngang / dọc. Hãy để chúng tôi tính toán tái tạo thứ hạng thấp của hình ảnh với và với thành phần:512×512512512120

baboon.1  <-  sweep(baboon.svd$u[,1,drop=FALSE],2,baboon.svd$d[1],"*") %*%
                   t(baboon.svd$v[,1,drop=FALSE])

baboon.20 <-  sweep(baboon.svd$u[,1:20,drop=FALSE],2,baboon.svd$d[1:20],"*") %*%
                   t(baboon.svd$v[,1:20,drop=FALSE])

dẫn đến hai hình ảnh sau:

xếp hạng một và xếp hạng 20 tái tạo hình ảnh khỉ đầu chó

Ở bên trái, chúng ta có thể dễ dàng nhìn thấy các sọc dọc / ngang trong hình ảnh xếp hạng 1.

Cuối cùng chúng ta hãy xem xét "hình ảnh còn lại", hình ảnh được xây dựng lại (như trên, mã không được hiển thị) từ hình ảnh xếp hạng một với các giá trị số ít nhất. Đây là:20

hình ảnh của phần còn lại từ tái thiết hạng 20 khỉ đầu chó

Điều này khá thú vị: chúng ta thấy các phần của hình ảnh gốc rất khó biểu thị là sự chồng chất của các đường dọc / ngang, chủ yếu là lông mũi chéo và một số kết cấu, và đôi mắt!


11
Tôi nghĩ rằng bạn có nghĩa là tái thiết thứ hạng thấp, không phải phạm vi thấp. Đừng bận tâm. Đây là một minh họa rất tốt (+1). Đó là lý do tại sao nó là một bộ giải nén máy nén tuyến tính. Hình ảnh được xấp xỉ với các dòng. Nếu bạn thực sự thực hiện một bộ mã hóa tự động tương tự với mạng thần kinh có chức năng kích hoạt tuyến tính, bạn thực sự sẽ thấy rằng nó cũng cho phép các đường có bất kỳ độ dốc nào không chỉ các đường thẳng đứng và nằm ngang, làm cho nó mạnh hơn một chút so với SVD.
Cagdas Ozgenc

@ Kjetil-b-Halvorsen không nên SVD cho một ma trận kết quả trong là , là và là ? Typo? X=UΣVn×pXUn×nΣn×pVp×p
Martin Krämer

1
Xem math.stackexchange.com/questions/92171/ cho một số ví dụ khác
kjetil b halvorsen

@ kjetil-b-halvorsen Tôi muốn biết làm thế nào sự phân tách sẽ thay đổi nếu tôi đã sử dụng PCA để từ chối ứng dụng. Tôi sẽ đánh giá cao nếu bạn có thể trả lời câu hỏi của tôi ở đây stats.stackexchange.com/questions/412123/iêu
Dushyant Kumar

@CowboyTrader quan sát thú vị. Hiểu biết của tôi về máy học / mạng lưới thần kinh là khá hạn chế. Vì vậy, tôi không hiểu rằng nếu một người có một hình ảnh ồn ào và không có gì khác để đào tạo, thì mạng lưới thần kinh sẽ hoạt động như thế nào?
Dushyant Kumar

4

Đặt là ma trận . Tôi sẽ giả sử rằng cho đơn giản. Đó là tự nhiên hỏi, trong đó hướng nào có ảnh hưởng nhất (hoặc gây nổ nhất, hoặc sức mạnh khuếch đại nhất). Câu trả lời là Một câu hỏi tiếp theo tự nhiên là, sau , hướng bùng nổ tiếp theo của ? Câu trả lời là Am×nmnvA

(1)v1=argmaxvRnAv2subject to v2=1.
v1A
v2=argmaxvRnAv2subject to v1,v=0,v2=1.
Tiếp tục như thế này, chúng ta có được một cơ sở trực giao của . Đây cơ sở đặc biệt của cho chúng ta biết hướng mà là, trong một nghĩa nào đó, quan trọng nhất cho sự hiểu biết .v1,,vnRnRnA

Đặt (vì vậy định lượng công suất nổ của theo hướng ). Giả sử rằng vectơ đơn vị được xác định sao cho Các phương trình (2) có thể được biểu diễn chính xác bằng cách sử dụng ký hiệu ma trận là trong đó là ma trận có cột thứ là , là ma trận có cột thứ là vàσi=Avi2σiAviui

(2)Avi=σiuifor i=1,,n.
(3)AV=UΣ,
Vn×niviUm×niuiΣlà ma trận đường chéo có mục nhập đường chéo thứ là . Ma trận là trực giao, vì vậy chúng ta có thể nhân cả hai mặt của (3) với để thu được Có vẻ như bây giờ chúng ta đã lấy được SVD của với nỗ lực gần như bằng không. Không có bước nào cho đến nay là khó khăn. Tuy nhiên, một phần quan trọng của bức tranh bị thiếu - chúng ta chưa biết rằng là trực giao.n×niσiVVT
A=UΣVT.
AU

Đây là một thực tế quan trọng, phần còn thiếu: hóa ra là trực giao với : Tôi cho rằng nếu điều này không đúng, thì sẽ không tối ưu cho vấn đề (1). Thật vậy, nếu (4) không hài lòng, thì có thể cải thiện bằng cách làm nhiễu nó một chút theo hướng .Av1Av2

(4)Av1,Av2=0.
v1 v1v2

Giả sử (vì mâu thuẫn) mà (4) không hài lòng. Nếu bị nhiễu một chút theo hướng trực giao , thì định mức của không thay đổi (hoặc ít nhất, sự thay đổi trong định mức của là không đáng kể). Khi tôi đi trên bề mặt trái đất, khoảng cách của tôi với tâm trái đất không thay đổi. Tuy nhiên, khi đang bị nhiễu loạn theo hướng , vector đang bị nhiễu loạn trong không trực giao hướng , và do đó thay đổi trong chỉ tiêu là không đáng kể . Định mức củav1v2v1v1v1v2Av1Av2Av1Av1có thể được tăng lên bởi một lượng không đáng kể. Điều này có nghĩa là không tối ưu cho vấn đề (1), đây là một mâu thuẫn. Tôi thích lập luận này vì: 1) trực giác rất rõ ràng; 2) trực giác có thể được chuyển đổi trực tiếp thành một bằng chứng nghiêm ngặt.v1

Một lập luận tương tự cho thấy trực giao với cả và , v.v. Các vectơ là trực giao theo cặp. Điều này có nghĩa là các vectơ đơn vị có thể được chọn là trực giao theo cặp, có nghĩa là ma trận ở trên là ma trận trực giao. Điều này hoàn thành khám phá của chúng tôi về SVD.Av3Av1Av2Av1,,Avnu1,,unU


Để chuyển đổi đối số trực quan ở trên thành một bằng chứng nghiêm ngặt, chúng ta phải đối mặt với thực tế là nếu bị nhiễu theo hướng , vectơ nhiễu loạn không thực sự là một vectơ đơn vị. (Định mức của nó là .) Để có được bằng chứng nghiêm ngặt, hãy xác định Vectơ thực sự là một vectơ đơn vị. Nhưng như bạn có thể dễ dàng hiển thị, nếu (4) không thỏa mãn, thì với các giá trị đủ nhỏ của chúng ta có (giả sử rằng dấu hiệu củav1v2

v~1=v1+ϵv2
1+ϵ2
v¯1(ϵ)=1ϵ2v1+ϵv2.
v¯1(ϵ)ϵ
f(ϵ)=Av¯1(ϵ)22>Av122
ϵđược chọn chính xác). Để hiển thị điều này, chỉ cần kiểm tra xem . Điều này có nghĩa là không tối ưu cho vấn đề (1), đây là một mâu thuẫn.f(0)0v1

(Nhân tiện, tôi khuyên bạn nên đọc lời giải thích của Qiaochu Yuan về SVD ở đây . Đặc biệt, hãy xem "Key lemma # 1", đó là những gì chúng ta đã thảo luận ở trên. Như Qiaochu nói, bổ đề chính # 1 là "trái tim kỹ thuật của phân rã giá trị số ít ".)


0

Anh chàng dành một giờ trong ngày của bạn và xem bài giảng này: https://www.youtube.com/watch?v=EokL7E6o1AE

Anh chàng này siêu thẳng về phía trước, điều quan trọng là không bỏ qua bất kỳ điều gì vì cuối cùng tất cả đều kết hợp với nhau. Ngay cả khi nó có vẻ hơi chậm lúc ban đầu, anh ta đang cố gắng xác định một điểm quan trọng, điều mà anh ta làm!

Tôi sẽ tổng hợp nó cho bạn, thay vì chỉ đưa cho bạn ba ma trận mà mọi người làm (vì điều đó làm tôi bối rối khi tôi đọc các mô tả khác). Những ma trận đó đến từ đâu và tại sao chúng ta lại thiết lập nó như vậy? Bài giảng đinh nó! Mọi ma trận (từng có trong lịch sử vĩnh cửu) có thể được xây dựng từ một ma trận cơ sở có cùng kích thước, sau đó xoay nó và kéo dài nó (đây là định lý cơ bản của đại số tuyến tính). Mỗi ma trận trong số ba ma trận mà mọi người ném xung quanh đại diện cho một ma trận ban đầu (U), Ma trận chia tỷ lệ (sigma) và ma trận xoay (V).

Ma trận chia tỷ lệ cho bạn thấy các vectơ xoay đang chiếm ưu thế, chúng được gọi là các giá trị số ít. Sự phân tách đang giải quyết cho U, sigma và V.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.